/////////////////////////////////////////////////////////////////////////////////////////////// // // UDPList // /////////////////////////////////////////////////////////////////////////////////////////////// #ifndef _CSocketHandleList #define _CSocketHandleList #define WIN32_LEAN_AND_MEAN #include #include #include "T_List.h" typedef enum _PEERTYPE { Not_Defined = 0, // Á¤ÀÇ ¾ÈµÊ REAL_IP, // ¸®¾ó IP NAT_Friendly, // °¡»ó IP (°°Àº NAT) NAT_Different // °¡»ó IP (´Ù¸¥ NAT) } PEERTYPE; typedef struct _UDP_LIST { DWORD CharID; // ij¸¯ÅÍ ¾ÆÀ̵ð PEERTYPE PeerType; // Àü¼Û ŸÀÔ SOCKADDR_IN PublicAddress; // ÁÖ¼Ò Public SOCKADDR_IN PrivateAddress; // ÁÖ¼Ò Private DWORD MoveTick; // ¿òÁ÷ÀÓ ½Ã°£ _UDP_LIST* pNext; }UDP_LIST, *LPUDP_LIST; /////////////////////////////////////////////////////////////////////////////////////////////// // // Ŭ·¡½º Á¤ÀÇ // /////////////////////////////////////////////////////////////////////////////////////////////// class UDPList : public TList { public: UDPList(void); ~UDPList(void); inline DWORD InsertIntoAddressList(DWORD CharID_In, SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In, PEERTYPE PeerType_In); inline bool DeleteFromAddressList(DWORD CharID_In); inline bool DeleteFromAddressList(SOCKADDR_IN Address_In); inline LPUDP_LIST SearchFromAddressList(DWORD CharID_In); inline LPUDP_LIST SearchFromAddressList(SOCKADDR_IN Address_In); }; inline DWORD UDPList::InsertIntoAddressList(DWORD CharID_In, SOCKADDR_IN PubAddress_In, SOCKADDR_IN PriAddress_In, PEERTYPE PeerType_In) { LPUDP_LIST lpList = SearchFromAddressList(CharID_In); if(lpList != NULL) { lpList->CharID = CharID_In; lpList->PublicAddress = PubAddress_In; lpList->PrivateAddress = PriAddress_In; lpList->PeerType = PeerType_In; return 1; } lpList = Create(); if(lpList != NULL) { lpList->CharID = CharID_In; lpList->PublicAddress = PubAddress_In; lpList->PrivateAddress = PriAddress_In; lpList->PeerType = PeerType_In; InsertToList(lpList); return 2; } return 0; } inline bool UDPList::DeleteFromAddressList(DWORD CharID_In) { LPUDP_LIST lpList = SearchFromAddressList(CharID_In); if(lpList != NULL) { DeleteFromList(lpList); return true; } return false; } inline bool UDPList::DeleteFromAddressList(SOCKADDR_IN Address_In) { LPUDP_LIST lpList = SearchFromAddressList(Address_In); if(lpList != NULL) { DeleteFromList(lpList); return true; } return false; } inline LPUDP_LIST UDPList::SearchFromAddressList(DWORD CharID_In) { LPUDP_LIST lpList; lpList = m_pListHead; while(lpList) { if(lpList->CharID == CharID_In) return lpList; lpList = lpList->pNext; } return NULL; } inline LPUDP_LIST UDPList::SearchFromAddressList(SOCKADDR_IN Address_In) { LPUDP_LIST lpList; lpList = m_pListHead; while(lpList) { if(lpList->PrivateAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr && lpList->PrivateAddress.sin_port == Address_In.sin_port) return lpList; if(lpList->PublicAddress.sin_addr.S_un.S_addr == Address_In.sin_addr.S_un.S_addr && lpList->PublicAddress.sin_port == Address_In.sin_port) return lpList; lpList = lpList->pNext; } return NULL; } #endif