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");