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 */