#ifndef __RSIP_H_ #define __RSIP_H_ #include "rsipdefs.h" // make certain this is defined first! // globals here extern CRITICAL_SECTION g_CritSec; extern SOCKET g_sRsip; extern SOCKADDR_IN g_saddrGateway; extern SOCKADDR g_saddrPublic; extern int g_iPort; extern DWORD g_ClientID; extern HANDLE g_hThreadEvent; extern HANDLE g_hAlertEvent; extern RSIP_LEASE_RECORD *g_pRsipLeaseRecords; // list of leases. extern ADDR_ENTRY *g_pAddrEntry; // cache of mappings. extern DWORD g_tuRetry; // microseconds starting retry time. extern LONG g_MsgID; /* * Here is all the RSIP code we swiped from the DirectPlay guys */ BOOL Initialize( SOCKADDR *pBaseSocketAddress, BOOL fIsRsipServer ); void Deinitialize( void ); BOOL RsipIsRunningOnThisMachine( SOCKADDR *pPublicSocketAddress ); HRESULT AssignPort( BOOL fTCP_UDP, WORD wPort, SOCKADDR *pSocketAddress, DWORD *pdwBindID ); // gets address on RSIP box HRESULT FreePort( DWORD dwBindID ); // when port is done HRESULT QueryLocalAddress( BOOL fTCP_UDP, SOCKADDR *pQueryAddress, SOCKADDR *pLocalAddress) ; // called to map remote to local HRESULT ListenPort( BOOL fTCP_UDP, WORD wPort, SOCKADDR *pListenAddress, DWORD *pBindID ); // called for ROD HRESULT FindGateway( UINT myip, char *gwipaddr); HRESULT Register( void ); HRESULT Deregister( void ); DWORD ExchangeAndParse( PCHAR pRequest, UINT cbReq, RSIP_RESPONSE_INFO *pRespInfo, DWORD messageid, BOOL bConnect, SOCKADDR *pRecvSocketAddress ); HRESULT Parse( CHAR *pBuf, DWORD cbBuf, RSIP_RESPONSE_INFO *pRespInfo ); HRESULT ExtendPort( DWORD Bindid, DWORD *ptExtend ); void RemoveLease( DWORD dwBindID ); void AddLease( DWORD dwBindID, BOOL fTCP_UDP, DWORD addrV4, WORD lport, WORD port, DWORD tLease); RSIP_LEASE_RECORD *FindLease( BOOL fTCP_UDP, WORD port ); void AddCacheEntry( BOOL fTCP_UDP, DWORD addr, WORD port, DWORD raddr, WORD rport); ADDR_ENTRY *FindCacheEntry( BOOL fTCP_UDP, DWORD addr, WORD port); void RsipTimerComplete( HRESULT hCompletionCode, void *pContext ); void RsipTimerFunction( void *pContext ); BOOL PortExtend( DWORD dwTime ); // every 2 minutes void CacheClear( DWORD dwTime ); // every 2 minutes #endif // __RSIP_H_