
///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_Platform_Network_Session.cpp
// Author : Andy Tate
// Date   : 16-Oct-2006
//
// Copyright (C) 2006 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////

#include "Core/Asura.h"

// This file's header...
#include "Network/Asura_Network_Session.h"

// Asura independent header-files...
#include "Network/Asura_NetTransport_System.h"

// Asura platform header-files...

// Game independent header-files...

// Game platform header-files...

// Tools header-files...


////////////////////////////////////////////////////////////////////////////////
// Constant declarations...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Static variable declarations...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Private functions...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Protected functions...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Public functions...
////////////////////////////////////////////////////////////////////////////////

#if defined(ASURA_SUPPORT_EXTERNAL_NETWORK)

void Asura_Network_Session_System::Platform_Initialise (void)
{
	Asura_NetTransport_System::Initialise();
#ifdef ASURA_XBOX360_BYPASS_NETWORK_SECURITY
	const bool bUseCustomSocket = false;
#else
	const bool bUseCustomSocket = true;
#endif
	Asura_NetTransport_System::StartSessionManager(bUseCustomSocket);
}

void Asura_Network_Session_System::Platform_Update (void)
{
	Asura_NetTransport_System::Update();
	Asura_NetTransport_System::UpdateLANSessions();
}

void Asura_Network_Session_System::Platform_Shutdown (void)
{
	Asura_NetTransport_System::Shutdown();
	Asura_NetTransport_System::StopSessionManager();
}

void Asura_Network_Session::Platform_PrepareConnection(void) const
{
#ifndef ASURA_XBOX360_BYPASS_NETWORK_SECURITY

#pragma pack(push)
#pragma pack(1)
	struct PlatformData {
		XNADDR xAddr;
		XNKID  xKeyID;
		XNKEY  xKey;
	};
#pragma pack(pop)
	PlatformData *pxPlatformData = (PlatformData *)GetPlatformSessionData();

	XNetRegisterKey(&pxPlatformData->xKeyID, &pxPlatformData->xKey);
	IN_ADDR xIPAddress;

	#if defined(ASURA_ASSERT)
		const int iResult =
	#endif
		XNetXnAddrToInAddr( &pxPlatformData->xAddr, &pxPlatformData->xKeyID, &xIPAddress);

	Asura_Assertf(iResult == 0, ("XNetXnAddrToInAddr returned error, %d", WSAGetLastError()));

	m_xServerAddress = xIPAddress.S_un.S_addr;

#endif // ndef ASURA_XBOX360_BYPASS_NETWORK_SECURITY
}

#endif	// defined(ASURA_SUPPORT_EXTERNAL_NETWORK)


/// End of file. ///
