BEN *ben_dict_search_str(BEN * node, const char *buffer) { BEN *result = NULL; BEN *key = ben_init(BEN_STR); ben_str(key, (UCHAR *) buffer, strlen(buffer)); result = ben_dict_search_key(node, key); ben_free(key); return result; }
void cjdnsadmin_fetch_peers(cjdnsadmin_t *adm) { struct bencode *b = ben_dict(); struct bencode *args = ben_dict(); // TODO: fix memory leak ben_dict_set(b, ben_str("q"), ben_str("NodeStore_dumpTable")); ben_dict_set(b, ben_str("args"), args); ben_dict_set(args, ben_str("page"), ben_int(adm->fetch_peers_page)); uv_buf_t buf; static char msg[256]; buf.base = msg; buf.len = ben_encode2(msg, sizeof msg, b); AMNEW(uv_udp_send_t,writer); writer->data = b; uv_udp_send(writer, &adm->handle, &buf,1, adm->theaddr, on_written); }
BEN *ben_dec_s(RAW * raw) { BEN *node = ben_init(BEN_STR); LONG i = 0; LONG l = 0; UCHAR *start = raw->p; char buf[BUF_SIZE]; int run = 1; while (run) { switch (*raw->p) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': i++; raw->p++; break; case ':': memcpy(buf, start, i); buf[i] = '\0'; l = strtol(buf, NULL, 10); raw->p += 1; ben_str(node, raw->p, l); raw->p += l; run = 0; break; } } return node; }