Add 'sid:' field to output of "reverse lookup"

Use sid_t in more places
This commit is contained in:
Andrew Bettison 2013-02-15 19:34:24 +10:30
parent 682d1ecfb3
commit c176d23726
4 changed files with 57 additions and 56 deletions

View File

@ -496,7 +496,8 @@ int app_echo(const struct cli_parsed *parsed, void *context)
return 0;
}
void lookup_send_request(unsigned char *srcsid, int srcport, unsigned char *dstsid, const char *did){
void lookup_send_request(const sid_t *srcsid, int srcport, const sid_t *dstsid, const char *did)
{
int i;
overlay_mdp_frame mdp;
bzero(&mdp,sizeof(mdp));
@ -504,14 +505,14 @@ void lookup_send_request(unsigned char *srcsid, int srcport, unsigned char *dsts
/* set source address to a local address, and pick a random port */
mdp.out.src.port=srcport;
bcopy(srcsid,mdp.out.src.sid,SID_SIZE);
bcopy(srcsid->binary, mdp.out.src.sid, SID_SIZE);
/* Send to destination address and DNA lookup port */
if (dstsid){
if (dstsid) {
/* Send an encrypted unicast packet */
mdp.packetTypeAndFlags=MDP_TX;
bcopy(dstsid, mdp.out.dst.sid, SID_SIZE);
bcopy(dstsid->binary, mdp.out.dst.sid, SID_SIZE);
}else{
/* Send a broadcast packet, flooding across the local mesh network */
mdp.packetTypeAndFlags=MDP_TX|MDP_NOCRYPT;
@ -566,10 +567,10 @@ int app_dna_lookup(const struct cli_parsed *parsed, void *context)
}
/* Bind to MDP socket and await confirmation */
unsigned char srcsid[SID_SIZE];
sid_t srcsid;
int port=32768+(random()&32767);
if (overlay_mdp_getmyaddr(0,srcsid)) return WHY("Could not get local address");
if (overlay_mdp_bind(srcsid,port)) return WHY("Could not bind to MDP socket");
if (overlay_mdp_getmyaddr(0, &srcsid)) return WHY("Could not get local address");
if (overlay_mdp_bind(&srcsid, port)) return WHY("Could not bind to MDP socket");
/* use MDP to send the lookup request to MDP_PORT_DNALOOKUP, and wait for
replies. */
@ -586,7 +587,7 @@ int app_dna_lookup(const struct cli_parsed *parsed, void *context)
if ((last_tx+interval)<now)
{
lookup_send_request(srcsid, port, NULL, did);
lookup_send_request(&srcsid, port, NULL, did);
last_tx=now;
interval+=interval>>1;
@ -922,8 +923,8 @@ int app_mdp_ping(const struct cli_parsed *parsed, void *context)
{
if (config.debug.verbose)
DEBUG_cli_parsed(parsed);
const char *sid, *count;
if (cli_arg(parsed, "SID|broadcast", &sid, str_is_subscriber_id, "broadcast") == -1)
const char *sidhex, *count;
if (cli_arg(parsed, "SID|broadcast", &sidhex, str_is_subscriber_id, "broadcast") == -1)
return -1;
if (cli_arg(parsed, "count", &count, NULL, "0") == -1)
return -1;
@ -935,30 +936,25 @@ int app_mdp_ping(const struct cli_parsed *parsed, void *context)
overlay_mdp_frame mdp;
bzero(&mdp, sizeof(overlay_mdp_frame));
/* Bind to MDP socket and await confirmation */
unsigned char srcsid[SID_SIZE];
sid_t srcsid;
int port=32768+(random()&32767);
if (overlay_mdp_getmyaddr(0,srcsid)) return WHY("Could not get local address");
if (overlay_mdp_bind(srcsid,port)) return WHY("Could not bind to MDP socket");
if (overlay_mdp_getmyaddr(0, &srcsid)) return WHY("Could not get local address");
if (overlay_mdp_bind(&srcsid, port)) return WHY("Could not bind to MDP socket");
/* First sequence number in the echo frames */
unsigned int firstSeq=random();
unsigned int sequence_number=firstSeq;
/* Get SID that we want to ping.
XXX - allow lookup of SID prefixes and telephone numbers
TODO - allow lookup of SID prefixes and telephone numbers
(that would require MDP lookup of phone numbers, which doesn't yet occur) */
int i;
int broadcast=0;
unsigned char ping_sid[SID_SIZE];
if (strcasecmp(sid,"broadcast")) {
stowSid(ping_sid,0,sid);
} else {
for(i=0;i<SID_SIZE;i++) ping_sid[i]=0xff;
broadcast=1;
}
sid_t ping_sid;
if (str_to_sid_t(&ping_sid, sidhex) == -1)
return WHY("str_to_sid_t() failed");
int broadcast = is_sid_broadcast(ping_sid.binary);
/* XXX Eventually we should try to resolve SID to phone number and vice versa */
printf("MDP PING %s (%s): 12 data bytes\n", alloca_tohex_sid(ping_sid), alloca_tohex_sid(ping_sid));
/* TODO Eventually we should try to resolve SID to phone number and vice versa */
printf("MDP PING %s (%s): 12 data bytes\n", alloca_tohex_sid_t(ping_sid), alloca_tohex_sid_t(ping_sid));
time_ms_t rx_mintime=-1;
time_ms_t rx_maxtime=-1;
@ -966,15 +962,15 @@ int app_mdp_ping(const struct cli_parsed *parsed, void *context)
time_ms_t rx_times[1024];
long long rx_count=0,tx_count=0;
if (broadcast)
if (broadcast)
WHY("WARNING: broadcast ping packets will not be encryped.");
while(icount==0 || tx_count<icount) {
/* Now send the ping packets */
mdp.packetTypeAndFlags=MDP_TX;
if (broadcast) mdp.packetTypeAndFlags|=MDP_NOCRYPT;
mdp.out.src.port=port;
bcopy(srcsid,mdp.out.src.sid,SID_SIZE);
bcopy(ping_sid,mdp.out.dst.sid,SID_SIZE);
bcopy(srcsid.binary, mdp.out.src.sid, SID_SIZE);
bcopy(ping_sid.binary, mdp.out.dst.sid, SID_SIZE);
mdp.out.queue=OQ_MESH_MANAGEMENT;
/* Set port to well known echo port */
mdp.out.dst.port=MDP_PORT_ECHO;
@ -1055,7 +1051,7 @@ int app_mdp_ping(const struct cli_parsed *parsed, void *context)
rx_stddev=sqrtf(rx_stddev);
/* XXX Report final statistics before going */
printf("--- %s ping statistics ---\n", alloca_tohex_sid(ping_sid));
printf("--- %s ping statistics ---\n", alloca_tohex_sid_t(ping_sid));
printf("%lld packets transmitted, %lld packets received, %3.1f%% packet loss\n",
tx_count,rx_count,tx_count?(tx_count-rx_count)*100.0/tx_count:0);
printf("round-trip min/avg/max/stddev%s = %lld/%.3f/%lld/%.3f ms\n",
@ -1206,7 +1202,7 @@ int app_rhizome_add_file(const struct cli_parsed *parsed, void *context)
return -1;
sid_t authorSid;
if (authorSidHex[0] && fromhexstr(authorSid.binary, authorSidHex, SID_SIZE) == -1)
if (authorSidHex[0] && str_to_sid_t(&authorSid, authorSidHex) == -1)
return WHYF("invalid author_sid: %s", authorSidHex);
rhizome_bk_t bsk;
@ -2003,22 +1999,23 @@ int app_reverse_lookup(const struct cli_parsed *parsed, void *context)
{
if (config.debug.verbose)
DEBUG_cli_parsed(parsed);
const char *sid, *delay;
if (cli_arg(parsed, "sid", &sid, str_is_subscriber_id, "") == -1)
const char *sidhex, *delay;
if (cli_arg(parsed, "sid", &sidhex, str_is_subscriber_id, "") == -1)
return -1;
if (cli_arg(parsed, "timeout", &delay, NULL, "3000") == -1)
return -1;
int port=32768+(random()&0xffff);
unsigned char srcsid[SID_SIZE];
unsigned char dstsid[SID_SIZE];
stowSid(dstsid,0,(char *)sid);
if (overlay_mdp_getmyaddr(0,srcsid))
sid_t srcsid;
sid_t dstsid;
if (str_to_sid_t(&dstsid, sidhex) == -1)
return WHY("str_to_sid_t() failed");
if (overlay_mdp_getmyaddr(0, &srcsid))
return WHY("Unable to get my address");
if (overlay_mdp_bind(srcsid,port))
if (overlay_mdp_bind(&srcsid, port))
return WHY("Unable to bind port");
time_ms_t now = gettime_ms();
@ -2026,12 +2023,12 @@ int app_reverse_lookup(const struct cli_parsed *parsed, void *context)
time_ms_t next_send = now;
overlay_mdp_frame mdp_reply;
while(now < timeout){
while (now < timeout){
now=gettime_ms();
if (now >= next_send){
/* Send a unicast packet to this node, asking for any did */
lookup_send_request(srcsid, port, dstsid, "");
lookup_send_request(&srcsid, port, &dstsid, "");
next_send+=125;
continue;
}
@ -2060,7 +2057,7 @@ int app_reverse_lookup(const struct cli_parsed *parsed, void *context)
}
// we might receive a late response from an ealier request on the same socket, ignore it
if (memcmp(mdp_reply.in.src.sid, dstsid, SID_SIZE)){
if (memcmp(mdp_reply.in.src.sid, dstsid.binary, sizeof dstsid.binary)){
WHYF("Unexpected result from SID %s", alloca_tohex_sid(mdp_reply.in.src.sid));
continue;
}
@ -2081,6 +2078,10 @@ int app_reverse_lookup(const struct cli_parsed *parsed, void *context)
}
/* Got a good DNA reply, copy it into place and stop polling */
cli_puts("sid");
cli_delim(":");
cli_puts(alloca_tohex_sid_t(dstsid));
cli_delim("\n");
cli_puts("did");
cli_delim(":");
cli_puts(did);
@ -2089,10 +2090,10 @@ int app_reverse_lookup(const struct cli_parsed *parsed, void *context)
cli_delim(":");
cli_puts(name);
cli_delim("\n");
break;
return 0;
}
}
return 0;
return 1;
}
int app_network_scan(const struct cli_parsed *parsed, void *context)

View File

@ -162,10 +162,10 @@ int main(int argc, char **argv){
struct pollfd fds[2];
// bind for incoming directory updates
unsigned char srcsid[SID_SIZE];
if (overlay_mdp_getmyaddr(0,srcsid))
sid_t srcsid;
if (overlay_mdp_getmyaddr(0, &srcsid))
return WHY("Could not get local address");
if (overlay_mdp_bind(srcsid,MDP_PORT_DIRECTORY))
if (overlay_mdp_bind(&srcsid, MDP_PORT_DIRECTORY))
return WHY("Could not bind to MDP socket");
fds[0].fd = STDIN_FILENO;
@ -191,4 +191,4 @@ int main(int argc, char **argv){
overlay_mdp_client_done();
return 0;
}
}

View File

@ -232,11 +232,11 @@ int overlay_mdp_recv(overlay_mdp_frame *mdp, int port, int *ttl)
}
// send a request to servald deamon to add a port binding
int overlay_mdp_bind(unsigned char *localaddr,int port)
int overlay_mdp_bind(const sid_t *localaddr, int port)
{
overlay_mdp_frame mdp;
mdp.packetTypeAndFlags=MDP_BIND|MDP_FORCE;
bcopy(localaddr,mdp.bind.sid,SID_SIZE);
bcopy(localaddr->binary, mdp.bind.sid, SID_SIZE);
mdp.bind.port=port;
int result=overlay_mdp_send(&mdp,MDP_AWAITREPLY,5000);
if (result) {
@ -250,7 +250,7 @@ int overlay_mdp_bind(unsigned char *localaddr,int port)
return 0;
}
int overlay_mdp_getmyaddr(int index,unsigned char *sid)
int overlay_mdp_getmyaddr(int index, sid_t *sid)
{
overlay_mdp_frame a;
memset(&a, 0, sizeof(a));
@ -269,7 +269,7 @@ int overlay_mdp_getmyaddr(int index,unsigned char *sid)
if ((a.packetTypeAndFlags&MDP_TYPE_MASK)!=MDP_ADDRLIST)
return WHY("MDP Server returned something other than an address list");
if (0) DEBUGF("local addr 0 = %s",alloca_tohex_sid(a.addrlist.sids[0]));
bcopy(&a.addrlist.sids[0][0],sid,SID_SIZE);
bcopy(&a.addrlist.sids[0][0], sid->binary, sizeof sid->binary);
return 0;
}

View File

@ -645,8 +645,8 @@ void cli_put_long(int64_t value, const char *delim);
void cli_put_string(const char *value, const char *delim);
void cli_put_hexvalue(const unsigned char *value, int length, const char *delim);
int overlay_mdp_getmyaddr(int index,unsigned char *sid);
int overlay_mdp_bind(unsigned char *localaddr,int port);
int overlay_mdp_getmyaddr(int index, sid_t *sid);
int overlay_mdp_bind(const sid_t *localaddr, int port) ;
int overlay_route_node_info(overlay_mdp_nodeinfo *node_info);
int overlay_interface_register(char *name,
struct in_addr addr,