Mercurial > hg > orthanc
diff Plugins/Include/orthanc/OrthancCPlugin.h @ 3393:2cd0369a156f
support of chunked answers in HttpClient and in SDK
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 06 Jun 2019 16:12:55 +0200 |
parents | ad434967a68c |
children | 4981405e6c5c |
line wrap: on
line diff
--- a/Plugins/Include/orthanc/OrthancCPlugin.h Thu Jun 06 10:35:16 2019 +0200 +++ b/Plugins/Include/orthanc/OrthancCPlugin.h Thu Jun 06 16:12:55 2019 +0200 @@ -429,7 +429,7 @@ _OrthancPluginService_SetMetricsValue = 31, _OrthancPluginService_EncodeDicomWebJson = 32, _OrthancPluginService_EncodeDicomWebXml = 33, - _OrthancPluginService_HttpClientChunkedBody = 34, /* New in Orthanc 1.5.7 */ + _OrthancPluginService_StreamingHttpClient = 34, /* New in Orthanc 1.5.7 */ /* Registration of callbacks */ _OrthancPluginService_RegisterRestCallback = 1000, @@ -6808,71 +6808,77 @@ - - - typedef uint8_t (*OrthancPluginHttpRequestBodyIsDone) (void* body); - - typedef OrthancPluginErrorCode (*OrthancPluginHttpRequestBodyNext) (void* body); - - typedef const void* (*OrthancPluginHttpRequestBodyGetChunkData) (void* body); - - typedef uint32_t (*OrthancPluginHttpRequestBodyGetChunkSize) (void* body); + typedef OrthancPluginErrorCode (*OrthancPluginHttpAnswerStreamAddHeader) (void* answer, + const char* key, + const char* value); + + typedef OrthancPluginErrorCode (*OrthancPluginHttpAnswerStreamAddChunk) (void* answer, + const void* data, + uint32_t size); + + typedef uint8_t (*OrthancPluginHttpRequestStreamIsDone) (void* request); + + typedef OrthancPluginErrorCode (*OrthancPluginHttpRequestStreamNext) (void* request); + + typedef const void* (*OrthancPluginHttpRequestStreamGetChunkData) (void* request); + + typedef uint32_t (*OrthancPluginHttpRequestStreamGetChunkSize) (void* request); typedef struct { - OrthancPluginMemoryBuffer* answerBody; - OrthancPluginMemoryBuffer* answerHeaders; - uint16_t* httpStatus; - OrthancPluginHttpMethod method; - const char* url; - uint32_t headersCount; - const char* const* headersKeys; - const char* const* headersValues; - const char* username; - const char* password; - uint32_t timeout; - const char* certificateFile; - const char* certificateKeyFile; - const char* certificateKeyPassword; - uint8_t pkcs11; - void* requestBody; - OrthancPluginHttpRequestBodyIsDone requestBodyIsDone; - OrthancPluginHttpRequestBodyGetChunkData requestBodyChunkData; - OrthancPluginHttpRequestBodyGetChunkSize requestBodyChunkSize; - OrthancPluginHttpRequestBodyNext requestBodyNext; - } _OrthancPluginHttpClientChunkedBody; - - ORTHANC_PLUGIN_INLINE OrthancPluginErrorCode OrthancPluginHttpClientChunkedBody( - OrthancPluginContext* context, - OrthancPluginMemoryBuffer* answerBody, - OrthancPluginMemoryBuffer* answerHeaders, - uint16_t* httpStatus, - OrthancPluginHttpMethod method, - const char* url, - uint32_t headersCount, - const char* const* headersKeys, - const char* const* headersValues, - const char* username, - const char* password, - uint32_t timeout, - const char* certificateFile, - const char* certificateKeyFile, - const char* certificateKeyPassword, - uint8_t pkcs11, - void* requestBody, - OrthancPluginHttpRequestBodyIsDone requestBodyIsDone, - OrthancPluginHttpRequestBodyGetChunkData requestBodyChunkData, - OrthancPluginHttpRequestBodyGetChunkSize requestBodyChunkSize, - OrthancPluginHttpRequestBodyNext requestBodyNext) - { - _OrthancPluginHttpClientChunkedBody params; + void* answer; + OrthancPluginHttpAnswerStreamAddChunk answerAddChunk; + OrthancPluginHttpAnswerStreamAddHeader answerAddHeader; + uint16_t* httpStatus; + OrthancPluginHttpMethod method; + const char* url; + uint32_t headersCount; + const char* const* headersKeys; + const char* const* headersValues; + void* request; + OrthancPluginHttpRequestStreamIsDone requestIsDone; + OrthancPluginHttpRequestStreamGetChunkData requestChunkData; + OrthancPluginHttpRequestStreamGetChunkSize requestChunkSize; + OrthancPluginHttpRequestStreamNext requestNext; + const char* username; + const char* password; + uint32_t timeout; + const char* certificateFile; + const char* certificateKeyFile; + const char* certificateKeyPassword; + uint8_t pkcs11; + } _OrthancPluginStreamingHttpClient; + + ORTHANC_PLUGIN_INLINE OrthancPluginErrorCode OrthancPluginStreamingHttpClient( + OrthancPluginContext* context, + void* answer, + OrthancPluginHttpAnswerStreamAddChunk answerAddChunk, + OrthancPluginHttpAnswerStreamAddHeader answerAddHeader, + uint16_t* httpStatus, + OrthancPluginHttpMethod method, + const char* url, + uint32_t headersCount, + const char* const* headersKeys, + const char* const* headersValues, + void* request, + OrthancPluginHttpRequestStreamIsDone requestIsDone, + OrthancPluginHttpRequestStreamGetChunkData requestChunkData, + OrthancPluginHttpRequestStreamGetChunkSize requestChunkSize, + OrthancPluginHttpRequestStreamNext requestNext, + const char* username, + const char* password, + uint32_t timeout, + const char* certificateFile, + const char* certificateKeyFile, + const char* certificateKeyPassword, + uint8_t pkcs11) + { + _OrthancPluginStreamingHttpClient params; memset(¶ms, 0, sizeof(params)); /* In common with OrthancPluginHttpClient() */ - params.answerBody = answerBody; - params.answerHeaders = answerHeaders; params.httpStatus = httpStatus; params.method = method; params.url = url; @@ -6887,14 +6893,17 @@ params.certificateKeyPassword = certificateKeyPassword; params.pkcs11 = pkcs11; - /* For body stream */ - params.requestBody = requestBody; - params.requestBodyIsDone = requestBodyIsDone; - params.requestBodyChunkData = requestBodyChunkData; - params.requestBodyChunkSize = requestBodyChunkSize; - params.requestBodyNext = requestBodyNext; - - return context->InvokeService(context, _OrthancPluginService_HttpClientChunkedBody, ¶ms); + /* For streaming */ + params.answer = answer; + params.answerAddChunk = answerAddChunk; + params.answerAddHeader = answerAddHeader; + params.request = request; + params.requestIsDone = requestIsDone; + params.requestChunkData = requestChunkData; + params.requestChunkSize = requestChunkSize; + params.requestNext = requestNext; + + return context->InvokeService(context, _OrthancPluginService_StreamingHttpClient, ¶ms); }