X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fprotocol_key.c;h=05bc97ba0dbcecc33f10c72b519ef6a35f045dda;hb=40731d030fef793c6b6405efd9b3e64c26c00045;hp=591bb66026d024b8a3e7b017496286563cca116e;hpb=af95368c0f30955f0e13b587d5d6d4989fd5a83e;p=tinc diff --git a/src/protocol_key.c b/src/protocol_key.c index 591bb660..05bc97ba 100644 --- a/src/protocol_key.c +++ b/src/protocol_key.c @@ -1,7 +1,7 @@ /* protocol_key.c -- handle the meta-protocol, key exchange - Copyright (C) 1999-2005 Ivo Timmermans , - 2000-2005 Guus Sliepen + Copyright (C) 1999-2005 Ivo Timmermans, + 2000-2006 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ #include #include -#include "avl_tree.h" +#include "splay_tree.h" #include "connection.h" #include "logger.h" #include "net.h" @@ -37,8 +37,7 @@ bool mykeyused = false; -bool send_key_changed(connection_t *c, const node_t *n) -{ +bool send_key_changed(connection_t *c, const node_t *n) { cp(); /* Only send this message if some other daemon requested our key previously. @@ -51,20 +50,19 @@ bool send_key_changed(connection_t *c, const node_t *n) return send_request(c, "%d %lx %s", KEY_CHANGED, random(), n->name); } -bool key_changed_h(connection_t *c) -{ +bool key_changed_h(connection_t *c, char *request) { char name[MAX_STRING_SIZE]; node_t *n; cp(); - if(sscanf(c->buffer, "%*d %*x " MAX_STRING, name) != 1) { + if(sscanf(request, "%*d %*x " MAX_STRING, name) != 1) { logger(LOG_ERR, _("Got bad %s from %s (%s)"), "KEY_CHANGED", c->name, c->hostname); return false; } - if(seen_request(c->buffer)) + if(seen_request(request)) return true; n = lookup_node(name); @@ -81,27 +79,25 @@ bool key_changed_h(connection_t *c) /* Tell the others */ if(!tunnelserver) - forward_request(c); + forward_request(c, request); return true; } -bool send_req_key(connection_t *c, const node_t *from, const node_t *to) -{ +bool send_req_key(connection_t *c, const node_t *from, const node_t *to) { cp(); return send_request(c, "%d %s %s", REQ_KEY, from->name, to->name); } -bool req_key_h(connection_t *c) -{ +bool req_key_h(connection_t *c, char *request) { char from_name[MAX_STRING_SIZE]; char to_name[MAX_STRING_SIZE]; node_t *from, *to; cp(); - if(sscanf(c->buffer, "%*d " MAX_STRING " " MAX_STRING, from_name, to_name) != 2) { + if(sscanf(request, "%*d " MAX_STRING " " MAX_STRING, from_name, to_name) != 2) { logger(LOG_ERR, _("Got bad %s from %s (%s)"), "REQ_KEY", c->name, c->hostname); return false; @@ -140,8 +136,7 @@ bool req_key_h(connection_t *c) return true; } -bool send_ans_key(connection_t *c, const node_t *from, const node_t *to) -{ +bool send_ans_key(connection_t *c, const node_t *from, const node_t *to) { char *key; cp(); @@ -157,8 +152,7 @@ bool send_ans_key(connection_t *c, const node_t *from, const node_t *to) from->compression); } -bool ans_key_h(connection_t *c) -{ +bool ans_key_h(connection_t *c, char *request) { char from_name[MAX_STRING_SIZE]; char to_name[MAX_STRING_SIZE]; char key[MAX_STRING_SIZE]; @@ -167,7 +161,7 @@ bool ans_key_h(connection_t *c) cp(); - if(sscanf(c->buffer, "%*d "MAX_STRING" "MAX_STRING" "MAX_STRING" %d %d %d %d", + if(sscanf(request, "%*d "MAX_STRING" "MAX_STRING" "MAX_STRING" %d %d %d %d", from_name, to_name, key, &cipher, &digest, &maclength, &compression) != 7) { logger(LOG_ERR, _("Got bad %s from %s (%s)"), "ANS_KEY", c->name, @@ -197,7 +191,7 @@ bool ans_key_h(connection_t *c) if(tunnelserver) return false; - return send_request(to->nexthop->connection, "%s", c->buffer); + return send_request(to->nexthop->connection, "%s", request); } /* Update our copy of the origin's packet key */