summaryrefslogtreecommitdiffstats
path: root/src/util/serviceDiscoveryUtil.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/serviceDiscoveryUtil.cpp')
-rw-r--r--src/util/serviceDiscoveryUtil.cpp65
1 files changed, 65 insertions, 0 deletions
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 <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;
+}