@@ -12,9 +12,7 @@ void HTTPManager::SendGETRequest(const char* szURI, EIPProtocolVersion protover,
1212
1313 HTTPRequest* pRequest = PlatformCreateRequest (EHTTPVerb::HTTP_VERB_GET , protover, szURI, inHeaders, completionCallback, progressCallback, timeoutMS);
1414
15- // start immediately
16- pRequest->StartRequest ();
17- m_vecRequestsInFlight.push_back (pRequest);
15+ m_vecRequestsPendingStart.push_back (pRequest);
1816}
1917
2018void HTTPManager::SendPOSTRequest (const char * szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, const char * szPostData, std::function<void (bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback, int timeoutMS)
@@ -24,9 +22,7 @@ void HTTPManager::SendPOSTRequest(const char* szURI, EIPProtocolVersion protover
2422 HTTPRequest* pRequest = PlatformCreateRequest (EHTTPVerb::HTTP_VERB_POST , protover, szURI, inHeaders, completionCallback, progressCallback, timeoutMS);
2523 pRequest->SetPostData (szPostData);
2624
27- // start immediately
28- pRequest->StartRequest ();
29- m_vecRequestsInFlight.push_back (pRequest);
25+ m_vecRequestsPendingStart.push_back (pRequest);
3026}
3127
3228void HTTPManager::SendPUTRequest (const char * szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, const char * szData, std::function<void (bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback /* = nullptr*/ , int timeoutMS)
@@ -36,9 +32,7 @@ void HTTPManager::SendPUTRequest(const char* szURI, EIPProtocolVersion protover,
3632 HTTPRequest* pRequest = PlatformCreateRequest (EHTTPVerb::HTTP_VERB_PUT , protover, szURI, inHeaders, completionCallback, progressCallback, timeoutMS);
3733 pRequest->SetPostData (szData);
3834
39- // start immediately
40- pRequest->StartRequest ();
41- m_vecRequestsInFlight.push_back (pRequest);
35+ m_vecRequestsPendingStart.push_back (pRequest);
4236}
4337
4438void HTTPManager::SendDELETERequest (const char * szURI, EIPProtocolVersion protover, std::map<std::string, std::string>& inHeaders, const char * szData, std::function<void (bool bSuccess, int statusCode, std::string strBody, HTTPRequest* pReq)> completionCallback, std::function<void(size_t bytesReceived)> progressCallback /* = nullptr*/ , int timeoutMS)
@@ -48,9 +42,7 @@ void HTTPManager::SendDELETERequest(const char* szURI, EIPProtocolVersion protov
4842 HTTPRequest* pRequest = PlatformCreateRequest (EHTTPVerb::HTTP_VERB_DELETE , protover, szURI, inHeaders, completionCallback, progressCallback, timeoutMS);
4943 pRequest->SetPostData (szData);
5044
51- // start immediately
52- pRequest->StartRequest ();
53- m_vecRequestsInFlight.push_back (pRequest);
45+ m_vecRequestsPendingStart.push_back (pRequest);
5446}
5547
5648void HTTPManager::Shutdown ()
@@ -80,6 +72,14 @@ void HTTPManager::Tick()
8072{
8173 std::scoped_lock<std::recursive_mutex> lock (m_Mutex);
8274
75+ // start anything needing starting
76+ for (HTTPRequest* pRequest : m_vecRequestsPendingStart)
77+ {
78+ pRequest->StartRequest ();
79+ m_vecRequestsInFlight.push_back (pRequest);
80+ }
81+ m_vecRequestsPendingStart.clear ();
82+
8383 // perform and poll
8484 int numReqs = 0 ;
8585 curl_multi_perform (m_pCurl, &numReqs);
@@ -114,3 +114,15 @@ void HTTPManager::Tick()
114114 delete pRequestToDestroy;
115115 }
116116}
117+
118+ void HTTPManager::AddHandleToMulti (CURL * pNewHandle)
119+ {
120+ std::scoped_lock<std::recursive_mutex> lock (m_Mutex);
121+ curl_multi_add_handle (m_pCurl, pNewHandle);
122+ }
123+
124+ void HTTPManager::RemoveHandleFromMulti (CURL * pHandleToRemove)
125+ {
126+ std::scoped_lock<std::recursive_mutex> lock (m_Mutex);
127+ curl_multi_remove_handle (m_pCurl, pHandleToRemove);
128+ }
0 commit comments