From 7ffb8689f92eef57e611988f6367a277a88a9906 Mon Sep 17 00:00:00 2001 From: Kyle Sanderson Date: Sat, 17 Jan 2015 11:49:22 -0800 Subject: [PATCH] Consolidate Handle -> SteamWorksHTTPRequest Logic. --- Extension/swhttprequest.cpp | 264 ++++++++++-------------------------- 1 file changed, 72 insertions(+), 192 deletions(-) diff --git a/Extension/swhttprequest.cpp b/Extension/swhttprequest.cpp index 5d3aa12..7d20e81 100644 --- a/Extension/swhttprequest.cpp +++ b/Extension/swhttprequest.cpp @@ -31,6 +31,28 @@ static HandleType_t GetSteamHTTPHandle(void) return g_SteamWorks.pSWHTTP->GetHTTPHandle(); } +static SteamWorksHTTPRequest *GetRequestPointer(ISteamHTTP *&pHTTP, IPluginContext *pContext, cell_t Handle) +{ + pHTTP = GetHTTPPointer(); + if (pHTTP == NULL) + { + return NULL; + } + + HandleError err; + HandleSecurity sec(pContext->GetIdentity(), myself->GetIdentity()); + + SteamWorksHTTPRequest *pRequest; + if ((err = handlesys->ReadHandle(Handle, GetSteamHTTPHandle(), &sec, (void **)&pRequest)) + != HandleError_None) + { + pContext->ThrowNativeError("Invalid Handle %x (error: %d)", Handle, err); + return NULL; + } + + return pRequest; +} + SteamWorksHTTPRequest::SteamWorksHTTPRequest() { this->request = INVALID_HTTPREQUEST_HANDLE; @@ -140,64 +162,37 @@ static cell_t sm_CreateHTTPRequest(IPluginContext *pContext, const cell_t *param static cell_t sm_SetHTTPRequestContextValue(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - return pHTTP->SetHTTPRequestContextValue(pRequest->request, (static_cast(params[2]) << 32 | static_cast(params[3]))) ? 1 : 0; } static cell_t sm_SetHTTPRequestNetworkActivityTimeout(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - return pHTTP->SetHTTPRequestNetworkActivityTimeout(pRequest->request, params[2]) ? 1 : 0; } static cell_t sm_SetHTTPRequestHeaderValue(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - char *pName, *pValue; pContext->LocalToString(params[2], &pName); pContext->LocalToString(params[3], &pValue); @@ -206,22 +201,13 @@ static cell_t sm_SetHTTPRequestHeaderValue(IPluginContext *pContext, const cell_ static cell_t sm_SetHTTPRequestGetOrPostParameter(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - char *pName, *pValue; pContext->LocalToString(params[2], &pName); pContext->LocalToString(params[3], &pValue); @@ -230,27 +216,19 @@ static cell_t sm_SetHTTPRequestGetOrPostParameter(IPluginContext *pContext, cons static cell_t sm_SetCallbacks(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - IPlugin *pPlugin; if (params[5] == BAD_HANDLE) { pPlugin = plsys->FindPluginByContext(pContext->GetContext()); } else { + HandleError err; pPlugin = plsys->PluginFromHandle(params[5], &err); if (!pPlugin) @@ -315,22 +293,13 @@ static cell_t sm_SetCallbacks(IPluginContext *pContext, const cell_t *params) static cell_t sm_SendHTTPRequest(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - SteamAPICall_t hCall; cell_t result = pHTTP->SendHTTPRequest(pRequest->request, &hCall) ? 1 : 0; @@ -357,64 +326,37 @@ static cell_t sm_SendHTTPRequest(IPluginContext *pContext, const cell_t *params) static cell_t sm_DeferHTTPRequest(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - return pHTTP->DeferHTTPRequest(pRequest->request) ? 1 : 0; } static cell_t sm_PrioritizeHTTPRequest(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - return pHTTP->PrioritizeHTTPRequest(pRequest->request) ? 1 : 0; } static cell_t sm_GetHTTPResponseHeaderSize(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - char *pName; pContext->LocalToString(params[2], &pName); @@ -425,22 +367,13 @@ static cell_t sm_GetHTTPResponseHeaderSize(IPluginContext *pContext, const cell_ static cell_t sm_GetHTTPResponseHeaderValue(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - char *pName; pContext->LocalToString(params[2], &pName); @@ -451,22 +384,13 @@ static cell_t sm_GetHTTPResponseHeaderValue(IPluginContext *pContext, const cell static cell_t sm_GetHTTPResponseBodySize(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - cell_t *pSize; pContext->LocalToPhysAddr(params[2], &pSize); return pHTTP->GetHTTPResponseBodySize(pRequest->request, reinterpret_cast(pSize)) ? 1 : 0; @@ -474,22 +398,13 @@ static cell_t sm_GetHTTPResponseBodySize(IPluginContext *pContext, const cell_t static cell_t sm_GetHTTPResponseBodyData(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - char *pBuffer; pContext->LocalToString(params[2], &pBuffer); return pHTTP->GetHTTPResponseBodyData(pRequest->request, reinterpret_cast(pBuffer), params[3]) ? 1 : 0; @@ -497,22 +412,13 @@ static cell_t sm_GetHTTPResponseBodyData(IPluginContext *pContext, const cell_t static cell_t sm_GetHTTPDownloadProgressPct(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - float percent; cell_t result = pHTTP->GetHTTPDownloadProgressPct(pRequest->request, &percent) ? 1 : 0; @@ -524,22 +430,13 @@ static cell_t sm_GetHTTPDownloadProgressPct(IPluginContext *pContext, const cell static cell_t sm_SetHTTPRequestRawPostBody(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - char *pName, *pBuffer; pContext->LocalToString(params[2], &pName); pContext->LocalToString(params[3], &pBuffer); @@ -549,27 +446,19 @@ static cell_t sm_SetHTTPRequestRawPostBody(IPluginContext *pContext, const cell_ static cell_t sm_GetHTTPResponseBodyCallback(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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); - } - IPlugin *pPlugin; if (params[4] == BAD_HANDLE) { pPlugin = plsys->FindPluginByContext(pContext->GetContext()); } else { + HandleError err; pPlugin = plsys->PluginFromHandle(params[4], &err); if (!pPlugin) @@ -610,22 +499,13 @@ static cell_t sm_GetHTTPResponseBodyCallback(IPluginContext *pContext, const cel static cell_t sm_WriteHTTPResponseBodyToFile(IPluginContext *pContext, const cell_t *params) { - ISteamHTTP *pHTTP = GetHTTPPointer(); - if (pHTTP == NULL) + ISteamHTTP *pHTTP; + SteamWorksHTTPRequest *pRequest = GetRequestPointer(pHTTP, pContext, params[1]); + if (pRequest == 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) {