#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; }