I love the smell of UnrealEd crashing in the morning. – tarquin

Legacy:LibHTTP/HttpSock

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

Base of LibHTTP this implements the main network methods for connecting

to a webserver and retreiving data from it. Binary data is not supported.

Constants[edit]

BUFFERSIZE = 2048 
the output buffer size
HTTP_CONNECT = "CONNECT" 
HTTP_DELETE = "DELETE" 
HTTP_GET = "GET" 
HTTP_HEAD = "HEAD" 
HTTP_OPTIONS = "OPTIONS" 
HTTP_POST = "POST" 
HTTP_PUT = "PUT" 
HTTP_TRACE = "TRACE" 
VERSION = 401 
LibHTTP version number

Properties[edit]

array<string> authBasicLookup 
Base64 encoding lookup table
bool bAuthTrap 
true if an authentication retry should happen
bool bIsChunked 
true if the data is chunked (e.g. Transfer-Encoding: chunked )
int BoundPort 
the port we are connected to
bool bTempProxyOverride 
will be set to true in case of a ...
bool bTimeout 
true in case of a connection timeout
bool bUseTempProxy 
if true use the TempProxy
int chunkedCounter 
bytes left in the chunk
HTTPCookies Cookies 
the cookie data instance
string CRLF 
constant CR LF
int CurRedir 
current number of redirections
HTTPState curState 
The current state of the socket
string EXTENTION 
If you make a custom build of this package, or subclass this class then please change the following constant to countain your "extention" name. This will be used in the UserAgent string. (Change it in the defaultproperties)
bool FollowingRedir 
true if a redirection should be followed
class<HttpCookies> HttpCookieClass 
Cookie class to use (if it has not been set)
HttpLink HttpLink 
handle to the HttpLink
class<HttpLink> HttpLinkClass 
the link class to use
string HTTPVER 
The HTTP version to use. Either 1.0 or 1.1 are supported.
string inBuffer 
i/o buffers
int LastStatus 
The last returned HTTP status code
InternetLink.IpAddr LocalLink 
local link address
string MultiPartBoundary 
Multipart boundary string, used to split fields
string outBuffer 
i/o buffers
bool procHeader 
true if headers are being processed
array<string> RequestData 
the request data
float RequestDuration 
duration of the last request
array<string> RequestHeaders 
the request headers
array<RequestHistoryEntry> RequestHistory 
history with requests for a single request, will contain more then one entry when redirections are followed
string RequestMethod 
the request method
HttpResolveCache ResolveCache 
cache object with hostname resolves
string ResolveHostname 
the hostname being resolved, used to add to the resolve cache
array<string> ReturnData 
the return data
array<string> ReturnHeaders 
the return headers
float StartRequestTime 
start of the request, will be set after the connection was opened and before the actual request will be send
HttpUtil.xURL TempProxy 
temporary proxy configuration
int TZoffset 
Timezone Offset, dynamically calculated from the server's time
HttpUtil Utils 
utility class, used to speed up lookups (optimization)

Authentication[edit]

array<GameInfo.KeyValuePair> AuthInfo 
authentication information
EAuthMethod AuthMethod 
Authentication method to use when sUsername is set. This will automatically be set when a WWW-Authenticate header is received
bool bAutoAuthenticate 
If username and password have been set automatically retry the request to authenticate. Note: this can only be done in a second try because the authentication method is required.

Options[edit]

bool bFollowRedirect 
when set to false it won't follow redirects
bool bProcCookies 
Process incoming cookies, defaults to true
bool bRfcCompliantRedirect 
responding to HTTP redirect headers is RFC compliant, otherwise it will behave much like some other HTTP clients behave. This means that in case of a 301/302 it will set the request method from POST to GET. This is not the way it should happen according to the standard.
bool bSendCookies 
Send cookie data when available, defaults to true
float fConnectTimout 
connection timeout, if the connection couldn't be established within this time limit it will abort the connection and call OnTimeout()
int iMaxRedir 
Maximum redirections to follow
int iVerbose 
log verbosity, you probably want to leave this 0. check the HttpUtil class for various log levels.

Proxy[edit]

bool bUseProxy 
Use a proxy server, this is (and the other proxy settins) a client setting. It's meant for clients to be set when they need to use a proxy.
int iProxyPort 
The proxy port
array<GameInfo.KeyValuePair> ProxyAuthInfo 
authentication information
EAuthMethod ProxyAuthMethod 
Authentication method to use when sUsername is set. This will automatically be set when a Proxy-Authorisation header is received
string sProxyHost 
The hostname of the proxy
string sProxyPass 
proxy authentication information
string sProxyUser 
proxy authentication information

