frnetlib/include/frnetlib/HttpSocket.h
2017-04-07 09:22:31 +01:00

61 lines
1.3 KiB
C++

//
// Created by fred on 10/12/16.
//
#ifndef FRNETLIB_HTTPSOCKET_H
#define FRNETLIB_HTTPSOCKET_H
#include "Http.h"
namespace fr
{
template<class SocketType>
class HttpSocket : public SocketType
{
public:
HttpSocket()
: recv_buffer(HTTP_RECV_BUFFER_SIZE, '\0')
{
}
template<typename T>
HttpSocket(T &&var)
: recv_buffer(HTTP_RECV_BUFFER_SIZE, '\0'),
SocketType(var)
{
}
Socket::Status receive(Http &request)
{
size_t received = 0;
do
{
//Receive the request
Socket::Status status = SocketType::receive_raw(&recv_buffer[0], recv_buffer.size(), received);
if(status != Socket::Success)
return status;
recv_buffer.resize(received);
//Parse it
} while(request.parse(recv_buffer.substr(0, received)));
return Socket::Success;
}
Socket::Status send(const Http &request)
{
std::string data = request.construct(SocketType::get_remote_address());
return SocketType::send_raw(&data[0], data.size());
}
private:
//Create buffer to receive_request the request
std::string recv_buffer;
};
}
#endif //FRNETLIB_HTTPSOCKET_H