OPAL
Version 3.10.10
Main Page
Related Pages
Namespaces
Data Structures
Files
File List
Globals
pcapfile.h
Go to the documentation of this file.
1
/*
2
* pcapfile.h
3
*
4
* Ethernet capture (PCAP) file declaration
5
*
6
* Portable Tools Library
7
*
8
* Copyright (C) 2011 Vox Lucida Pty. Ltd.
9
*
10
* The contents of this file are subject to the Mozilla Public License
11
* Version 1.0 (the "License"); you may not use this file except in
12
* compliance with the License. You may obtain a copy of the License at
13
* http://www.mozilla.org/MPL/
14
*
15
* Software distributed under the License is distributed on an "AS IS"
16
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
17
* the License for the specific language governing rights and limitations
18
* under the License.
19
*
20
* The Original Code is Portable Tools Library.
21
*
22
* The Initial Developer of the Original Code is Vox Lucida
23
*
24
* All Rights Reserved.
25
*
26
* Contributor(s): ______________________________________.
27
*
28
* $Revision: 27285 $
29
* $Author: rjongbloed $
30
* $Date: 2012-03-22 20:44:50 -0500 (Thu, 22 Mar 2012) $
31
*/
32
33
#ifndef PTLIB_PCAPFILE_H
34
#define PTLIB_PCAPFILE_H
35
36
#ifdef P_USE_PRAGMA
37
#pragma interface
38
#endif
39
40
#include <
rtp/rtp.h
>
41
#include <
opal/mediafmt.h
>
42
#include <ptlib/sockets.h>
43
44
47
class
OpalPCAPFile
:
public
PFile
48
{
49
PCLASSINFO(
OpalPCAPFile
, PFile);
50
public
:
51
OpalPCAPFile
();
52
53
bool
Open
(
const
PFilePath & filename);
54
bool
Restart
();
55
56
void
PrintOn
(ostream & strm)
const
;
57
58
bool
ReadRawPacket
(PBYTEArray & payload);
59
int
GetDataLink
(PBYTEArray & payload);
60
int
GetIP
(PBYTEArray & payload);
61
int
GetUDP
(PBYTEArray & payload);
62
int
GetRTP
(
RTP_DataFrame
& rtp);
63
64
const
PTime &
GetPacketTime
()
const
{
return
m_packetTime
; }
65
const
PIPSocket::Address &
GetSrcIP
()
const
{
return
m_packetSrcIP
; }
66
const
PIPSocket::Address &
GetDstIP
()
const
{
return
m_packetDstIP
; }
67
unsigned
IsFragmentated
()
const
{
return
m_fragmentated
; }
68
WORD
GetSrcPort
()
const
{
return
m_packetSrcPort
; }
69
WORD
GetDstPort
()
const
{
return
m_packetDstPort
; }
70
71
void
SetFilterSrcIP
(
72
const
PIPSocket::Address & ip
73
) {
m_filterSrcIP
= ip; }
74
const
PIPSocket::Address &
GetFilterSrcIP
()
const
{
return
m_filterSrcIP
; }
75
76
void
SetFilterDstIP
(
77
const
PIPSocket::Address & ip
78
) {
m_filterDstIP
= ip; }
79
const
PIPSocket::Address &
GetFilterDstIP
()
const
{
return
m_filterDstIP
; }
80
81
void
SetFilterSrcPort
(
82
WORD port
83
) {
m_filterSrcPort
= port; }
84
WORD
GetFilterSrcPort
()
const
{
return
m_filterSrcPort
; }
85
86
void
SetFilterDstPort
(
87
WORD port
88
) {
m_filterDstPort
= port; }
89
WORD
GetFilterDstPort
()
const
{
return
m_filterDstPort
; }
90
91
92
struct
DiscoveredRTPInfo
{
93
DiscoveredRTPInfo
();
94
95
PIPSocketAddressAndPort
m_addr
[2];
96
RTP_DataFrame::PayloadTypes
m_payload
[2];
97
bool
m_found
[2];
98
99
DWORD
m_ssrc
[2];
100
WORD
m_seq
[2];
101
DWORD
m_ts
[2];
102
103
unsigned
m_ssrc_matches
[2];
104
unsigned
m_seq_matches
[2];
105
unsigned
m_ts_matches
[2];
106
107
RTP_DataFrame
m_firstFrame
[2];
108
109
PString
m_type
[2];
110
PString
m_format
[2];
111
112
size_t
m_index
[2];
113
};
114
class
DiscoveredRTPMap
:
public
PObject,
public
std::map<std::string, DiscoveredRTPInfo>
115
{
116
PCLASSINFO(
DiscoveredRTPMap
, PObject);
117
public
:
118
void
PrintOn
(ostream & strm)
const
;
119
};
120
121
bool
DiscoverRTP
(
DiscoveredRTPMap
& discoveredRTPMap);
122
123
void
SetFilters
(
124
const
DiscoveredRTPInfo
& rtp,
125
int
dir
126
);
127
bool
SetFilters
(
128
const
DiscoveredRTPMap
& rtp,
129
size_t
index
130
);
131
132
bool
SetPayloadMap
(
133
RTP_DataFrame::PayloadTypes
pt,
134
const
OpalMediaFormat
& format
135
);
136
137
OpalMediaFormat
GetMediaFormat
(
const
RTP_DataFrame
& rtp)
const
;
138
139
protected
:
140
PINDEX
GetNetworkLayerHeaderSize
();
141
142
struct
FileHeader
{
143
DWORD
magic_number
;
/* magic number */
144
WORD
version_major
;
/* major version number */
145
WORD
version_minor
;
/* minor version number */
146
DWORD
thiszone
;
/* GMT to local correction */
147
DWORD
sigfigs
;
/* accuracy of timestamps */
148
DWORD
snaplen
;
/* max length of captured packets, in octets */
149
DWORD
network
;
/* data link type */
150
};
151
152
struct
RecordHeader
{
153
DWORD
ts_sec
;
/* timestamp seconds */
154
DWORD
ts_usec
;
/* timestamp microseconds */
155
DWORD
incl_len
;
/* number of octets of packet saved in file */
156
DWORD
orig_len
;
/* actual length of packet */
157
};
158
159
160
FileHeader
m_fileHeader
;
161
bool
m_otherEndian
;
162
PBYTEArray
m_rawPacket
;
163
PTime
m_packetTime
;
164
165
PIPSocket::Address
m_filterSrcIP
;
166
PIPSocket::Address
m_filterDstIP
;
167
PIPSocket::Address
m_packetSrcIP
;
168
PIPSocket::Address
m_packetDstIP
;
169
170
PBYTEArray
m_fragments
;
171
bool
m_fragmentated
;
172
unsigned
m_fragmentProto
;
173
174
WORD
m_filterSrcPort
;
175
WORD
m_filterDstPort
;
176
WORD
m_packetSrcPort
;
177
WORD
m_packetDstPort
;
178
179
std::map<RTP_DataFrame::PayloadTypes, OpalMediaFormat>
m_payloadType2mediaFormat
;
180
};
181
182
183
#endif // PTLIB_PCAPFILE_H
184
185
186
// End Of File ///////////////////////////////////////////////////////////////
include
rtp
pcapfile.h
Generated on Tue Oct 22 2013 17:31:13 for OPAL by
1.8.4