diff --git a/Extension/swhttprequest.cpp b/Extension/swhttprequest.cpp index 39a5137..f5ee789 100644 --- a/Extension/swhttprequest.cpp +++ b/Extension/swhttprequest.cpp @@ -286,18 +286,8 @@ static cell_t sm_SetCallbacks(IPluginContext *pContext, const cell_t *params) return 1; } -static cell_t sm_SendHTTPRequest(IPluginContext *pContext, const cell_t *params) +static void SetCallbacks(SteamAPICall_t &hCall, SteamWorksHTTPRequest *pRequest) { - ISteamHTTP *pHTTP; - SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); - if (pRequest == NULL) - { - return 0; - } - - SteamAPICall_t hCall; - cell_t result = pHTTP->SendHTTPRequest(pRequest->request, &hCall) ? 1 : 0; - if (pRequest->pCompletedForward != NULL) { pRequest->CompletedCallResult.SetGameserverFlag(); @@ -315,7 +305,37 @@ static cell_t sm_SendHTTPRequest(IPluginContext *pContext, const cell_t *params) pRequest->DataCallResult.SetGameserverFlag(); pRequest->DataCallResult.Set(hCall, pRequest, &SteamWorksHTTPRequest::OnHTTPDataReceived); } +} +static cell_t sm_SendHTTPRequestAndStreamResponse(IPluginContext *pContext, const cell_t *params) +{ + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == NULL) + { + return 0; + } + + SteamAPICall_t hCall; + cell_t result = pHTTP->SendHTTPRequestAndStreamResponse(pRequest->request, &hCall) ? 1 : 0; + + SetCallbacks(hCall, pRequest); + return result; +} + +static cell_t sm_SendHTTPRequest(IPluginContext *pContext, const cell_t *params) +{ + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == NULL) + { + return 0; + } + + SteamAPICall_t hCall; + cell_t result = pHTTP->SendHTTPRequest(pRequest->request, &hCall) ? 1 : 0; + + SetCallbacks(hCall, pRequest); return result; } @@ -537,6 +557,20 @@ static cell_t sm_WriteHTTPResponseBodyToFile(IPluginContext *pContext, const cel return 1; } +static cell_t sm_GetHTTPStreamingResponseBodyData(IPluginContext *pContext, const cell_t *params) +{ + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == NULL) + { + return 0; + } + + char *pBuffer; + pContext->LocalToString(params[3], &pBuffer); + return pHTTP->GetHTTPStreamingResponseBodyData(pRequest->request, params[2], reinterpret_cast(pBuffer), params[4]) ? 1 : 0; +} + static sp_nativeinfo_t httpnatives[] = { {"SteamWorks_CreateHTTPRequest", sm_CreateHTTPRequest}, {"SteamWorks_SetHTTPRequestContextValue", sm_SetHTTPRequestContextValue}, @@ -555,6 +589,8 @@ static sp_nativeinfo_t httpnatives[] = { {"SteamWorks_SetHTTPRequestRawPostBody", sm_SetHTTPRequestRawPostBody}, {"SteamWorks_GetHTTPResponseBodyCallback", sm_GetHTTPResponseBodyCallback}, {"SteamWorks_WriteHTTPResponseBodyToFile", sm_WriteHTTPResponseBodyToFile}, + {"SteamWorks_SendHTTPRequestAndStreamResponse", sm_SendHTTPRequestAndStreamResponse}, + {"SteamWorks_GetHTTPStreamingResponseBodyData", sm_GetHTTPStreamingResponseBodyData}, {NULL, NULL} }; diff --git a/Pawn/includes/SteamWorks.inc b/Pawn/includes/SteamWorks.inc index 02e69af..2d7871e 100644 --- a/Pawn/includes/SteamWorks.inc +++ b/Pawn/includes/SteamWorks.inc @@ -221,12 +221,14 @@ funcenum SteamWorksHTTPDataReceived native bool:SteamWorks_SetHTTPCallbacks(Handle:hHandle, SteamWorksHTTPRequestCompleted:fCompleted = INVALID_FUNCTION, SteamWorksHTTPHeadersReceived:fHeaders = INVALID_FUNCTION, SteamWorksHTTPDataReceived:fData = INVALID_FUNCTION, Handle:hCalling = INVALID_HANDLE); native bool:SteamWorks_SendHTTPRequest(Handle:hRequest); +native bool:SteamWorks_SendHTTPRequestAndStreamResponse(Handle:hRequest); native bool:SteamWorks_DeferHTTPRequest(Handle:hRequest); native bool:SteamWorks_PrioritizeHTTPRequest(Handle:hRequest); native bool:SteamWorks_GetHTTPResponseHeaderSize(Handle:hRequest, const String:sHeader[], &size); native bool:SteamWorks_GetHTTPResponseHeaderValue(Handle:hRequest, const String:sHeader[], String:sValue[], size); native bool:SteamWorks_GetHTTPResponseBodySize(Handle:hRequest, &size); native bool:SteamWorks_GetHTTPResponseBodyData(Handle:hRequest, String:sBody[], length); +native bool:SteamWorks_GetHTTPStreamingResponseBodyData(Handle:hRequest, cOffset, String:sBody[], length); native bool:SteamWorks_GetHTTPDownloadProgressPct(Handle:hRequest, &Float:percent); native bool:SteamWorks_SetHTTPRequestRawPostBody(Handle:hRequest, const String:sContentType[], const String:sBody[], bodylen); @@ -296,12 +298,14 @@ public __ext_SteamWorks_SetNTVOptional() MarkNativeAsOptional("SteamWorks_SetHTTPCallbacks"); MarkNativeAsOptional("SteamWorks_SendHTTPRequest"); + MarkNativeAsOptional("SteamWorks_SendHTTPRequestAndStreamResponse"); MarkNativeAsOptional("SteamWorks_DeferHTTPRequest"); MarkNativeAsOptional("SteamWorks_PrioritizeHTTPRequest"); MarkNativeAsOptional("SteamWorks_GetHTTPResponseHeaderSize"); MarkNativeAsOptional("SteamWorks_GetHTTPResponseHeaderValue"); MarkNativeAsOptional("SteamWorks_GetHTTPResponseBodySize"); MarkNativeAsOptional("SteamWorks_GetHTTPResponseBodyData"); + MarkNativeAsOptional("SteamWorks_GetHTTPStreamingResponseBodyData"); MarkNativeAsOptional("SteamWorks_GetHTTPDownloadProgressPct"); MarkNativeAsOptional("SteamWorks_SetHTTPRequestRawPostBody");