Merge pull request #11 from VoiDeD/big-booty-buffers-stdio
Implement WriteHTTPResponseBodyToFile via stdio.
This commit is contained in:
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
#include "swhttprequest.h"
|
#include "swhttprequest.h"
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
static ISteamHTTP *GetHTTPPointer(void)
|
static ISteamHTTP *GetHTTPPointer(void)
|
||||||
{
|
{
|
||||||
return g_SteamWorks.pSWGameServer->GetHTTP();
|
return g_SteamWorks.pSWGameServer->GetHTTP();
|
||||||
@@ -606,6 +608,60 @@ static cell_t sm_GetHTTPResponseBodyCallback(IPluginContext *pContext, const cel
|
|||||||
return 1;
|
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[] = {
|
static sp_nativeinfo_t httpnatives[] = {
|
||||||
{"SteamWorks_CreateHTTPRequest", sm_CreateHTTPRequest},
|
{"SteamWorks_CreateHTTPRequest", sm_CreateHTTPRequest},
|
||||||
{"SteamWorks_SetHTTPRequestContextValue", sm_SetHTTPRequestContextValue},
|
{"SteamWorks_SetHTTPRequestContextValue", sm_SetHTTPRequestContextValue},
|
||||||
@@ -623,6 +679,7 @@ static sp_nativeinfo_t httpnatives[] = {
|
|||||||
{"SteamWorks_GetHTTPDownloadProgressPct", sm_GetHTTPDownloadProgressPct},
|
{"SteamWorks_GetHTTPDownloadProgressPct", sm_GetHTTPDownloadProgressPct},
|
||||||
{"SteamWorks_SetHTTPRequestRawPostBody", sm_SetHTTPRequestRawPostBody},
|
{"SteamWorks_SetHTTPRequestRawPostBody", sm_SetHTTPRequestRawPostBody},
|
||||||
{"SteamWorks_GetHTTPResponseBodyCallback", sm_GetHTTPResponseBodyCallback},
|
{"SteamWorks_GetHTTPResponseBodyCallback", sm_GetHTTPResponseBodyCallback},
|
||||||
|
{"SteamWorks_WriteHTTPResponseBodyToFile", sm_WriteHTTPResponseBodyToFile},
|
||||||
{NULL, NULL}
|
{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_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 SW_OnValidateClient(ownerauthid, authid);
|
||||||
forward SteamWorks_OnValidateClient(ownerauthid, authid);
|
forward SteamWorks_OnValidateClient(ownerauthid, authid);
|
||||||
@@ -305,5 +306,6 @@ public __ext_SteamWorks_SetNTVOptional()
|
|||||||
MarkNativeAsOptional("SteamWorks_SetHTTPRequestRawPostBody");
|
MarkNativeAsOptional("SteamWorks_SetHTTPRequestRawPostBody");
|
||||||
|
|
||||||
MarkNativeAsOptional("SteamWorks_GetHTTPResponseBodyCallback");
|
MarkNativeAsOptional("SteamWorks_GetHTTPResponseBodyCallback");
|
||||||
|
MarkNativeAsOptional("SteamWorks_WriteHTTPResponseBodyToFile");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user