Tidyup the networker
[citadel.git] / citadel / modules / networkclient / serv_networkclient.c
index 4c1afa883f6a56a3de089c4f2b2e079a4508b7dc..deffa4f6c488be4e0cecf2ff314d808578f7ff8c 100644 (file)
@@ -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"
@@ -195,7 +194,7 @@ 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];
@@ -209,7 +208,9 @@ eNextState SendFailureMessage(AsyncIO *IO)
        CtdlAideFPMessage(
                ChrPtr(NW->IO.ErrMsg),
                "Networker error",
-               2, strs, (long*) &lens);
+               2, strs, (long*) &lens,
+               IO->Now,
+               IO->ID, CCID);
        
        return eAbort;
 }
@@ -242,7 +243,7 @@ eNextState NWC_ReadGreeting(AsyncNetworker *NW)
                             connected_to, ChrPtr(NW->node));
                EVN_syslog(LOG_ERR, "%s\n", ChrPtr(NW->IO.ErrMsg));
                StopClientWatchers(IO, 1);
-               return QueueDBOperation(IO, SendFailureMessage);
+               return QueueDBOperation(IO, NWC_SendFailureMessage);
        }
        return eSendReply;
 }
@@ -286,7 +287,7 @@ eNextState NWC_ReadAuthReply(AsyncNetworker *NW)
                        SetNWCState(IO, eNWCVSAuthFailNTT);
                        EVN_syslog(LOG_ERR, "%s\n", ChrPtr(NW->IO.ErrMsg));
                        StopClientWatchers(IO, 1);
-                       return QueueDBOperation(IO, SendFailureMessage);
+                       return QueueDBOperation(IO, NWC_SendFailureMessage);
                }
                return eAbort;
        }
@@ -325,10 +326,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 +389,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 +443,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 +479,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 +563,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 +592,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 +647,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));
@@ -809,7 +845,7 @@ eNextState NWC_FailNetworkConnection(AsyncIO *IO)
 {
        SetNWCState(IO, eNWCVSConnFail);
        StopClientWatchers(IO, 1);
-       return QueueDBOperation(IO, SendFailureMessage);
+       return QueueDBOperation(IO, NWC_SendFailureMessage);
 }
 
 void NWC_SetTimeout(eNextState NextTCPState, AsyncNetworker *NW)
@@ -820,26 +856,23 @@ void NWC_SetTimeout(eNextState NextTCPState, AsyncNetworker *NW)
        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) {
@@ -860,9 +893,12 @@ eNextState NWC_DispatchReadDone(AsyncIO *IO)
        eNextState rc;
 
        rc = NWC_ReadHandlers[NW->State](NW);
+
        if (rc != eReadMore)
                NW->State++;
+
        NWC_SetTimeout(rc, NW);
+
        return rc;
 }
 eNextState NWC_DispatchWriteDone(AsyncIO *IO)