added readme
This commit is contained in:
parent
c49f947a9b
commit
5bfee7f955
3 changed files with 147 additions and 22 deletions
|
|
@ -46,7 +46,9 @@ ClientHTTP::ClientHTTP(std::string host, std::uint16_t port): ClientHTTP(host.c_
|
|||
}
|
||||
|
||||
HTTPResponse ClientHTTP::Send(const char* request, std::uint32_t length) {
|
||||
std::cout << "Send started" << std::endl;
|
||||
client.Send(request, length);
|
||||
std::cout << "Send Complete" << std::endl;
|
||||
std::vector<char> buffer;
|
||||
HTTPResponse response;
|
||||
std::uint32_t i = 0;
|
||||
|
|
@ -54,11 +56,14 @@ HTTPResponse ClientHTTP::Send(const char* request, std::uint32_t length) {
|
|||
while(true) {
|
||||
try {
|
||||
buffer = client.RecieveSync();
|
||||
std::cout << "Recieved: " << buffer.size() << std::endl;
|
||||
} catch(const SocketClosedException& e) {
|
||||
std::cout << "Retry" << std::endl;
|
||||
client.Stop();
|
||||
client.Connect();
|
||||
client.Send(request, length);
|
||||
buffer = client.RecieveSync();
|
||||
std::cout << "Recieved: " << buffer.size() << std::endl;
|
||||
}
|
||||
|
||||
for(; i < buffer.size(); i++) {
|
||||
|
|
@ -104,27 +109,29 @@ HTTPResponse ClientHTTP::Send(const char* request, std::uint32_t length) {
|
|||
i = 0;
|
||||
}
|
||||
headersComplete:;
|
||||
std::cout << "Header complete" << std::endl;
|
||||
i+=4;
|
||||
std::unordered_map<std::string, std::string>::iterator it = response.headers.find("content-length");
|
||||
if(it != response.headers.end())
|
||||
{
|
||||
const int lenght = std::stoi(it->second);
|
||||
std::cout << "Content lenght: " << lenght << std::endl;
|
||||
response.body.resize(lenght, 0);
|
||||
if(i < buffer.size()){
|
||||
std::memcpy(&response.body[0], buffer.data()+i, buffer.size()-i);
|
||||
}
|
||||
const int remaining = lenght-(buffer.size()-i);
|
||||
std::cout << "Remain: " << remaining << std::endl;
|
||||
if(remaining > 0){
|
||||
int index = buffer.size()-i;
|
||||
while(index < lenght) {
|
||||
std::vector<char> bodyBuffer = client.RecieveSync(remaining);
|
||||
std::memcpy(&response.body[index], bodyBuffer.data(), bodyBuffer.size());
|
||||
index+=bodyBuffer.size();
|
||||
}
|
||||
std::vector<char> bodyBuffer = client.RecieveUntilFullSync(remaining);
|
||||
std::memcpy(&response.body[ buffer.size()-i], bodyBuffer.data(), bodyBuffer.size());
|
||||
std::cout << "Recieved: " << bodyBuffer.size() << std::endl;
|
||||
}
|
||||
} else {
|
||||
std::cout << "No Content Lenght" << std::endl;
|
||||
std::unordered_map<std::string, std::string>::iterator it = response.headers.find("transfer-encoding");
|
||||
if(it != response.headers.end() && it->second == "chunked") {
|
||||
std::cout << "Chunked" << std::endl;
|
||||
while(i < buffer.size()){
|
||||
std::string lenght;
|
||||
int lenghtStart = i;
|
||||
|
|
@ -183,14 +190,17 @@ HTTPResponse ClientHTTP::Send(const char* request, std::uint32_t length) {
|
|||
}
|
||||
bodyFinished:;
|
||||
} else {
|
||||
std::cout << "Recv until close" << std::endl;
|
||||
std::vector<char> bodyBuffer = client.RecieveUntilCloseSync();
|
||||
response.body.resize((buffer.size()-i)+(bodyBuffer.size()), 0);
|
||||
if(i < buffer.size()){
|
||||
std::memcpy(&response.body[0], buffer.data()+i, buffer.size()-i);
|
||||
}
|
||||
std::memcpy(&response.body[buffer.size()-i], bodyBuffer.data(), bodyBuffer.size());
|
||||
std::cout << "Closed" << std::endl;
|
||||
}
|
||||
}
|
||||
std::cout << "Response recieved" << std::endl;
|
||||
return response;
|
||||
}
|
||||
HTTPResponse ClientHTTP::Send(std::string request) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue