add version information
[ecparse.git] / ED2KLink.cpp
1 /**
2  * © 2008 by David ‘Bombe’ Roden <bombe@pterodactylus.net>
3  */
4
5 #include <stdio.h>
6 #include <stdlib.h>
7 #include <string.h>
8 #include "ED2KLink.h"
9
10 static int getDigits(size_t number) {
11         int digits = 0;
12         do {
13                 number /= 10;
14                 digits++;
15         } while (number);
16         return digits;
17 }
18
19 ED2KLink::ED2KLink(const char* filename, const size_t size, const void* hash) {
20         this->filename = (char*) malloc(strlen(filename));
21         this->hash = malloc(16);
22
23         strcpy(this->filename, filename);
24         memcpy(this->hash, hash, 16);
25         this->size = size;
26
27         this->link = (char*) calloc(13 + (strlen(filename) + 1) + 1 + getDigits(size) + 1 + 32 + 2, 1);
28         sprintf(this->link, "ed2k://|file|%s|%u|", filename, size);
29         for (int i = 0; i < 16; i++) {
30                 sprintf(this->link + strlen(this->link), "%02x", *((int*) this->hash + i));
31         }
32         sprintf(this->link + strlen(this->link), "|/");
33 }
34
35 ED2KLink::~ED2KLink() {
36         if (link) {
37                 free(link);
38         }
39         if (filename) {
40                 free(filename);
41         }
42         if (hash) {
43                 free(hash);
44         }
45 }
46
47 const char* ED2KLink::getLink() {
48         return this->link;
49 }
50
51 const char* ED2KLink::getFilename() {
52         return this->filename;
53 }
54
55 const size_t ED2KLink::getSize() {
56         return this->size;
57 }
58
59 const void* ED2KLink::getHash() {
60         return this->hash;
61 }
62
63