[go: up one dir, main page]

Menu

[r68]: / udt / packet.h  Maximize  Restore  History

Download this file

190 lines (143 with data), 5.6 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
/*****************************************************************************
Copyright © 2001 - 2007, The Board of Trustees of the University of Illinois.
All Rights Reserved.
UDP-based Data Transfer Library (UDT) version 4
National Center for Data Mining (NCDM)
University of Illinois at Chicago
http://www.ncdm.uic.edu/
UDT is free software; you can redistribute it and/or modify it under the
terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.
UDT is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
/*****************************************************************************
This header file contains the definition of UDT packet structure and operations.
*****************************************************************************/
/*****************************************************************************
written by
Yunhong Gu [gu@lac.uic.edu], last updated 03/17/2007
*****************************************************************************/
#ifndef __UDT_PACKET_H__
#define __UDT_PACKET_H__
#include "common.h"
#include "udt.h"
class CChannel;
class CPacket
{
friend class CChannel;
friend class CSndQueue;
friend class CHash;
public:
int32_t& m_iSeqNo; // alias: sequence number
int32_t& m_iMsgNo; // alias: message number
int32_t& m_iTimeStamp; // alias: timestamp
int32_t& m_iID; // alias: socket ID
char*& m_pcData; // alias: data/control information
static const int m_iPktHdrSize; // packet header size
public:
CPacket();
~CPacket();
// Functionality:
// Get the payload or the control information field length.
// Parameters:
// None.
// Returned value:
// the payload or the control information field length.
int getLength() const;
// Functionality:
// Set the payload or the control information field length.
// Parameters:
// 0) [in] len: the payload or the control information field length.
// Returned value:
// None.
void setLength(const int& len);
// Functionality:
// Pack a Control packet.
// Parameters:
// 0) [in] pkttype: packet type filed.
// 1) [in] lparam: pointer to the first data structure, explained by the packet type.
// 2) [in] rparam: pointer to the second data structure, explained by the packet type.
// 3) [in] size: size of rparam, in number of bytes;
// Returned value:
// None.
void pack(const int& pkttype, void* lparam = NULL, void* rparam = NULL, const int& size = 0);
// Functionality:
// Read the packet vector.
// Parameters:
// None.
// Returned value:
// Pointer to the packet vector.
iovec* getPacketVector();
// Functionality:
// Read the packet flag.
// Parameters:
// None.
// Returned value:
// packet flag (0 or 1).
int getFlag() const;
// Functionality:
// Read the packet type.
// Parameters:
// None.
// Returned value:
// packet type filed (000 ~ 111).
int getType() const;
// Functionality:
// Read the extended packet type.
// Parameters:
// None.
// Returned value:
// extended packet type filed (0x000 ~ 0xFFF).
int getExtendedType() const;
// Functionality:
// Read the ACK-2 seq. no.
// Parameters:
// None.
// Returned value:
// packet header field (bit 16~31).
int32_t getAckSeqNo() const;
// Functionality:
// Read the message boundary flag bit.
// Parameters:
// None.
// Returned value:
// packet header field [1] (bit 0~1).
int getMsgBoundary() const;
// Functionality:
// Read the message inorder delivery flag bit.
// Parameters:
// None.
// Returned value:
// packet header field [1] (bit 2).
bool getMsgOrderFlag() const;
// Functionality:
// Read the message sequence number.
// Parameters:
// None.
// Returned value:
// packet header field [1] (bit 3~31).
int32_t getMsgSeq() const;
protected:
uint32_t m_nHeader[4]; // The 128-bit header field
iovec m_PacketVector[2]; // The 2-demension vector of UDT packet [header, data]
int32_t __pad;
void operator = (const CPacket&) {}
};
////////////////////////////////////////////////////////////////////////////////
struct CHandShake
{
int32_t m_iVersion; // UDT version
int32_t m_iType; // UDT socket type
int32_t m_iISN; // random initial sequence number
int32_t m_iMSS; // maximum segment size
int32_t m_iFlightFlagSize; // flow control window size
int32_t m_iReqType; // connection request type: -1: response, 1: initial request, 0: rendezvous request
int32_t m_iID; // socket ID
};
#endif