Legacy:WebConnectionPlus

From Unreal Wiki, The Unreal Engine Documentation Site
UT2003 :: Object >> Actor >> Info >> InternetInfo >> InternetLink >> TcpLink >> WebConnection >> WebConnectionPlus (Ladder1.46)

This functionality provided by this class (keeping the connection open after a query()) will be integrated into UT2003 as of the next patch, so this class will no longer be necessary.

//-----------------------------------------------------------
// Ladder.WebConnectionPlus
//
// Custom webconnection class to allow "hanging" webadmin queries
// while waiting for profile to be imported from foreign web host
//-----------------------------------------------------------
class WebConnectionPlus extends WebConnection;

var bool bNoCleanup;
var bool bPostQueryApp;

function EndOfHeaders()
{

	if(Response == None)
	{
		CreateResponseObject();
		Response.HTTPError(400); // Bad Request
		Cleanup();
		return;
	}

	if(Application == None)
	{
		Response.HTTPError(404); // FNF
		Cleanup();
		return;
	}

	if(Request.ContentLength != 0 && Request.RequestType == Request_POST)
	{
		RawBytesExpecting = Request.ContentLength;
		RawBytesExpecting -= Len(ReceivedData);
		CheckRawBytes();
	}
	else
	{
		if (Application.PreQuery(Request, Response))
		{
			Application.Query(Request, Response);
			bPostQueryApp = True;
		}
		Cleanup();
	}
}

function CheckRawBytes()
{
	if(RawBytesExpecting <= 0)
	{
		if(!(Request.ContentType ~= "application/x-www-form-urlencoded"))
		{
			Log("WebConnection: Unknown form data content-type: "$Request.ContentType);
			Response.HTTPError(400); // Can't deal with this type of form data
		}
		else
		{
			Request.DecodeFormData(ReceivedData);
			if (Application.PreQuery(Request, Response))
			{
			  Application.Query(Request, Response);
			  bPostQueryApp = True;
			}
			ReceivedData = "";
		}
		Cleanup();
	}
}

function Cleanup()
{
	if (bNoCleanup)
		return;

	if (bPostQueryApp && Application != None)
	{
		Application.PostQuery(Request, Response);
		bPostQueryApp = False;
	}

	if(Request != None)
		Request = None;

	if(Response != None)
	{
		Response.Connection = None;
		Response = None;
	}

	if(Application != None)
		Application = None;
	Close();
}