Beispiel #1
0
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;
}
Beispiel #2
0
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);

}
Beispiel #3
0
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;
}