blob: 32aa0fc14f1fb420eb855fd8f6b2cd3cb5620ed8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#include "serviceDiscoveryUtil.h"
#include <cassert>
void appendSdField(QByteArray* target, const char* id, QString data)
{
assert(strlen(id) == 3);
target->append(id);
QByteArray tmp = data.toUtf8();
if (tmp.size() > 100) tmp.truncate(100);
target->append((char)tmp.size());
target->append(tmp);
}
SdFields parseSdFields(unsigned char* data, int len)
{
SdFields fields;
for (;;)
{
//printf("%d bytes left: %s\n", len, (char*)data);
if (len < 4 || len < 4 + data[3]) break; // end of data
QString key = QString::fromUtf8((char*)data, 3);
QString val = QString::fromUtf8((char*)data+4, data[3]);
//printf("Key: %s, Val: %s\n", key.toUtf8().data(), val.toUtf8().data());
fields.insert(key, val);
len -= (4 + data[3]);
data += (4 + data[3]);
}
return fields;
}
QString sha1ToReadable(QByteArray input)
{
unsigned char *ptr = (unsigned char *)input.data();
QString retval;
for (int i = (input.length() < 10 ? input.length() : 10); i; --i)
{
switch(*ptr++ % 0xD)
{
case 0x0: retval.append('S'); break;
case 0x1: retval.append('F'); break;
case 0x2: retval.append('M'); break;
case 0x3: retval.append('K'); break;
case 0x4: retval.append('H'); break;
case 0x5: retval.append('T'); break;
case 0x6: retval.append('P'); break;
case 0x7: retval.append('D'); break;
case 0x8: retval.append('Y'); break;
case 0x9: retval.append('W'); break;
case 0xA: retval.append('G'); break;
case 0xB: retval.append('L'); break;
case 0xC: retval.append('B'); break;
}
if (--i == 0) break;
switch((*ptr >> 2) % 5)
{
case 0: retval.append('a'); break;
case 1: retval.append('i'); break;
case 2: retval.append('u'); break;
case 3: retval.append('e'); break;
case 4: retval.append('o'); break;
}
if ((*ptr++ & 3) == 0) retval.append('n');
}
return retval;
}
|