From ce3329047d378a14006ce74ec273ac59e3375303 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Wed, 12 May 2010 19:42:27 +0200 Subject: initial import of latest svn version --- src/util/serviceDiscoveryUtil.cpp | 65 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/util/serviceDiscoveryUtil.cpp (limited to 'src/util/serviceDiscoveryUtil.cpp') diff --git a/src/util/serviceDiscoveryUtil.cpp b/src/util/serviceDiscoveryUtil.cpp new file mode 100644 index 0000000..32aa0fc --- /dev/null +++ b/src/util/serviceDiscoveryUtil.cpp @@ -0,0 +1,65 @@ +#include "serviceDiscoveryUtil.h" +#include + +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; +} -- cgit v1.2.3-55-g7522