added readme

This commit is contained in:
Jorijn van der Graaf 2025-11-03 17:52:45 +01:00
commit 5bfee7f955
3 changed files with 147 additions and 22 deletions

View file

@ -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) {

View file

@ -95,21 +95,12 @@ void ClientTCP::Stop() {
}
void ClientTCP::Send(const void* buffer, std::uint32_t size) const {
const char* data = reinterpret_cast<const char*>(buffer);
std::uint_fast32_t totalSent = 0;
const std::uint_fast32_t chunkSize = 1024;
int status = send(socketid, reinterpret_cast<const char*>(buffer), size, 0);
while (totalSent < size) {
std::uint_fast32_t bytesToSend = std::min(chunkSize, size - totalSent);
int status = send(socketid, data + totalSent, bytesToSend, 0);
if (status == 0) {
throw SocketClosedException();
} else if (status < 0) {
throw std::runtime_error(std::strerror(errno));
}
totalSent += status;
if (status == 0) {
throw SocketClosedException();
} else if (status < 0) {
throw std::runtime_error(std::strerror(errno));
}
}
std::vector<char> ClientTCP::RecieveSync(std::uint32_t bufferSize) const {