Пример #1
0
static void dump_gw(rpc_t *rpc, void *st, struct gw_info *gw, unsigned int gw_index, unsigned int lcr_id)
{
	str scheme, gw_name, hostname, params, transport;
	str prefix, tag;
	char buf[INT2STR_MAX_LEN], *start;
	int len;

	rpc->struct_add(st, "d", "lcr_id", lcr_id);
	rpc->struct_add(st, "d", "gw_index", gw_index);
	rpc->struct_add(st, "d", "gw_id", gw->gw_id);
	gw_name.s = gw->gw_name;
	gw_name.len = gw->gw_name_len;
	rpc->struct_add(st, "S", "gw_name", &gw_name);
	scheme.s = gw->scheme;
	scheme.len = gw->scheme_len;
	rpc->struct_add(st, "S", "scheme", &scheme);
	switch(gw->ip_addr.af) {
		case AF_INET:
			rpc->struct_printf(st, "ip_addr", "%d.%d.%d.%d",
					gw->ip_addr.u.addr[0], gw->ip_addr.u.addr[1],
					gw->ip_addr.u.addr[2], gw->ip_addr.u.addr[3]);
			break;
		case AF_INET6:
			rpc->struct_printf(st, "ip_addr", "%x:%x:%x:%x:%x:%x:%x:%x",
					gw->ip_addr.u.addr16[0],
					gw->ip_addr.u.addr16[1],
					gw->ip_addr.u.addr16[2],
					gw->ip_addr.u.addr16[3],
					gw->ip_addr.u.addr16[4],
					gw->ip_addr.u.addr16[5],
					gw->ip_addr.u.addr16[6],
					gw->ip_addr.u.addr16[7]);
			break;
		case 0:
			rpc->struct_add(st, "s", "ip_addr", "0.0.0.0");
			break;
	}
	hostname.s = gw->hostname;
	hostname.len = gw->hostname_len;
	rpc->struct_add(st, "S", "hostname", &hostname);
	rpc->struct_add(st, "d", "port", gw->port);
	params.s = gw->params;
	params.len = gw->params_len;
	rpc->struct_add(st, "S", "params", &params);
	transport.s = gw->transport;
	transport.len = gw->transport_len;
	rpc->struct_add(st, "S", "transport", &transport);
	prefix.s = gw->prefix;
	prefix.len = gw->prefix_len;
	tag.s = gw->tag;
	tag.len = gw->tag_len;
	start = int2strbuf(
			gw->defunct_until, &(buf[0]), INT2STR_MAX_LEN, &len);
	rpc->struct_add(st, "dSSdds", "strip", gw->strip, "prefix",
			&prefix, "tag", &tag, "flags", gw->flags, "state",
			gw->state, "defunct_until", start);
}
Пример #2
0
static void dump_gws(rpc_t* rpc, void* c)
{
    void* st;
    unsigned int i, j;
    enum sip_protos transport;
    str gw_name, hostname, params;
    str prefix, tag;
    struct gw_info *gws;
    char buf[INT2STR_MAX_LEN], *start;
    int len;

    for (j = 1; j <= lcr_count_param; j++) {

	gws = gw_pt[j];

	for (i = 1; i <= gws[0].ip_addr.u.addr32[0]; i++) {
	    if (rpc->add(c, "{", &st) < 0) return;
	    rpc->struct_add(st, "d", "lcr_id", j);
	    rpc->struct_add(st, "d", "gw_id", gws[i].gw_id);
	    rpc->struct_add(st, "d", "gw_index", i);
	    gw_name.s=gws[i].gw_name;
	    gw_name.len=gws[i].gw_name_len;
	    rpc->struct_add(st, "S", "gw_name", &gw_name);
	    if (gws[i].scheme == SIP_URI_T) {
		rpc->struct_add(st, "s", "scheme", "sip");
	    } else {
		rpc->struct_add(st, "s", "scheme", "sips");
	    }
	    switch (gws[i].ip_addr.af) {
	    case AF_INET:
		rpc->struct_printf(st, "ip_addr", "%d.%d.%d.%d",
					gws[i].ip_addr.u.addr[0],
					gws[i].ip_addr.u.addr[1],
					gws[i].ip_addr.u.addr[2],
					gws[i].ip_addr.u.addr[3]);
		break;
	    case AF_INET6:
		rpc->struct_printf(st, "ip_addr", "%x:%x:%x:%x:%x:%x:%x:%x",
					gws[i].ip_addr.u.addr16[0],
					gws[i].ip_addr.u.addr16[1],
					gws[i].ip_addr.u.addr16[2],
					gws[i].ip_addr.u.addr16[3],
					gws[i].ip_addr.u.addr16[4],
					gws[i].ip_addr.u.addr16[5],
					gws[i].ip_addr.u.addr16[6],
					gws[i].ip_addr.u.addr16[7]);
		break;
	    case 0:
		rpc->struct_add(st, "s", "ip_addr", "0.0.0.0");
		break;
	    }
	    hostname.s=gws[i].hostname;
	    hostname.len=gws[i].hostname_len;
	    rpc->struct_add(st, "S", "hostname", &hostname);
	    rpc->struct_add(st, "d", "port", gws[i].port);
	    params.s=gws[i].params;
	    params.len=gws[i].params_len;
	    rpc->struct_add(st, "S", "params", &params);
	    transport = gws[i].transport;
	    switch(transport){
	    case PROTO_UDP:
		rpc->struct_add(st, "s", "transport", "UDP");
		break;
	    case PROTO_TCP:
		rpc->struct_add(st, "s", "transport", "TCP");
		break;
	    case PROTO_TLS:
		rpc->struct_add(st, "s", "transport", "TLS");
		break;
	    case PROTO_SCTP:
		rpc->struct_add(st, "s", "transport", "SCTP");
		break;
	    case PROTO_OTHER:
		rpc->struct_add(st, "s", "transport", "OTHER");
		break;
            case PROTO_WS:
            case PROTO_WSS:
	    case PROTO_NONE:
		break;
	    }
	    prefix.s=gws[i].prefix;
	    prefix.len=gws[i].prefix_len;
	    tag.s=gws[i].tag;
	    tag.len=gws[i].tag_len;
	    start = int2strbuf(gws[i].defunct_until, &(buf[0]), INT2STR_MAX_LEN,
			       &len);
	    rpc->struct_add(st, "dSSds",
			    "strip",  gws[i].strip,
			    "prefix", &prefix,
			    "tag",    &tag,
			    "flags",  gws[i].flags,
			    "defunct_until",  start
			    );
	}
    }
}