X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=site.c;h=88924009618bc6189c1c47458125cf057a9137a6;hb=refs%2Fheads%2Fwip.comm-does-lookup;hp=624752cec98bcd46f8dbc1ed1c01d313091f59b6;hpb=59533c169a94f1a4d0eec39e72c0594b8dd57ab9;p=secnet.git diff --git a/site.c b/site.c index 624752c..8892400 100644 --- a/site.c +++ b/site.c @@ -223,12 +223,10 @@ struct site { bool_t peer_mobile; /* Mobile client support */ int32_t transport_peers_max; string_t tunname; /* localname<->remotename by default, used in logs */ - string_t address; /* DNS name for bootstrapping, optional */ - int remoteport; /* Port for bootstrapping, optional */ + void *remote_addr_config; /* created and used by comm */ struct netlink_if *netlink; struct comm_if **comms; int ncomms; - struct resolver_if *resolver; struct log_if *log; struct random_if *random; struct rsaprivkey_if *privkey; @@ -793,27 +791,18 @@ static bool_t send_msg(struct site *st) } } -static void site_resolve_callback(void *sst, struct in_addr *address) +static void site_resolve_callback(void *sst, const struct comm_addr *address) { struct site *st=sst; - struct comm_addr ca_buf, *ca_use; if (st->state!=SITE_RESOLVE) { slog(st,LOG_UNEXPECTED,"site_resolve_callback called unexpectedly"); return; } - if (address) { - FILLZERO(ca_buf); - ca_buf.comm=st->comms[0]; - ca_buf.sin.sin_family=AF_INET; - ca_buf.sin.sin_port=htons(st->remoteport); - ca_buf.sin.sin_addr=*address; - ca_use=&ca_buf; - } else { - slog(st,LOG_ERROR,"resolution of %s failed",st->address); - ca_use=0; + if (!address) { + slog(st,LOG_ERROR,"resolution of peer address failed"); } - if (transport_compute_setupinit_peers(st,ca_use)) { + if (transport_compute_setupinit_peers(st,address)) { enter_new_state(st,SITE_SENTMSG1); } else { /* Can't figure out who to try to to talk to */ @@ -826,7 +815,7 @@ static bool_t initiate_key_setup(struct site *st, cstring_t reason) { if (st->state!=SITE_RUN) return False; slog(st,LOG_SETUP_INIT,"initiating key exchange (%s)",reason); - if (st->address) { + if (st->remote_addr_config) { slog(st,LOG_SETUP_INIT,"resolving peer address"); return enter_state_resolve(st); } else if (transport_compute_setupinit_peers(st,0)) { @@ -890,7 +879,7 @@ static void set_link_quality(struct site *st) quality=LINK_QUALITY_UP; else if (st->state==SITE_WAIT || st->state==SITE_STOP) quality=LINK_QUALITY_DOWN; - else if (st->address) + else if (st->remote_addr_config) quality=LINK_QUALITY_DOWN_CURRENT_ADDRESS; else if (transport_peers_valid(&st->peers)) quality=LINK_QUALITY_DOWN_STALE_ADDRESS; @@ -921,8 +910,8 @@ static bool_t enter_state_resolve(struct site *st) state_assert(st,st->state==SITE_RUN); slog(st,LOG_STATE,"entering state RESOLVE"); st->state=SITE_RESOLVE; - st->resolver->request(st->resolver->st,st->address, - site_resolve_callback,st); + st->comms[0]->peer_addr_request(st->comms[0]->st,st->remote_addr_config, + site_resolve_callback,st); return True; } @@ -1351,15 +1340,12 @@ static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context, st->comms[i]=cl->interface; } - st->resolver=find_cl_if(dict,"resolver",CL_RESOLVER,True,"site",loc); st->log=find_cl_if(dict,"log",CL_LOG,True,"site",loc); st->random=find_cl_if(dict,"random",CL_RANDOMSRC,True,"site",loc); + st->remote_addr_config=st->comms[0]->peer_addr_config( + st->comms[0]->st,dict,loc,"site"); st->privkey=find_cl_if(dict,"local-key",CL_RSAPRIVKEY,True,"site",loc); - st->address=dict_read_string(dict, "address", False, "site", loc); - if (st->address) - st->remoteport=dict_read_number(dict,"port",True,"site",loc,0); - else st->remoteport=0; st->pubkey=find_cl_if(dict,"key",CL_RSAPUBKEY,True,"site",loc); st->transform=