]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/networkclient/serv_networkclient.c
Silence logging in non-debug usecases. The raspii users gonna love this.
[citadel.git] / citadel / modules / networkclient / serv_networkclient.c
index 4c1afa883f6a56a3de089c4f2b2e079a4508b7dc..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);
        
@@ -209,7 +210,9 @@ eNextState SendFailureMessage(AsyncIO *IO)
        CtdlAideFPMessage(
                ChrPtr(NW->IO.ErrMsg),
                "Networker error",
-               2, strs, (long*) &lens);
+               2, strs, (long*) &lens,
+               CCID, IO->ID,
+               EvGetNow(IO));
        
        return eAbort;
 }
@@ -241,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;
 }
@@ -253,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;
@@ -285,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;
        }
@@ -325,10 +327,20 @@ eNextState NWC_ReadNDOPReply(AsyncNetworker *NW)
        NWC_DBG_READ();
        if (ChrPtr(NW->IO.IOBuf)[0] == '2')
        {
+               int LogLevel = LOG_DEBUG;
 
                NW->IO.IOB.TotalSentAlready = 0;
+
                TotalSendSize = atol (ChrPtr(NW->IO.IOBuf) + 4);
-               EVN_syslog(LOG_DEBUG, "Expecting to transfer %d bytes\n", TotalSendSize);
+
+               if (TotalSendSize > 0)
+                       LogLevel = LOG_INFO;
+
+               EVN_syslog(LogLevel,
+                          "Expecting to transfer %d bytes to %s\n",
+                          TotalSendSize,
+                          ChrPtr(NW->tempFileName));
+
                if (TotalSendSize <= 0) {
                        NW->State = eNUOP - 1;
                }
@@ -378,7 +390,7 @@ eNextState NWC_SendREAD(AsyncNetworker *NW)
                        SetNWCState(IO, eNWCVSFail);
                        return eAbort;
                }
-               StrBufPrintf(NW->IO.SendBuf.Buf, "READ %ld|%ld\n",
+               StrBufPrintf(NW->IO.SendBuf.Buf, "READ "LOFF_T_FMT"|%ld\n",
                             NW->IO.IOB.TotalSentAlready,
                             NW->IO.IOB.TotalSendSize);
 /*
@@ -432,7 +444,13 @@ eNextState NWC_ReadREADBlob(AsyncNetworker *NW)
                               ChrPtr(NW->SpoolFileName), 
                               strerror(errno));
                }
-       
+               else {
+                       EVN_syslog(LOG_INFO, 
+                              "moved %s to %s\n",
+                              ChrPtr(NW->tempFileName), 
+                              ChrPtr(NW->SpoolFileName));
+               }
+
                unlink(ChrPtr(NW->tempFileName));
                rc = NWC_DispatchWriteDone(&NW->IO);
                NW->State --;
@@ -462,6 +480,12 @@ eNextState NWC_ReadREADBlobDone(AsyncNetworker *NW)
                               ChrPtr(NW->SpoolFileName), 
                               strerror(errno));
                }
+               else {
+                       EVN_syslog(LOG_INFO, 
+                              "moved %s to %s\n",
+                              ChrPtr(NW->tempFileName), 
+                              ChrPtr(NW->SpoolFileName));
+               }
        
                unlink(ChrPtr(NW->tempFileName));
                rc = NWC_DispatchWriteDone(&NW->IO);
@@ -540,6 +564,14 @@ eNextState NWC_SendNUOP(AsyncNetworker *NW)
                if (fd > 0) close(fd);
                return rc;
        }
+       else
+               {
+               EVN_syslog(LOG_INFO,
+                          "sending %s to %s\n", 
+                          ChrPtr(NW->SpoolFileName),
+                          ChrPtr(NW->node));
+       }
+
        FDIOBufferInit(&NW->IO.IOB, &NW->IO.SendBuf, fd, TotalSendSize);
 
        StrBufPlain(NW->IO.SendBuf.Buf, HKEY("NUOP\n"));
@@ -561,7 +593,7 @@ eNextState NWC_ReadNUOPReply(AsyncNetworker *NW)
 eNextState NWC_SendWRIT(AsyncNetworker *NW)
 {
        AsyncIO *IO = &NW->IO;
-       StrBufPrintf(NW->IO.SendBuf.Buf, "WRIT %ld\n", 
+       StrBufPrintf(NW->IO.SendBuf.Buf, "WRIT "LOFF_T_FMT"\n", 
                     NW->IO.IOB.TotalSendSize - NW->IO.IOB.TotalSentAlready);
        NWC_DBG_SEND();
        return eSendReply;
@@ -616,7 +648,12 @@ eNextState NWC_ReadUCLS(AsyncNetworker *NW)
        AsyncIO *IO = &NW->IO;
        NWC_DBG_READ();
 
-       EVN_syslog(LOG_NOTICE, "Sent %ld octets to <%s>\n", NW->IO.IOB.ChunkSize, ChrPtr(NW->node));
+       EVN_syslog(LOG_NOTICE,
+                  "Sent %s [%ld] octets to <%s>\n",
+                  ChrPtr(NW->SpoolFileName),
+                  NW->IO.IOB.ChunkSize,
+                  ChrPtr(NW->node));
+
        if (ChrPtr(NW->IO.IOBuf)[0] == '2') {
                EVN_syslog(LOG_DEBUG, "Removing <%s>\n", ChrPtr(NW->SpoolFileName));
                unlink(ChrPtr(NW->SpoolFileName));
@@ -808,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__,
@@ -860,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)
@@ -1005,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);
@@ -1078,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)
                );
        }