제가 프로토콜쪽의 소스 분석을 받았습니다. 그런데 제가 아직 초보라 잘 모르겠습니다. 소스는 아래에 첨부했구요. 제가 원하는 답변은 이 소스를 분석하려면 어떤 것을 알아야 하는 지 입니다. 모 여러 답변 주셔도 감사하겠습니다. 어떤 사이트를 봐라라 던지, 이 책을 봐라라 던지, 자바에 어떤 책에 어떤 내용을 봐라라고 구체적으로 말씀을 해주시다던지, 어떤 답변이든지 다 좋습니다^^ 꼭 부탁드릴게여^^
-===================================================소스============================================
//*
* protocol.h
*
* Created on: Mar 23, 2011
* Author: ving
*/
#ifndef PROTOCOL_H_
#define PROTOCOL_H_
//*TCP Hole Punching Protocol
//1) Command List
/////ES = Echo Server
/////RS = Rendezvous Server
/////VB = Ving Box
/////VP = Ving Player
const UINT16 CMD_VB_RS_JOIN_REQ = 0x01;
const UINT16 CMD_RS_VB_JOIN_RES = 0x02;
const UINT16 CMD_VB_RS_HOLE_PUNCH_TEST_REQ = 0x03;
const UINT16 CMD_RS_VB_HOLE_PUNCH_TEST_RES = 0x04;
const UINT16 CMD_VP_RS_JOIN_REQ = 0x11;
const UINT16 CMD_RS_VP_JOIN_RES = 0x12;
const UINT16 CMD_VP_RS_MEETING_REQ = 0x21;
const UINT16 CMD_RS_VB_MEETING_READY = 0x22;
const UINT16 CMD_VB_RS_MEETING_OPEN = 0x23;
const UINT16 CMD_RS_VP_MEETING_RES = 0x24;
const UINT16 CMD_VP_RS_MEETING_RESYN_REQ = 0x25;
const UINT16 CMD_RS_VB_MEETING_RESYN_READY = 0x26;
const UINT16 CMD_VB_ES_JOIN_REQ = 0x31;
const UINT16 CMD_ES_VB_JOIN_RES = 0x32;
const UINT16 CMD_VP_ES_JOIN_REQ = 0x41;
const UINT16 CMD_ES_VP_JOIN_RES = 0x42;
///////////////////////////////////////////////////////
//2) Packet List
typedef union _JOINER_ID
{
UINT64 nId;
BYTE Id[8];
} __attribute__((__packed__)) JOINER_ID, *PJOINER_ID;
typedef struct _PKT_RS_JOIN_REQ //20byte
{
JOINER_ID JoinerId; // VBId or VPId
UINT32 nJoinerConnType;
UINT32 saLocalIP;
UINT16 nLocalListenPort;
UINT16 nRouterPort; // UPNP/Port_Foreward
} __attribute__((__packed__)) PKT_RS_JOIN_REQ, *PPKT_RS_JOIN_REQ;
typedef struct _PKT_RS_JOIN_RES //20byte
{
JOINER_ID JoinerId; // VBId or VPId
UINT32 nJoinerConnType;// Public/NAT_UPNP/NAT_PORT_FORWARD
// Public_Disable/NAT_UPNP_Disable/NAT_PORT_FORWARD_Disable/NAT_Disable
UINT32 saJoinerPublicIP;
UINT32 reserved;
} __attribute__((__packed__)) PKT_RS_JOIN_RES, *PPKT_RS_JOIN_RES;
typedef struct _PKT_VB_RS_HOLE_PUNCH_TEST_REQ //20byte
{
JOINER_ID VBId;
UINT32 nVBConnType; // NAT_UPNP_Disable/NAT_PORT_FORWARD_Disable/NAT_Disable
UINT32 saVBPublicIP;
UINT16 nVBPublicPort;
UINT16 reserved;
} __attribute__((__packed__)) PKT_VB_RS_HOLE_PUNCH_TEST_REQ, *PPKT_VB_RS_HOLE_PUNCH_TEST_REQ;
typedef struct _PKT_RS_VB_HOLE_PUNCH_TEST_RES //20byte
{
JOINER_ID VBId;
UINT32 nVBConnType; // TCP_Hole_Punch/NAT_Disable
UINT32 reserved1;
UINT32 reserved2;
} __attribute__((__packed__)) PKT_RS_VB_HOLE_PUNCH_TEST_RES, *PPKT_RS_VB_HOLE_PUNCH_TEST_RES;
typedef struct _PKT_VP_RS_MEETING_REQ //20byte
{
JOINER_ID VBId;
UINT32 saVPPublicIP;
UINT16 nVPPublicPort;
UINT16 reserved1;
UINT32 reserved2;
} __attribute__((__packed__)) PKT_VP_RS_MEETING_REQ, *PPKT_VP_RS_MEETING_REQ;
typedef struct _PKT_RS_VB_MEETING_READY //20byte
{
JOINER_ID VPId;
UINT32 saVPPublicIP;
UINT16 nVPPublicPort;
UINT16 reserved1;
UINT32 reserved2;
} __attribute__((__packed__)) PKT_RS_VB_MEETING_READY, *PPKT_RS_VB_MEETING_READY;
typedef struct _PKT_VB_RS_MEETING_OPEN //20byte
{
JOINER_ID VPId;
UINT32 saVPPublicIP;
UINT16 nVPPublicPort;
UINT16 reserved1;
UINT32 reserved2;
} __attribute__((__packed__)) PKT_VB_RS_MEETING_OPEN, *PPKT_VB_RS_MEETING_OPEN;
typedef struct _PKT_RS_VP_MEETING_RES //20byte
{
JOINER_ID VBId;
UINT32 saVPPublicIP;
UINT16 nVPPublicPort;
UINT16 reserved1;
UINT32 reserved2;
} __attribute__((__packed__)) PKT_RS_VP_MEETING_RES, *PPKT_RS_VP_MEETING_RES;
typedef struct _PKT_ES_JOIN_REQ //20byte
{
JOINER_ID JoinerId; // VBId or VPId
UINT32 reserved1;
UINT32 reserved2;
UINT32 reserved3;
} __attribute__((__packed__)) PKT_ES_JOIN_REQ, *PPKT_ES_JOIN_REQ;
typedef struct _PKT_ES_JOIN_RES //20byte
{
JOINER_ID JoinerId; // VBId or VPId
UINT32 saJoinerPublicIP;
UINT16 nJoinerPublicPort;
UINT16 reserved1;
UINT32 reserved2;
} __attribute__((__packed__)) PKT_ES_JOIN_RES,*PPKT_ES_JOIN_RES;
//3) Define
enum CONNECTION_TYPE
{
CT_NONE = 0,
CT_PUBLICIP,//1
CT_NAT_UPNP,//2
CT_NAT_PORT_FORWARD,//3
CT_NAT_TCP_HOLE_PUNCHING,//4
};
enum CONNECTION_RESULT_TYPE
{
CRT_PUBLICIP, //VP
CRT_NAT, //VP
CRT_NAT_TCP_HOLE_PUNCHING, //VB
CRT_PUBLICIP_OK,
CRT_PUBLICIP_DISABLE,
CRT_NAT_OK,
CRT_NAT_DISABLE,
CRT_NAT_UPNP_OK,
CRT_NAT_UPNP_DISABLE,
CRT_NAT_PORT_FORWARD_OK,
CRT_NAT_PORT_FORWARD_DISABLE,
CRT_NAT_TCP_HOLE_PUNCHING_OK,
CRT_NAT_TCP_HOLE_PUNCHING_DISABLE,
};
enum RESULT_TYPE
{
RT_ACK = 1,
RT_JOIN_DENY,
RT_JOINER_NOT_EXIST,
};
typedef struct _CMD_PKT_ST //16byte
{
UINT32 nSync;
UINT32 nCommand;
UINT32 nSeq;
UINT16 nResultType;
UINT16 nSize;
} __attribute__((__packed__)) CMD_PKT_ST, *PCMD_PKT_ST;
typedef union _DATA_PKT_UT
{
PKT_RS_JOIN_REQ rs_join_req;
PKT_RS_JOIN_RES rs_join_res;
PKT_VB_RS_HOLE_PUNCH_TEST_REQ hptest_req;
PKT_RS_VB_HOLE_PUNCH_TEST_RES hptest_res;
PKT_VP_RS_MEETING_REQ meet_req;
PKT_RS_VB_MEETING_READY meet_ready;
PKT_VB_RS_MEETING_OPEN meet_open;
PKT_RS_VP_MEETING_RES meet_res;
PKT_ES_JOIN_REQ es_join_req;
PKT_ES_JOIN_RES es_join_res;
} DATA_PKT_UT, *PDATA_PKT_UT;
typedef struct _PACKET_ST {
CMD_PKT_ST cmd; // 16
DATA_PKT_UT data; // data itself
} PACKET_ST, *PPACKET_ST;
class CCommCtx;
typedef struct _PROC_MSG_ST {
PACKET_ST packet; // 16
int sock;
SADDR_IN remoteaddr;
CCommCtx* pCommCtx;
} PROC_MSG_ST, *PPROC_MSG_ST;
#endif /* PROTOCOL_H_ */