/*=============================================================================
// InternetLink: Parent class for Internet connection classes
Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
=============================================================================*/
class InternetLink extends Info
	native
	transient;

cpptext
{
	AInternetLink();
	void BeginDestroy();
	UBOOL Tick( FLOAT DeltaTime, enum ELevelTick TickType );	
	FSocket* GetSocket() 
	{ 
		return Socket;
	}
	FSocket* GetRemoteSocket() 
	{ 
		return RemoteSocket;
	}
	FResolveInfo*& GetResolveInfo()
	{
		return *(FResolveInfo**)&PrivateResolveInfo;
	}
}

//-----------------------------------------------------------------------------
// Types & Variables.

// Data receive mode.
// Cannot be set in default properties.
var enum ELinkMode
{
	MODE_Text, 
	MODE_Line,
	MODE_Binary
} LinkMode;

// MODE_Line behavior, how to receive/send lines
var enum ELineMode
{
	LMODE_auto,
	LMODE_DOS,	// CRLF
	LMODE_UNIX, // LF
	LMODE_MAC,	// LFCR
} InLineMode, OutLineMode; // OutLineMode: LMODE_auto == LMODE_DOS

// Internal
var	const pointer Socket{FSocket};  // (sockets are 64-bit on AMD64, so use "pointer").
var const int Port;
var	const pointer RemoteSocket{FSocket};
var private native const pointer PrivateResolveInfo;
var const int DataPending;

// Receive mode.
// If mode is MODE_Manual, received events will not be called.
// This means it is your responsibility to check the DataPending
// var and receive the data.
// Cannot be set in default properties.
var enum EReceiveMode
{
	RMODE_Manual,
	RMODE_Event
} ReceiveMode;

//-----------------------------------------------------------------------------
// Natives.

// Returns true if data is pending on the socket.
native function bool IsDataPending();

// Parses an Unreal URL into its component elements.
// Returns false if the URL was invalid.
native function bool ParseURL
(
	coerce string URL, 
	out string Addr, 
	out int PortNum, 
	out string LevelName,
	out string EntryName
);

// Resolve a domain or dotted IP.
// Nonblocking operation.  
// Triggers Resolved event if successful.
// Triggers ResolveFailed event if unsuccessful.
native function Resolve( coerce string Domain );

// Returns most recent winsock error.
native function int GetLastError();

// Convert an IP address to a string.
native function string IpAddrToString( IpAddr Arg );

// Convert a string to an IP
native function bool StringToIpAddr( string Str, out IpAddr Addr );

native function GetLocalIP(out IpAddr Arg );

//-----------------------------------------------------------------------------
// Events.

// Called when domain resolution is successful.
// The IpAddr struct Addr contains the valid address.
event Resolved( IpAddr Addr );

// Called when domain resolution fails.
event ResolveFailed();

defaultproperties
{
}
