[pisa-src] r846 - trunk/client/pisacd

  • From: Thomas Jansen <mithi@xxxxxxxxx>
  • To: pisa-src@xxxxxxxxxxxxx
  • Date: Fri, 21 Aug 2009 14:47:15 +0200

Author: Tjansen
Date: Fri Aug 21 14:47:14 2009
New Revision: 846

Log:
Added backend functionality for "pisacdconf server".

Added:
   trunk/client/pisacd/cdconfhandlers.c
   trunk/client/pisacd/cdconfhandlers.h
Modified:
   trunk/client/pisacd/Makefile.am
   trunk/client/pisacd/cdmain.c
   trunk/client/pisacd/cdservers.c
   trunk/client/pisacd/cdservers.h
   trunk/client/pisacd/pisacdconf.c
   trunk/client/pisacd/pisacdconf.h

Modified: trunk/client/pisacd/Makefile.am
==============================================================================
--- trunk/client/pisacd/Makefile.am     Fri Aug 21 13:59:56 2009        (r845)
+++ trunk/client/pisacd/Makefile.am     Fri Aug 21 14:47:14 2009        (r846)
@@ -42,7 +42,7 @@
 
 LDADD += -lm
 pisacd_SOURCES = cdmain.c cdconf.c cdconmgr.c cdctx.c cdmsg.c cdpending.c \
-                cdservers.c cdtun.c pisacdconf.c
+                cdservers.c cdtun.c pisacdconf.c cdconfhandlers.c
 pisacdconf_SOURCES = pisaconftool.c pisacdconf.c 
 include_HEADERS = cdconf.h cdconmgr.h cdctx.h cdmsg.h cdpending.h cdservers.h \
-                 cdtun.h pisacdconf.h
+                 cdtun.h pisacdconf.h cdconfhandlers.h

