Skip to content

Instantly share code, notes, and snippets.

@freecnjet
Created October 26, 2012 10:39
Show Gist options
  • Save freecnjet/3958108 to your computer and use it in GitHub Desktop.
Save freecnjet/3958108 to your computer and use it in GitHub Desktop.
//-------------------------------------------------------------------------------
//!
//! \created 10/Oct/12
//! \brief A class to implement simple HTTP server,
//! response to simple HTTP request.
//-------------------------------------------------------------------------------
#ifndef __HTTPSERVER_HPP__
#define __HTTPSERVER_HPP__
#define MAX_HTTP_URL_PATH_SIZE 260
namespace WebServer
{
enum {
EWebServerStatus_OK = 1,
EWebServerStatus_BadRequest,
EWebServerStatus_Forbidden,
EWebServerStatus_InternalServerError,
};
//-------------------------------------------------------------------------------
//! \class SocketStream
//!
//! \brief Declare a interface to read or write stream.
//-------------------------------------------------------------------------------
struct SocketStream
{
virtual size_t Read( char* buf, size_t len ) = 0;
virtual size_t Write( char* buf, size_t len ) = 0;
};
//-------------------------------------------------------------------------------
//! \class HTTPConnectResponser
//!
//! \brief Declare a interface to response HTTP connection.
//-------------------------------------------------------------------------------
struct HTTPConnectContext
{
};
struct HTTPConnectResponser
{
virtual int ClientConnected( HTTPConnectContext* context ) = 0;
virtual int ClientToDisconnect( HTTPConnectContext* context ) = 0;
virtual int ClientDisconnected( HTTPConnectContext* context ) = 0;
};
//-------------------------------------------------------------------------------
//! \class HTTPGetResponser
//!
//! \brief Declare a interface to response HTTP GET operation.
//-------------------------------------------------------------------------------
struct HTTPGETContext
{
char m_Path[MAX_HTTP_URL_PATH_SIZE];
};
struct HTTPGETResponser
{
virtual int Get( HTTPGETContext* context ) = 0;
virtual size_t GetContentLength();
virtual size_t SendContent( SocketStream* stream );
};
//-------------------------------------------------------------------------------
//! \class HTTPServer
//!
//! \brief Declare a class to listen local socket port and server
//! as a simple HTTP server. Only support GET operation.
//-------------------------------------------------------------------------------
class HTTPServer
{
public:
virtual ~HTTPServer() {}
int Start(unsigned short port);
int Stop();
bool IsListening();
void SetHTTPConnectResponser(HTTPConnectResponser* responser);
void SetHTTPGETResponser(HTTPGETResponser* responser);
static HTTPServer* Create();
static void Destroy( HTTPServer* );
};
}
#endif //__HTTPSERVER_HPP__
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment