From f44db4f01ce90e196be6de06d2b1a2e5a71f6128 Mon Sep 17 00:00:00 2001 From: Thomas Edvalson Date: Mon, 30 May 2016 21:35:17 -0400 Subject: [PATCH] Allow for custom http buffer size --- include/cpp3ds/Network/Http.hpp | 2 +- src/cpp3ds/Network/Http.cpp | 7 ++++--- src/emu3ds/Network/Http.cpp | 8 +++++--- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/include/cpp3ds/Network/Http.hpp b/include/cpp3ds/Network/Http.hpp index b703683..fb6ce0a 100644 --- a/include/cpp3ds/Network/Http.hpp +++ b/include/cpp3ds/Network/Http.hpp @@ -415,7 +415,7 @@ public: /// \return Server's response /// //////////////////////////////////////////////////////////// - Response sendRequest(const Request& request, Time timeout = Time::Zero, RequestCallback callback = nullptr); + Response sendRequest(const Request& request, Time timeout = Time::Zero, RequestCallback callback = nullptr, size_t bufferSize = 4096); private: diff --git a/src/cpp3ds/Network/Http.cpp b/src/cpp3ds/Network/Http.cpp index 758dd2a..b0b1858 100644 --- a/src/cpp3ds/Network/Http.cpp +++ b/src/cpp3ds/Network/Http.cpp @@ -249,7 +249,7 @@ void Http::setHost(const std::string& host, unsigned short port) //////////////////////////////////////////////////////////// -Http::Response Http::sendRequest(const Http::Request& request, Time timeout, RequestCallback callback) +Http::Response Http::sendRequest(const Http::Request& request, Time timeout, RequestCallback callback, size_t bufferSize) { if (m_context.httphandle) { @@ -314,7 +314,7 @@ Http::Response Http::sendRequest(const Http::Request& request, Time timeout, Req u32 size = 0; u32 lastProcessed = 0; u32 processed = 0; - u8 buffer[4*1024]; + u8 *buffer = new u8[bufferSize]; char *charBuf = reinterpret_cast(buffer); @@ -323,7 +323,7 @@ Http::Response Http::sendRequest(const Http::Request& request, Time timeout, Req while (dlret == HTTPC_RESULTCODE_DOWNLOADPENDING) { - dlret = httpcReceiveData(&m_context, buffer, sizeof(buffer)); + dlret = httpcReceiveData(&m_context, buffer, bufferSize); if (R_FAILED(ret = httpcGetDownloadSizeState(&m_context, &processed, NULL))) break; @@ -343,6 +343,7 @@ Http::Response Http::sendRequest(const Http::Request& request, Time timeout, Req } } + delete[] buffer; received.m_body = receivedStr; return received; } diff --git a/src/emu3ds/Network/Http.cpp b/src/emu3ds/Network/Http.cpp index 32dbed3..dc65953 100644 --- a/src/emu3ds/Network/Http.cpp +++ b/src/emu3ds/Network/Http.cpp @@ -354,7 +354,7 @@ void Http::setHost(const std::string& host, unsigned short port) //////////////////////////////////////////////////////////// -Http::Response Http::sendRequest(const Http::Request& request, Time timeout, RequestCallback callback) +Http::Response Http::sendRequest(const Http::Request& request, Time timeout, RequestCallback callback, size_t bufferSize) { // First make sure that the request is valid -- add missing mandatory fields Request toSend(request); @@ -403,8 +403,8 @@ Http::Response Http::sendRequest(const Http::Request& request, Time timeout, Req std::string receivedStr; std::size_t size = 0; std::size_t processed = 0; - char buffer[4*1024]; - while (m_connection.receive(buffer, sizeof(buffer), size) == Socket::Done) + char *buffer = new char[bufferSize]; + while (m_connection.receive(buffer, bufferSize, size) == Socket::Done) { if (callback) { @@ -433,6 +433,8 @@ Http::Response Http::sendRequest(const Http::Request& request, Time timeout, Req receivedStr.append(buffer, buffer + size); } + delete[] buffer; + // Build the Response object from the received data if (!callback) received.parse(receivedStr);