]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/network/serv_networkclient.c
NETWORKER: don't report an error if the rome site tells us we're already on their...
[citadel.git] / citadel / modules / network / serv_networkclient.c
index 174bf9daeadfd1d280f406ae2477e9a3a8f3c5c3..80713bfd9af6ad0e9e39ae89bb7aeb96914bcbbc 100644 (file)
@@ -227,14 +227,22 @@ eNextState NWC_ReadAuthReply(AsyncNetworker *NW)
        }
        else
        {
+               int Error = atol(ChrPtr(NW->IO.IOBuf));
                if (NW->IO.ErrMsg == NULL)
                        NW->IO.ErrMsg = NewStrBuf();
                StrBufPrintf(NW->IO.ErrMsg,
-                            "Connected to node \"%s\" but my secret wasn't accurate.",
-                            ChrPtr(NW->node));
-               EVN_syslog(LOG_ERR, "%s\n", ChrPtr(NW->IO.ErrMsg));
-               CtdlAideMessage(ChrPtr(NW->IO.ErrMsg), "Network error");
-               
+                            "Connected to node \"%s\" but my secret wasn't accurate.\nReason was:%s\n",
+                            ChrPtr(NW->node), ChrPtr(NW->IO.IOBuf) + 4);
+               if (Error == 552) {
+                       EVN_syslog(LOG_INFO,
+                                  "Already talking to %s; skipping this time.\n",
+                                  ChrPtr(NW->node));
+                       
+               }
+               else {
+                       EVN_syslog(LOG_ERR, "%s\n", ChrPtr(NW->IO.ErrMsg));
+                       CtdlAideMessage(ChrPtr(NW->IO.ErrMsg), "Network error");
+               }
                return eAbort;
        }
 }
@@ -318,6 +326,7 @@ eNextState NWC_SendREAD(AsyncNetworker *NW)
                {
                        FDIOBufferDelete(&NW->IO.IOB);
                        unlink(ChrPtr(NW->tempFileName));
+                       FDIOBufferDelete(&IO->IOB);
                        return eAbort;
                }
                StrBufPrintf(NW->IO.SendBuf.Buf, "READ %ld|%ld\n",
@@ -352,6 +361,7 @@ eNextState NWC_ReadREADState(AsyncNetworker *NW)
                        NW->IO.IOB.ChunkSize = atol(ChrPtr(NW->IO.IOBuf)+4);
                return eReadFile;
        }
+       FDIOBufferDelete(&IO->IOB);
        return eAbort;
 }
 eNextState NWC_ReadREADBlobDone(AsyncNetworker *NW);
@@ -396,7 +406,6 @@ eNextState NWC_ReadREADBlobDone(AsyncNetworker *NW)
                NW->State ++;
 
                FDIOBufferDelete(&NW->IO.IOB);
-
                if (link(ChrPtr(NW->tempFileName), ChrPtr(NW->SpoolFileName)) != 0) {
                        EVN_syslog(LOG_ALERT, 
                               "Could not link %s to %s: %s\n",
@@ -428,6 +437,7 @@ eNextState NWC_ReadCLOSReply(AsyncNetworker *NW)
 {
        AsyncIO *IO = &NW->IO;
        NWC_DBG_READ();
+       FDIOBufferDelete(&IO->IOB);
        if (ChrPtr(NW->IO.IOBuf)[0] != '2')
                return eTerminateConnection;
        return eSendReply;
@@ -476,6 +486,7 @@ eNextState NWC_SendNUOP(AsyncNetworker *NW)
                NW->State = eQUIT;
                rc = NWC_SendQUIT(NW);
                NWC_DBG_SEND();
+               if (fd > 0) close(fd);
                return rc;
        }
        FDIOBufferInit(&NW->IO.IOB, &NW->IO.SendBuf, fd, TotalSendSize);
@@ -489,8 +500,10 @@ eNextState NWC_ReadNUOPReply(AsyncNetworker *NW)
 {
        AsyncIO *IO = &NW->IO;
        NWC_DBG_READ();
-       if (ChrPtr(NW->IO.IOBuf)[0] != '2')
+       if (ChrPtr(NW->IO.IOBuf)[0] != '2') {
+               FDIOBufferDelete(&IO->IOB);
                return eAbort;
+       }
        return eSendReply;
 }
 
@@ -508,6 +521,7 @@ eNextState NWC_ReadWRITReply(AsyncNetworker *NW)
        NWC_DBG_READ();
        if (ChrPtr(NW->IO.IOBuf)[0] != '7')
        {
+               FDIOBufferDelete(&IO->IOB);
                return eAbort;
        }
 
@@ -556,6 +570,7 @@ eNextState NWC_ReadUCLS(AsyncNetworker *NW)
                EVN_syslog(LOG_DEBUG, "Removing <%s>\n", ChrPtr(NW->SpoolFileName));
                unlink(ChrPtr(NW->SpoolFileName));
        }
+       FDIOBufferDelete(&IO->IOB);
        return eSendReply;
 }
 
@@ -1036,7 +1051,7 @@ CTDL_MODULE_INIT(network_client)
        {
                CtdlFillSystemContext(&networker_client_CC, "CitNetworker");
                
-               CtdlRegisterSessionHook(network_do_clientqueue, EVT_TIMER);
+               CtdlRegisterSessionHook(network_do_clientqueue, EVT_TIMER, PRIO_SEND + 10);
                CtdlRegisterDebugFlagHook(HKEY("networkclient"), LogDebugEnableNetworkClient, &NetworkClientDebugEnabled);
 
        }