Tcp.h
上传用户:karykuang
上传日期:2010-02-26
资源大小:103k
文件大小:6k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. // Tcp.h: interface for the CTcp class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_TCP_H__109B7123_703F_11D5_9C82_0010B54D784D__INCLUDED_)
  5. #define AFX_TCP_H__109B7123_703F_11D5_9C82_0010B54D784D__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. /* Canonically-sized data */
  10. typedef unsigned long longword;     /* 32 bits */
  11. typedef unsigned short word;        /* 16 bits */
  12. typedef unsigned char byte;         /*  8 bits */
  13. typedef byte octet;                 /*  8 bits, for TCP */
  14. #define NIL         0               /* The distinguished empty pointer */
  15. #define in_GetVersion(ip) (((ip)->vht >> 12) & 0xf)//4位版本号
  16. #define in_GetHdrlen(ip)  (((ip)->vht >> 8) & 0xf)//4位首部长度
  17. #define in_GetHdrlenBytes(ip)  (((ip)->vht >> 6) & 0x3c)//?
  18. #define in_GetTos(ip)      ((ip)->vht & 0xff) //8位服务类型
  19. #define in_GetTTL(ip)      ((ip)->ttlProtocol >> 8)//8位生存期
  20. #define in_GetProtocol(ip) ((ip)->ttlProtocol & 0xff)//8位协议
  21. //定义TCP首部中6位标志比特
  22. #define tcp_FlagFIN     0x0001 //发端完成发送任务
  23. #define tcp_FlagSYN     0x0002 //同步序号用来发起一个连接
  24. #define tcp_FlagRST     0x0004 //重建连接
  25. #define tcp_FlagPUSH    0x0008 //接收方应该尽快将这个报文段交给应用层
  26. #define tcp_FlagACK     0x0010 //确认序号有效
  27. #define tcp_FlagURG     0x0020 //紧急指针有效
  28. #define tcp_FlagDO      0xF000 //?
  29. #define tcp_GetDataOffset(tp) ((tp)->flags >> 12)//4位首部长度
  30. /*
  31.  * TCP states, from tcp manual.
  32.  * Note: close-wait state is bypassed by automatically closing a connection
  33.  *       when a FIN is received.  This is easy to undo.
  34.  */
  35. #define tcp_StateLISTEN  0      /* listening for connection */
  36. #define tcp_StateSYNSENT 1      /* syn sent, active open */
  37. #define tcp_StateSYNREC  2      /* syn received, synack+syn sent. */
  38. #define tcp_StateESTAB   3      /* established */
  39. #define tcp_StateFINWT1  4      /* sent FIN */
  40. #define tcp_StateFINWT2  5      /* sent FIN, received FINACK */
  41. /*#define tcp_StateCLOSEWT 6    /* received FIN waiting for close */
  42. #define tcp_StateCLOSING 6      /* sent FIN, received FIN (waiting for FINACK) */
  43. #define tcp_StateLASTACK 7      /* fin received, finack+fin sent */
  44. #define tcp_StateTIMEWT  8      /* dally(延误) after sending final FINACK */
  45. #define tcp_StateCLOSED  9      /* finack received */
  46. #define tcp_MaxData 32              /* maximum bytes to buffer on output */
  47. /* Timer definitions */
  48. #define tcp_RETRANSMITTIME 1000     /* interval at which retransmitter is called */
  49. #define tcp_LONGTIMEOUT 31000       /* timeout for opens */
  50. #define tcp_TIMEOUT 10000           /* timeout during a connection */
  51. class CTcp  
  52. {
  53. public:
  54. CTcp();
  55. virtual ~CTcp();
  56. /* Useful type definitions */
  57. typedef int (*procref)();
  58. typedef short BOOL;                  /* boolean type */
  59. /* protocol address definitions */
  60. typedef longword in_HwAddress;
  61. //typedef word eth_HwAddress[3];
  62. /* The Ethernet header */
  63. /*typedef struct {
  64. eth_HwAddress   destination;
  65. eth_HwAddress   source;
  66. word            type;
  67. } eth_Header;*/
  68. /* The Internet Header: */
  69. typedef struct {
  70. word            vht;    /* version, hdrlen, tos */
  71. word            length;
  72. word            identification;
  73. word            frag;
  74. word            ttlProtocol;
  75. word            checksum;
  76. in_HwAddress    source;
  77. in_HwAddress    destination;
  78. } in_Header;
  79. typedef struct {
  80. word            srcPort;
  81. word            dstPort;
  82. longword        seqnum;
  83. longword        acknum;
  84. word            flags;
  85. word            window;
  86. word            checksum;
  87. word            urgentPointer;
  88. } tcp_Header;
  89. /* The TCP/UDP Pseudo Header */
  90. typedef struct {
  91. in_HwAddress    src;
  92. in_HwAddress    dst;
  93. octet           mbz;
  94. octet           protocol;
  95. word            length;
  96. word            checksum;
  97. } tcp_PseudoHeader;
  98. // TCP Socket definition
  99. typedef struct _tcp_socket {
  100. struct _tcp_socket *next;
  101. short           state;          /* connection state */
  102. procref         dataHandler;    /* called with incoming data */
  103. //eth_HwAddress   hisethaddr;     /* ethernet address of peer */
  104. in_HwAddress    hisaddr;        /* internet address of peer */
  105. word            myport, hisport;/* tcp ports for this connection */
  106. longword        acknum, seqnum; /* data ack'd and sequence num */
  107. int             timeout;        /* timeout, in milliseconds */
  108. BOOL            unhappy;        /* flag, indicates retransmitting segt's */
  109. word            flags;          /* tcp flags word for last packet sent */
  110. short           dataSize;       /* number of bytes of data to send */
  111. byte            data[tcp_MaxData]; /* data to send */
  112. } tcp_Socket;
  113. //extern eth_HwAddress sed_lclEthAddr;
  114. //extern eth_HwAddress sed_ethBcastAddr;
  115. //extern in_HwAddress  sin_lclINAddr;
  116. #ifdef DEBUG
  117.   // Primitive logging facility
  118. #define tcp_LOGPACKETS 1        /* log packet headers */
  119. word tcp_logState;
  120. #endif
  121. //Local IP address
  122. in_HwAddress sin_lclINAddr;
  123. // IP identification numbers
  124. int tcp_id;
  125. tcp_Socket *tcp_allsocs;
  126. void tcp_Init();
  127. void tcp_Open(tcp_Socket *s,word lport,in_HwAddress ina,word port,procref datahandler);
  128. void tcp_Listen(tcp_Socket *s,word port,procref datahandler,longword timeout);
  129. void tcp_Close(tcp_Socket *s);
  130. void tcp_Abort(tcp_Socket *s);
  131. void tcp_Retransmitter();
  132. void tcp_Unthread(tcp_Socket *ds);
  133. void  tcpapp(procref application);
  134. int tcp_Write(tcp_Socket *s,byte *dp,int len);
  135. void tcp_Flush(tcp_Socket *s);
  136. void tcp_Handler(in_Header *ip);
  137. void tcp_ProcessData(tcp_Socket *s,tcp_Header *tp,int len);
  138.     void tcp_Send(tcp_Socket *s);
  139. longword checksum(word *dp,int length);
  140. void tcp_DumpHeader(in_Header *ip,tcp_Header *tp,char* mesg);
  141. void Move( byte *src, byte *dest,int numbytes );
  142. void writelog(CString temp);
  143. };
  144. #endif // !defined(AFX_TCP_H__109B7123_703F_11D5_9C82_0010B54D784D__INCLUDED_)