示例#1
0
BEN *ben_dec_i(RAW * raw)
{
	BEN *node = ben_init(BEN_INT);
	LONG i = 0;
	UCHAR *start = NULL;
	char buf[BUF_SIZE];
	int run = 1;
	LONG prefix = 1;
	LONG result = 0;

	start = ++raw->p;
	if (*raw->p == '-') {
		prefix = -1;
		start = ++raw->p;
	}

	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 'e':
			memcpy(buf, start, i);
			buf[i] = '\0';
			result = strtol(buf, NULL, 10);

			raw->p++;
			run = 0;
			break;
		}
	}

	result = prefix * result;

	ben_int(node, result);

	return node;
}
示例#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);

}