Implement WriteHTTPResponseBodyToFile via stdio.
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
|
||||
#include "swhttprequest.h"
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
static ISteamHTTP *GetHTTPPointer(void)
|
||||
{
|
||||
return g_SteamWorks.pSWGameServer->GetHTTP();
|
||||
@@ -606,6 +608,60 @@ static cell_t sm_GetHTTPResponseBodyCallback(IPluginContext *pContext, const cel
|
||||
return 1;
|
||||
}
|
||||
|
||||
static cell_t sm_WriteHTTPResponseBodyToFile(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
ISteamHTTP *pHTTP = GetHTTPPointer();
|
||||
if (pHTTP == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
HandleError err;
|
||||
HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity());
|
||||
|
||||
SteamWorksHTTPRequest *pRequest;
|
||||
if ((err = handlesys->ReadHandle(params[1], GetSteamHTTPHandle(), &sec, (void **)&pRequest))
|
||||
!= HandleError_None)
|
||||
{
|
||||
return pContext->ThrowNativeError("Invalid Handle %x (error: %d)", params[1], err);
|
||||
}
|
||||
|
||||
uint32_t size;
|
||||
if (pHTTP->GetHTTPResponseBodySize(pRequest->request, &size) == false)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *pBuffer = new char[size];
|
||||
|
||||
if (pHTTP->GetHTTPResponseBodyData(pRequest->request, reinterpret_cast<uint8_t *>(pBuffer), size) == false)
|
||||
{
|
||||
delete [] pBuffer;
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *pFilePath;
|
||||
pContext->LocalToString(params[2], &pFilePath);
|
||||
|
||||
char szFinalPath[PLATFORM_MAX_PATH];
|
||||
g_pSM->BuildPath(Path_Game, szFinalPath, sizeof(szFinalPath), "%s", pFilePath);
|
||||
|
||||
FILE *pOutputFile = fopen(szFinalPath, "wb");
|
||||
|
||||
if (!pOutputFile)
|
||||
{
|
||||
delete [] pBuffer;
|
||||
return pContext->ThrowNativeError("Unable to open %s for writing. errno: %d", szFinalPath, errno);
|
||||
}
|
||||
|
||||
fwrite(pBuffer, sizeof(char), size, pOutputFile);
|
||||
|
||||
delete [] pBuffer;
|
||||
fclose(pOutputFile);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static sp_nativeinfo_t httpnatives[] = {
|
||||
{"SteamWorks_CreateHTTPRequest", sm_CreateHTTPRequest},
|
||||
{"SteamWorks_SetHTTPRequestContextValue", sm_SetHTTPRequestContextValue},
|
||||
@@ -623,6 +679,7 @@ static sp_nativeinfo_t httpnatives[] = {
|
||||
{"SteamWorks_GetHTTPDownloadProgressPct", sm_GetHTTPDownloadProgressPct},
|
||||
{"SteamWorks_SetHTTPRequestRawPostBody", sm_SetHTTPRequestRawPostBody},
|
||||
{"SteamWorks_GetHTTPResponseBodyCallback", sm_GetHTTPResponseBodyCallback},
|
||||
{"SteamWorks_WriteHTTPResponseBodyToFile", sm_WriteHTTPResponseBodyToFile},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
||||
@@ -238,6 +238,7 @@ funcenum SteamWorksHTTPBodyCallback
|
||||
};
|
||||
|
||||
native bool:SteamWorks_GetHTTPResponseBodyCallback(Handle:hRequest, SteamWorksHTTPBodyCallback:fCallback, any:data = 0, Handle:hPlugin = INVALID_HANDLE);
|
||||
native bool:SteamWorks_WriteHTTPResponseBodyToFile(Handle:hRequest, const String:sFileName[]);
|
||||
|
||||
forward SW_OnValidateClient(ownerauthid, authid);
|
||||
forward SteamWorks_OnValidateClient(ownerauthid, authid);
|
||||
@@ -305,5 +306,6 @@ public __ext_SteamWorks_SetNTVOptional()
|
||||
MarkNativeAsOptional("SteamWorks_SetHTTPRequestRawPostBody");
|
||||
|
||||
MarkNativeAsOptional("SteamWorks_GetHTTPResponseBodyCallback");
|
||||
MarkNativeAsOptional("SteamWorks_WriteHTTPResponseBodyToFile");
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user