diff options
Diffstat (limited to 'bittorrent/bittorrent/libs/mbtbe/src/mytorrent.c')
| -rw-r--r-- | bittorrent/bittorrent/libs/mbtbe/src/mytorrent.c | 113 |
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 |
