summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-10-03 13:43:57 (UTC)
committer mickeyl <mickeyl>2003-10-03 13:43:57 (UTC)
commit9450f41ce6109fb9d22fca7b1c72c606fd37f5a7 (patch) (unidiff)
treef88ab19eaaff43d8f72abe773d60e318e9a9e314
parent78b29c765dbe70faec614796a4d1421eaf0ec773 (diff)
downloadopie-9450f41ce6109fb9d22fca7b1c72c606fd37f5a7.zip
opie-9450f41ce6109fb9d22fca7b1c72c606fd37f5a7.tar.gz
opie-9450f41ce6109fb9d22fca7b1c72c606fd37f5a7.tar.bz2
add defines for UDP-based protocols
detect DHCP and link it into the packet chain
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opienet/opcap.cpp33
-rw-r--r--libopie2/opienet/udp_ports.h89
2 files changed, 112 insertions, 10 deletions
diff --git a/libopie2/opienet/opcap.cpp b/libopie2/opienet/opcap.cpp
index cc8ce7f..f1f2b4b 100644
--- a/libopie2/opienet/opcap.cpp
+++ b/libopie2/opienet/opcap.cpp
@@ -1,1175 +1,1188 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) 2003 by the Wellenreiter team: 3              Copyright (C) 2003 by the Wellenreiter team:
4 Martin J. Muench <mjm@remote-exploit.org> 4 Martin J. Muench <mjm@remote-exploit.org>
5 Max Moser <mmo@remote-exploit.org 5 Max Moser <mmo@remote-exploit.org
6 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 6 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9           .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10 _;:,     .>    :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_,   >  .   <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 12:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i,     .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14 - .   .-<_>     .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15     ._= =}       : or (at your option) any later version.
16    .%`+i>       _;_. 16    .%`+i>       _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17    .i_,=:_.      -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19    : ..    .:,     . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; Library General Public License for more 22..}^=.=       =       ; Library General Public License for more
23++=   -.     .`     .: details. 23++=   -.     .`     .: details.
24 :     =  ...= . :.=- 24 :     =  ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25 -.   .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = Library General Public License along with 26  -_. . .   )=.  = Library General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27    --        :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31 31
32*/ 32*/
33 33
34/* OPIE */ 34/* OPIE */
35 35
36#include <opie2/opcap.h> 36#include <opie2/opcap.h>
37 37
38/* QT */ 38/* QT */
39 39
40#include <qapplication.h> // don't use oapplication here (will decrease reusability in other projects) 40#include <qapplication.h> // don't use oapplication here (will decrease reusability in other projects)
41#include <qsocketnotifier.h> 41#include <qsocketnotifier.h>
42#include <qobjectlist.h> 42#include <qobjectlist.h>
43 43
44#include "udp_ports.h"
45
44/*====================================================================================== 46/*======================================================================================
45 * OPacket 47 * OPacket
46 *======================================================================================*/ 48 *======================================================================================*/
47 49
48OPacket::OPacket( int datalink, packetheaderstruct header, const unsigned char* data, QObject* parent ) 50OPacket::OPacket( int datalink, packetheaderstruct header, const unsigned char* data, QObject* parent )
49 :QObject( parent, "Generic" ), _hdr( header ), _data( data ) 51 :QObject( parent, "Generic" ), _hdr( header ), _data( data )
50{ 52{
51 //qDebug( "OPacket::OPacket(): (Len %d, CapLen %d)" /*, ctime((const time_t*) header.ts.tv_sec)*/, header.len, header.caplen ); 53 //qDebug( "OPacket::OPacket(): (Len %d, CapLen %d)" /*, ctime((const time_t*) header.ts.tv_sec)*/, header.len, header.caplen );
52 54
53 _end = (unsigned char*) data + header.len; 55 _end = (unsigned char*) data + header.len;
54 //qDebug( "OPacket::data @ %0x, end @ %0x", data, _end ); 56 //qDebug( "OPacket::data @ %0x, end @ %0x", data, _end );
55 57
56 switch ( datalink ) 58 switch ( datalink )
57 { 59 {
58 case DLT_EN10MB: 60 case DLT_EN10MB:
59 qDebug( "OPacket::OPacket(): Received Packet. Datalink = ETHERNET" ); 61 qDebug( "OPacket::OPacket(): Received Packet. Datalink = ETHERNET" );
60 new OEthernetPacket( _end, (const struct ether_header*) data, this ); 62 new OEthernetPacket( _end, (const struct ether_header*) data, this );
61 break; 63 break;
62 64
63 case DLT_IEEE802_11: 65 case DLT_IEEE802_11:
64 qDebug( "OPacket::OPacket(): Received Packet. Datalink = IEEE802.11" ); 66 qDebug( "OPacket::OPacket(): Received Packet. Datalink = IEEE802.11" );
65 new OWaveLanPacket( _end, (const struct ieee_802_11_header*) data, this ); 67 new OWaveLanPacket( _end, (const struct ieee_802_11_header*) data, this );
66 break; 68 break;
67 69
68 case DLT_PRISM_HEADER: 70 case DLT_PRISM_HEADER:
69 qDebug( "OPacket::OPacket(): Received Packet. Datalink = PRISM_HEADER" ); 71 qDebug( "OPacket::OPacket(): Received Packet. Datalink = PRISM_HEADER" );
70 new OPrismHeaderPacket( _end, (const struct prism_hdr*) (unsigned char*) data, this ); 72 new OPrismHeaderPacket( _end, (const struct prism_hdr*) (unsigned char*) data, this );
71 break; 73 break;
72 74
73 default: 75 default:
74 qWarning( "OPacket::OPacket(): Received Packet over unsupported datalink (type %d)!", datalink ); 76 qWarning( "OPacket::OPacket(): Received Packet over unsupported datalink (type %d)!", datalink );
75 } 77 }
76} 78}
77 79
78 80
79OPacket::~OPacket() 81OPacket::~OPacket()
80{ 82{
81} 83}
82 84
83 85
84timevalstruct OPacket::timeval() const 86timevalstruct OPacket::timeval() const
85{ 87{
86 return _hdr.ts; 88 return _hdr.ts;
87} 89}
88 90
89 91
90int OPacket::caplen() const 92int OPacket::caplen() const
91{ 93{
92 return _hdr.caplen; 94 return _hdr.caplen;
93} 95}
94 96
95 97
96void OPacket::updateStats( QMap<QString,int>& stats, QObjectList* l ) 98void OPacket::updateStats( QMap<QString,int>& stats, QObjectList* l )
97{ 99{
98 if (!l) return; 100 if (!l) return;
99 QObject* o = l->first(); 101 QObject* o = l->first();
100 while ( o ) 102 while ( o )
101 { 103 {
102 stats[o->name()]++; 104 stats[o->name()]++;
103 updateStats( stats, const_cast<QObjectList*>( o->children() ) ); 105 updateStats( stats, const_cast<QObjectList*>( o->children() ) );
104 o = l->next(); 106 o = l->next();
105 } 107 }
106} 108}
107 109
108 110
109QString OPacket::dump( int bpl ) const 111QString OPacket::dump( int bpl ) const
110{ 112{
111 static int index = 0; 113 static int index = 0;
112 index++; 114 index++;
113 int len = _hdr.caplen; 115 int len = _hdr.caplen;
114 QString str; 116 QString str;
115 str.sprintf( "\n<----- Packet #%04d Len = 0x%X (%d) ----->\n\n", index, len, len ); 117 str.sprintf( "\n<----- Packet #%04d Len = 0x%X (%d) ----->\n\n", index, len, len );
116 str.append( "0000: " ); 118 str.append( "0000: " );
117 QString tmp; 119 QString tmp;
118 QString bytes; 120 QString bytes;
119 QString chars; 121 QString chars;
120 122
121 for ( int i = 0; i < len; ++i ) 123 for ( int i = 0; i < len; ++i )
122 { 124 {
123 tmp.sprintf( "%02X ", _data[i] ); bytes.append( tmp ); 125 tmp.sprintf( "%02X ", _data[i] ); bytes.append( tmp );
124 if ( (_data[i] > 31) && (_data[i]<128) ) chars.append( _data[i] ); 126 if ( (_data[i] > 31) && (_data[i]<128) ) chars.append( _data[i] );
125 else chars.append( '.' ); 127 else chars.append( '.' );
126 128
127 if ( !((i+1) % bpl) ) 129 if ( !((i+1) % bpl) )
128 { 130 {
129 str.append( bytes ); 131 str.append( bytes );
130 str.append( ' ' ); 132 str.append( ' ' );
131 str.append( chars ); 133 str.append( chars );
132 str.append( '\n' ); 134 str.append( '\n' );
133 tmp.sprintf( "%04X: ", i+1 ); str.append( tmp ); 135 tmp.sprintf( "%04X: ", i+1 ); str.append( tmp );
134 bytes = ""; 136 bytes = "";
135 chars = ""; 137 chars = "";
136 } 138 }
137 139
138 } 140 }
139 if ( (len % bpl) ) 141 if ( (len % bpl) )
140 { 142 {
141 str.append( bytes.leftJustify( 1 + 3*bpl ) ); 143 str.append( bytes.leftJustify( 1 + 3*bpl ) );
142 str.append( chars ); 144 str.append( chars );
143 } 145 }
144 str.append( '\n' ); 146 str.append( '\n' );
145 return str; 147 return str;
146} 148}
147 149
148 150
149int OPacket::len() const 151int OPacket::len() const
150{ 152{
151 return _hdr.len; 153 return _hdr.len;
152} 154}
153 155
154 156
155/*====================================================================================== 157/*======================================================================================
156 * OEthernetPacket 158 * OEthernetPacket
157 *======================================================================================*/ 159 *======================================================================================*/
158 160
159OEthernetPacket::OEthernetPacket( const unsigned char* end, const struct ether_header* data, QObject* parent ) 161OEthernetPacket::OEthernetPacket( const unsigned char* end, const struct ether_header* data, QObject* parent )
160 :QObject( parent, "Ethernet" ), _ether( data ) 162 :QObject( parent, "Ethernet" ), _ether( data )
161{ 163{
162 164
163 qDebug( "Source = %s", (const char*) sourceAddress().toString() ); 165 qDebug( "Source = %s", (const char*) sourceAddress().toString() );
164 qDebug( "Destination = %s", (const char*) destinationAddress().toString() ); 166 qDebug( "Destination = %s", (const char*) destinationAddress().toString() );
165 167
166 if ( sourceAddress() == OMacAddress::broadcast ) 168 if ( sourceAddress() == OMacAddress::broadcast )
167 qDebug( "Source is broadcast address" ); 169 qDebug( "Source is broadcast address" );
168 if ( destinationAddress() == OMacAddress::broadcast ) 170 if ( destinationAddress() == OMacAddress::broadcast )
169 qDebug( "Destination is broadcast address" ); 171 qDebug( "Destination is broadcast address" );
170 172
171 switch ( type() ) 173 switch ( type() )
172 { 174 {
173 case ETHERTYPE_IP: new OIPPacket( end, (const struct iphdr*) (data+1), this ); break; 175 case ETHERTYPE_IP: new OIPPacket( end, (const struct iphdr*) (data+1), this ); break;
174 case ETHERTYPE_ARP: { qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = ARP" ); break; } 176 case ETHERTYPE_ARP: { qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = ARP" ); break; }
175 case ETHERTYPE_REVARP: { qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = RARP" ); break; } 177 case ETHERTYPE_REVARP: { qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = RARP" ); break; }
176 default: qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = UNKNOWN" ); 178 default: qDebug( "OPacket::OPacket(): Received Ethernet Packet : Type = UNKNOWN" );
177 } 179 }
178 180
179} 181}
180 182
181 183
182OEthernetPacket::~OEthernetPacket() 184OEthernetPacket::~OEthernetPacket()
183{ 185{
184} 186}
185 187
186 188
187OMacAddress OEthernetPacket::sourceAddress() const 189OMacAddress OEthernetPacket::sourceAddress() const
188{ 190{
189 return OMacAddress( _ether->ether_shost ); 191 return OMacAddress( _ether->ether_shost );
190} 192}
191 193
192 194
193OMacAddress OEthernetPacket::destinationAddress() const 195OMacAddress OEthernetPacket::destinationAddress() const
194{ 196{
195 return OMacAddress( _ether->ether_dhost ); 197 return OMacAddress( _ether->ether_dhost );
196} 198}
197 199
198int OEthernetPacket::type() const 200int OEthernetPacket::type() const
199{ 201{
200 return ntohs( _ether->ether_type ); 202 return ntohs( _ether->ether_type );
201} 203}
202 204
203 205
204/*====================================================================================== 206/*======================================================================================
205 * OIPPacket 207 * OIPPacket
206 *======================================================================================*/ 208 *======================================================================================*/
207 209
208 210
209OIPPacket::OIPPacket( const unsigned char* end, const struct iphdr* data, QObject* parent ) 211OIPPacket::OIPPacket( const unsigned char* end, const struct iphdr* data, QObject* parent )
210 :QObject( parent, "IP" ), _iphdr( data ) 212 :QObject( parent, "IP" ), _iphdr( data )
211{ 213{
212 qDebug( "OIPPacket::OIPPacket(): decoding IP header..." ); 214 qDebug( "OIPPacket::OIPPacket(): decoding IP header..." );
213 215
214 //qDebug( "FromAddress: %s", (const char*) inet_ntoa( *src ) ); 216 //qDebug( "FromAddress: %s", (const char*) inet_ntoa( *src ) );
215 //qDebug( " ToAddress: %s", (const char*) inet_ntoa( *dst ) ); 217 //qDebug( " ToAddress: %s", (const char*) inet_ntoa( *dst ) );
216 218
217 qDebug( "FromAddress: %s", (const char*) fromIPAddress().toString() ); 219 qDebug( "FromAddress: %s", (const char*) fromIPAddress().toString() );
218 qDebug( " toAddress: %s", (const char*) toIPAddress().toString() ); 220 qDebug( " toAddress: %s", (const char*) toIPAddress().toString() );
219 221
220 switch ( protocol() ) 222 switch ( protocol() )
221 { 223 {
222 case IPPROTO_UDP: new OUDPPacket( end, (const struct udphdr*) (data+1), this ); break; 224 case IPPROTO_UDP: new OUDPPacket( end, (const struct udphdr*) (data+1), this ); break;
223 case IPPROTO_TCP: new OTCPPacket( end, (const struct tcphdr*) (data+1), this ); break; 225 case IPPROTO_TCP: new OTCPPacket( end, (const struct tcphdr*) (data+1), this ); break;
224 default: qDebug( "OIPPacket::OIPPacket(): unknown IP protocol type = %d", protocol() ); 226 default: qDebug( "OIPPacket::OIPPacket(): unknown IP protocol type = %d", protocol() );
225 } 227 }
226 228
227} 229}
228 230
229OIPPacket::~OIPPacket() 231OIPPacket::~OIPPacket()
230{ 232{
231} 233}
232 234
233 235
234QHostAddress OIPPacket::fromIPAddress() const 236QHostAddress OIPPacket::fromIPAddress() const
235{ 237{
236 return EXTRACT_32BITS( &_iphdr->saddr ); 238 return EXTRACT_32BITS( &_iphdr->saddr );
237} 239}
238 240
239 241
240QHostAddress OIPPacket::toIPAddress() const 242QHostAddress OIPPacket::toIPAddress() const
241{ 243{
242 return EXTRACT_32BITS( &_iphdr->saddr ); 244 return EXTRACT_32BITS( &_iphdr->saddr );
243} 245}
244 246
245 247
246int OIPPacket::tos() const 248int OIPPacket::tos() const
247{ 249{
248 return _iphdr->tos; 250 return _iphdr->tos;
249} 251}
250 252
251 253
252int OIPPacket::len() const 254int OIPPacket::len() const
253{ 255{
254 return EXTRACT_16BITS( &_iphdr->tot_len ); 256 return EXTRACT_16BITS( &_iphdr->tot_len );
255} 257}
256 258
257 259
258int OIPPacket::id() const 260int OIPPacket::id() const
259{ 261{
260 return EXTRACT_16BITS( &_iphdr->id ); 262 return EXTRACT_16BITS( &_iphdr->id );
261} 263}
262 264
263 265
264int OIPPacket::offset() const 266int OIPPacket::offset() const
265{ 267{
266 return EXTRACT_16BITS( &_iphdr->frag_off ); 268 return EXTRACT_16BITS( &_iphdr->frag_off );
267} 269}
268 270
269 271
270int OIPPacket::ttl() const 272int OIPPacket::ttl() const
271{ 273{
272 return _iphdr->ttl; 274 return _iphdr->ttl;
273} 275}
274 276
275 277
276int OIPPacket::protocol() const 278int OIPPacket::protocol() const
277{ 279{
278 return _iphdr->protocol; 280 return _iphdr->protocol;
279} 281}
280 282
281 283
282int OIPPacket::checksum() const 284int OIPPacket::checksum() const
283{ 285{
284 return EXTRACT_16BITS( &_iphdr->check ); 286 return EXTRACT_16BITS( &_iphdr->check );
285} 287}
286 288
287/*====================================================================================== 289/*======================================================================================
288 * OARPPacket 290 * OARPPacket
289 *======================================================================================*/ 291 *======================================================================================*/
290 292
291 293
292OARPPacket::OARPPacket( const unsigned char* end, const struct myarphdr* data, QObject* parent ) 294OARPPacket::OARPPacket( const unsigned char* end, const struct myarphdr* data, QObject* parent )
293 :QObject( parent, "ARP" ), _arphdr( data ) 295 :QObject( parent, "ARP" ), _arphdr( data )
294{ 296{
295 qDebug( "OARPPacket::OARPPacket(): decoding ARP header..." ); 297 qDebug( "OARPPacket::OARPPacket(): decoding ARP header..." );
296 qDebug( "ARP type seems to be %02d - '%s'", EXTRACT_16BITS( &_arphdr->ar_op ), (const char*) type() ); 298 qDebug( "ARP type seems to be %02d - '%s'", EXTRACT_16BITS( &_arphdr->ar_op ), (const char*) type() );
297 qDebug( "Sender: MAC %s = IP %s", (const char*) senderMacAddress().toString(), (const char*) senderIPV4Address().toString() ); 299 qDebug( "Sender: MAC %s = IP %s", (const char*) senderMacAddress().toString(), (const char*) senderIPV4Address().toString() );
298 qDebug( "Target: MAC %s = IP %s", (const char*) targetMacAddress().toString(), (const char*) targetIPV4Address().toString() ); 300 qDebug( "Target: MAC %s = IP %s", (const char*) targetMacAddress().toString(), (const char*) targetIPV4Address().toString() );
299} 301}
300 302
301 303
302OARPPacket::~OARPPacket() 304OARPPacket::~OARPPacket()
303{ 305{
304} 306}
305 307
306 308
307QString OARPPacket::type() const 309QString OARPPacket::type() const
308{ 310{
309 switch ( EXTRACT_16BITS( &_arphdr->ar_op ) ) 311 switch ( EXTRACT_16BITS( &_arphdr->ar_op ) )
310 { 312 {
311 case 1: return "REQUEST"; 313 case 1: return "REQUEST";
312 case 2: return "REPLY"; 314 case 2: return "REPLY";
313 case 3: return "RREQUEST"; 315 case 3: return "RREQUEST";
314 case 4: return "RREPLY"; 316 case 4: return "RREPLY";
315 case 8: return "InREQUEST"; 317 case 8: return "InREQUEST";
316 case 9: return "InREPLY"; 318 case 9: return "InREPLY";
317 case 10: return "NAK"; 319 case 10: return "NAK";
318 default: qWarning( "OARPPacket::type(): invalid ARP type!" ); return "<unknown>"; 320 default: qWarning( "OARPPacket::type(): invalid ARP type!" ); return "<unknown>";
319 } 321 }
320} 322}
321 323
322 324
323QHostAddress OARPPacket::senderIPV4Address() const 325QHostAddress OARPPacket::senderIPV4Address() const
324{ 326{
325 return EXTRACT_32BITS( &_arphdr->ar_sip ); 327 return EXTRACT_32BITS( &_arphdr->ar_sip );
326} 328}
327 329
328 330
329QHostAddress OARPPacket::targetIPV4Address() const 331QHostAddress OARPPacket::targetIPV4Address() const
330{ 332{
331 return EXTRACT_32BITS( &_arphdr->ar_tip ); 333 return EXTRACT_32BITS( &_arphdr->ar_tip );
332} 334}
333 335
334 336
335OMacAddress OARPPacket::senderMacAddress() const 337OMacAddress OARPPacket::senderMacAddress() const
336{ 338{
337 return OMacAddress( _arphdr->ar_sha ); 339 return OMacAddress( _arphdr->ar_sha );
338} 340}
339 341
340 342
341OMacAddress OARPPacket::targetMacAddress() const 343OMacAddress OARPPacket::targetMacAddress() const
342{ 344{
343 return OMacAddress( _arphdr->ar_tha ); 345 return OMacAddress( _arphdr->ar_tha );
344} 346}
345 347
346 348
347/*====================================================================================== 349/*======================================================================================
348 * OUDPPacket 350 * OUDPPacket
349 *======================================================================================*/ 351 *======================================================================================*/
350 352
351 353
352OUDPPacket::OUDPPacket( const unsigned char* end, const struct udphdr* data, QObject* parent ) 354OUDPPacket::OUDPPacket( const unsigned char* end, const struct udphdr* data, QObject* parent )
353 :QObject( parent, "UDP" ), _udphdr( data ) 355 :QObject( parent, "UDP" ), _udphdr( data )
354 356
355{ 357{
356 qDebug( "OUDPPacket::OUDPPacket(): decoding UDP header..." ); 358 qDebug( "OUDPPacket::OUDPPacket(): decoding UDP header..." );
359 qDebug( "fromPort = %d", fromPort() );
360 qDebug( " toPort = %d", toPort() );
361
362 // TODO: Make this a case or a hash if we know more udp protocols
363
364 if ( fromPort() == UDP_PORT_BOOTPS || fromPort() == UDP_PORT_BOOTPC ||
365 toPort() == UDP_PORT_BOOTPS || toPort() == UDP_PORT_BOOTPC )
366 {
367 qDebug( "seems to be part of a DHCP conversation => creating DHCP packet." );
368 new ODHCPPacket( end, (const struct dhcp_packet*) (data+1), this );
369 }
357} 370}
358 371
359 372
360OUDPPacket::~OUDPPacket() 373OUDPPacket::~OUDPPacket()
361{ 374{
362} 375}
363 376
364 377
365int OUDPPacket::fromPort() const 378int OUDPPacket::fromPort() const
366{ 379{
367 return _udphdr->source; 380 return EXTRACT_16BITS( &_udphdr->source );
368} 381}
369 382
370 383
371int OUDPPacket::toPort() const 384int OUDPPacket::toPort() const
372{ 385{
373 return _udphdr->dest; 386 return EXTRACT_16BITS( &_udphdr->dest );
374} 387}
375 388
376 389
377int OUDPPacket::length() const 390int OUDPPacket::length() const
378{ 391{
379 return _udphdr->len; 392 return EXTRACT_16BITS( &_udphdr->len );
380} 393}
381 394
382 395
383int OUDPPacket::checksum() const 396int OUDPPacket::checksum() const
384{ 397{
385 return _udphdr->check; 398 return EXTRACT_16BITS( &_udphdr->check );
386} 399}
387 400
388 401
389/*====================================================================================== 402/*======================================================================================
390 * ODHCPPacket 403 * ODHCPPacket
391 *======================================================================================*/ 404 *======================================================================================*/
392 405
393 406
394ODHCPPacket::ODHCPPacket( const unsigned char* end, const struct dhcp_packet* data, QObject* parent ) 407ODHCPPacket::ODHCPPacket( const unsigned char* end, const struct dhcp_packet* data, QObject* parent )
395 :QObject( parent, "DHCP" ), _dhcphdr( data ) 408 :QObject( parent, "DHCP" ), _dhcphdr( data )
396 409
397{ 410{
398 qDebug( "ODHCPPacket::ODHCPPacket(): decoding DHCP information..." ); 411 qDebug( "ODHCPPacket::ODHCPPacket(): decoding DHCP information..." );
399} 412}
400 413
401 414
402ODHCPPacket::~ODHCPPacket() 415ODHCPPacket::~ODHCPPacket()
403{ 416{
404} 417}
405 418
406 419
407/*====================================================================================== 420/*======================================================================================
408 * OTCPPacket 421 * OTCPPacket
409 *======================================================================================*/ 422 *======================================================================================*/
410 423
411 424
412OTCPPacket::OTCPPacket( const unsigned char* end, const struct tcphdr* data, QObject* parent ) 425OTCPPacket::OTCPPacket( const unsigned char* end, const struct tcphdr* data, QObject* parent )
413 :QObject( parent, "TCP" ), _tcphdr( data ) 426 :QObject( parent, "TCP" ), _tcphdr( data )
414 427
415{ 428{
416 qDebug( "OTCPPacket::OTCPPacket(): decoding TCP header..." ); 429 qDebug( "OTCPPacket::OTCPPacket(): decoding TCP header..." );
417} 430}
418 431
419 432
420OTCPPacket::~OTCPPacket() 433OTCPPacket::~OTCPPacket()
421{ 434{
422} 435}
423 436
424 437
425int OTCPPacket::fromPort() const 438int OTCPPacket::fromPort() const
426{ 439{
427 return _tcphdr->source; 440 return EXTRACT_16BITS( &_tcphdr->source );
428} 441}
429 442
430 443
431int OTCPPacket::toPort() const 444int OTCPPacket::toPort() const
432{ 445{
433 return _tcphdr->dest; 446 return EXTRACT_16BITS( &_tcphdr->dest );
434} 447}
435 448
436 449
437int OTCPPacket::seq() const 450int OTCPPacket::seq() const
438{ 451{
439 return _tcphdr->seq; 452 return EXTRACT_16BITS( &_tcphdr->seq );
440} 453}
441 454
442 455
443int OTCPPacket::ack() const 456int OTCPPacket::ack() const
444{ 457{
445 return _tcphdr->ack_seq; 458 return EXTRACT_16BITS( &_tcphdr->ack_seq );
446} 459}
447 460
448 461
449int OTCPPacket::window() const 462int OTCPPacket::window() const
450{ 463{
451 return _tcphdr->window; 464 return EXTRACT_16BITS( &_tcphdr->window );
452} 465}
453 466
454 467
455int OTCPPacket::checksum() const 468int OTCPPacket::checksum() const
456{ 469{
457 return _tcphdr->check; 470 return EXTRACT_16BITS( &_tcphdr->check );
458} 471}
459 472
460/*====================================================================================== 473/*======================================================================================
461 * OPrismHeaderPacket 474 * OPrismHeaderPacket
462 *======================================================================================*/ 475 *======================================================================================*/
463 476
464 477
465OPrismHeaderPacket::OPrismHeaderPacket( const unsigned char* end, const struct prism_hdr* data, QObject* parent ) 478OPrismHeaderPacket::OPrismHeaderPacket( const unsigned char* end, const struct prism_hdr* data, QObject* parent )
466 :QObject( parent, "Prism" ), _header( data ) 479 :QObject( parent, "Prism" ), _header( data )
467 480
468{ 481{
469 qDebug( "OPrismHeaderPacket::OPrismHeaderPacket(): decoding PRISM header..." ); 482 qDebug( "OPrismHeaderPacket::OPrismHeaderPacket(): decoding PRISM header..." );
470 483
471 qDebug( "Signal Strength = %d", data->signal.data ); 484 qDebug( "Signal Strength = %d", data->signal.data );
472 485
473 new OWaveLanPacket( end, (const struct ieee_802_11_header*) (data+1), this ); 486 new OWaveLanPacket( end, (const struct ieee_802_11_header*) (data+1), this );
474} 487}
475 488
476OPrismHeaderPacket::~OPrismHeaderPacket() 489OPrismHeaderPacket::~OPrismHeaderPacket()
477{ 490{
478} 491}
479 492
480 493
481unsigned int OPrismHeaderPacket::signalStrength() const 494unsigned int OPrismHeaderPacket::signalStrength() const
482{ 495{
483 return _header->signal.data; 496 return _header->signal.data;
484} 497}
485 498
486/*====================================================================================== 499/*======================================================================================
487 * OWaveLanPacket 500 * OWaveLanPacket
488 *======================================================================================*/ 501 *======================================================================================*/
489 502
490 503
491OWaveLanPacket::OWaveLanPacket( const unsigned char* end, const struct ieee_802_11_header* data, QObject* parent ) 504OWaveLanPacket::OWaveLanPacket( const unsigned char* end, const struct ieee_802_11_header* data, QObject* parent )
492 :QObject( parent, "802.11" ), _wlanhdr( data ) 505 :QObject( parent, "802.11" ), _wlanhdr( data )
493 506
494{ 507{
495 qDebug( "OWaveLanPacket::OWaveLanPacket(): decoding IEEE 802.11 header..." ); 508 qDebug( "OWaveLanPacket::OWaveLanPacket(): decoding IEEE 802.11 header..." );
496 qDebug( "type: %0X", type() ); 509 qDebug( "type: %0X", type() );
497 qDebug( "subType: %0X", subType() ); 510 qDebug( "subType: %0X", subType() );
498 qDebug( "duration: %d", duration() ); 511 qDebug( "duration: %d", duration() );
499 qDebug( "powermanagement: %d", usesPowerManagement() ); 512 qDebug( "powermanagement: %d", usesPowerManagement() );
500 qDebug( "payload is encrypted: %s", usesWep() ? "yes" : "no" ); 513 qDebug( "payload is encrypted: %s", usesWep() ? "yes" : "no" );
501 qDebug( "MAC1: %s", (const char*) macAddress1().toString() ); 514 qDebug( "MAC1: %s", (const char*) macAddress1().toString() );
502 qDebug( "MAC2: %s", (const char*) macAddress2().toString() ); 515 qDebug( "MAC2: %s", (const char*) macAddress2().toString() );
503 qDebug( "MAC3: %s", (const char*) macAddress3().toString() ); 516 qDebug( "MAC3: %s", (const char*) macAddress3().toString() );
504 qDebug( "MAC4: %s", (const char*) macAddress4().toString() ); 517 qDebug( "MAC4: %s", (const char*) macAddress4().toString() );
505 518
506 switch ( type() ) 519 switch ( type() )
507 { 520 {
508 case T_MGMT: new OWaveLanManagementPacket( end, (const struct ieee_802_11_mgmt_header*) data, this ); break; 521 case T_MGMT: new OWaveLanManagementPacket( end, (const struct ieee_802_11_mgmt_header*) data, this ); break;
509 case T_DATA: new OWaveLanDataPacket( end, (const struct ieee_802_11_data_header*) data, this ); break; 522 case T_DATA: new OWaveLanDataPacket( end, (const struct ieee_802_11_data_header*) data, this ); break;
510 case T_CTRL: new OWaveLanControlPacket( end, (const struct ieee_802_11_control_header*) data, this ); break; 523 case T_CTRL: new OWaveLanControlPacket( end, (const struct ieee_802_11_control_header*) data, this ); break;
511 default: qDebug( "OWaveLanPacket::OWaveLanPacket(): Warning: Unknown major type '%d'!", type() ); 524 default: qDebug( "OWaveLanPacket::OWaveLanPacket(): Warning: Unknown major type '%d'!", type() );
512 } 525 }
513} 526}
514 527
515OWaveLanPacket::~OWaveLanPacket() 528OWaveLanPacket::~OWaveLanPacket()
516{ 529{
517} 530}
518 531
519 532
520int OWaveLanPacket::duration() const 533int OWaveLanPacket::duration() const
521{ 534{
522 return _wlanhdr->duration; 535 return _wlanhdr->duration;
523} 536}
524 537
525 538
526OMacAddress OWaveLanPacket::macAddress1() const 539OMacAddress OWaveLanPacket::macAddress1() const
527{ 540{
528 return OMacAddress( _wlanhdr->mac1 ); 541 return OMacAddress( _wlanhdr->mac1 );
529} 542}
530 543
531 544
532OMacAddress OWaveLanPacket::macAddress2() const 545OMacAddress OWaveLanPacket::macAddress2() const
533{ 546{
534 return OMacAddress( _wlanhdr->mac2 ); 547 return OMacAddress( _wlanhdr->mac2 );
535} 548}
536 549
537 550
538OMacAddress OWaveLanPacket::macAddress3() const 551OMacAddress OWaveLanPacket::macAddress3() const
539{ 552{
540 return OMacAddress( _wlanhdr->mac3 ); 553 return OMacAddress( _wlanhdr->mac3 );
541} 554}
542 555
543 556
544OMacAddress OWaveLanPacket::macAddress4() const 557OMacAddress OWaveLanPacket::macAddress4() const
545{ 558{
546 return OMacAddress( _wlanhdr->mac4 ); 559 return OMacAddress( _wlanhdr->mac4 );
547} 560}
548 561
549 562
550int OWaveLanPacket::subType() const 563int OWaveLanPacket::subType() const
551{ 564{
552 return FC_SUBTYPE( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) ); 565 return FC_SUBTYPE( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) );
553} 566}
554 567
555 568
556int OWaveLanPacket::type() const 569int OWaveLanPacket::type() const
557{ 570{
558 return FC_TYPE( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) ); 571 return FC_TYPE( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) );
559} 572}
560 573
561 574
562int OWaveLanPacket::version() const 575int OWaveLanPacket::version() const
563{ 576{
564 return FC_VERSION( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) ); 577 return FC_VERSION( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) );
565} 578}
566 579
567 580
568bool OWaveLanPacket::fromDS() const 581bool OWaveLanPacket::fromDS() const
569{ 582{
570 return FC_FROM_DS( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) ); 583 return FC_FROM_DS( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) );
571} 584}
572 585
573 586
574bool OWaveLanPacket::toDS() const 587bool OWaveLanPacket::toDS() const
575{ 588{
576 return FC_TO_DS( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) ); 589 return FC_TO_DS( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) );
577} 590}
578 591
579 592
580bool OWaveLanPacket::usesPowerManagement() const 593bool OWaveLanPacket::usesPowerManagement() const
581{ 594{
582 return FC_POWER_MGMT( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) ); 595 return FC_POWER_MGMT( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) );
583} 596}
584 597
585 598
586bool OWaveLanPacket::usesWep() const 599bool OWaveLanPacket::usesWep() const
587{ 600{
588 return FC_WEP( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) ); 601 return FC_WEP( EXTRACT_LE_16BITS( &_wlanhdr->frame_control ) );
589} 602}
590 603
591 604
592/*====================================================================================== 605/*======================================================================================
593 * OWaveLanManagementPacket 606 * OWaveLanManagementPacket
594 *======================================================================================*/ 607 *======================================================================================*/
595 608
596OWaveLanManagementPacket::OWaveLanManagementPacket( const unsigned char* end, const struct ieee_802_11_mgmt_header* data, OWaveLanPacket* parent ) 609OWaveLanManagementPacket::OWaveLanManagementPacket( const unsigned char* end, const struct ieee_802_11_mgmt_header* data, OWaveLanPacket* parent )
597 :QObject( parent, "802.11 Management" ), _header( data ), 610 :QObject( parent, "802.11 Management" ), _header( data ),
598 _body( (const struct ieee_802_11_mgmt_body*) (data+1) ) 611 _body( (const struct ieee_802_11_mgmt_body*) (data+1) )
599{ 612{
600 qDebug( "OWaveLanManagementPacket::OWaveLanManagementPacket(): decoding frame..." ); 613 qDebug( "OWaveLanManagementPacket::OWaveLanManagementPacket(): decoding frame..." );
601 qDebug( "Detected subtype is '%s'", (const char*) managementType() ); 614 qDebug( "Detected subtype is '%s'", (const char*) managementType() );
602 615
603 // grab tagged values 616 // grab tagged values
604 const unsigned char* ptr = (const unsigned char*) (_body+1); 617 const unsigned char* ptr = (const unsigned char*) (_body+1);
605 while (ptr < end) 618 while (ptr < end)
606 { 619 {
607 switch ( *ptr ) 620 switch ( *ptr )
608 { 621 {
609 case E_SSID: new OWaveLanManagementSSID( end, (struct ssid_t*) ptr, this ); break; 622 case E_SSID: new OWaveLanManagementSSID( end, (struct ssid_t*) ptr, this ); break;
610 case E_FH: new OWaveLanManagementFH( end, (struct fh_t*) ptr, this ); break; 623 case E_FH: new OWaveLanManagementFH( end, (struct fh_t*) ptr, this ); break;
611 case E_DS: new OWaveLanManagementDS( end, (struct ds_t*) ptr, this ); break; 624 case E_DS: new OWaveLanManagementDS( end, (struct ds_t*) ptr, this ); break;
612 case E_RATES: new OWaveLanManagementRates( end, (struct rates_t*) ptr, this ); break; 625 case E_RATES: new OWaveLanManagementRates( end, (struct rates_t*) ptr, this ); break;
613 case E_CF: new OWaveLanManagementCF( end, (struct cf_t*) ptr, this ); break; 626 case E_CF: new OWaveLanManagementCF( end, (struct cf_t*) ptr, this ); break;
614 case E_TIM: new OWaveLanManagementTim( end, (struct tim_t*) ptr, this ); break; 627 case E_TIM: new OWaveLanManagementTim( end, (struct tim_t*) ptr, this ); break;
615 case E_IBSS: new OWaveLanManagementIBSS( end, (struct ibss_t*) ptr, this ); break; 628 case E_IBSS: new OWaveLanManagementIBSS( end, (struct ibss_t*) ptr, this ); break;
616 case E_CHALLENGE: new OWaveLanManagementChallenge( end, (struct challenge_t*) ptr, this ); break; 629 case E_CHALLENGE: new OWaveLanManagementChallenge( end, (struct challenge_t*) ptr, this ); break;
617 } 630 }
618 ptr+= ( ( struct ssid_t* ) ptr )->length; // skip length of tagged value 631 ptr+= ( ( struct ssid_t* ) ptr )->length; // skip length of tagged value
619 ptr+= 2; // skip tag ID and length 632 ptr+= 2; // skip tag ID and length
620 } 633 }
621} 634}
622 635
623 636
624OWaveLanManagementPacket::~OWaveLanManagementPacket() 637OWaveLanManagementPacket::~OWaveLanManagementPacket()
625{ 638{
626} 639}
627 640
628 641
629QString OWaveLanManagementPacket::managementType() const 642QString OWaveLanManagementPacket::managementType() const
630{ 643{
631 switch ( FC_SUBTYPE( EXTRACT_LE_16BITS( &_header->fc ) ) ) 644 switch ( FC_SUBTYPE( EXTRACT_LE_16BITS( &_header->fc ) ) )
632 { 645 {
633 case ST_ASSOC_REQUEST: return "AssociationRequest"; break; 646 case ST_ASSOC_REQUEST: return "AssociationRequest"; break;
634 case ST_ASSOC_RESPONSE: return "AssociationResponse"; break; 647 case ST_ASSOC_RESPONSE: return "AssociationResponse"; break;
635 case ST_REASSOC_REQUEST: return "ReassociationRequest"; break; 648 case ST_REASSOC_REQUEST: return "ReassociationRequest"; break;
636 case ST_REASSOC_RESPONSE: return "ReassociationResponse"; break; 649 case ST_REASSOC_RESPONSE: return "ReassociationResponse"; break;
637 case ST_PROBE_REQUEST: return "ProbeRequest"; break; 650 case ST_PROBE_REQUEST: return "ProbeRequest"; break;
638 case ST_PROBE_RESPONSE: return "ProbeResponse"; break; 651 case ST_PROBE_RESPONSE: return "ProbeResponse"; break;
639 case ST_BEACON: return "Beacon"; break; 652 case ST_BEACON: return "Beacon"; break;
640 case ST_ATIM: return "Atim"; break; 653 case ST_ATIM: return "Atim"; break;
641 case ST_DISASSOC: return "Disassociation"; break; 654 case ST_DISASSOC: return "Disassociation"; break;
642 case ST_AUTH: return "Authentication"; break; 655 case ST_AUTH: return "Authentication"; break;
643 case ST_DEAUTH: return "Deathentication"; break; 656 case ST_DEAUTH: return "Deathentication"; break;
644 default: 657 default:
645 qWarning( "OWaveLanManagementPacket::managementType(): unhandled subtype %d", FC_SUBTYPE( EXTRACT_LE_16BITS( &_header->fc ) ) ); 658 qWarning( "OWaveLanManagementPacket::managementType(): unhandled subtype %d", FC_SUBTYPE( EXTRACT_LE_16BITS( &_header->fc ) ) );
646 return "Unknown"; 659 return "Unknown";
647 } 660 }
648} 661}
649 662
650 663
651int OWaveLanManagementPacket::beaconInterval() const 664int OWaveLanManagementPacket::beaconInterval() const
652{ 665{
653 return EXTRACT_LE_16BITS( &_body->beacon_interval ); 666 return EXTRACT_LE_16BITS( &_body->beacon_interval );
654} 667}
655 668
656 669
657int OWaveLanManagementPacket::capabilities() const 670int OWaveLanManagementPacket::capabilities() const
658{ 671{
659 return EXTRACT_LE_16BITS( &_body->capability_info ); 672 return EXTRACT_LE_16BITS( &_body->capability_info );
660} 673}
661 674
662 675
663bool OWaveLanManagementPacket::canESS() const 676bool OWaveLanManagementPacket::canESS() const
664{ 677{
665 return CAPABILITY_ESS( EXTRACT_LE_16BITS( &_body->capability_info ) ); 678 return CAPABILITY_ESS( EXTRACT_LE_16BITS( &_body->capability_info ) );
666} 679}
667 680
668 681
669bool OWaveLanManagementPacket::canIBSS() const 682bool OWaveLanManagementPacket::canIBSS() const
670{ 683{
671 return CAPABILITY_IBSS( EXTRACT_LE_16BITS( &_body->capability_info ) ); 684 return CAPABILITY_IBSS( EXTRACT_LE_16BITS( &_body->capability_info ) );
672} 685}
673 686
674 687
675bool OWaveLanManagementPacket::canCFP() const 688bool OWaveLanManagementPacket::canCFP() const
676{ 689{
677 return CAPABILITY_CFP( EXTRACT_LE_16BITS( &_body->capability_info ) ); 690 return CAPABILITY_CFP( EXTRACT_LE_16BITS( &_body->capability_info ) );
678} 691}
679 692
680 693
681bool OWaveLanManagementPacket::canCFP_REQ() const 694bool OWaveLanManagementPacket::canCFP_REQ() const
682{ 695{
683 return CAPABILITY_CFP_REQ( EXTRACT_LE_16BITS( &_body->capability_info ) ); 696 return CAPABILITY_CFP_REQ( EXTRACT_LE_16BITS( &_body->capability_info ) );
684} 697}
685 698
686 699
687bool OWaveLanManagementPacket::canPrivacy() const 700bool OWaveLanManagementPacket::canPrivacy() const
688{ 701{
689 return CAPABILITY_PRIVACY( EXTRACT_LE_16BITS( &_body->capability_info ) ); 702 return CAPABILITY_PRIVACY( EXTRACT_LE_16BITS( &_body->capability_info ) );
690} 703}
691 704
692 705
693/*====================================================================================== 706/*======================================================================================
694 * OWaveLanManagementSSID 707 * OWaveLanManagementSSID
695 *======================================================================================*/ 708 *======================================================================================*/
696 709
697OWaveLanManagementSSID::OWaveLanManagementSSID( const unsigned char* end, const struct ssid_t* data, QObject* parent ) 710OWaveLanManagementSSID::OWaveLanManagementSSID( const unsigned char* end, const struct ssid_t* data, QObject* parent )
698 :QObject( parent, "802.11 SSID" ), _data( data ) 711 :QObject( parent, "802.11 SSID" ), _data( data )
699{ 712{
700 qDebug( "OWaveLanManagementSSID()" ); 713 qDebug( "OWaveLanManagementSSID()" );
701} 714}
702 715
703 716
704OWaveLanManagementSSID::~OWaveLanManagementSSID() 717OWaveLanManagementSSID::~OWaveLanManagementSSID()
705{ 718{
706} 719}
707 720
708 721
709QString OWaveLanManagementSSID::ID() const 722QString OWaveLanManagementSSID::ID() const
710{ 723{
711 int length = _data->length; 724 int length = _data->length;
712 if ( length > 32 ) length = 32; 725 if ( length > 32 ) length = 32;
713 char essid[length+1]; 726 char essid[length+1];
714 memcpy( &essid, &_data->ssid, length ); 727 memcpy( &essid, &_data->ssid, length );
715 essid[length] = 0x0; 728 essid[length] = 0x0;
716 return essid; 729 return essid;
717} 730}
718 731
719 732
720/*====================================================================================== 733/*======================================================================================
721 * OWaveLanManagementRates 734 * OWaveLanManagementRates
722 *======================================================================================*/ 735 *======================================================================================*/
723 736
724OWaveLanManagementRates::OWaveLanManagementRates( const unsigned char* end, const struct rates_t* data, QObject* parent ) 737OWaveLanManagementRates::OWaveLanManagementRates( const unsigned char* end, const struct rates_t* data, QObject* parent )
725 :QObject( parent, "802.11 Rates" ), _data( data ) 738 :QObject( parent, "802.11 Rates" ), _data( data )
726{ 739{
727 qDebug( "OWaveLanManagementRates()" ); 740 qDebug( "OWaveLanManagementRates()" );
728} 741}
729 742
730 743
731OWaveLanManagementRates::~OWaveLanManagementRates() 744OWaveLanManagementRates::~OWaveLanManagementRates()
732{ 745{
733} 746}
734 747
735/*====================================================================================== 748/*======================================================================================
736 * OWaveLanManagementCF 749 * OWaveLanManagementCF
737 *======================================================================================*/ 750 *======================================================================================*/
738 751
739OWaveLanManagementCF::OWaveLanManagementCF( const unsigned char* end, const struct cf_t* data, QObject* parent ) 752OWaveLanManagementCF::OWaveLanManagementCF( const unsigned char* end, const struct cf_t* data, QObject* parent )
740 :QObject( parent, "802.11 CF" ), _data( data ) 753 :QObject( parent, "802.11 CF" ), _data( data )
741{ 754{
742 qDebug( "OWaveLanManagementCF()" ); 755 qDebug( "OWaveLanManagementCF()" );
743} 756}
744 757
745 758
746OWaveLanManagementCF::~OWaveLanManagementCF() 759OWaveLanManagementCF::~OWaveLanManagementCF()
747{ 760{
748} 761}
749 762
750/*====================================================================================== 763/*======================================================================================
751 * OWaveLanManagementFH 764 * OWaveLanManagementFH
752 *======================================================================================*/ 765 *======================================================================================*/
753 766
754OWaveLanManagementFH::OWaveLanManagementFH( const unsigned char* end, const struct fh_t* data, QObject* parent ) 767OWaveLanManagementFH::OWaveLanManagementFH( const unsigned char* end, const struct fh_t* data, QObject* parent )
755 :QObject( parent, "802.11 FH" ), _data( data ) 768 :QObject( parent, "802.11 FH" ), _data( data )
756{ 769{
757 qDebug( "OWaveLanManagementFH()" ); 770 qDebug( "OWaveLanManagementFH()" );
758} 771}
759 772
760 773
761OWaveLanManagementFH::~OWaveLanManagementFH() 774OWaveLanManagementFH::~OWaveLanManagementFH()
762{ 775{
763} 776}
764 777
765/*====================================================================================== 778/*======================================================================================
766 * OWaveLanManagementDS 779 * OWaveLanManagementDS
767 *======================================================================================*/ 780 *======================================================================================*/
768 781
769OWaveLanManagementDS::OWaveLanManagementDS( const unsigned char* end, const struct ds_t* data, QObject* parent ) 782OWaveLanManagementDS::OWaveLanManagementDS( const unsigned char* end, const struct ds_t* data, QObject* parent )
770 :QObject( parent, "802.11 DS" ), _data( data ) 783 :QObject( parent, "802.11 DS" ), _data( data )
771{ 784{
772 qDebug( "OWaveLanManagementDS()" ); 785 qDebug( "OWaveLanManagementDS()" );
773} 786}
774 787
775 788
776OWaveLanManagementDS::~OWaveLanManagementDS() 789OWaveLanManagementDS::~OWaveLanManagementDS()
777{ 790{
778} 791}
779 792
780 793
781int OWaveLanManagementDS::channel() const 794int OWaveLanManagementDS::channel() const
782{ 795{
783 return _data->channel; 796 return _data->channel;
784} 797}
785 798
786/*====================================================================================== 799/*======================================================================================
787 * OWaveLanManagementTim 800 * OWaveLanManagementTim
788 *======================================================================================*/ 801 *======================================================================================*/
789 802
790OWaveLanManagementTim::OWaveLanManagementTim( const unsigned char* end, const struct tim_t* data, QObject* parent ) 803OWaveLanManagementTim::OWaveLanManagementTim( const unsigned char* end, const struct tim_t* data, QObject* parent )
791 :QObject( parent, "802.11 Tim" ), _data( data ) 804 :QObject( parent, "802.11 Tim" ), _data( data )
792{ 805{
793 qDebug( "OWaveLanManagementTim()" ); 806 qDebug( "OWaveLanManagementTim()" );
794} 807}
795 808
796 809
797OWaveLanManagementTim::~OWaveLanManagementTim() 810OWaveLanManagementTim::~OWaveLanManagementTim()
798{ 811{
799} 812}
800 813
801/*====================================================================================== 814/*======================================================================================
802 * OWaveLanManagementIBSS 815 * OWaveLanManagementIBSS
803 *======================================================================================*/ 816 *======================================================================================*/
804 817
805OWaveLanManagementIBSS::OWaveLanManagementIBSS( const unsigned char* end, const struct ibss_t* data, QObject* parent ) 818OWaveLanManagementIBSS::OWaveLanManagementIBSS( const unsigned char* end, const struct ibss_t* data, QObject* parent )
806 :QObject( parent, "802.11 IBSS" ), _data( data ) 819 :QObject( parent, "802.11 IBSS" ), _data( data )
807{ 820{
808 qDebug( "OWaveLanManagementIBSS()" ); 821 qDebug( "OWaveLanManagementIBSS()" );
809} 822}
810 823
811 824
812OWaveLanManagementIBSS::~OWaveLanManagementIBSS() 825OWaveLanManagementIBSS::~OWaveLanManagementIBSS()
813{ 826{
814} 827}
815 828
816/*====================================================================================== 829/*======================================================================================
817 * OWaveLanManagementChallenge 830 * OWaveLanManagementChallenge
818 *======================================================================================*/ 831 *======================================================================================*/
819 832
820OWaveLanManagementChallenge::OWaveLanManagementChallenge( const unsigned char* end, const struct challenge_t* data, QObject* parent ) 833OWaveLanManagementChallenge::OWaveLanManagementChallenge( const unsigned char* end, const struct challenge_t* data, QObject* parent )
821 :QObject( parent, "802.11 Challenge" ), _data( data ) 834 :QObject( parent, "802.11 Challenge" ), _data( data )
822{ 835{
823 qDebug( "OWaveLanManagementChallenge()" ); 836 qDebug( "OWaveLanManagementChallenge()" );
824} 837}
825 838
826 839
827OWaveLanManagementChallenge::~OWaveLanManagementChallenge() 840OWaveLanManagementChallenge::~OWaveLanManagementChallenge()
828{ 841{
829} 842}
830 843
831/*====================================================================================== 844/*======================================================================================
832 * OWaveLanDataPacket 845 * OWaveLanDataPacket
833 *======================================================================================*/ 846 *======================================================================================*/
834 847
835OWaveLanDataPacket::OWaveLanDataPacket( const unsigned char* end, const struct ieee_802_11_data_header* data, OWaveLanPacket* parent ) 848OWaveLanDataPacket::OWaveLanDataPacket( const unsigned char* end, const struct ieee_802_11_data_header* data, OWaveLanPacket* parent )
836 :QObject( parent, "802.11 Data" ), _header( data ) 849 :QObject( parent, "802.11 Data" ), _header( data )
837{ 850{
838 qDebug( "OWaveLanDataPacket::OWaveLanDataPacket(): decoding frame..." ); 851 qDebug( "OWaveLanDataPacket::OWaveLanDataPacket(): decoding frame..." );
839 852
840 const unsigned char* payload = (const unsigned char*) data + sizeof( struct ieee_802_11_data_header ); 853 const unsigned char* payload = (const unsigned char*) data + sizeof( struct ieee_802_11_data_header );
841 854
842 #warning The next line works for most cases, but can not be correct generally! 855 #warning The next line works for most cases, but can not be correct generally!
843 if (!( ( (OWaveLanPacket*) this->parent())->duration() )) payload -= 6; // compensation for missing last address 856 if (!( ( (OWaveLanPacket*) this->parent())->duration() )) payload -= 6; // compensation for missing last address
844 857
845 new OLLCPacket( end, (const struct ieee_802_11_802_2_header*) payload, this ); 858 new OLLCPacket( end, (const struct ieee_802_11_802_2_header*) payload, this );
846} 859}
847 860
848 861
849OWaveLanDataPacket::~OWaveLanDataPacket() 862OWaveLanDataPacket::~OWaveLanDataPacket()
850{ 863{
851} 864}
852 865
853 866
854/*====================================================================================== 867/*======================================================================================
855 * OLLCPacket 868 * OLLCPacket
856 *======================================================================================*/ 869 *======================================================================================*/
857 870
858OLLCPacket::OLLCPacket( const unsigned char* end, const struct ieee_802_11_802_2_header* data, QObject* parent ) 871OLLCPacket::OLLCPacket( const unsigned char* end, const struct ieee_802_11_802_2_header* data, QObject* parent )
859 :QObject( parent, "802.11 LLC" ), _header( data ) 872 :QObject( parent, "802.11 LLC" ), _header( data )
860{ 873{
861 qDebug( "OLLCPacket::OLLCPacket(): decoding frame..." ); 874 qDebug( "OLLCPacket::OLLCPacket(): decoding frame..." );
862 875
863 if ( !(_header->oui[0] || _header->oui[1] || _header->oui[2]) ) 876 if ( !(_header->oui[0] || _header->oui[1] || _header->oui[2]) )
864 { 877 {
865 qDebug( "OLLCPacket::OLLCPacket(): contains an encapsulated Ethernet frame (type=%04X)", EXTRACT_16BITS( &_header->type ) ); 878 qDebug( "OLLCPacket::OLLCPacket(): contains an encapsulated Ethernet frame (type=%04X)", EXTRACT_16BITS( &_header->type ) );
866 879
867 switch ( EXTRACT_16BITS( &_header->type ) ) // defined in linux/if_ether.h 880 switch ( EXTRACT_16BITS( &_header->type ) ) // defined in linux/if_ether.h
868 { 881 {
869 case ETH_P_IP: new OIPPacket( end, (const struct iphdr*) (data+1), this ); break; 882 case ETH_P_IP: new OIPPacket( end, (const struct iphdr*) (data+1), this ); break;
870 case ETH_P_ARP: new OARPPacket( end, (const struct myarphdr*) (data+1), this ); break; 883 case ETH_P_ARP: new OARPPacket( end, (const struct myarphdr*) (data+1), this ); break;
871 default: qWarning( "OLLCPacket::OLLCPacket(): Unknown Encapsulation (type=%04X)", EXTRACT_16BITS( &_header->type ) ); 884 default: qWarning( "OLLCPacket::OLLCPacket(): Unknown Encapsulation (type=%04X)", EXTRACT_16BITS( &_header->type ) );
872 } 885 }
873 886
874 } 887 }
875} 888}
876 889
877 890
878OLLCPacket::~OLLCPacket() 891OLLCPacket::~OLLCPacket()
879{ 892{
880} 893}
881 894
882 895
883/*====================================================================================== 896/*======================================================================================
884 * OWaveLanControlPacket 897 * OWaveLanControlPacket
885 *======================================================================================*/ 898 *======================================================================================*/
886 899
887OWaveLanControlPacket::OWaveLanControlPacket( const unsigned char* end, const struct ieee_802_11_control_header* data, OWaveLanPacket* parent ) 900OWaveLanControlPacket::OWaveLanControlPacket( const unsigned char* end, const struct ieee_802_11_control_header* data, OWaveLanPacket* parent )
888 :QObject( parent, "802.11 Control" ), _header( data ) 901 :QObject( parent, "802.11 Control" ), _header( data )
889{ 902{
890 qDebug( "OWaveLanControlPacket::OWaveLanDataControl(): decoding frame..." ); 903 qDebug( "OWaveLanControlPacket::OWaveLanDataControl(): decoding frame..." );
891 //TODO: Implement this 904 //TODO: Implement this
892} 905}
893 906
894 907
895OWaveLanControlPacket::~OWaveLanControlPacket() 908OWaveLanControlPacket::~OWaveLanControlPacket()
896{ 909{
897} 910}
898 911
899 912
900/*====================================================================================== 913/*======================================================================================
901 * OPacketCapturer 914 * OPacketCapturer
902 *======================================================================================*/ 915 *======================================================================================*/
903 916
904OPacketCapturer::OPacketCapturer( QObject* parent, const char* name ) 917OPacketCapturer::OPacketCapturer( QObject* parent, const char* name )
905 :QObject( parent, name ), _name( QString::null ), _open( false ), 918 :QObject( parent, name ), _name( QString::null ), _open( false ),
906 _pch( 0 ), _pcd( 0 ), _sn( 0 ) 919 _pch( 0 ), _pcd( 0 ), _sn( 0 )
907{ 920{
908} 921}
909 922
910 923
911OPacketCapturer::~OPacketCapturer() 924OPacketCapturer::~OPacketCapturer()
912{ 925{
913 if ( _open ) 926 if ( _open )
914 { 927 {
915 qDebug( "OPacketCapturer::~OPacketCapturer(): pcap still open, autoclosing." ); 928 qDebug( "OPacketCapturer::~OPacketCapturer(): pcap still open, autoclosing." );
916 close(); 929 close();
917 } 930 }
918} 931}
919 932
920 933
921void OPacketCapturer::setBlocking( bool b ) 934void OPacketCapturer::setBlocking( bool b )
922{ 935{
923 if ( pcap_setnonblock( _pch, 1-b, _errbuf ) != -1 ) 936 if ( pcap_setnonblock( _pch, 1-b, _errbuf ) != -1 )
924 { 937 {
925 qDebug( "OPacketCapturer::setBlocking(): blocking mode changed successfully." ); 938 qDebug( "OPacketCapturer::setBlocking(): blocking mode changed successfully." );
926 } 939 }
927 else 940 else
928 { 941 {
929 qDebug( "OPacketCapturer::setBlocking(): can't change blocking mode: %s", _errbuf ); 942 qDebug( "OPacketCapturer::setBlocking(): can't change blocking mode: %s", _errbuf );
930 } 943 }
931} 944}
932 945
933 946
934bool OPacketCapturer::blocking() const 947bool OPacketCapturer::blocking() const
935{ 948{
936 int b = pcap_getnonblock( _pch, _errbuf ); 949 int b = pcap_getnonblock( _pch, _errbuf );
937 if ( b == -1 ) 950 if ( b == -1 )
938 { 951 {
939 qDebug( "OPacketCapturer::blocking(): can't get blocking mode: %s", _errbuf ); 952 qDebug( "OPacketCapturer::blocking(): can't get blocking mode: %s", _errbuf );
940 return -1; 953 return -1;
941 } 954 }
942 return !b; 955 return !b;
943} 956}
944 957
945 958
946void OPacketCapturer::closeDumpFile() 959void OPacketCapturer::closeDumpFile()
947{ 960{
948 if ( _pcd ) 961 if ( _pcd )
949 { 962 {
950 pcap_dump_close( _pcd ); 963 pcap_dump_close( _pcd );
951 _pcd = 0; 964 _pcd = 0;
952 } 965 }
953 pcap_close( _pch ); 966 pcap_close( _pch );
954} 967}
955 968
956 969
957void OPacketCapturer::close() 970void OPacketCapturer::close()
958{ 971{
959 if ( _open ) 972 if ( _open )
960 { 973 {
961 if ( _sn ) 974 if ( _sn )
962 { 975 {
963 _sn->disconnect( SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) ); 976 _sn->disconnect( SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) );
964 delete _sn; 977 delete _sn;
965 } 978 }
966 closeDumpFile(); 979 closeDumpFile();
967 _open = false; 980 _open = false;
968 } 981 }
969 982
970 qDebug( "OPacketCapturer::close() --- dumping capturing statistics..." ); 983 qDebug( "OPacketCapturer::close() --- dumping capturing statistics..." );
971 qDebug( "--------------------------------------------------" ); 984 qDebug( "--------------------------------------------------" );
972 for( QMap<QString,int>::Iterator it = _stats.begin(); it != _stats.end(); ++it ) 985 for( QMap<QString,int>::Iterator it = _stats.begin(); it != _stats.end(); ++it )
973 qDebug( "%s : %d", (const char*) it.key(), it.data() ); 986 qDebug( "%s : %d", (const char*) it.key(), it.data() );
974 qDebug( "--------------------------------------------------" ); 987 qDebug( "--------------------------------------------------" );
975 988
976} 989}
977 990
978 991
979int OPacketCapturer::dataLink() const 992int OPacketCapturer::dataLink() const
980{ 993{
981 return pcap_datalink( _pch ); 994 return pcap_datalink( _pch );
982} 995}
983 996
984 997
985void OPacketCapturer::dump( OPacket* p ) 998void OPacketCapturer::dump( OPacket* p )
986{ 999{
987 if ( !_pcd ) 1000 if ( !_pcd )
988 { 1001 {
989 qWarning( "OPacketCapturer::dump() - cannot dump without open capture file!" ); 1002 qWarning( "OPacketCapturer::dump() - cannot dump without open capture file!" );
990 return; 1003 return;
991 } 1004 }
992 pcap_dump( (u_char*) _pcd, &p->_hdr, p->_data ); 1005 pcap_dump( (u_char*) _pcd, &p->_hdr, p->_data );
993} 1006}
994 1007
995 1008
996int OPacketCapturer::fileno() const 1009int OPacketCapturer::fileno() const
997{ 1010{
998 if ( _open ) 1011 if ( _open )
999 { 1012 {
1000 return pcap_fileno( _pch ); 1013 return pcap_fileno( _pch );
1001 } 1014 }
1002 else 1015 else
1003 { 1016 {
1004 return -1; 1017 return -1;
1005 } 1018 }
1006} 1019}
1007 1020
1008OPacket* OPacketCapturer::next() 1021OPacket* OPacketCapturer::next()
1009{ 1022{
1010 packetheaderstruct header; 1023 packetheaderstruct header;
1011 qDebug( "==> OPacketCapturer::next()" ); 1024 qDebug( "==> OPacketCapturer::next()" );
1012 const unsigned char* pdata = pcap_next( _pch, &header ); 1025 const unsigned char* pdata = pcap_next( _pch, &header );
1013 qDebug( "<== OPacketCapturer::next()" ); 1026 qDebug( "<== OPacketCapturer::next()" );
1014 1027
1015 if ( pdata && header.len ) 1028 if ( pdata && header.len )
1016 { 1029 {
1017 OPacket* p = new OPacket( dataLink(), header, pdata, 0 ); 1030 OPacket* p = new OPacket( dataLink(), header, pdata, 0 );
1018 // packets shouldn't be inserted in the QObject child-parent hierarchy, 1031 // packets shouldn't be inserted in the QObject child-parent hierarchy,
1019 // because due to memory constraints they will be deleted as soon 1032 // because due to memory constraints they will be deleted as soon
1020 // as possible - that is right after they have been processed 1033 // as possible - that is right after they have been processed
1021 // by emit() [ see below ] 1034 // by emit() [ see below ]
1022 //TODO: make gathering statistics optional, because it takes time 1035 //TODO: make gathering statistics optional, because it takes time
1023 p->updateStats( _stats, const_cast<QObjectList*>( p->children() ) ); 1036 p->updateStats( _stats, const_cast<QObjectList*>( p->children() ) );
1024 1037
1025 return p; 1038 return p;
1026 } 1039 }
1027 else 1040 else
1028 { 1041 {
1029 qWarning( "OPacketCapturer::next() - no packet received!" ); 1042 qWarning( "OPacketCapturer::next() - no packet received!" );
1030 return 0; 1043 return 0;
1031 } 1044 }
1032} 1045}
1033 1046
1034 1047
1035bool OPacketCapturer::open( const QString& name ) 1048bool OPacketCapturer::open( const QString& name )
1036{ 1049{
1037 if ( _open ) 1050 if ( _open )
1038 { 1051 {
1039 if ( name == _name ) // ignore opening an already openend device 1052 if ( name == _name ) // ignore opening an already openend device
1040 { 1053 {
1041 return true; 1054 return true;
1042 } 1055 }
1043 else // close the last opened device 1056 else // close the last opened device
1044 { 1057 {
1045 close(); 1058 close();
1046 } 1059 }
1047 } 1060 }
1048 1061
1049 _name = name; 1062 _name = name;
1050 1063
1051 // open libpcap 1064 // open libpcap
1052 pcap_t* handle = pcap_open_live( const_cast<char*>( (const char*) name ), 1024, 0, 0, &_errbuf[0] ); 1065 pcap_t* handle = pcap_open_live( const_cast<char*>( (const char*) name ), 1024, 0, 0, &_errbuf[0] );
1053 1066
1054 if ( !handle ) 1067 if ( !handle )
1055 { 1068 {
1056 qWarning( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf ); 1069 qWarning( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf );
1057 return false; 1070 return false;
1058 } 1071 }
1059 1072
1060 qDebug( "OPacketCapturer::open(): libpcap [%s] opened successfully.", (const char*) name ); 1073 qDebug( "OPacketCapturer::open(): libpcap [%s] opened successfully.", (const char*) name );
1061 _pch = handle; 1074 _pch = handle;
1062 _open = true; 1075 _open = true;
1063 _stats.clear(); 1076 _stats.clear();
1064 1077
1065 // in case we have an application object, create a socket notifier 1078 // in case we have an application object, create a socket notifier
1066 if ( qApp ) //TODO: I don't like this here... 1079 if ( qApp ) //TODO: I don't like this here...
1067 { 1080 {
1068 _sn = new QSocketNotifier( fileno(), QSocketNotifier::Read ); 1081 _sn = new QSocketNotifier( fileno(), QSocketNotifier::Read );
1069 connect( _sn, SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) ); 1082 connect( _sn, SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) );
1070 } 1083 }
1071 1084
1072 return true; 1085 return true;
1073} 1086}
1074 1087
1075 1088
1076bool OPacketCapturer::openDumpFile( const QString& filename ) 1089bool OPacketCapturer::openDumpFile( const QString& filename )
1077{ 1090{
1078 pcap_dumper_t* dump = pcap_dump_open( _pch, const_cast<char*>( (const char*) filename ) ); 1091 pcap_dumper_t* dump = pcap_dump_open( _pch, const_cast<char*>( (const char*) filename ) );
1079 if ( !dump ) 1092 if ( !dump )
1080 { 1093 {
1081 qWarning( "OPacketCapturer::open(): can't open dump with '%s': %s", (const char*) filename, _errbuf ); 1094 qWarning( "OPacketCapturer::open(): can't open dump with '%s': %s", (const char*) filename, _errbuf );
1082 return false; 1095 return false;
1083 } 1096 }
1084 qDebug( "OPacketCapturer::open(): dump [%s] opened successfully.", (const char*) filename ); 1097 qDebug( "OPacketCapturer::open(): dump [%s] opened successfully.", (const char*) filename );
1085 _pcd = dump; 1098 _pcd = dump;
1086 1099
1087 return true; 1100 return true;
1088} 1101}
1089 1102
1090 1103
1091bool OPacketCapturer::open( const QFile& file ) 1104bool OPacketCapturer::open( const QFile& file )
1092{ 1105{
1093 QString name = file.name(); 1106 QString name = file.name();
1094 1107
1095 if ( _open ) 1108 if ( _open )
1096 { 1109 {
1097 close(); 1110 close();
1098 if ( name == _name ) // ignore opening an already openend device 1111 if ( name == _name ) // ignore opening an already openend device
1099 { 1112 {
1100 return true; 1113 return true;
1101 } 1114 }
1102 else // close the last opened device 1115 else // close the last opened device
1103 { 1116 {
1104 close(); 1117 close();
1105 } 1118 }
1106 } 1119 }
1107 1120
1108 _name = name; 1121 _name = name;
1109 1122
1110 pcap_t* handle = pcap_open_offline( const_cast<char*>( (const char*) name ), &_errbuf[0] ); 1123 pcap_t* handle = pcap_open_offline( const_cast<char*>( (const char*) name ), &_errbuf[0] );
1111 1124
1112 if ( handle ) 1125 if ( handle )
1113 { 1126 {
1114 qDebug( "OPacketCapturer::open(): libpcap opened successfully." ); 1127 qDebug( "OPacketCapturer::open(): libpcap opened successfully." );
1115 _pch = handle; 1128 _pch = handle;
1116 _open = true; 1129 _open = true;
1117 1130
1118 // in case we have an application object, create a socket notifier 1131 // in case we have an application object, create a socket notifier
1119 if ( qApp ) 1132 if ( qApp )
1120 { 1133 {
1121 _sn = new QSocketNotifier( fileno(), QSocketNotifier::Read ); 1134 _sn = new QSocketNotifier( fileno(), QSocketNotifier::Read );
1122 connect( _sn, SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) ); 1135 connect( _sn, SIGNAL( activated(int) ), this, SLOT( readyToReceive() ) );
1123 } 1136 }
1124 1137
1125 return true; 1138 return true;
1126 } 1139 }
1127 else 1140 else
1128 { 1141 {
1129 qDebug( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf ); 1142 qDebug( "OPacketCapturer::open(): can't open libpcap with '%s': %s", (const char*) name, _errbuf );
1130 return false; 1143 return false;
1131 } 1144 }
1132 1145
1133} 1146}
1134 1147
1135 1148
1136bool OPacketCapturer::isOpen() const 1149bool OPacketCapturer::isOpen() const
1137{ 1150{
1138 return _open; 1151 return _open;
1139} 1152}
1140 1153
1141 1154
1142void OPacketCapturer::readyToReceive() 1155void OPacketCapturer::readyToReceive()
1143{ 1156{
1144 qDebug( "OPacketCapturer::readyToReceive(): about to emit 'receivePacket(p)'" ); 1157 qDebug( "OPacketCapturer::readyToReceive(): about to emit 'receivePacket(p)'" );
1145 OPacket* p = next(); 1158 OPacket* p = next();
1146 emit receivedPacket( p ); 1159 emit receivedPacket( p );
1147 // emit is synchronous - packet has been dealt with, now it's safe to delete 1160 // emit is synchronous - packet has been dealt with, now it's safe to delete
1148 delete p; 1161 delete p;
1149} 1162}
1150 1163
1151 1164
1152const QMap<QString,int>& OPacketCapturer::statistics() const 1165const QMap<QString,int>& OPacketCapturer::statistics() const
1153{ 1166{
1154 return _stats; 1167 return _stats;
1155} 1168}
1156 1169
1157 1170
1158int OPacketCapturer::snapShot() const 1171int OPacketCapturer::snapShot() const
1159{ 1172{
1160 return pcap_snapshot( _pch ); 1173 return pcap_snapshot( _pch );
1161} 1174}
1162 1175
1163 1176
1164bool OPacketCapturer::swapped() const 1177bool OPacketCapturer::swapped() const
1165{ 1178{
1166 return pcap_is_swapped( _pch ); 1179 return pcap_is_swapped( _pch );
1167} 1180}
1168 1181
1169 1182
1170QString OPacketCapturer::version() const 1183QString OPacketCapturer::version() const
1171{ 1184{
1172 return QString().sprintf( "%s.%s", pcap_major_version( _pch ), pcap_minor_version( _pch ) ); 1185 return QString().sprintf( "%s.%s", pcap_major_version( _pch ), pcap_minor_version( _pch ) );
1173} 1186}
1174 1187
1175 1188
diff --git a/libopie2/opienet/udp_ports.h b/libopie2/opienet/udp_ports.h
new file mode 100644
index 0000000..5e92497
--- a/dev/null
+++ b/libopie2/opienet/udp_ports.h
@@ -0,0 +1,89 @@
1/*
2 * This file has been generated by doing
3 * find . -name "*"|xargs grep -h '#define UDP_PORT' > udp_ports.h
4 * in the root directory of Ethereal 0.9.15. Cudos to the Ethereal Team.
5 * -- Michael 'Mickey' Lauer <mickeyl@handhelds.org>
6 */
7
8 #define UDP_PORT_AODV654
9#define UDP_PORT_LENGTH 2
10#define UDP_PORT_OFFSET PARAMETER_VALUE_OFFSET
11#define UDP_PORT_RAS1 1718
12#define UDP_PORT_RAS2 1719
13 #define UDP_PORT_CPHA8116
14 #define UDP_PORT_DDTP1052
15 #define UDP_PORT_CUPS631
16 #define UDP_PORT_DLSW 2067
17 #define UDP_PORT_ISAKMP500
18#define UDP_PORT_L2TP 1701
19#define UDP_PORT_IAPP 2313
20#define UDP_PORT_HSRP 1985
21 #define UDP_PORT_SSDP 1900
22 #define UDP_PORT_TACACS49
23 #define UDP_PORT_CLDAP 389
24 #define UDP_PORT_VINES573
25 #define UDP_PORT_NBNS137
26 #define UDP_PORT_NBDGM138
27#define UDP_PORT_XYPLEX 173
28#define UDP_PORT_PIM_RP_DISC 496
29#define UDP_PORT_SLIMP3_V1 1069
30#define UDP_PORT_SLIMP3_V2 3483
31 #define UDP_PORT_RMCP 623
32 #define UDP_PORT_RMCP_SECURE664
33#define UDP_PORT_SYSLOG 514
34 #define UDP_PORT_SNMP 161
35 #define UDP_PORT_SNMP_TRAP162
36#define UDP_PORT_TFTP 69
37#define UDP_PORT_TIME 37
38 #define UDP_PORT_STUN 3478
39 #define UDP_PORT_SRVLOC427
40 #define UDP_PORT_TZSP0x9090
41 #define UDP_PORT_WCCP2048
42#define UDP_PORT_MSPROXY 1745
43#define UDP_PORT_BOOTPS 67
44#define UDP_PORT_BOOTPC 68
45#define UDP_PORT_XDMCP 177
46 #define UDP_PORT_DHCPV6_DOWNSTREAM546
47 #define UDP_PORT_DHCPV6_UPSTREAM547
48#define UDP_PORT_DNS 53
49#define UDP_PORT_MDNS 5353
50#define UDP_PORT_ICP 3130
51 #define UDP_PORT_ICQ4000
52 #define UDP_PORT_IPX 213 /* RFC 1234 */
53#define UDP_PORT_LDP 646
54#define UDP_PORT_LLC1 12000
55#define UDP_PORT_LLC2 12001
56#define UDP_PORT_LLC3 12002
57#define UDP_PORT_LLC4 12003
58#define UDP_PORT_LLC5 12004
59#define UDP_PORT_MIP 434
60 #define UDP_PORT_NCP 524
61 #define UDP_PORT_NTP123
62#define UDP_PORT_RIP 520
63 #define UDP_PORT_SAP9875
64#define UDP_PORT_SIP 5060
65 #define UDP_PORT_TIMED525
66#define UDP_PORT_RIPNG 521
67 #define UDP_PORT_WSP 9200 /* wap-wsp */
68 #define UDP_PORT_WTP_WSP 9201 /* wap-wsp-wtp */
69 #define UDP_PORT_WTLS_WSP 9202 /* wap-wsp-s */
70 #define UDP_PORT_WTLS_WTP_WSP 9203 /* wap-wsp-wtp-s*/
71 #define UDP_PORT_WSP_PUSH 2948 /* wap-wsp */
72 #define UDP_PORT_WTLS_WSP_PUSH 2949 /* wap-wsp-s */
73#define UDP_PORT_WHO 513
74 #define UDP_PORT_KERBEROS 88
75#define UDP_PORT_SFLOW 6343
76#define UDP_PORT_LAPLINK 1547
77 #define UDP_PORT_NETFLOW2055
78 #define UDP_PORT_RX_LOW 7000
79 #define UDP_PORT_RX_HIGH7009
80 #define UDP_PORT_RX_AFS_BACKUPS7021
81#define UDP_PORT_MGCP_GATEWAY 2427
82#define UDP_PORT_MGCP_CALLAGENT 2727
83#define UDP_PORT_PCLI 9000
84#define UDP_PORT_ARTNET 0x1936
85#define UDP_PORT_TERREDO 3544
86 #define UDP_PORT_RADIUS 1645
87 #define UDP_PORT_RADIUS_NEW1812
88 #define UDP_PORT_RADACCT1646
89 #define UDP_PORT_RADACCT_NEW1813