From: Wilfried Goesgens Date: Mon, 6 Aug 2012 23:17:29 +0000 (+0200) Subject: Networker: send fail message in DB queue; add flood protection. X-Git-Tag: v8.20~262 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=a0eac8aaf455e61bdc60bca946ceabb9e549c85d Networker: send fail message in DB queue; add flood protection. --- diff --git a/citadel/modules/network/serv_networkclient.c b/citadel/modules/network/serv_networkclient.c index 84a38c0c5..996d4e042 100644 --- a/citadel/modules/network/serv_networkclient.c +++ b/citadel/modules/network/serv_networkclient.c @@ -174,6 +174,25 @@ 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) +{ + AsyncNetworker *NW = IO->Data; + long lens[2]; + const char *strs[2]; + + strs[0] = ChrPtr(NW->node); + lens[0] = StrLength(NW->node); + + strs[1] = ChrPtr(NW->IO.ErrMsg); + lens[1] = StrLength(NW->IO.ErrMsg); + CtdlAideFPMessage( + ChrPtr(NW->IO.ErrMsg), + "Networker error", + 2, strs, (long*) &lens); + + return eAbort; +} + eNextState FinalizeNetworker(AsyncIO *IO) { AsyncNetworker *NW = (AsyncNetworker *)IO->Data; @@ -200,8 +219,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)); - CtdlAideMessage(ChrPtr(NW->IO.ErrMsg), "Network error"); - return eAbort;/// todo: aide message in anderer queue speichern + StopClientWatchers(IO, 1); + return QueueDBOperation(IO, SendFailureMessage); } return eSendReply; } @@ -241,7 +260,8 @@ eNextState NWC_ReadAuthReply(AsyncNetworker *NW) } else { EVN_syslog(LOG_ERR, "%s\n", ChrPtr(NW->IO.ErrMsg)); - CtdlAideMessage(ChrPtr(NW->IO.ErrMsg), "Network error"); + StopClientWatchers(IO, 1); + return QueueDBOperation(IO, SendFailureMessage); } return eAbort; } @@ -755,7 +775,8 @@ eReadState NWC_ReadServerStatus(AsyncIO *IO) eNextState NWC_FailNetworkConnection(AsyncIO *IO) { - return eAbort; + StopClientWatchers(IO, 1); + return QueueDBOperation(IO, SendFailureMessage); } void NWC_SetTimeout(eNextState NextTCPState, AsyncNetworker *NW)