add ED2KLink class
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 4 Jul 2008 20:00:21 +0000 (22:00 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Fri, 4 Jul 2008 20:00:21 +0000 (22:00 +0200)
ED2KLink.cpp [new file with mode: 0644]
ED2KLink.h [new file with mode: 0644]

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);
+       }
+}
+
diff --git a/ED2KLink.h b/ED2KLink.h
new file mode 100644 (file)
index 0000000..465478f
--- /dev/null
@@ -0,0 +1,24 @@
+/**
+ * © 2008 by David ‘Bombe’ Roden <bombe@pterodactylus.net>
+ */
+
+#pragma once
+
+class ED2KLink {
+
+public:
+       ED2KLink(const char* filename, const size_t size, const void* hash);
+       ~ED2KLink();
+
+       const char* getLink();
+       const char* getFilename();
+       const size_t getSize();
+       const void* getHash();
+
+private:
+       char* link;
+       char* filename;
+       size_t size;
+       void* hash;
+};
+