diff options
Diffstat (limited to 'protocols/Steam/src/http_request.h')
-rw-r--r-- | protocols/Steam/src/http_request.h | 329 |
1 files changed, 167 insertions, 162 deletions
diff --git a/protocols/Steam/src/http_request.h b/protocols/Steam/src/http_request.h index b4ec512e1a..357e6f5a45 100644 --- a/protocols/Steam/src/http_request.h +++ b/protocols/Steam/src/http_request.h @@ -1,163 +1,168 @@ -#ifndef _HTTP_REQUEST_H_
-#define _HTTP_REQUEST_H_
-
-class HttpResponse : public NETLIBHTTPREQUEST, public MZeroedObject
-{
-private:
- bool isEmptyResponse;
-
-public:
- const NETLIBHTTPREQUEST* request;
-
- HttpResponse(const NETLIBHTTPREQUEST* response, const NETLIBHTTPREQUEST* request = NULL)
- {
- this->request = request;
- isEmptyResponse = (response == NULL);
- if (response)
- {
- cbSize = response->cbSize;
- requestType = response->requestType;
- flags = response->flags;
- szUrl = mir_strdup(response->szUrl);
- headers = (NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER) * response->headersCount);
- headersCount = response->headersCount;
- for (int i = 0; i < headersCount; i++)
- {
- headers[i].szName = mir_strdup(response->headers[i].szName);
- headers[i].szValue = mir_strdup(response->headers[i].szValue);
- }
- pData = (char*)mir_alloc(response->dataLength);
- dataLength = response->dataLength;
- memcpy(pData, response->pData, dataLength);
- resultCode = response->resultCode;
- szResultDescr = mir_strdup(response->szResultDescr);
- nlc = response->nlc;
- timeout = response->timeout;
- }
- }
-
- bool const operator !() const
- {
- return isEmptyResponse;
- }
-
- ~HttpResponse()
- {
- for (int i = 0; i < headersCount; i++)
- {
- mir_free(headers[i].szName);
- mir_free(headers[i].szValue);
- }
- mir_free(szUrl);
- mir_free(headers);
- mir_free(pData);
- mir_free(szResultDescr);
- }
-};
-
-class HttpRequest : public NETLIBHTTPREQUEST, public MZeroedObject
-{
-private:
- CMStringA m_url;
-
-protected:
- enum HttpRequestUrlFormat { FORMAT };
-
- void Init(int type)
- {
- cbSize = sizeof(NETLIBHTTPREQUEST);
- requestType = type;
- flags = NLHRF_HTTP11 | NLHRF_SSL | NLHRF_NODUMPSEND | NLHRF_DUMPASTEXT;
- AddHeader("user-agent", "Steam 1.2.0 / iPhone");
- }
-
- void AddHeader(LPCSTR szName, LPCSTR szValue)
- {
- headers = (NETLIBHTTPHEADER*)mir_realloc(headers, sizeof(NETLIBHTTPHEADER)*(headersCount + 1));
- headers[headersCount].szName = mir_strdup(szName);
- headers[headersCount].szValue = mir_strdup(szValue);
- headersCount++;
- }
-
- void AddParameter(const char *fmt, ...)
- {
- va_list args;
- va_start(args, fmt);
- m_url += m_url.Find('?') == -1 ? '?' : '&';
- m_url.AppendFormatV(fmt, args);
- va_end(args);
- }
-
- void AddParameter(LPCSTR name, LPCSTR value)
- {
- AddParameter("%s=%s", name, value);
- }
-
- void SetData(const char *data, size_t size)
- {
- if (pData != NULL)
- mir_free(pData);
-
- dataLength = (int)size;
- pData = (char*)mir_alloc(size + 1);
- memcpy(pData, data, size);
- pData[size] = 0;
- }
-
-public:
- HttpRequest(int type, LPCSTR url)
- {
- Init(type);
-
- m_url = url;
- }
-
- HttpRequest(int type, HttpRequestUrlFormat, LPCSTR urlFormat, ...)
- {
- Init(type);
-
- va_list formatArgs;
- va_start(formatArgs, urlFormat);
- m_url.AppendFormatV(urlFormat, formatArgs);
- va_end(formatArgs);
- }
-
- ~HttpRequest()
- {
- for (int i = 0; i < headersCount; i++)
- {
- mir_free(headers[i].szName);
- mir_free(headers[i].szValue);
- }
- mir_free(headers);
-
- if (pData != NULL)
- mir_free(pData);
- }
-
- HttpResponse* Send(HANDLE hConnection)
- {
- szUrl = m_url.GetBuffer();
-
- char message[1024];
- mir_snprintf(message, "Send request to %s", szUrl);
- CallService(MS_NETLIB_LOG, (WPARAM)hConnection, (LPARAM)&message);
-
- NETLIBHTTPREQUEST* response = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hConnection, (LPARAM)this);
- HttpResponse* result = new HttpResponse(response, this);
- CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response);
-
- return result;
- }
-};
-
-
-bool __forceinline ResponseHttpOk(const HttpResponse *response) {
- return (response && response->pData && (response->resultCode == HTTP_CODE_OK));
-}
-
-bool __forceinline CheckResponse(const HttpResponse *response) {
- return (response && response->pData);
-}
-
+#ifndef _HTTP_REQUEST_H_ +#define _HTTP_REQUEST_H_ + +class HttpResponse : public NETLIBHTTPREQUEST, public MZeroedObject +{ +private: + bool isEmptyResponse; + +public: + const NETLIBHTTPREQUEST* request; + + HttpResponse(const NETLIBHTTPREQUEST* response, const NETLIBHTTPREQUEST* request = NULL) + { + this->request = request; + isEmptyResponse = (response == NULL); + if (response) + { + cbSize = response->cbSize; + requestType = response->requestType; + flags = response->flags; + szUrl = mir_strdup(response->szUrl); + headers = (NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER) * response->headersCount); + headersCount = response->headersCount; + for (int i = 0; i < headersCount; i++) + { + headers[i].szName = mir_strdup(response->headers[i].szName); + headers[i].szValue = mir_strdup(response->headers[i].szValue); + } + pData = (char*)mir_alloc(response->dataLength); + dataLength = response->dataLength; + memcpy(pData, response->pData, dataLength); + resultCode = response->resultCode; + szResultDescr = mir_strdup(response->szResultDescr); + nlc = response->nlc; + timeout = response->timeout; + } + else if (request != NULL) + { + // when response is null, we must get resultCode from the request object + resultCode = request->resultCode; + } + } + + bool const operator !() const + { + return isEmptyResponse; + } + + ~HttpResponse() + { + for (int i = 0; i < headersCount; i++) + { + mir_free(headers[i].szName); + mir_free(headers[i].szValue); + } + mir_free(szUrl); + mir_free(headers); + mir_free(pData); + mir_free(szResultDescr); + } +}; + +class HttpRequest : public NETLIBHTTPREQUEST, public MZeroedObject +{ +private: + CMStringA m_url; + +protected: + enum HttpRequestUrlFormat { FORMAT }; + + void Init(int type) + { + cbSize = sizeof(NETLIBHTTPREQUEST); + requestType = type; + flags = NLHRF_HTTP11 | NLHRF_SSL | NLHRF_NODUMPSEND | NLHRF_DUMPASTEXT; + AddHeader("user-agent", "Steam 1.2.0 / iPhone"); + } + + void AddHeader(LPCSTR szName, LPCSTR szValue) + { + headers = (NETLIBHTTPHEADER*)mir_realloc(headers, sizeof(NETLIBHTTPHEADER)*(headersCount + 1)); + headers[headersCount].szName = mir_strdup(szName); + headers[headersCount].szValue = mir_strdup(szValue); + headersCount++; + } + + void AddParameter(const char *fmt, ...) + { + va_list args; + va_start(args, fmt); + m_url += m_url.Find('?') == -1 ? '?' : '&'; + m_url.AppendFormatV(fmt, args); + va_end(args); + } + + void AddParameter(LPCSTR name, LPCSTR value) + { + AddParameter("%s=%s", name, value); + } + + void SetData(const char *data, size_t size) + { + if (pData != NULL) + mir_free(pData); + + dataLength = (int)size; + pData = (char*)mir_alloc(size + 1); + memcpy(pData, data, size); + pData[size] = 0; + } + +public: + HttpRequest(int type, LPCSTR url) + { + Init(type); + + m_url = url; + } + + HttpRequest(int type, HttpRequestUrlFormat, LPCSTR urlFormat, ...) + { + Init(type); + + va_list formatArgs; + va_start(formatArgs, urlFormat); + m_url.AppendFormatV(urlFormat, formatArgs); + va_end(formatArgs); + } + + ~HttpRequest() + { + for (int i = 0; i < headersCount; i++) + { + mir_free(headers[i].szName); + mir_free(headers[i].szValue); + } + mir_free(headers); + + if (pData != NULL) + mir_free(pData); + } + + HttpResponse* Send(HANDLE hConnection) + { + szUrl = m_url.GetBuffer(); + + char message[1024]; + mir_snprintf(message, "Send request to %s", szUrl); + CallService(MS_NETLIB_LOG, (WPARAM)hConnection, (LPARAM)&message); + + NETLIBHTTPREQUEST* response = (NETLIBHTTPREQUEST*)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hConnection, (LPARAM)this); + HttpResponse* result = new HttpResponse(response, this); + CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)response); + + return result; + } +}; + + +bool __forceinline ResponseHttpOk(const HttpResponse *response) { + return (response && response->pData && (response->resultCode == HTTP_CODE_OK)); +} + +bool __forceinline CheckResponse(const HttpResponse *response) { + return (response && response->pData); +} + #endif //_HTTP_REQUEST_H_
\ No newline at end of file |