Re-arranged things

This commit is contained in:
Fred Nicolson 2017-04-07 09:22:31 +01:00
parent 5757eb776c
commit eaefd93096
3 changed files with 33 additions and 60 deletions

View File

@ -7,6 +7,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <unordered_map> #include <unordered_map>
#define HTTP_RECV_BUFFER_SIZE 8192
namespace fr namespace fr
{ {

View File

@ -5,9 +5,7 @@
#ifndef FRNETLIB_HTTPSOCKET_H #ifndef FRNETLIB_HTTPSOCKET_H
#define FRNETLIB_HTTPSOCKET_H #define FRNETLIB_HTTPSOCKET_H
#include "TcpSocket.h"
#include "Http.h" #include "Http.h"
#include "SSLContext.h"
namespace fr namespace fr
{ {
@ -15,28 +13,42 @@ namespace fr
class HttpSocket : public SocketType class HttpSocket : public SocketType
{ {
public: public:
//Constructor HttpSocket()
HttpSocket(); : recv_buffer(HTTP_RECV_BUFFER_SIZE, '\0')
{
}
//Forward constructor arguments to SocketType if needed
template<typename T> template<typename T>
HttpSocket(T &&var); HttpSocket(T &&var)
: recv_buffer(HTTP_RECV_BUFFER_SIZE, '\0'),
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);
/*! Socket::Status receive(Http &request)
* Sends a HTTP request to the connected socket. {
* size_t received = 0;
* @param request The HTTP request to send. do
* @return The status of the operation. {
*/ //Receive the request
Socket::Status send(const Http &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: private:
//Create buffer to receive_request the request //Create buffer to receive_request the request

View File

@ -2,49 +2,9 @@
// Created by fred on 10/12/16. // Created by fred on 10/12/16.
// //
#include <frnetlib/HttpResponse.h>
#include "frnetlib/HttpSocket.h" #include "frnetlib/HttpSocket.h"
namespace fr namespace fr
{
template<class SocketType>
HttpSocket<SocketType>::HttpSocket()
: recv_buffer(RECV_CHUNK_SIZE, '\0')
{ {
} }
template<class SocketType>
template<typename T>
HttpSocket<SocketType>::HttpSocket(T &&var)
: recv_buffer(RECV_CHUNK_SIZE, '\0'),
SocketType(var)
{
}
template<class SocketType>
Socket::Status HttpSocket<SocketType>::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;
}
template<class SocketType>
Socket::Status HttpSocket<SocketType>::send(const Http &request)
{
std::string data = request.construct(SocketType::get_remote_address());
return SocketType::send_raw(&data[0], data.size());
}
}