Initial commit.
This commit is contained in:
136
codemp/xbox/xbSockAddr.cpp
Normal file
136
codemp/xbox/xbSockAddr.cpp
Normal file
@@ -0,0 +1,136 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
// File: XbSockAddr.cpp
|
||||
//
|
||||
// Desc: Wraps SOCKADDR_IN object
|
||||
//
|
||||
// Hist: 05.17.01 - New for June XDK release
|
||||
// 08.08.01 - Moved to common framework
|
||||
//
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
//-----------------------------------------------------------------------------
|
||||
#include "XbSockAddr.h"
|
||||
#include <cassert>
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: CXBSockAddr()
|
||||
// Desc: Create from SOCKADDR_IN
|
||||
//-----------------------------------------------------------------------------
|
||||
CXBSockAddr::CXBSockAddr( const SOCKADDR_IN& sa )
|
||||
:
|
||||
sockaddr_in()
|
||||
{
|
||||
assert( sa.sin_family == AF_INET );
|
||||
sin_family = AF_INET;
|
||||
sin_addr = sa.sin_addr;
|
||||
sin_port = sa.sin_port;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: CXBSockAddr()
|
||||
// Desc: Create from IP address and port
|
||||
//-----------------------------------------------------------------------------
|
||||
CXBSockAddr::CXBSockAddr( DWORD inAddr, WORD wPort )
|
||||
:
|
||||
sockaddr_in()
|
||||
{
|
||||
sin_family = AF_INET;
|
||||
sin_addr.s_addr = inAddr;
|
||||
sin_port = htons( wPort );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: CXBSockAddr()
|
||||
// Desc: Create from IN_ADDR and port
|
||||
//-----------------------------------------------------------------------------
|
||||
CXBSockAddr::CXBSockAddr( const IN_ADDR& inAddr, WORD wPort )
|
||||
:
|
||||
sockaddr_in()
|
||||
{
|
||||
sin_family = AF_INET;
|
||||
sin_addr = inAddr;
|
||||
sin_port = htons( wPort );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: GetInAddr()
|
||||
// Desc: Extract IN_ADDR
|
||||
//-----------------------------------------------------------------------------
|
||||
IN_ADDR CXBSockAddr::GetInAddr() const
|
||||
{
|
||||
return sin_addr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: GetPtr()
|
||||
// Desc: Direct (constant) access
|
||||
//-----------------------------------------------------------------------------
|
||||
const SOCKADDR_IN* CXBSockAddr::GetPtr() const
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: GetAddr()
|
||||
// Desc: Socket IP address
|
||||
//-----------------------------------------------------------------------------
|
||||
DWORD CXBSockAddr::GetAddr() const
|
||||
{
|
||||
return( ntohl( sin_addr.s_addr ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: GetPort()
|
||||
// Desc: Port number
|
||||
//-----------------------------------------------------------------------------
|
||||
WORD CXBSockAddr::GetPort() const
|
||||
{
|
||||
return( ntohs( sin_port ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: GetStr()
|
||||
// Desc: Address in dotted decimal (a.b.c.d) format, with optional port
|
||||
// specifier (a.b.c.d:p). Incoming string buffer must have enough
|
||||
// room for result (16 WCHARS if no port, 22 if port).
|
||||
//-----------------------------------------------------------------------------
|
||||
VOID CXBSockAddr::GetStr( WCHAR* strAddr, BOOL bIncludePort ) const
|
||||
{
|
||||
assert( strAddr != NULL );
|
||||
|
||||
INT iChars = wsprintfW( strAddr, L"%d.%d.%d.%d",
|
||||
sin_addr.S_un.S_un_b.s_b1,
|
||||
sin_addr.S_un.S_un_b.s_b2,
|
||||
sin_addr.S_un.S_un_b.s_b3,
|
||||
sin_addr.S_un.S_un_b.s_b4 );
|
||||
|
||||
if( bIncludePort )
|
||||
{
|
||||
WCHAR strPort[8];
|
||||
wsprintfW( strPort, L":%d", GetPort() );
|
||||
lstrcpyW( strAddr + iChars, strPort );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user