URL[edit]

HttpUtil.xURL CurrentURL 
the URL struct for the current request
string DefaultAccept 
the default value for the Accept header, we only support "text/*"
int iLocalPort 
the local port, leave zero to use a random port (adviced)

XferMode[edit]

int iMaxBytesPerTick 
maximum number of bytes to download in a single tick
int iMaxIterationsPerTick 
Maximum iterations per tick in fast transfer mode. This defines the number of download retries (when nothing was received) the code may perform within a single tick. Because the data pending variable is only updated each tick it will remain true until the transfer function returns even tho there is no data pending.
ETransferMode TransferMode 
Transfer mode to use during downloads

Enums[edit]

EAuthMethod[edit]

Possible authentication methods, Basic used Base64 encoding to encode the username and password. Digest is more secure.

AM_None 
AM_Unknown 
AM_Basic 
AM_Digest 

ETransferMode[edit]

Method used to download the data. TM_Fast will try to read as much as possible in a single tick, this will have an impact on the game performance during the download. Only use this mode when it's time critical. Use the variables iMaxBytesPerTick and iMaxIterationsPerTick to tweak this transfer mode.

TM_Normal 
TM_Fast 

HTTPState[edit]

HTTPState_Resolving 
HTTPState_Connecting 
HTTPState_SendingRequest 
HTTPState_WaitingForResponse 
HTTPState_ReceivingData 
HTTPState_Closed 

Structures[edit]

RequestHistoryEntry[edit]

string Hostname 
server hostname
int HTTPresponse 
the HTTP response code received
string Location 
location, can include GET data
string Method 
method used in the request
HttpUtil.xURL URL 
the request URL

Delegates[edit]

bool OnComplete(HttpSock Sender )
Will be called when the operation was completed successfully.
It won't be called when an time out occured.
bool OnConnectError(HttpSock Sender )
Called when Open() fails
bool OnConnectionTimeout(HttpSock Sender )
called when the connection has timed out (e.g. open() failed after a set time)
bool OnError(HttpSock Sender, string ErrorMessage, optional string Param1, optional string Param2 )
Will be called in case of an internal error.
OnFollowRedirect(HttpSock Sender, HttpUtil.xURL NewLocation )
Called before the redirection is followed, return false to prevernt following the redirection
OnPreConnect(HttpSock Sender )
Called before the connection is established.
OnRequestBody(HttpSock Sender )
Will be called when the request body has to be send. Do note that you are required to set the Content-Length header to the total size of the content being send. If you use this delegate to send the request body manually you will have to set the Content-Length header yourself.
bool OnRequireAuthorization(HttpSock Sender, EAuthMethod method, array<GameInfo.KeyValuePair> info )
Will be called when authorization is required for the current location.
This will be called directly after receiving the WWW-Authenticate header. So it's best not to stall this call. It's just a notification.
int OnRequireProxyAuthorization(HttpSock Sender, EAuthMethod method, array<GameInfo.KeyValuePair> info )
Will be called when authorization is required for the current proxy.
This will be called directly after receiving the Proxy-Authenticate header. So it's best not to stall this call. It's just a notification.
OnResolved(HttpSock Sender, string hostname, InternetLink.IpAddr Addr )
Will be called when the host name is resolved.
Return true to continue, or false to abort.
string OnResolveFailed(HttpSock Sender, string hostname )
Called when the resolved failed, hostname is the hostname that could not be resolved
string OnResponseBody(HttpSock Sender, string line )
Will be called for every response line received (only the body). Return false to stop the default behavior of storing the response body. Use this delegate if you need to have live updates of the content and can not wait until the request is complete.
string OnReturnCode(HttpSock Sender, int ReturnCode, string ReturnMessage, string HttpVer )
Will be called when the return code has been received; This is the first function called after the request has been send.
bool OnSendRequestHeaders(HttpSock Sender )
This delegate will be send right before the headers are send to the webserver. If you want to change the headers you should do it here.
Warning: becarefull not to change or unset automatically generated headers that are important for this request (like authentication or request body headers)

Functions[edit]

