summaryrefslogtreecommitdiff
path: root/bittorrent/bittorrent/libs/mbtbe/src/mytorrent.c
diff options
context:
space:
mode:
Diffstat (limited to 'bittorrent/bittorrent/libs/mbtbe/src/mytorrent.c')
-rw-r--r--bittorrent/bittorrent/libs/mbtbe/src/mytorrent.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/bittorrent/bittorrent/libs/mbtbe/src/mytorrent.c b/bittorrent/bittorrent/libs/mbtbe/src/mytorrent.c
new file mode 100644
index 0000000..048cd0b
--- /dev/null
+++ b/bittorrent/bittorrent/libs/mbtbe/src/mytorrent.c
@@ -0,0 +1,113 @@
+#include <mbt/be/mytorrent.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "mbt/be/bencode.h"
+#include "mbt/utils/str.h"
+#include "mbt/utils/view.h"
+
+struct mbt_torrent *createTorrent(struct mbt_torrent *m)
+{
+ mbt_str_ctor(&(m->announce), 0);
+ m->creation_date = 0;
+ mbt_str_ctor(&(m->created_by), 0);
+ mbt_str_ctor(&(m->info.name), 0);
+ m->info.files = NULL;
+ m->info.piece_length = 0;
+ mbt_str_ctor(&(m->info.pieces), 0);
+ m->info.files = NULL;
+ m->info.length = 0;
+ m->isDir = false;
+ m->node = NULL;
+ return m;
+}
+
+struct mbt_be_node *findKey(struct mbt_be_pair **d, char *k)
+{
+ if (d == NULL || d[0] == NULL)
+ return NULL;
+ // errx(1,"Key '%s' not found",k);
+ // puts("PAIR");
+ // mbt_cview_fprint(cmstr(k), stdout);
+ // printf(" - ");
+ // mbt_cview_fprint(MBT_CVIEW_OF(d[0]->key), stdout);
+ // puts("");
+ if (!mbt_cview_cmp(cmstr(k), MBT_CVIEW_OF(d[0]->key)))
+ return d[0]->val;
+ return findKey(d + 1, k);
+}
+
+bool debugNode2(struct mbt_be_node *n, size_t decal)
+{
+ if (n->type == MBT_BE_DICT)
+ {
+ puts("{");
+ for (size_t i = 0; n->v.dict[i]; i++)
+ {
+ for (size_t k = 0; k < decal * 4; k++)
+ putchar(' ');
+ struct mbt_be_pair *p = n->v.dict[i];
+ mbt_cview_fprint(MBT_CVIEW_OF(p->key), stdout);
+ printf(":");
+ debugNode(p->val, decal + 1);
+ puts(",");
+ }
+ for (size_t k = 0; k < decal * 4; k++)
+ putchar(' ');
+ puts("}");
+ return true;
+ }
+ return false;
+}
+
+void debugNode(struct mbt_be_node *n, size_t decal)
+{
+ if (debugNode2(n, decal))
+ return;
+ if (n->type == MBT_BE_LIST)
+ {
+ for (size_t k = 0; k < decal * 4; k++)
+ putchar(' ');
+ puts("[");
+ for (size_t i = 0; n->v.list[i]; i++)
+ {
+ for (size_t k = 0; k < decal * 4; k++)
+ putchar(' ');
+ debugNode(n->v.list[i], decal + 1);
+ puts(",");
+ }
+ for (size_t k = 0; k < decal * 4; k++)
+ putchar(' ');
+ puts("]");
+ }
+ else if (n->type == MBT_BE_STR)
+ {
+ putchar('"');
+ mbt_cview_fprint(MBT_CVIEW_OF(n->v.str), stdout);
+ putchar('"');
+ }
+ else
+ printf("%ld", n->v.nb);
+}
+
+// Creates a non allocated mbt_str, with non allocated string
+struct mbt_cview cmstr(char *s)
+{
+ struct mbt_str ms;
+ ms.data = s;
+ ms.size = strlen(s);
+ ms.capacity = strlen(s);
+ return MBT_CVIEW_OF(ms);
+}
+
+// DeepCopy a string
+struct mbt_str dc(struct mbt_str s)
+{
+ struct mbt_str ms;
+ ms.data = calloc(s.size + 1, 1);
+ memcpy(ms.data, s.data, s.size);
+ ms.size = s.size;
+ ms.capacity = s.capacity;
+ return ms;
+} \ No newline at end of file