frnetlib/include/HttpSocket.h
2016-12-16 14:55:41 +00:00

65 lines
1.6 KiB
C++

//
// Created by fred on 10/12/16.
//
#ifndef FRNETLIB_HTTPSOCKET_H
#define FRNETLIB_HTTPSOCKET_H
#include "TcpSocket.h"
#include "Http.h"
#include "SSLContext.h"
namespace fr
{
template<class SocketType>
class HttpSocket : public SocketType
{
public:
HttpSocket() noexcept =default;
//Forward constructor arguments to SocketType if needed
template<typename T>
HttpSocket(T &&var)
: SocketType(var){}
/*!
* Receives a HTTP request from the connected socket
*
* @param request Where to store the received request.
* @return The status of the operation.
*/
Socket::Status receive(Http &request)
{
//Create buffer to receive_request the request
std::string buffer(RECV_CHUNK_SIZE, '\0');
//Receive the request
size_t received;
Socket::Status status = SocketType::receive_raw(&buffer[0], buffer.size(), received);
if(status != Socket::Success)
return status;
buffer.resize(received);
//Parse it
request.parse(buffer);
return Socket::Success;
}
/*!
* Sends a HTTP request to the connected socket.
*
* @param request The HTTP request to send.
* @return The status of the operation.
*/
Socket::Status send(const Http &request)
{
std::string data = request.construct(SocketType::get_remote_address());
return SocketType::send_raw(&data[0], data.size());
}
};
}
#endif //FRNETLIB_HTTPSOCKET_H