X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fprotocol.c;h=361820bd0649854640e0252eeab4a47fb961afe3;hp=aeeec1be63be18985aa9cde7302b89b5478d4345;hb=7d0f82bd4b7044a5151835e25e830fd28dfaaebd;hpb=5065ea32c32e27478d93c00a1bba0c812b7a2b8c diff --git a/src/protocol.c b/src/protocol.c index aeeec1be..361820bd 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id: protocol.c,v 1.28.4.54 2000/11/03 22:35:11 zarq Exp $ + $Id: protocol.c,v 1.28.4.59 2000/11/07 22:02:14 guus Exp $ */ #include "config.h" @@ -225,7 +225,7 @@ cp } } cp - if((cfg = get_config_val(cl->config, publickey))) + if((cfg = get_config_val(cl->config, config_publickey))) { cl->rsa_key = RSA_new(); BN_hex2bn(&cl->rsa_key->n, cfg->data.ptr); @@ -561,6 +561,8 @@ cp if(cl->status.outgoing) cl->allow_request = ACK; + setup_vpn_connection(cl); + x = send_request(cl, "%d", ACK); cl->status.encryptout = 1; cp @@ -872,7 +874,14 @@ cp new->nexthop = cl; new->status.active = 1; + new->cipher_pkttype = EVP_bf_cfb(); + new->cipher_pktkeylength = cl->cipher_pkttype->key_len + cl->cipher_pkttype->iv_len; + /* Okay this is a bit ugly... it would be better to setup UDP sockets dynamically, or + * perhaps just one UDP socket... but then again, this has benefits too... + */ + + setup_vpn_connection(new); cp return 0; } @@ -1035,7 +1044,9 @@ cp int send_ping(conn_list_t *cl) { +cp cl->status.pinged = 1; + cl->last_ping_time = time(NULL); cp return send_request(cl, "%d", PING); } @@ -1055,7 +1066,7 @@ cp int pong_h(conn_list_t *cl) { cp - cl->status.got_pong = 1; + cl->status.pinged = 0; cp return 0; } @@ -1195,7 +1206,7 @@ cp return -1; } - /* Update origin's packet key */ + /* Check correctness of packet key */ keylength = strlen(pktkey); @@ -1207,17 +1218,8 @@ cp return -1; } - if(from->cipher_pktkey) - free(from->cipher_pktkey); + /* Forward it if necessary */ - keylength /= 2; - hex2bin(pktkey, pktkey, keylength); - pktkey[keylength] = '\0'; - from->cipher_pktkey = pktkey; - - from->status.validkey = 1; - from->status.waitingforkey = 0; - if(strcmp(to_id, myself->name)) { if(!(to = lookup_id(to_id))) @@ -1230,6 +1232,19 @@ cp send_ans_key(from, to, pktkey); } + /* Update our copy of the origin's packet key */ + + if(from->cipher_pktkey) + free(from->cipher_pktkey); + + keylength /= 2; + hex2bin(pktkey, pktkey, keylength); + pktkey[keylength] = '\0'; + from->cipher_pktkey = pktkey; + + from->status.validkey = 1; + from->status.waitingforkey = 0; + free(from_id); free(to_id); cp return 0;