bool Abort( )
Abort the current request, if possible
bool AddHeader(string hname, coerce string value, optional bool bNoReplace )
Add a header, case insensitive. Set bNoReplace to false to not overwrite the old header. Returns true when the header has been set.
bool CachedResolve(coerce string hostname, optional bool bDontConnect )
lookup a chached resolve and connect if found
bool clearFormData( )
This will clear the POST data. Use this before calling setFormData
ClearRequestData(optional bool bDontClearAuth )
This function will clear the previous request data. You may want to use this when you do a new request with the same socket. Previous set headers won't be unset automatically.
Closed( )
connection closed, check for a required redirection
CloseSocket( )
destroy the current socket, should only be called in case of a timeout
bool CreateSocket( )
create the socket, if required
int DataSize(array<string> data )
Return the actual data size of a string array, it appends sizeof(CRLF) for each line. This is used for sending the RequestData.
string genAuthorization(EAuthMethod method, string Username, string Password, array<GameInfo.KeyValuePair> Info )
generate the authentication data, depending on the method it will be either a Basic or Digest response
string genBasicAuthorization(string Username, string Password )
Generated a basic authentication response
string genDigestAuthorization(string Username, string Password, array<GameInfo.KeyValuePair> Info )
generate the Digest authorization data string
bool get(string location )
This will perform a simple HTTP GET request. This will be the most commonly used function to retrieve a document from a webserver. The location is just like the location you would use in your webbrowser.
string getHTTPversion( )
return thr current HTTP version setting
string GetRequestHeader(string hname, optional coerce string def )
Returns the value of the requested header, or default if not found
string GetReturnHeader(string hname, optional coerce string def )
Returns the value of the returned header, or default if not found
int getTZoffset( )
Return the timezone offset
string GetValue(string key, array<GameInfo.KeyValuePair> Info, optional coerce string def )
Returns the value of a KeyValuePair
bool head(string location )
perform a HTTP HEAD request. This will only return the headers. Use this this if you only want to check the file info on the server and not the whole body.
bool HttpRequest(string location, string Method )
Start the HTTP request. Location can be a fully qualified url, or just the location on the configured server.
This is an internal function called by the get(), head() and post() functions. If you want to support additional HTTP requests you should subclass this class.
bool httrace(string location )
perform a HTTP TRACE request. This will simply cause the webserver to return the request it received. It's only usefull for debugging.
InternalResolved(InternetLink.IpAddr Addr , optional bool bDontCache )
hostname has been resolved
bool IsAuthMethodSupported(EAuthMethod method )
return if the authentication method is supported
bool IsSupportedMethod( )
Returns true when the request method is supported
Logf(coerce string message, optional int level, optional coerce string Param1, optional coerce string Param2 )
manage logging
int now( )
Returns the current timestamp. Warning this is not a valid UNIX timestamp because the timezone is unknown (e.g. timestamps are always GMT)
bool OpenConnection( )
start the download
Opened( )
will be called from HttpLink
bool post(string location, optional string PostData )
This will perform a simple HTTP POST request. If the PostData is not empty it will overwrite the current post data and set the content type to application/x-www-form-urlencoded.
bool postex(string location, optional array<string> PostData )
Perform a HTTP POST request using an array containing the postdata. if the array length > 0 it will overwrite the current post data. It will send the post data AS IS and doesn't set the content-type.
You might want to use the post(); function together with setFormData();, that method is easier to use.
ProccessWWWAuthenticate(string HeaderData, bool bProxyAuth )
Process the header data of a WWW-Authenticate or Proxy-Authorization header
ProcHeaders( )
Will be called by ProcInput after all headers have been received
ProcInput(string inline )
Process the input
string randString(optional int size, optional coerce string prefix )
Generates a random string. The size defaults to 16. Prefix isn't included with the size;
ReceivedText(string Line )
called from HttpLink
bool RemoveHeader(string hname )
Remove a header, case insensitive. Returns true when the header is deleted
ResolveFailed( )
will be called from HttpLink when the resolve failed
SendData(string data, optional bool bFlush )
Send data buffered
if bFlush it will flush all remaining data (should be used for the last call)
bool setFormData(string field, coerce string data, optional string contentType, optional string contentEncoding )
Simple form of setFormDataEx when the data is only one line
bool setFormDataEx(string field, array<string> data, optional string contentType, optional string contentEncoding )
Add form data (used for multipart/form-data instead of application/x-www-form-urlencoded). This method makes it easier to add form-data. It doesn't clear the previous data, it will just append it. Form Data gives you more control over the actual data send. Also you don't have to escape the data.
It will also force the content type to multipart/form-data.
bool setHTTPversion(optional string newver )
Set the HTTP version, if empty the default will be used. Returns true when the version has been updated
bool ShouldFollowRedirect(int retc, string method )
returns true when a redirect should be followed, also updates headers for the next request.
EAuthMethod StrToAuthMethod(coerce string method )
string to EAuthMethod
Timer( )
timer is used for the conenection timeout.
string UserAgent( )
Returns the useragent string we use

Events[edit]

Destroyed( )
clean up as much as possible
PreBeginPlay( )
initialize some variables