diff options
Diffstat (limited to 'src/common/Network/Packet/TcpHeader.h')
-rwxr-xr-x | src/common/Network/Packet/TcpHeader.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/src/common/Network/Packet/TcpHeader.h b/src/common/Network/Packet/TcpHeader.h new file mode 100755 index 00000000..38732998 --- /dev/null +++ b/src/common/Network/Packet/TcpHeader.h @@ -0,0 +1,133 @@ +/* +Copyright (c) 2015-2015 Cisco Systems, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +#ifndef _TCP_HEADER_H_ +#define _TCP_HEADER_H_ + +#include "PacketHeaderBase.h" +#define TCP_HEADER_LEN 20 + +class TCPHeader +{ + +public: + enum TCPHeader_enum_t + { + TCP_INVALID_PORT = 0 + }; + + TCPHeader(){} + + TCPHeader(uint16_t argSourcePort, + uint16_t argDestinationPort, + uint8_t argFlags, + uint32_t argSeqNum, + uint32_t argAckNum); + + struct Flag + { + enum Type + { + FIN = 0x01, + SYN = 0x02, + RST = 0x04, + PSH = 0x08, + ACK = 0x10, + URG = 0x20 + }; + }; + + void setSourcePort (uint16_t); + uint16_t getSourcePort (); + + void setDestPort (uint16_t); + uint16_t getDestPort (); + + void setSeqNumber (uint32_t); + uint32_t getSeqNumber (); + + void setAckNumber (uint32_t); + uint32_t getAckNumber (); + + //this is factor 4 + void setHeaderLength (uint8_t); + uint8_t getHeaderLength (); + + void setFlag (uint8_t); + uint8_t getFlags (); + + void setFinFlag (bool); + bool getFinFlag (); + + void setSynFlag (bool); + bool getSynFlag (); + + void setResetFlag (bool); + bool getResetFlag (); + + void setPushFlag (bool); + bool getPushFlag (); + + void setAckFlag (bool); + bool getAckFlag (); + + void setUrgentFlag (bool); + bool getUrgentFlag (); + + void setWindowSize (uint16_t); + uint16_t getWindowSize (); + + void setChecksum (uint16_t); + uint16_t getChecksum (); + + inline void setChecksumRaw (uint16_t data){ + myChecksum = data; + } + + void setUrgentOffset (uint16_t); + uint16_t getUrgentOffset (); + + uint32_t* getOptionPtr (); + + +//////////////////////////////////////////////////////////////////////////////////////// +// Common Header Interface +//////////////////////////////////////////////////////////////////////////////////////// + +public: + uint8_t* getPointer (){return (uint8_t*)this;} + uint32_t getSize (){return getHeaderLength();} + + uint16_t getNextProtocol (); + void setNextProtocol (uint16_t); + + void dump (FILE* fd); + +private: + uint16_t mySourcePort; + uint16_t myDestinationPort; + uint32_t mySeqNum; + uint32_t myAckNum; + uint8_t myHeaderLength; + uint8_t myFlags; + uint16_t myWindowSize; + uint16_t myChecksum; + uint16_t myUrgentPtr; + uint32_t myOption[1]; +}; + +#include "TcpHeader.inl" + +#endif //_TCP_HEADER_H_ |