Networker: also register STOP hook, so if sessions are timed out or killed the NTT...
authorWilfried Goesgens <dothebart@citadel.org>
Sun, 10 Jun 2012 12:47:29 +0000 (14:47 +0200)
committerWilfried Goesgens <dothebart@citadel.org>
Sun, 10 Jun 2012 12:47:29 +0000 (14:47 +0200)
citadel/modules/network/serv_netconfig.c
citadel/modules/network/serv_network.c

index cfcc20b6f84ca3fee5b678a3eb2387adfa6dadbe..f0f487d1769f0767de30b8bb163d560eb3786029 100644 (file)
@@ -352,7 +352,6 @@ int is_valid_node(const StrBuf **nexthop,
 }
 
 
-
 void cmd_gnet(char *argbuf)
 {
        char filename[PATH_MAX];
@@ -467,8 +466,9 @@ void cmd_snet(char *argbuf) {
  */
 void cmd_netp(char *cmdbuf)
 {
+       struct CitContext *CCC = CC;
        HashList *working_ignetcfg;
-       char node[256];
+       char *node;
        StrBuf *NodeStr;
        long nodelen;
        char pass[256];
@@ -479,8 +479,9 @@ void cmd_netp(char *cmdbuf)
        char err_buf[SIZ] = "";
 
        /* Authenticate */
-       nodelen = extract_token(node, cmdbuf, 0, '|', sizeof node);
-       extract_token(pass, cmdbuf, 1, '|', sizeof pass);
+       node = CCC->curr_user;
+       nodelen = extract_token(CCC->curr_user, cmdbuf, 0, '|', sizeof CCC->curr_user);
+       extract_token(CCC->user.password, cmdbuf, 1, '|', sizeof pass);
        NodeStr = NewStrBufPlain(node, nodelen);
        /* load the IGnet Configuration to check node validity */
        working_ignetcfg = load_ignetcfg();
@@ -518,9 +519,8 @@ void cmd_netp(char *cmdbuf)
                FreeStrBuf(&NodeStr);
                return;
        }
-
-       safestrncpy(CC->net_node, node, sizeof CC->net_node);
-       network_talking_to(node, nodelen, NTT_ADD);
+       nodelen = safestrncpy(CC->net_node, node, sizeof CC->net_node);
+       network_talking_to(CC->net_node, nodelen, NTT_ADD);
        syslog(LOG_NOTICE, "Network node <%s> logged in from %s [%s]\n",
                CC->net_node, CC->cs_host, CC->cs_addr
        );
index a0e821557d8a90afd843c55450b77d5ffd36cf3a..2dc58dacf2e033a5081ca106badf9544c90ae5ce 100644 (file)
@@ -693,8 +693,19 @@ void network_logout_hook(void)
         */
        if (!IsEmptyStr(CCC->net_node)) {
                network_talking_to(CCC->net_node, strlen(CCC->net_node), NTT_REMOVE);
+               CCC->net_node[0] = '\0';
        }
 }
+void network_cleanup_function(void)
+{
+       struct CitContext *CCC = CC;
+
+       if (!IsEmptyStr(CCC->net_node)) {
+               network_talking_to(CCC->net_node, strlen(CCC->net_node), NTT_REMOVE);
+               CCC->net_node[0] = '\0';
+       }
+}
+
 
 /*
  * Module entry point
@@ -710,6 +721,7 @@ CTDL_MODULE_INIT(network)
        {
                CtdlRegisterDebugFlagHook(HKEY("networktalkingto"), SetNTTDebugEnabled, &NTTDebugEnabled);
                CtdlRegisterCleanupHook(cleanup_nttlist);
+               CtdlRegisterSessionHook(network_cleanup_function, EVT_STOP);
                 CtdlRegisterSessionHook(network_logout_hook, EVT_LOGOUT);
                CtdlRegisterProtoHook(cmd_nsyn, "NSYN", "Synchronize room to node");
                CtdlRegisterRoomHook(network_room_handler);