add ED2KLink class
[ecparse.git] / ED2KLink.cpp
diff --git a/ED2KLink.cpp b/ED2KLink.cpp
new file mode 100644 (file)
index 0000000..cd26940
--- /dev/null
@@ -0,0 +1,46 @@
+/**
+ * © 2008 by David ‘Bombe’ Roden <bombe@pterodactylus.net>
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "ED2KLink.h"
+
+static int getDigits(size_t number) {
+       int digits = 0;
+       do {
+               number /= 10;
+               digits++;
+       } while (number);
+       return digits;
+}
+
+ED2KLink::ED2KLink(const char* filename, const size_t size, const void* hash) {
+       this->filename = (char*) malloc(strlen(filename));
+       this->hash = malloc(16);
+
+       strcpy(this->filename, filename);
+       memcpy(this->hash, hash, 16);
+       this->size = size;
+
+       this->link = (char*) calloc(13 + (strlen(filename) + 1) + 1 + getDigits(size) + 1 + 32 + 2, 1);
+       sprintf(this->link, "ed2k://|file|%s|%u|", filename, size);
+       for (int i = 0; i < 16; i++) {
+               sprintf(this->link + strlen(this->link), "%02x", *((int*) this->hash + i));
+       }
+       sprintf(this->link + strlen(this->link), "|/");
+}
+
+ED2KLink::~ED2KLink() {
+       if (link) {
+               free(link);
+       }
+       if (filename) {
+               free(filename);
+       }
+       if (hash) {
+               free(hash);
+       }
+}
+