Created
October 26, 2012 10:39
-
-
Save freecnjet/3958108 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//------------------------------------------------------------------------------- | |
//! | |
//! \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