Silence logging in non-debug usecases. The raspii users gonna love this.
[citadel.git] / citadel / modules / networkclient / serv_networkclient.c
index 5d6a6e2dc99a39d438220856b56701bf5de588e3..4140916b5bfe9bb931a1d5732833cdb4c122a22b 100644 (file)
@@ -2,15 +2,15 @@
  * This module handles shared rooms, inter-Citadel mail, and outbound
  * mailing list processing.
  *
- * Copyright (c) 2000-2012 by the citadel.org team
+ * Copyright (c) 2000-2015 by the citadel.org team
  *
- *  This program is open source software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License, version 3.
+ * This program is open source software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 3.
  *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  *
  * ** NOTE **   A word on the S_NETCONFIGS semaphore:
  * This is a fairly high-level type of critical section.  It ensures that no
@@ -66,7 +66,6 @@
 #include "msgbase.h"
 #include "internet_addressing.h"
 #include "clientsocket.h"
-#include "file_ops.h"
 #include "citadel_dirs.h"
 #include "threads.h"
 #include "context.h"
@@ -83,21 +82,21 @@ int NetworkClientDebugEnabled = 0;
 
 #define EVN_syslog(LEVEL, FORMAT, ...)                                 \
        NCDBGLOG(LEVEL) syslog(LEVEL,                                   \
-                              "IO[%ld]CC[%d]NW[%s][%ld]" FORMAT,       \
-                              IO->ID, CCID, NODE, N, __VA_ARGS__)
+                              "%s[%ld]CC[%d]NW[%s][%ld]" FORMAT,       \
+                              IOSTR, IO->ID, CCID, NODE, N, __VA_ARGS__)
 
 #define EVNM_syslog(LEVEL, FORMAT)                                     \
        NCDBGLOG(LEVEL) syslog(LEVEL,                                   \
-                              "IO[%ld]CC[%d]NW[%s][%ld]" FORMAT,       \
-                              IO->ID, CCID, NODE, N)
+                              "%s[%ld]CC[%d]NW[%s][%ld]" FORMAT,       \
+                              IOSTR, IO->ID, CCID, NODE, N)
 
 #define EVNCS_syslog(LEVEL, FORMAT, ...) \
-       NCDBGLOG(LEVEL) syslog(LEVEL, "IO[%ld]NW[%s][%ld]" FORMAT,      \
-                              IO->ID, NODE, N, __VA_ARGS__)
+       NCDBGLOG(LEVEL) syslog(LEVEL, "%s[%ld]NW[%s][%ld]" FORMAT,      \
+                              IOSTR, IO->ID, NODE, N, __VA_ARGS__)
 
 #define EVNCSM_syslog(LEVEL, FORMAT) \
-       NCDBGLOG(LEVEL) syslog(LEVEL, "IO[%ld]NW[%s][%ld]" FORMAT,      \
-                              IO->ID, NODE, N)
+       NCDBGLOG(LEVEL) syslog(LEVEL, "%s[%ld]NW[%s][%ld]" FORMAT,      \
+                              IOSTR, IO->ID, NODE, N)
 
 
 typedef enum _eNWCState {
@@ -195,12 +194,14 @@ void DeleteNetworker(void *vptr)
 #define NWC_DBG_READ() EVN_syslog(LOG_DEBUG, ": < %s\n", ChrPtr(NW->IO.IOBuf))
 #define NWC_OK (strncasecmp(ChrPtr(NW->IO.IOBuf), "+OK", 3) == 0)
 
-eNextState SendFailureMessage(AsyncIO *IO)
+eNextState NWC_SendFailureMessage(AsyncIO *IO)
 {
        AsyncNetworker *NW = IO->Data;
        long lens[2];
        const char *strs[2];
 
+       EVN_syslog(LOG_DEBUG, "NWC: %s\n", __FUNCTION__);
+
        strs[0] = ChrPtr(NW->node);
        lens[0] = StrLength(NW->node);
        
@@ -210,8 +211,8 @@ eNextState SendFailureMessage(AsyncIO *IO)
                ChrPtr(NW->IO.ErrMsg),
                "Networker error",
                2, strs, (long*) &lens,
-               IO->Now,
-               IO->ID, CCID);
+               CCID, IO->ID,
+               EvGetNow(IO));
        
        return eAbort;
 }
@@ -243,8 +244,8 @@ eNextState NWC_ReadGreeting(AsyncNetworker *NW)
                             "Connected to node \"%s\" but I was expecting to connect to node \"%s\".",
                             connected_to, ChrPtr(NW->node));
                EVN_syslog(LOG_ERR, "%s\n", ChrPtr(NW->IO.ErrMsg));
