/* Ċ Ġ* Ġ ĠCopyright Ġ 2 0 1 4 ĠAT & T Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ package Ġcom . lip isoft . toy shark . transport . tcp Ċ Ċ import Ġcom . lip isoft . toy shark . transport . IT r ansport Header Ċ Ċ /** Ċ Ġ* Ġdata Ġstructure Ġfor ĠTCP ĠHeader Ċ Ġ* Ċ Ġ* Ġ@ author ĠB ore y ĠS ao Ċ Ġ* ĠDate : ĠMay Ġ 8 , Ġ 2 0 1 4 Ċ Ġ*/ Ċ class ĠTCP Header Ġ( ĊĠĠĠĠĠĠĠ Ġsource Port : ĠInt , ĊĠĠĠĠĠĠĠ Ġdestination Port : ĠInt , ĊĠĠĠĠĠĠĠ Ġsequence Number : ĠLong , ĊĠĠĠĠĠĠĠ Ġack Number : ĠLong , ĊĠĠĠĠĠĠĠ Ġvar Ġdata Offset : ĠInt , ĊĠĠĠĠĠĠĠ Ġis NS : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġtcp Flags : ĠInt , ĊĠĠĠĠĠĠĠ Ġwindow Size : ĠInt , ĊĠĠĠĠĠĠĠ Ġvar Ġchecksum : ĠInt , ĊĠĠĠĠĠĠĠ Ġvar Ġur gent Pointer : ĠInt ) Ġ: ĠI Transport Header Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġsource Port : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġvar Ġdestination Port : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġsequence Number : ĠLong Ġ= Ġ 0 Ġ// ĠìłĦ ìĨ ¡ ëĲĺëĬĶ Ġëį°ìĿ´íĦ° ìĿĺ ĠByte ĠìĪ ľ ìĦľ Ġë²Ī íĺ¸ , Ġë ŀ ľ ëį ¤ íķľ ĠìĪ « ìŀĲ ê°Ģ Ġëĵ¤ ìĸ´ ê° Ĳ ĊĊĠĠĠ Ġvar Ġtcp Flags : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġis NS : ĠBoolean Ġ= Ġfalse Ġ// ĠE CN - nonce ĠìĿ Ģ íı Ĳ Ġë³´ íĺ¸ ĊĠĠĠ Ġvar Ġis C WR Ġ= Ġfalse Ġ// Ġíĺ ¼ ìŀ ¡ Ġìľ Ī ëıĦ Ġì¶ ķ ìĨĮ ĠíĶ Į ëŀĺ ê·¸ ëĬĶ ĠìĨ ¡ ìĭĿ ì¸ ¡ Ġíĺ¸ ìĬ¤íĬ¸ ìĹĲ ĠìĿĺ íķ´ ĠìĦ± ìłķ ëĲĺëĬĶ ê²ĥ ĊĠĠĠ Ġvar Ġis E CE Ġ= Ġfalse Ġ// ĠSYN = 1 Ġ: ĠTCP Ġê°Ģ Ġëªħ ìĭľ ìłģ Ġíĺ ¼ ìŀ ¡ ĠíĨµ ì§Ģ ê°Ģ Ġê°ĢëĬ¥ íķľ Ġìĥģíĥľ Ġ/ ĠSYN = 0 Ġ: ĠIP Ġí Ĺ ¤ ëįĶ Ġì ħ ĭ ìĹĲ Ġíĺ ¼ ìŀ ¡ Ġê²½ íĹ ĺ ĠíĶ Į ëŀĺ ê·¸ ê°Ģ ĠìĦ¤ìłķ ëĲľ ĠíĮ¨ í Ĥ · ìĿ´ Ġìłķ ìĥģ ĠìĪĺ ìĭł ĊĠĠĠ Ġvar Ġis SYN Ġ= Ġfalse Ġ// ĠìĹ° ê²° ĠìļĶ ì²Ń Ġ: ĠTCP ĠìĹĲ ìĦľ ĠìĦ¸ ìħĺ ĠìĦ± ë¦½ ìĭľ Ġê°Ģ ìŀ¥ Ġë ¨ ¼ ìłĢ Ġë³ ´ë Ĥ´ ëĬĶ ĠíĮ¨ í Ĥ · , Ġìŀ Ħ ìĿĺ ìĿĺ Ġìĭľ í Ģ Ģ ìĬ¤ Ġë²Ī íĺ¸ ë¥¼ Ġë³ ´ë Ĥ´ ìĸ´ ĠìĦ¤ìłķ ĊĠĠĠ Ġvar Ġis ACK Ġ= Ġfalse Ġ// ĠìĿ ĳ ëĭ µ Ġ: Ġìĥģ ëĮĢ ë° © ìľ¼ë¡ľ ë¶Ģ íĦ° ĠíĮ¨ í Ĥ · ìĿĦ Ġë°Ľ ìķ ĺ ëĭ¤ ëĬĶ ĠíĮ¨ í Ĥ · Ġ( ë³´ í Ĩµ Ġ+ 1 ), ĠACK ĠìĿ ĳ ëĭ µ ìľ¼ë¡ľ ĠìĦ± ê³µ Ġìĭ¤ íĮ ¨ ë¥¼ ĠíĮ Ĳ ëĭ¨ ĊĠĠĠ Ġvar Ġis FIN Ġ= Ġfalse Ġ// Ġì¢ ħ ë£Į Ġ: ĠìĦ¸ ìħĺ ĠìĹ° ê²° ìĿĦ Ġì¢ ħ ë£Į ìĭľ í Ĥ¬ ë ķĮ ĠìĤ¬ìļ© , ĠëįĶ ĠìĿ´ ìĥģ ĠìłĦ ìĨ ¡ íķł Ġëį°ìĿ´íĦ° ê°Ģ ĠìĹĨ ìĿĮ ĊĠĠĠ Ġvar Ġis RST Ġ= Ġfalse Ġ// Ġê° ķ ìłľ Ġì¢ ħ ë£Į Ġ: ĠReset Ġê³¼ ìłķ ìĿ´ ë©° , Ġìĸ ĳ ë° © íĸ¥ ìĹĲìĦľ ĠëıĻ ìĭľ ìĹĲ ĠìĿ¼ ìĸ´ë Ĥĺ ëĬĶ Ġì¤ĳ ëĭ¨ ĠìŀĳìĹħ ĊĠĠĠ Ġvar Ġis P SH Ġ= Ġfalse Ġ// Ġë° Ģ ìĸ´ë Ħ £ ê¸° ĠíĶ Į ëŀĺ ê·¸ Ġ: Ġìĥģ íĺ¸ ìŀĳ ìļ© ìĿ´ Ġì¤ĳ ìļĶ íķľ ĠíĶĦë¡ľ íĨł ì ½ ľ ìĿ¸ Ġê²½ìļ° Ġë¹ ł ë¥¸ ĠìĿ ĳ ëĭ µ ìĿĦ ĠìľĦíķ´ Ġ 7 Layer ìĹĲ ĠìłĦ ìĨ ¡ ĊĠĠĠ Ġvar Ġis UR G Ġ= Ġfalse Ġ// Ġê¸ ´ ê¸ ī Ġ: Ġí Ĺ ¤ ëįĶ ë¥¼ Ġì°¸ ì¡° íķĺìĹ¬ Ġìĸ´ë Ķ Ķ ~ ìĸ´ë Ķ Ķ ê¹Įì§Ģ Ġìļ° ìĦł Ġë³ ´ë Ĥ´ ëĭ ¬ ëĿ¼ ëĬĶ ĠíĶ Į ëŀĺ ê·¸ ĊĊĠĠĠ Ġvar Ġwindow Size : ĠInt Ġ= Ġ 0 Ġ// ĠìĿ´ë § Į íģ ¼ Ġë³ ´ë Ĥ ¼ ĠìĪĺ ĠìŀĪëĭ¤ Ġ( ìĨ ¡ ìĭł Ġìľ Ī ëıĦ ìļ° ), ĠìĿ´ë § Į íģ ¼ Ġë°Ķ ëĵ ± ã Ħ ¹ ĠìĪĺ ĠìŀĪëĭ¤ Ġ( ìĪĺ ìĭł Ġìľ Ī ëıĦ ìļ° ) Ġìµľ ëĮĢ : 6 5 5 3 5 , Ġíĺ ¼ ìŀ ¡ ìłľ ìĸ´ ìļ© ĊĠĠĠ Ġvar Ġwindow Scale Ġ= Ġ 0 ĊĊĠĠĠ Ġvar Ġack Number : ĠLong Ġ= Ġ 0 Ġ// ĠìĪĺ ìĭł ì¸ ¡ ìĹĲìĦľ Ġìķ ŀ ìľ¼ë¡ľ Ġë°Ľ ê³ł ìŀĲ ĠíķĺëĬĶ Ġbyte ĠìĪ ľ ìĦľ Ġë²Ī íĺ¸ , Ġë§Ī ì§Ģ ë§ ī ìľ¼ë¡ľ Ġë°Ľ ìĿĢ Ġëį°ìĿ´íĦ° ìĹĲ Ġseq + 1 ìĿĦ Ġíķ¨ ĊĠĠĠ Ġvar Ġoptions : ĠByteArray ? Ġ= Ġnull Ġ// ĠìĹ° ê²° ìĿ´ Ġêµ¬ìĦ± ëĲĺëĬĶ ĠëıĻ ìķĪ Ġíĺ ĳ ìĥģ íķł Ġìµľ ëĮĢ ĠìĦ¸ ê·¸ ë ¨ ¼ íĬ¸ Ġìĺ µ ìħĺ ĊĊĠĠĠ Ġ// Ġvars Ġbelow Ġneed Ġto Ġbe Ġset Ġvia Ġset ters Ġwhen Ġcopy ĊĠĠĠ Ġvar Ġmax Segment Size Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġis Select ive Ack Per mitted Ġ= Ġfalse ĊĠĠĠ Ġvar Ġtime Stamp Sender Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġtime Stamp Reply To Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlength Ġof ĠTCP ĠHeader Ġincluding Ġoptions Ġlength Ġif Ġavailable . ĊĠĠĠĠ Ġ* Ġ@ return Ġint ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġtcp Header Length : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Offset Ġ* Ġ 4 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . source Port Ġ= Ġsource Port ĊĠĠĠĠĠĠĠ Ġthis . destination Port Ġ= Ġdestination Port ĊĠĠĠĠĠĠĠ Ġthis . sequence Number Ġ= Ġsequence Number ĊĠĠĠĠĠĠĠ Ġthis . is NS Ġ= Ġis NS ĊĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġtcp Flags ĊĠĠĠĠĠĠĠ Ġthis . window Size Ġ= Ġwindow Size ĊĠĠĠĠĠĠĠ Ġthis . ack Number Ġ= Ġack Number ĊĠĠĠĠĠĠĠ Ġset Flag Bits () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Flag Bits () Ġ{ ĊĠĠĠĠĠĠĠ Ġis FIN Ġ= Ġtcp Flags Ġand Ġ 0 x 0 1 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġis SYN Ġ= Ġtcp Flags Ġand Ġ 0 x 0 2 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġis RST Ġ= Ġtcp Flags Ġand Ġ 0 x 0 4 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġis P SH Ġ= Ġtcp Flags Ġand Ġ 0 x 0 8 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġis ACK Ġ= Ġtcp Flags Ġand Ġ 0 x 1 0 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġis UR G Ġ= Ġtcp Flags Ġand Ġ 0 x 2 0 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġis E CE Ġ= Ġtcp Flags Ġand Ġ 0 x 4 0 Ġ> Ġ 0 ĊĠĠĠĠĠĠĠ Ġis C WR Ġ= Ġtcp Flags Ġand Ġ 0 x 8 0 Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs C WR ( is C WR : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is C WR Ġ= Ġis C WR ĊĠĠĠĠĠĠĠ Ġif Ġ( is C WR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġor Ġ 0 x 8 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġand Ġ 0 x 7 F ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs E CE ( is E CE : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is E CE Ġ= Ġis E CE ĊĠĠĠĠĠĠĠ Ġif Ġ( is E CE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġor Ġ 0 x 4 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġand Ġ 0 xB F ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs SYN ( is SYN : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is SYN Ġ= Ġis SYN ĊĠĠĠĠĠĠĠ Ġif Ġ( is SYN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġor Ġ 0 x 0 2 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġand Ġ 0 xFD ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs ACK ( is ACK : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is ACK Ġ= Ġis ACK ĊĠĠĠĠĠĠĠ Ġif Ġ( is ACK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġor Ġ 0 x 1 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġand Ġ 0 xEF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs FIN ( is FIN : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is FIN Ġ= Ġis FIN ĊĠĠĠĠĠĠĠ Ġif Ġ( is FIN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġor Ġ 0 x 1 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġand Ġ 0 xFE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs RST ( is RST : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is RST Ġ= Ġis RST ĊĠĠĠĠĠĠĠ Ġif Ġ( is RST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġor Ġ 0 x 0 4 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġand Ġ 0 xF B ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs P SH ( is P SH : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is P SH Ġ= Ġis P SH ĊĠĠĠĠĠĠĠ Ġif Ġ( is P SH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġor Ġ 0 x 0 8 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġand Ġ 0 xF 7 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetIs UR G ( is UR G : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . is UR G Ġ= Ġis UR G ĊĠĠĠĠĠĠĠ Ġif Ġ( is UR G ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġor Ġ 0 x 2 0 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tcp Flags Ġ= Ġthis . tcp Flags Ġand Ġ 0 x DF ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