chiark
/
gitweb
/
~ian
/
secnet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Makefiles: Use Final.sd.mk to implementing RECHECK_RM
[secnet.git]
/
site.c
diff --git
a/site.c
b/site.c
index 08875133c1cc5fd0ca95677412f88df35c7308ab..191c36463da7cf7bd1d6186a1a1f51ebb0484877 100644
(file)
--- a/
site.c
+++ b/
site.c
@@
-257,6
+257,7
@@
typedef struct {
} transport_peers;
/* Basic operations on transport peer address sets */
} transport_peers;
/* Basic operations on transport peer address sets */
+static void transport_peers_init(struct site *st, transport_peers *peers);
static void transport_peers_clear(struct site *st, transport_peers *peers);
static int transport_peers_valid(transport_peers *peers);
static void transport_peers_copy(struct site *st, transport_peers *dst,
static void transport_peers_clear(struct site *st, transport_peers *peers);
static int transport_peers_valid(transport_peers *peers);
static void transport_peers_copy(struct site *st, transport_peers *dst,
@@
-787,8
+788,7
@@
static bool_t unpick_msg(struct site *st, uint32_t type,
if (type_is_msg23(type) && m->remote.extrainfo.size) {
m->n_pubkeys_accepted_nom = buf_unprepend_uint8(&m->remote.extrainfo);
if (!m->n_pubkeys_accepted_nom) return False;
if (type_is_msg23(type) && m->remote.extrainfo.size) {
m->n_pubkeys_accepted_nom = buf_unprepend_uint8(&m->remote.extrainfo);
if (!m->n_pubkeys_accepted_nom) return False;
- int ki_nom;
- for (ki_nom=0; ki_nom<m->n_pubkeys_accepted_nom; ki_nom++) {
+ for (int ki_nom=0; ki_nom<m->n_pubkeys_accepted_nom; ki_nom++) {
CHECK_AVAIL(&m->remote.extrainfo,KEYIDSZ);
struct sigkeyid *kid = buf_unprepend(&m->remote.extrainfo,KEYIDSZ);
if (ki_nom<MAX_SIG_KEYS) m->pubkeys_accepted[ki_nom] = kid;
CHECK_AVAIL(&m->remote.extrainfo,KEYIDSZ);
struct sigkeyid *kid = buf_unprepend(&m->remote.extrainfo,KEYIDSZ);
if (ki_nom<MAX_SIG_KEYS) m->pubkeys_accepted[ki_nom] = kid;
@@
-1712,8
+1712,9
@@
static void set_link_quality(struct site *st)
static void enter_state_run(struct site *st)
{
static void enter_state_run(struct site *st)
{
- slog(st,LOG_STATE,"entering state RUN%s",
- current_valid(st) ? " (keyed)" : " (unkeyed)");
+ if (st->state!=SITE_STOP)
+ slog(st,LOG_STATE,"entering state RUN%s",
+ current_valid(st) ? " (keyed)" : " (unkeyed)");
st->state=SITE_RUN;
st->timeout=0;
st->state=SITE_RUN;
st->timeout=0;
@@
-2283,14
+2284,13
@@
static bool_t site_incoming(void *sst, struct buffer_if *buf,
return False;
}
return False;
}
-static void site_
control(void *vst, bool_t run
)
+static void site_
startup(void *vst
)
{
struct site *st=vst;
{
struct site *st=vst;
- if (run) enter_state_run(st);
- else enter_state_stop(st);
+ enter_state_run(st);
}
}
-static void site_phase_hook(void *sst, uint32_t newphase)
+static void site_phase_
shutdown_
hook(void *sst, uint32_t newphase)
{
struct site *st=sst;
{
struct site *st=sst;
@@
-2298,6
+2298,13
@@
static void site_phase_hook(void *sst, uint32_t newphase)
send_msg7(st,"shutting down");
}
send_msg7(st,"shutting down");
}
+static void site_phase_run_hook(void *sst, uint32_t newphase)
+{
+ struct site *st=sst;
+ slog(st,LOG_STATE,"entering phase RUN in state %s",
+ state_name(st->state));
+}
+
static void site_childpersist_clearkeys(void *sst, uint32_t newphase)
{
struct site *st=sst;
static void site_childpersist_clearkeys(void *sst, uint32_t newphase)
{
struct site *st=sst;
@@
-2331,7
+2338,7
@@
static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context,
st->cl.apply=NULL;
st->cl.interface=&st->ops;
st->ops.st=st;
st->cl.apply=NULL;
st->cl.interface=&st->ops;
st->ops.st=st;
- st->ops.
control=site_control
;
+ st->ops.
startup=site_startup
;
st->ops.status=site_status;
st->peerkeys_path=0;
st->peerkeys_tmpl.buffer=0;
st->ops.status=site_status;
st->peerkeys_path=0;
st->peerkeys_tmpl.buffer=0;
@@
-2513,8
+2520,8
@@
static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context,
st->chosen_transform=0;
st->current.key_timeout=0;
st->auxiliary_key.key_timeout=0;
st->chosen_transform=0;
st->current.key_timeout=0;
st->auxiliary_key.key_timeout=0;
- transport_peers_
clear
(st,&st->peers);
- transport_peers_
clear
(st,&st->setup_peers);
+ transport_peers_
init
(st,&st->peers);
+ transport_peers_
init
(st,&st->setup_peers);
/* XXX mlock these */
st->dhsecret=safe_malloc(st->dh->len,"site:dhsecret");
st->sharedsecretlen=st->sharedsecretallocd=0;
/* XXX mlock these */
st->dhsecret=safe_malloc(st->dh->len,"site:dhsecret");
st->sharedsecretlen=st->sharedsecretallocd=0;
@@
-2552,7
+2559,8
@@
static list_t *site_apply(closure_t *self, struct cloc loc, dict_t *context,
enter_state_stop(st);
enter_state_stop(st);
- add_hook(PHASE_SHUTDOWN,site_phase_hook,st);
+ add_hook(PHASE_SHUTDOWN,site_phase_shutdown_hook,st);
+ add_hook(PHASE_RUN, site_phase_run_hook, st);
add_hook(PHASE_CHILDPERSIST,site_childpersist_clearkeys,st);
return new_closure(&st->cl);
add_hook(PHASE_CHILDPERSIST,site_childpersist_clearkeys,st);
return new_closure(&st->cl);
@@
-2730,9
+2738,14
@@
static void transport_data_msgok(struct site *st, const struct comm_addr *a) {
static int transport_peers_valid(transport_peers *peers) {
return peers->npeers;
}
static int transport_peers_valid(transport_peers *peers) {
return peers->npeers;
}
+static void transport_peers_init(struct site *st, transport_peers *peers) {
+ peers->npeers= 0;
+}
static void transport_peers_clear(struct site *st, transport_peers *peers) {
static void transport_peers_clear(struct site *st, transport_peers *peers) {
+ bool_t need_debug=!!peers->npeers;
peers->npeers= 0;
peers->npeers= 0;
- transport_peers_debug(st,peers,"clear",0,0,0);
+ if (need_debug)
+ transport_peers_debug(st,peers,"clear",0,0,0);
}
static void transport_peers_copy(struct site *st, transport_peers *dst,
const transport_peers *src) {
}
static void transport_peers_copy(struct site *st, transport_peers *dst,
const transport_peers *src) {