PTLib
Version 2.14.3
|
A TCP/IP socket for the HyperText Transfer Protocol version 1.0. More...
#include <http.h>
Public Types | |
typedef PNotifierTemplate < PHTTPConnectionInfo > | WebSocketNotifier |
![]() | |
enum | Commands { GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, NumCommands } |
enum | StatusCode { BadResponse = 1, ContentProcessorError, UnknownTransferEncoding, Continue = 100, SwitchingProtocols, RequestOK = 200, Created, Accepted, NonAuthoritativeInformation, NoContent, ResetContent, PartialContent, MultipleChoices = 300, MovedPermanently, MovedTemporarily, SeeOther, NotModified, UseProxy, BadRequest = 400, UnAuthorised, PaymentRequired, Forbidden, NotFound, MethodNotAllowed, NoneAcceptable, ProxyAuthenticationRequired, RequestTimeout, Conflict, Gone, LengthRequired, UnlessTrue, InternalServerError = 500, NotImplemented, BadGateway, ServiceUnavailable, GatewayTimeout } |
Public Member Functions | |
PHTTPServer () | |
Create a TCP/IP HTTP protocol socket channel. More... | |
PHTTPServer (const PHTTPSpace &urlSpace) | |
virtual PString | GetServerName () const |
Get the name of the server. More... | |
PHTTPSpace & | GetURLSpace () |
Get the name space being used by the HTTP server socket. More... | |
void | SetURLSpace (const PHTTPSpace &space) |
Use a new URL name space for this HTTP socket. More... | |
virtual PBoolean | ProcessCommand () |
Process commands, dispatching to the appropriate virtual function. More... | |
virtual PBoolean | OnGET (const PURL &url, const PMIMEInfo &info, const PHTTPConnectionInfo &conInfo) |
Handle a GET command from a client. More... | |
virtual PBoolean | OnHEAD (const PURL &url, const PMIMEInfo &info, const PHTTPConnectionInfo &conInfo) |
Handle a HEAD command from a client. More... | |
virtual PBoolean | OnPOST (const PURL &url, const PMIMEInfo &info, const PStringToString &data, const PHTTPConnectionInfo &conInfo) |
Handle a POST command from a client. More... | |
virtual PBoolean | OnProxy (const PHTTPConnectionInfo &conInfo) |
Handle a proxy command request from a client. More... | |
virtual PString | ReadEntityBody () |
Read the entity body associated with a HTTP request, and close the socket if not a persistent connection. More... | |
virtual PBoolean | OnUnknown (const PCaselessString &command, const PHTTPConnectionInfo &connectInfo) |
Handle an unknown command. More... | |
PBoolean | StartResponse (StatusCode code, PMIMEInfo &headers, long bodySize) |
Write a command reply back to the client, and construct some of the outgoing MIME fields. More... | |
virtual PBoolean | OnError (StatusCode code, const PCaselessString &extra, const PHTTPConnectionInfo &connectInfo) |
Write an error response for the specified code. More... | |
void | SetDefaultMIMEInfo (PMIMEInfo &info, const PHTTPConnectionInfo &connectInfo) |
Set the default mime info. More... | |
PHTTPConnectionInfo & | GetConnectionInfo () |
Get the connection info for this connection. More... | |
virtual bool | OnCommand (PINDEX cmd, const PURL &url, const PString &args, PHTTPConnectionInfo &connectInfo) |
Called when a request is received. More... | |
virtual bool | OnWebSocket (PHTTPConnectionInfo &connectInfo) |
Called when a request indicates a swtch to WebSocket protocol. More... | |
void | SetWebSocketNotifier (const PString &protocol, const WebSocketNotifier ¬ifier) |
Set the handler for WebSocket sub-protocol. More... | |
void | ClearWebSocketNotifier (const PString &protocol) |
Remove a WebSocket notifier. More... | |
Protected Member Functions | |
void | Construct () |
![]() | |
PHTTP () | |
Create a TCP/IP HTTP protocol channel. More... | |
PHTTP (const char *defaultServiceName) | |
virtual PINDEX | ParseResponse (const PString &line) |
Parse a response line string into a response code and any extra info on the line. More... | |
![]() | |
PInternetProtocol (const char *defaultServiceName, PINDEX cmdCount, char const *const *cmdNames) | |
![]() | |
virtual PBoolean | OnOpen () |
This callback is executed when the Open() function is called with open channels. More... | |
![]() | |
PChannel (const PChannel &) | |
PChannel & | operator= (const PChannel &) |
virtual PBoolean | ConvertOSError (P_INT_PTR libcReturnValue, ErrorGroup group=LastGeneralError) |
Convert an operating system error into platform independent error. More... | |
int | ReadCharWithTimeout (PTimeInterval &timeout) |
Read a character with specified timeout. More... | |
PBoolean | ReceiveCommandString (int nextChar, const PString &reply, PINDEX &pos, PINDEX start) |
virtual int | os_errno () const |
PBoolean | PXSetIOBlock (PXBlockType type, const PTimeInterval &timeout) |
P_INT_PTR | GetOSHandleAsInt () const |
int | PXClose () |
PChannel () | |
Create the channel. More... | |
![]() | |
PObject () | |
Constructor for PObject, made protected so cannot ever create one on its own. More... | |
Protected Attributes | |
PHTTPSpace | urlSpace |
PHTTPConnectionInfo | connectInfo |
unsigned | transactionCount |
PTimeInterval | nextTimeout |
std::map< PString, WebSocketNotifier > | m_webSocketNotifiers |
A TCP/IP socket for the HyperText Transfer Protocol version 1.0.
The server socket thread would continuously call the ProcessCommand() function until it returns false. This will then call the appropriate virtual function on parsing the HTTP protocol.
PTCPSocket socket(80);
if (!socket.Listen())
return;
PHTTPSpace httpNameSpace;
httpNameSpace.AddResource(new PHTTPDirectory("data", "data"))
PHTTServer httpServer(httpNameSpace);
if (!httpServer.Open(socket))
return;
while (httpServer.ProcessCommand())
;
PHTTPServer::PHTTPServer | ( | ) |
Create a TCP/IP HTTP protocol socket channel.
The form with the single port
parameter creates an unopened socket, the form with the address
parameter makes a connection to a remote system, opening the socket. The form with the socket
parameter opens the socket to an incoming call from a "listening" socket.
PHTTPServer::PHTTPServer | ( | const PHTTPSpace & | urlSpace | ) |
urlSpace | Name space to use for URLs received. |
void PHTTPServer::ClearWebSocketNotifier | ( | const PString & | protocol | ) |
Remove a WebSocket notifier.
|
protected |
|
inline |
Get the connection info for this connection.
References connectInfo.
|
virtual |
Get the name of the server.
|
inline |
Get the name space being used by the HTTP server socket.
References urlSpace.
|
virtual |
Called when a request is received.
By default, this intercepts the GET, HEAD and POST commands and calls OnGET, OnHEAD and OnPOST. For all other command, OnUnknown is called
|
virtual |
Write an error response for the specified code.
Depending on the code
parameter this function will also send a HTML version of the status code for display on the remote client viewer.
code | Status code for the error response. |
extra | Extra information included in the response. |
connectInfo | HTTP connection information |
|
virtual |
Handle a GET command from a client.
The default implementation looks up the URL in the name space declared by the PHTTPSpace
class tree and despatches to the PHTTPResource
object contained therein.
url | Universal Resource Locator for document. |
info | Extra MIME information in command. |
conInfo | HTTP connection information |
|
virtual |
Handle a HEAD command from a client.
The default implemetation looks up the URL in the name space declared by the PHTTPSpace
class tree and despatches to the PHTTPResource
object contained therein.
url | Universal Resource Locator for document. |
info | Extra MIME information in command. |
conInfo | HTTP connection information |
|
virtual |
Handle a POST command from a client.
The default implementation looks up the URL in the name space declared by the PHTTPSpace
class tree and despatches to the PHTTPResource
object contained therein.
url | Universal Resource Locator for document. |
info | Extra MIME information in command. |
data | Variables provided in the POST data. |
conInfo | HTTP connection information |
|
virtual |
Handle a proxy command request from a client.
This will only get called if the request was not for this particular server. If it was a proxy request for this server (host and port number) then the appropriate OnGET()
, OnHEAD()
or OnPOST()
command is called.
The default implementation returns OnError(BadGateway).
conInfo | HTTP connection information |
|
virtual |
Handle an unknown command.
command | Complete command line received. |
connectInfo | HTTP connection information |
|
virtual |
Called when a request indicates a swtch to WebSocket protocol.
This will complete the WebSocket handshake if m_webSocketNotifiers contains and entry for an offerred protocol. If none, a 404 is returned and the socket remains in HTTP mode.
After the start up handshake has completed, if there is a notifier and it is non-null, then the notifier is called. The notifier, may then call connectInfo.ClearWebSocket() if it wishes to return to HTTP mode. That is, ProcessCommand() will return true and the normal persistence rules apply. If ClearWebSocket() is not called then ProcessCommand() will return false.
Note, that the latter case does not mean that the underlying socket is necessarily closed, it could subsequently be disconnected from the PHTTPServer objects and passed to PWebSocket for processing.
|
virtual |
Process commands, dispatching to the appropriate virtual function.
This is used when the socket is acting as a server.
|
virtual |
Read the entity body associated with a HTTP request, and close the socket if not a persistent connection.
void PHTTPServer::SetDefaultMIMEInfo | ( | PMIMEInfo & | info, |
const PHTTPConnectionInfo & | connectInfo | ||
) |
Set the default mime info.
info | Extra MIME information in command. |
connectInfo | Connection information |
void PHTTPServer::SetURLSpace | ( | const PHTTPSpace & | space | ) |
Use a new URL name space for this HTTP socket.
space | New URL name space to use. |
void PHTTPServer::SetWebSocketNotifier | ( | const PString & | protocol, |
const WebSocketNotifier & | notifier | ||
) |
Set the handler for WebSocket sub-protocol.
A NULL notifier may be set which indiates that the protocol is supported, but that ProcessCommand() is to simply return false as the caller will handle the channel from then on.
PBoolean PHTTPServer::StartResponse | ( | StatusCode | code, |
PMIMEInfo & | headers, | ||
long | bodySize | ||
) |
Write a command reply back to the client, and construct some of the outgoing MIME fields.
The MIME fields are not sent.
The bodySize
parameter determines the size of the entity body associated with the response. If bodySize
is >= 0, then a ContentLength field will be added to the outgoing MIME headers if one does not already exist.
If bodySize
is < 0, then it is assumed that the size of the entity body is unknown, or has already been added, and no ContentLength field will be constructed.
If the version of the request is less than 1.0, then this function does nothing.
code | Status code for the response. |
headers | MIME variables included in response. |
bodySize | Size of the rest of the response. |
|
protected |
Referenced by GetConnectionInfo().
|
protected |
|
protected |
|
protected |
|
protected |
Referenced by GetURLSpace().