-               StopClientWatchers(IO, 1);
-               return QueueDBOperation(IO, SendFailureMessage);
+
+               return EventQueueDBOperation(IO, NWC_SendFailureMessage, 1);
        }
        return eSendReply;
 }
@@ -255,7 +256,7 @@ eNextState NWC_SendAuth(AsyncNetworker *NW)
        SetNWCState(IO, eNWCVSAuth);
        /* We're talking to the correct node.  Now identify ourselves. */
        StrBufPrintf(NW->IO.SendBuf.Buf, "NETP %s|%s\n", 
-                    config.c_nodename
+                    CtdlGetConfigStr("c_nodename")
                     ChrPtr(NW->secret));
        NWC_DBG_SEND();
        return eSendReply;
@@ -287,8 +288,7 @@ eNextState NWC_ReadAuthReply(AsyncNetworker *NW)
                else {
                        SetNWCState(IO, eNWCVSAuthFailNTT);
                        EVN_syslog(LOG_ERR, "%s\n", ChrPtr(NW->IO.ErrMsg));
-                       StopClientWatchers(IO, 1);
-                       return QueueDBOperation(IO, SendFailureMessage);
+                       return EventQueueDBOperation(IO, NWC_SendFailureMessage, 1);
                }
                return eAbort;
        }
@@ -845,41 +845,37 @@ eReadState NWC_ReadServerStatus(AsyncIO *IO)
 eNextState NWC_FailNetworkConnection(AsyncIO *IO)
 {
        SetNWCState(IO, eNWCVSConnFail);
-       StopClientWatchers(IO, 1);
-       return QueueDBOperation(IO, SendFailureMessage);
+       return EventQueueDBOperation(IO, NWC_SendFailureMessage, 1);
 }
 
 void NWC_SetTimeout(eNextState NextTCPState, AsyncNetworker *NW)
 {
-       AsyncIO *IO = &NW->IO;
        double Timeout = 0.0;
 
-       EVN_syslog(LOG_DEBUG, "%s - %d\n", __FUNCTION__, NextTCPState);
+       //EVN_syslog(LOG_DEBUG, "%s - %d\n", __FUNCTION__, NextTCPState);
 
        switch (NextTCPState) {
-       case eSendReply:
        case eSendMore:
-               break;
-       case eReadFile:
+       case eSendReply:
        case eReadMessage:
                Timeout = NWC_ReadTimeouts[NW->State];
                break;
+       case eReadFile:
+       case eSendFile:
        case eReadPayload:
                Timeout = 100000;
-               /* TODO!!! */
                break;
        case eSendDNSQuery:
        case eReadDNSReply:
+       case eDBQuery:
+       case eReadMore:
        case eConnect:
-       case eSendFile:
-//TODO
        case eTerminateConnection:
-       case eDBQuery:
        case eAbort:
-       case eReadMore://// TODO
                return;
        }
        if (Timeout > 0) {
+               AsyncIO *IO = &NW->IO;
                EVN_syslog(LOG_DEBUG, 
                           "%s - %d %f\n",
                           __FUNCTION__,
@@ -897,9 +893,15 @@ eNextState NWC_DispatchReadDone(AsyncIO *IO)
        eNextState rc;
 
        rc = NWC_ReadHandlers[NW->State](NW);
-       if (rc != eReadMore)
+
+       if ((rc != eReadMore) &&
+           (rc != eAbort) && 
+           (rc != eDBQuery)) {
                NW->State++;
+       }
+
        NWC_SetTimeout(rc, NW);
+
        return rc;
 }
 eNextState NWC_DispatchWriteDone(AsyncIO *IO)
@@ -1042,7 +1044,7 @@ void network_poll_other_citadel_nodes(int full_poll, HashList *ignetcfg)
        int poll = 0;
        
        if (GetCount(ignetcfg) ==0) {
-               syslog(LOG_DEBUG, "network: no neighbor nodes are configured - not polling.\n");
+               MARKM_syslog(LOG_DEBUG, "network: no neighbor nodes are configured - not polling.\n");
                return;
        }
        become_session(&networker_client_CC);
@@ -1115,10 +1117,11 @@ void network_do_clientqueue(void)
         * Run the full set of processing tasks no more frequently
         * than once every n seconds
         */
-       if ( (time(NULL) - last_run) < config.c_net_freq ) {
+       if ( (time(NULL) - last_run) < CtdlGetConfigLong("c_net_freq") )
+       {
                full_processing = 0;
                syslog(LOG_DEBUG, "Network full processing in %ld seconds.\n",
-                       config.c_net_freq - (time(NULL)- last_run)
+                       CtdlGetConfigLong("c_net_freq") - (time(NULL)- last_run)
                );
        }