diff --git a/doc/xml/release.xml b/doc/xml/release.xml index 032e731e9..16d03f164 100644 --- a/doc/xml/release.xml +++ b/doc/xml/release.xml @@ -89,6 +89,10 @@

httpClientRequest() accepts a body parameter.

+ +

Add protocolKeepAlive() to send noops to all remotes.

+
+

Make strLstDup() null-tolerant.

diff --git a/src/protocol/helper.c b/src/protocol/helper.c index 0270c8374..182299f2e 100644 --- a/src/protocol/helper.c +++ b/src/protocol/helper.c @@ -327,6 +327,26 @@ protocolRemoteGet(ProtocolStorageType protocolStorageType) FUNCTION_LOG_RETURN(PROTOCOL_CLIENT, protocolHelperClient->client); } +/*********************************************************************************************************************************** +Send keepalives to all remotes +***********************************************************************************************************************************/ +void +protocolKeepAlive(void) +{ + FUNCTION_LOG_VOID(logLevelTrace); + + if (protocolHelper.memContext != NULL) + { + for (unsigned int clientIdx = 0; clientIdx < protocolHelper.clientRemoteSize; clientIdx++) + { + if (protocolHelper.clientRemote[clientIdx].client != NULL) + protocolClientNoOp(protocolHelper.clientRemote[clientIdx].client); + } + } + + FUNCTION_LOG_RETURN_VOID(); +} + /*********************************************************************************************************************************** Free the protocol objects and shutdown processes ***********************************************************************************************************************************/ diff --git a/src/protocol/helper.h b/src/protocol/helper.h index e5686fbca..5023f8492 100644 --- a/src/protocol/helper.h +++ b/src/protocol/helper.h @@ -26,6 +26,7 @@ Constants /*********************************************************************************************************************************** Functions ***********************************************************************************************************************************/ +void protocolKeepAlive(void); ProtocolClient *protocolLocalGet(ProtocolStorageType protocolStorageType, unsigned int protocolId); ProtocolClient *protocolRemoteGet(ProtocolStorageType protocolStorageType); diff --git a/test/src/module/protocol/protocolTest.c b/test/src/module/protocol/protocolTest.c index 73d9cf936..c8405706d 100644 --- a/test/src/module/protocol/protocolTest.c +++ b/test/src/module/protocol/protocolTest.c @@ -629,6 +629,10 @@ testRun(void) // ***************************************************************************************************************************** if (testBegin("protocolGet()")) { + // Call keep alive before any remotes exist + // ------------------------------------------------------------------------------------------------------------------------- + TEST_RESULT_VOID(protocolKeepAlive(), "keep alive"); + // Simple protocol start // ------------------------------------------------------------------------------------------------------------------------- StringList *argList = strLstNew(); @@ -647,6 +651,7 @@ testRun(void) TEST_ASSIGN(client, protocolRemoteGet(protocolStorageTypeRepo), "get remote protocol"); TEST_RESULT_PTR(protocolRemoteGet(protocolStorageTypeRepo), client, "get remote cached protocol"); TEST_RESULT_PTR(protocolHelper.clientRemote[0].client, client, "check position in cache"); + TEST_RESULT_VOID(protocolKeepAlive(), "keep alive"); TEST_RESULT_VOID(protocolFree(), "free remote protocol objects"); TEST_RESULT_VOID(protocolFree(), "free remote protocol objects again");