@@ -18,6 +18,33 @@ namespace SQLNA
1818 // Should probably be in a side collection in each regular frame, so we do not bloat the conversation itself.
1919 //
2020
21+ public enum FrameType
22+ {
23+ PreLogin = 1 , // set in ProcessTDS
24+ PreLoginResponse , // set in ProcessTDS
25+ ClientHello , // set in ProcessTDS
26+ ServerHello , // set in ProcessTDS
27+ KeyExchange , // set in ProcessTDS
28+ CipherChange , // set in ProcessTDS
29+ ApplicationData , // set in ProcessTDS
30+ Login7 , // set in ProcessTDS - we should never see this in the raw, should be ApplicationData instead
31+ SSPI , // set in ProcessTDS
32+ NTLMChallenge , // set in ProcessTDS
33+ NTLMResponse , // set in ProcessTDS
34+ LoginAck , // set in ProcessTDS
35+ LoginError , // set in ProcessTDS
36+ Attention , // set in ProcessTDS
37+ SQLBatch , // set in ProcessTDS
38+ RPCRequest , // set in ProcessTDS
39+ XactMgrRequest , // set in ProcessTDS
40+ XActMgrReply , // placeholder
41+ CommandError , // set in ProcessTDS
42+ TabularResponse , // set in ProcessTDS
43+ SMPAck , // set in ParseTCPFrame
44+ SMPSyn , // set in ParseTCPFrame
45+ SMPFin // set in ParseTCPFrame
46+ }
47+
2148 public class FrameData // constructed in ParseOneFile
2249 {
2350 public ConversationData conversation = null ; // set in ParseIPV4Frame and ParseIPV6Frame
@@ -36,6 +63,7 @@ public class FrameData // constructed in ParseOne
3663 public ushort smpSession = 0 ; // set in ParseTCPFrame
3764 public byte smpType = 0 ; // set in ParseTCPFrame
3865 public byte [ ] payload = null ; // set in ParseTCPFrame and ParseUDPFrame
66+ public FrameType frameType = 0 ; // set in ProcessTDS
3967 public bool isKeepAliveRetransmit = false ; // set in FindKeepAliveRetransmits
4068 public ushort kaRetransmitCount = 0 ; // set in FindKeepAliveRetransmits
4169 public bool isRetransmit = false ; // set in FindRetransmits
@@ -106,6 +134,51 @@ public bool hasRESETFlag
106134 get { return ( flags & ( byte ) TCPFlag . RESET ) != 0 ; }
107135 }
108136
137+ public string PacketType
138+ {
139+ get
140+ {
141+ switch ( frameType )
142+ {
143+ case FrameType . ApplicationData : return "AD" ;
144+ case FrameType . Attention : return "ATTN" ;
145+ case FrameType . CipherChange : return "CE" ;
146+ case FrameType . ClientHello : return "CH" ;
147+ case FrameType . CommandError : return "ERR" ;
148+ case FrameType . KeyExchange : return "KE" ;
149+ case FrameType . Login7 : return "L7" ;
150+ case FrameType . LoginAck : return "LA" ;
151+ case FrameType . LoginError : return "ER" ;
152+ case FrameType . NTLMChallenge : return "NC" ;
153+ case FrameType . NTLMResponse : return "NR" ;
154+ case FrameType . PreLogin : return "PL" ;
155+ case FrameType . PreLoginResponse : return "PR" ;
156+ case FrameType . RPCRequest : return "RPC" ;
157+ case FrameType . ServerHello : return "SH" ;
158+ case FrameType . SMPAck : return "SmpA" ;
159+ case FrameType . SMPFin : return "SmpF" ;
160+ case FrameType . SMPSyn : return "SmpS" ;
161+ case FrameType . SQLBatch : return "BAT" ;
162+ case FrameType . SSPI : return "SS" ;
163+ case FrameType . TabularResponse : return "DATA" ;
164+ case FrameType . XactMgrRequest : return "TX" ;
165+ default :
166+ {
167+ if ( isKeepAlive ) return "KA" ;
168+ return FormatFlags ( "" ) ;
169+ } ;
170+ }
171+ }
172+ }
173+
174+ public string PacketTypeAndDirection
175+ {
176+ get
177+ {
178+ return ( isFromClient ? ">" : "<" ) + PacketType ;
179+ }
180+ }
181+
109182
110183 public string ColumnHeader1 ( )
111184 {
@@ -163,14 +236,14 @@ public string ColumnData()
163236 }
164237 }
165238
166- public string FormatFlags ( )
239+ public string FormatFlags ( string filler = "." )
167240 {
168241 string s = "" ;
169- s += ( ( flags & ( byte ) TCPFlag . ACK ) != 0 ) ? "A" : "." ;
170- s += ( ( flags & ( byte ) TCPFlag . PUSH ) != 0 ) ? "P" : "." ;
171- s += ( ( flags & ( byte ) TCPFlag . RESET ) != 0 ) ? "R" : "." ;
172- s += ( ( flags & ( byte ) TCPFlag . SYN ) != 0 ) ? "S" : "." ;
173- s += ( ( flags & ( byte ) TCPFlag . FIN ) != 0 ) ? "F" : "." ;
242+ s += ( ( flags & ( byte ) TCPFlag . ACK ) != 0 ) ? "A" : filler ;
243+ s += ( ( flags & ( byte ) TCPFlag . PUSH ) != 0 ) ? "P" : filler ;
244+ s += ( ( flags & ( byte ) TCPFlag . RESET ) != 0 ) ? "R" : filler ;
245+ s += ( ( flags & ( byte ) TCPFlag . SYN ) != 0 ) ? "S" : filler ;
246+ s += ( ( flags & ( byte ) TCPFlag . FIN ) != 0 ) ? "F" : filler ;
174247 return s ;
175248 }
176249
0 commit comments