]> git.meshlink.io Git - meshlink/blobdiff - src/protocol_edge.c
Use libevent for meta socket input/output buffering.
[meshlink] / src / protocol_edge.c
index 8f4d0e144ba1db0811bc24041a8d3ad19aff2104..f515eeeddbb5307a9756986b976ea5c8313578f3 100644 (file)
@@ -1,7 +1,7 @@
 /*
     protocol_edge.c -- handle the meta-protocol, edges
-    Copyright (C) 1999-2005 Ivo Timmermans <ivo@tinc-vpn.org>,
-                  2000-2005 Guus Sliepen <guus@tinc-vpn.org>
+    Copyright (C) 1999-2005 Ivo Timmermans,
+                  2000-2006 Guus Sliepen <guus@tinc-vpn.org>
 
     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
@@ -22,7 +22,7 @@
 
 #include "system.h"
 
-#include "avl_tree.h"
+#include "splay_tree.h"
 #include "conf.h"
 #include "connection.h"
 #include "edge.h"
@@ -36,8 +36,7 @@
 #include "utils.h"
 #include "xalloc.h"
 
-bool send_add_edge(connection_t *c, const edge_t *e)
-{
+bool send_add_edge(connection_t *c, const edge_t *e) {
        bool x;
        char *address, *port;
 
@@ -54,8 +53,7 @@ bool send_add_edge(connection_t *c, const edge_t *e)
        return x;
 }
 
-bool add_edge_h(connection_t *c)
-{
+bool add_edge_h(connection_t *c, char *request) {
        edge_t *e;
        node_t *from, *to;
        char from_name[MAX_STRING_SIZE];
@@ -68,7 +66,7 @@ bool add_edge_h(connection_t *c)
 
        cp();
 
-       if(sscanf(c->buffer, "%*d %*x "MAX_STRING" "MAX_STRING" "MAX_STRING" "MAX_STRING" %lx %d",
+       if(sscanf(request, "%*d %*x "MAX_STRING" "MAX_STRING" "MAX_STRING" "MAX_STRING" %lx %d",
                          from_name, to_name, to_address, to_port, &options, &weight) != 6) {
                logger(LOG_ERR, _("Got bad %s from %s (%s)"), "ADD_EDGE", c->name,
                           c->hostname);
@@ -89,7 +87,7 @@ bool add_edge_h(connection_t *c)
                return false;
        }
 
-       if(seen_request(c->buffer))
+       if(seen_request(request))
                return true;
 
        /* Lookup nodes */
@@ -158,7 +156,7 @@ bool add_edge_h(connection_t *c)
        /* Tell the rest about the new edge */
 
        if(!tunnelserver)
-               forward_request(c);
+               forward_request(c, request);
 
        /* Run MST before or after we tell the rest? */
 
@@ -167,16 +165,14 @@ bool add_edge_h(connection_t *c)
        return true;
 }
 
-bool send_del_edge(connection_t *c, const edge_t *e)
-{
+bool send_del_edge(connection_t *c, const edge_t *e) {
        cp();
 
        return send_request(c, "%d %lx %s %s", DEL_EDGE, random(),
                                                e->from->name, e->to->name);
 }
 
-bool del_edge_h(connection_t *c)
-{
+bool del_edge_h(connection_t *c, char *request) {
        edge_t *e;
        char from_name[MAX_STRING_SIZE];
        char to_name[MAX_STRING_SIZE];
@@ -184,7 +180,7 @@ bool del_edge_h(connection_t *c)
 
        cp();
 
-       if(sscanf(c->buffer, "%*d %*x "MAX_STRING" "MAX_STRING, from_name, to_name) != 2) {
+       if(sscanf(request, "%*d %*x "MAX_STRING" "MAX_STRING, from_name, to_name) != 2) {
                logger(LOG_ERR, _("Got bad %s from %s (%s)"), "DEL_EDGE", c->name,
                           c->hostname);
                return false;
@@ -204,7 +200,7 @@ bool del_edge_h(connection_t *c)
                return false;
        }
 
-       if(seen_request(c->buffer))
+       if(seen_request(request))
                return true;
 
        /* Lookup nodes */
@@ -248,7 +244,7 @@ bool del_edge_h(connection_t *c)
        /* Tell the rest about the deleted edge */
 
        if(!tunnelserver)
-               forward_request(c);
+               forward_request(c, request);
 
        /* Delete the edge */