X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fprotocol.c;h=34c3f3bb62c95c22ee9a0fc63ccd1250ab5fb4d4;hb=edc08b73a9e353bde6db4c73866a6a730a1a7cb4;hp=1c5b6cfd9c1d43dba0c6a2e21defabdb4c431209;hpb=268c8545aaf83b7433f43402f5c77e39e20006ef;p=tinc diff --git a/src/protocol.c b/src/protocol.c index 1c5b6cfd..34c3f3bb 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -56,6 +56,9 @@ static char (*request_name[]) = { static splay_tree_t *past_request_tree; bool check_id(const char *id) { + if(!id || !*id) + return false; + for(; *id; id++) if(!isalnum(*id) && *id != '_') return false; @@ -177,21 +180,16 @@ bool seen_request(const char *request) { new->request = xstrdup(request); new->firstseen = time(NULL); splay_insert(past_request_tree, new); - event_add(&past_request_event, &(struct timeval){10, 0}); + event_add(&past_request_event, &(struct timeval){10, rand() % 100000}); return false; } } static void age_past_requests(int fd, short events, void *data) { - splay_node_t *node, *next; - past_request_t *p; int left = 0, deleted = 0; time_t now = time(NULL); - for(node = past_request_tree->head; node; node = next) { - next = node->next; - p = node->data; - + for splay_each(past_request_t, p, past_request_tree) { if(p->firstseen + pinginterval <= now) splay_delete_node(past_request_tree, node), deleted++; else @@ -203,7 +201,7 @@ static void age_past_requests(int fd, short events, void *data) { deleted, left); if(left) - event_add(&past_request_event, &(struct timeval){10, 0}); + event_add(&past_request_event, &(struct timeval){10, rand() % 100000}); } void init_requests(void) {