OLD | NEW |
| (Empty) |
1 /***************************************************************************** | |
2 Copyright (c) 2001 - 2011, The Board of Trustees of the University of Illinois. | |
3 All rights reserved. | |
4 | |
5 Redistribution and use in source and binary forms, with or without | |
6 modification, are permitted provided that the following conditions are | |
7 met: | |
8 | |
9 * Redistributions of source code must retain the above | |
10 copyright notice, this list of conditions and the | |
11 following disclaimer. | |
12 | |
13 * Redistributions in binary form must reproduce the | |
14 above copyright notice, this list of conditions | |
15 and the following disclaimer in the documentation | |
16 and/or other materials provided with the distribution. | |
17 | |
18 * Neither the name of the University of Illinois | |
19 nor the names of its contributors may be used to | |
20 endorse or promote products derived from this | |
21 software without specific prior written permission. | |
22 | |
23 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS | |
24 IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | |
25 THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
26 PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR | |
27 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
28 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | |
29 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
30 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
31 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
32 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
33 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
34 *****************************************************************************/ | |
35 | |
36 /***************************************************************************** | |
37 written by | |
38 Yunhong Gu, last updated 01/02/2011 | |
39 *****************************************************************************/ | |
40 | |
41 #ifndef __UDT_PACKET_H__ | |
42 #define __UDT_PACKET_H__ | |
43 | |
44 | |
45 #include "udt.h" | |
46 | |
47 #ifdef WIN32 | |
48 struct iovec | |
49 { | |
50 int iov_len; | |
51 char* iov_base; | |
52 }; | |
53 #endif | |
54 | |
55 class CChannel; | |
56 | |
57 class CPacket | |
58 { | |
59 friend class CChannel; | |
60 friend class CSndQueue; | |
61 friend class CRcvQueue; | |
62 | |
63 public: | |
64 int32_t& m_iSeqNo; // alias: sequence number | |
65 int32_t& m_iMsgNo; // alias: message number | |
66 int32_t& m_iTimeStamp; // alias: timestamp | |
67 int32_t& m_iID; // alias: socket ID | |
68 char*& m_pcData; // alias: data/control information | |
69 | |
70 static const int m_iPktHdrSize; // packet header size | |
71 | |
72 public: | |
73 CPacket(); | |
74 ~CPacket(); | |
75 | |
76 // Functionality: | |
77 // Get the payload or the control information field length. | |
78 // Parameters: | |
79 // None. | |
80 // Returned value: | |
81 // the payload or the control information field length. | |
82 | |
83 int getLength() const; | |
84 | |
85 // Functionality: | |
86 // Set the payload or the control information field length. | |
87 // Parameters: | |
88 // 0) [in] len: the payload or the control information field length. | |
89 // Returned value: | |
90 // None. | |
91 | |
92 void setLength(const int& len); | |
93 | |
94 // Functionality: | |
95 // Pack a Control packet. | |
96 // Parameters: | |
97 // 0) [in] pkttype: packet type filed. | |
98 // 1) [in] lparam: pointer to the first data structure, explained by th
e packet type. | |
99 // 2) [in] rparam: pointer to the second data structure, explained by t
he packet type. | |
100 // 3) [in] size: size of rparam, in number of bytes; | |
101 // Returned value: | |
102 // None. | |
103 | |
104 void pack(const int& pkttype, void* lparam = NULL, void* rparam = NULL, const
int& size = 0); | |
105 | |
106 // Functionality: | |
107 // Read the packet vector. | |
108 // Parameters: | |
109 // None. | |
110 // Returned value: | |
111 // Pointer to the packet vector. | |
112 | |
113 iovec* getPacketVector(); | |
114 | |
115 // Functionality: | |
116 // Read the packet flag. | |
117 // Parameters: | |
118 // None. | |
119 // Returned value: | |
120 // packet flag (0 or 1). | |
121 | |
122 int getFlag() const; | |
123 | |
124 // Functionality: | |
125 // Read the packet type. | |
126 // Parameters: | |
127 // None. | |
128 // Returned value: | |
129 // packet type filed (000 ~ 111). | |
130 | |
131 int getType() const; | |
132 | |
133 // Functionality: | |
134 // Read the extended packet type. | |
135 // Parameters: | |
136 // None. | |
137 // Returned value: | |
138 // extended packet type filed (0x000 ~ 0xFFF). | |
139 | |
140 int getExtendedType() const; | |
141 | |
142 // Functionality: | |
143 // Read the ACK-2 seq. no. | |
144 // Parameters: | |
145 // None. | |
146 // Returned value: | |
147 // packet header field (bit 16~31). | |
148 | |
149 int32_t getAckSeqNo() const; | |
150 | |
151 // Functionality: | |
152 // Read the message boundary flag bit. | |
153 // Parameters: | |
154 // None. | |
155 // Returned value: | |
156 // packet header field [1] (bit 0~1). | |
157 | |
158 int getMsgBoundary() const; | |
159 | |
160 // Functionality: | |
161 // Read the message inorder delivery flag bit. | |
162 // Parameters: | |
163 // None. | |
164 // Returned value: | |
165 // packet header field [1] (bit 2). | |
166 | |
167 bool getMsgOrderFlag() const; | |
168 | |
169 // Functionality: | |
170 // Read the message sequence number. | |
171 // Parameters: | |
172 // None. | |
173 // Returned value: | |
174 // packet header field [1] (bit 3~31). | |
175 | |
176 int32_t getMsgSeq() const; | |
177 | |
178 // Functionality: | |
179 // Clone this packet. | |
180 // Parameters: | |
181 // None. | |
182 // Returned value: | |
183 // Pointer to the new packet. | |
184 | |
185 CPacket* clone() const; | |
186 | |
187 protected: | |
188 uint32_t m_nHeader[4]; // The 128-bit header field | |
189 iovec m_PacketVector[2]; // The 2-demension vector of UDT packet
[header, data] | |
190 | |
191 int32_t __pad; | |
192 | |
193 protected: | |
194 CPacket& operator=(const CPacket&); | |
195 }; | |
196 | |
197 //////////////////////////////////////////////////////////////////////////////// | |
198 | |
199 class CHandShake | |
200 { | |
201 public: | |
202 CHandShake(); | |
203 | |
204 int serialize(char* buf, int& size); | |
205 int deserialize(const char* buf, const int& size); | |
206 | |
207 public: | |
208 static const int m_iContentSize; // Size of hand shake data | |
209 | |
210 public: | |
211 int32_t m_iVersion; // UDT version | |
212 int32_t m_iType; // UDT socket type | |
213 int32_t m_iISN; // random initial sequence number | |
214 int32_t m_iMSS; // maximum segment size | |
215 int32_t m_iFlightFlagSize; // flow control window size | |
216 int32_t m_iReqType; // connection request type: 1: regular connectio
n request, 0: rendezvous connection request, -1/-2: response | |
217 int32_t m_iID; // socket ID | |
218 int32_t m_iCookie; // cookie | |
219 uint32_t m_piPeerIP[4]; // The IP address that the peer's UDP port is bo
und to | |
220 }; | |
221 | |
222 | |
223 #endif | |
OLD | NEW |