Added: trunk/client/pisacd/cdconfhandlers.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ trunk/client/pisacd/cdconfhandlers.c        Fri Aug 21 14:47:14 2009        
(r846)
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2009, Distributed Systems Group, RWTH Aachen
+ * All rights reserved.
+ */
+
+/**
+ * @file cdconfhandlers.c
+ * @brief PISA conf handlers for the client daemon.
+ * @author Thomas Jansen <mithi@xxxxxxxxx>
+ * @date Aug. 2009
+ */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "debug.h"
+#include "pisaconf.h"
+#include "packet.h"
+#include "conmgr.h"
+#include "nat.h"
+
+/**
+ * Handle a pisacdconf server add request.
+ * @param packet config command packet containing the parameters
+ */
+void pisa_cdconf_cb_server_add(pisa_conf_packet *packet)
+{
+       pisa_conf_serveradd *serveradd;
+       pisa_conmgr_entry *entry;
+
+       assert(packet);
+       serveradd = &packet->body.request.rdata.serveradd;
+
+       entry = pisa_server_add(&serveradd->hit, 
PISACD_DEFAULT_PORTNUM_CONTROL, serveradd->type);
+
+       if (!entry)
+               PISA_ERROR("Failed to handle a server add request.\n");
+}
+
+/**
+ * Handle a pisacdconf service add request.
+ * @param packet config command packet containing the parameters
+ */
+void pisa_cdconf_cb_service_add(pisa_conf_packet *packet)
+{
+       pisa_conf_serviceadd *serviceadd;
+       pisa_conmgr_entry *entry;
+       struct sockaddr_in6 addr = {0};
+       
+       assert(packet);
+       serviceadd = &packet->body.request.rdata.serviceadd;
+
+       /* This is really ugly, consider switching pisa_conmgr_findby_address
+        * from sockaddr_in6 to struct in6_addr */
+       addr.sin6_family = AF_INET6;
+       pisa_ipv6_copy(&addr.sin6_addr, &serviceadd->hit);
+       addr.sin6_port = htons(PISASD_DEFAULT_PORTNUM_CONTROL);
+
+       if ((entry = pisa_conmgr_findby_address(&addr)) == NULL) {
+               PISA_ERROR("Request to add a service with nonexisting server 
HIT.\n");
+               return;
+       }
+
+       pisa_nat_add_mapping(&serviceadd->local, &serviceadd->remote, entry, 
NULL);
+}

Added: trunk/client/pisacd/cdconfhandlers.h
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ trunk/client/pisacd/cdconfhandlers.h        Fri Aug 21 14:47:14 2009        
(r846)
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2009, Distributed Systems Group, RWTH Aachen
+ * All rights reserved.
+ */
+
+/**
+ * @file cdconfhandlers.h
+ * @brief PISA conf handlers for the client daemon.
+ * @author Thomas Jansen <mithi@xxxxxxxxx>
+ * @date Aug. 2009
+ */
+
+#ifndef PISA_CDCONFHANDLERS_H
+#define PISA_CDCONFHANDLERS_H
+
+#include "pisaconf.h"
+
+void pisa_cdconf_cb_server_add(pisa_conf_packet *packet);
+void pisa_cdconf_cb_service_add(pisa_conf_packet *packet);
+
+#endif /* PISA_CDCONFHANDLERS_H */

Modified: trunk/client/pisacd/cdmain.c
==============================================================================
--- trunk/client/pisacd/cdmain.c        Fri Aug 21 13:59:56 2009        (r845)
+++ trunk/client/pisacd/cdmain.c        Fri Aug 21 14:47:14 2009        (r846)
@@ -27,7 +27,7 @@
 #include "cdservers.h"
 #include "pisacd.h"
 #include "pisaconf.h"
-#include "pisacdconf.h"
+#include "cdconfhandlers.h"
 
 extern pisa_conf_handle_func_set conf_handle_func_set;
 

Modified: trunk/client/pisacd/cdservers.c
==============================================================================
--- trunk/client/pisacd/cdservers.c     Fri Aug 21 13:59:56 2009        (r845)
+++ trunk/client/pisacd/cdservers.c     Fri Aug 21 14:47:14 2009        (r846)
@@ -23,7 +23,7 @@
  * @param port control port of the server
  * @param type connection type
  */
-void pisa_servers_add(struct in6_addr *hit, int port, pisa_contype type)
+pisa_conmgr_entry *pisa_server_add(struct in6_addr *hit, int port, 
pisa_contype type)
 {
        struct sockaddr_in6 addr = {0};
        pisa_conmgr_entry *entry = NULL;
@@ -37,7 +37,7 @@
        if (type == PISA_CONTYPE_RELAY) {
                if (relay != 0) {
                        PISA_ERROR("Found more than one relay connection.\n");
-                       return;
+                       return NULL;
                }
                relay = 1;
        }
@@ -46,7 +46,7 @@
        if ((legacy ==  1 && type != PISA_CONTYPE_LEGACY_ROUTER) ||
            (legacy == -1 && type == PISA_CONTYPE_LEGACY_ROUTER)) {
                PISA_ERROR("Mixing legacy router connections with other 
connections is forbidden.\n");
-               return;
+               return NULL;
        }
        legacy = type == PISA_CONTYPE_LEGACY_ROUTER ? 1 : -1;
 
@@ -56,9 +56,10 @@
        pisa_ipv6_copy(&addr.sin6_addr, hit);
        entry = pisa_conmgr_add(&addr);
        entry->type = type;
-       pisa_servers_add_services(entry);
        if (type == PISA_CONTYPE_RELAY)
                pisa_client_connect_to_server(entry);
+
+       return entry;
 }
 
 /**
@@ -71,6 +72,7 @@
        long port = PISACD_DEFAULT_PORTNUM_CONTROL;
        pisa_contype contype;
        struct in6_addr hitaddr;
+       pisa_conmgr_entry *entry;
 
        if (config_setting_lookup_string(server, "hit", &hit) == CONFIG_FALSE) {
                PISA_ERROR("No hit given in a server block\n");
@@ -105,7 +107,8 @@
                contype = PISA_CONTYPE_SERVICE;
        }
 
-       pisa_servers_add(&hitaddr, port, contype);
+       if ((entry = pisa_server_add(&hitaddr, port, contype)) != NULL)
+               pisa_servers_add_services(entry);
 }
 
 /**

Modified: trunk/client/pisacd/cdservers.h
==============================================================================
--- trunk/client/pisacd/cdservers.h     Fri Aug 21 13:59:56 2009        (r845)
+++ trunk/client/pisacd/cdservers.h     Fri Aug 21 14:47:14 2009        (r846)
@@ -10,6 +10,6 @@
 
 void pisa_servers_add_all(void);
 void pisa_servers_add_services(pisa_conmgr_entry *entry);
-void pisa_servers_add(struct in6_addr *hit, int port, pisa_contype type);
+pisa_conmgr_entry *pisa_server_add(struct in6_addr *hit, int port, 
pisa_contype type);
 
 #endif /* PISA_CD_SERVERS_H */

Modified: trunk/client/pisacd/pisacdconf.c
==============================================================================
--- trunk/client/pisacd/pisacdconf.c    Fri Aug 21 13:59:56 2009        (r845)
+++ trunk/client/pisacd/pisacdconf.c    Fri Aug 21 14:47:14 2009        (r846)
@@ -67,20 +67,6 @@
 }
 
 /**
- * Handle a pisacdconf server add request.
- * @param packet config command packet containing the parameters
- */
-void pisa_cdconf_cb_server_add(pisa_conf_packet *packet)
-{
-       pisa_conf_serveradd *serveradd;
-
-       PISA_INFO("Got a server add request.\n");
-
-       assert(packet);
-       serveradd = &packet->body.request.rdata.serveradd;
-}
-
-/**
  * Parse a pisacdconf service line and send out a packet to the client daemon.
  * @param argc number of arguments
  * @param argv array of arguments
@@ -121,33 +107,6 @@
 }
 
 /**
- * Handle a pisacdconf service add request.
- * @param packet config command packet containing the parameters
- */
-void pisa_cdconf_cb_service_add(pisa_conf_packet *packet)
-{
-       pisa_conf_serviceadd *serviceadd;
-       pisa_conmgr_entry *entry;
-       struct sockaddr_in6 addr = {0};
-       
-       assert(packet);
-       serviceadd = &packet->body.request.rdata.serviceadd;
-
-       /* This is really ugly, consider switching pisa_conmgr_findby_address
-        * from sockaddr_in6 to struct in6_addr */
-       addr.sin6_family = AF_INET6;
-       pisa_ipv6_copy(&addr.sin6_addr, &serviceadd->hit);
-       addr.sin6_port = htons(PISASD_DEFAULT_PORTNUM_CONTROL);
-
-       if ((entry = pisa_conmgr_findby_address(&addr)) == NULL) {
-               PISA_ERROR("Request to add a service with nonexisting server 
HIT.\n");
-               return;
-       }
-
-       pisa_nat_add_mapping(&serviceadd->local, &serviceadd->remote, entry, 
NULL);
-}
-
-/**
  * Parse a pisacdconf line and send out a packet to the client daemon.
  * @param argc number of arguments
  * @param argv array of arguments

Modified: trunk/client/pisacd/pisacdconf.h
==============================================================================
--- trunk/client/pisacd/pisacdconf.h    Fri Aug 21 13:59:56 2009        (r845)
+++ trunk/client/pisacd/pisacdconf.h    Fri Aug 21 14:47:14 2009        (r846)
@@ -15,8 +15,4 @@
 
 int pisa_cdconf_parse(int argc, char *argv[]);
 
-/* handler functions */
-void pisa_cdconf_cb_server_add(pisa_conf_packet *packet);
-void pisa_cdconf_cb_service_add(pisa_conf_packet *packet);
-
 #endif /* PISA_CDCONF_H */

Other related posts:

  • » [pisa-src] r846 - trunk/client/pisacd - Thomas Jansen