]>
git.saurik.com Git - apple/mdnsresponder.git/blob - mDNSMacOSX/BonjourTop/source/CaptureFile.cpp
5 // Created by Terrin Eager on 9/14/12.
9 #include "CaptureFile.h"
12 #include <sys/types.h>
14 #define BJ_MAX_PACKET (1024*20)
20 __uint32_t captureLen
;
26 CCaptureFile::CCaptureFile()
30 m_pFrameHeader
= NULL
;
33 m_nFirstFrameTime
= 0;
38 CCaptureFile::~CCaptureFile()
43 bool CCaptureFile::Init()
45 m_pFileHeader
= new BJ_UINT8
[sizeof(pcap_file_header
)];
46 m_pFrameHeader
= new BJ_UINT8
[sizeof(packetheader
)];
47 m_pFrameData
= new BJ_UINT8
[BJ_MAX_PACKET
];
49 return (m_pFrameHeader
&& m_pFrameData
&& m_pFileHeader
);
52 bool CCaptureFile::Clear()
54 delete m_pFileHeader
; m_pFileHeader
= NULL
;
55 delete m_pFrameData
; m_pFrameData
= NULL
;
56 delete m_pFrameHeader
; m_pFrameHeader
= NULL
;
58 fclose(m_hFile
); m_hFile
= NULL
;
62 bool CCaptureFile::Open(const char* pFileName
)
64 m_hFile
= fopen(pFileName
, "r");
68 printf("Failed to open %s\n",pFileName
);
73 fread(m_pFileHeader
, sizeof(pcap_file_header
), 1,m_hFile
);
75 // pcap_file_header* pHeader = (pcap_file_header*)m_pFileHeader;
76 // int magic = pHeader->magic;
77 // int nType = pHeader->linktype;
79 pcap_file_header
* pHeader
= (pcap_file_header
*)m_pFileHeader
;
80 m_datalinkType
= (Frame::BJ_DATALINKTYPE
) pHeader
->linktype
;
81 m_CurrentFrame
.SetDatalinkType(m_datalinkType
);
85 bool CCaptureFile::NextFrame()
87 packetheader
* pFrameHeader
= NULL
;
92 if (fread(m_pFrameHeader
,1,sizeof(packetheader
),m_hFile
)< sizeof(packetheader
))
95 pFrameHeader
= (packetheader
*) m_pFrameHeader
;
97 m_nWireLen
= pFrameHeader
->origLen
;
98 m_TimeSec
= pFrameHeader
->sec
;
99 if (m_nFirstFrameTime
== 0)
100 m_nFirstFrameTime
= m_TimeSec
;
101 m_nCaptureLen
= pFrameHeader
->captureLen
; // to do handle frames bigger than buffer
104 if (m_nCaptureLen
> BJ_MAX_PACKET
)
105 { // force truncate the packet ...
106 nSkip
= m_nCaptureLen
- BJ_MAX_PACKET
;
107 m_nCaptureLen
= BJ_MAX_PACKET
;
110 if (fread(m_pFrameData
,1,m_nCaptureLen
,m_hFile
) < m_nCaptureLen
)
114 fseek(m_hFile
, nSkip
, SEEK_CUR
);
116 m_CurrentFrame
.Set(m_pFrameData
, m_nCaptureLen
,pFrameHeader
->sec
*1000000ll + pFrameHeader
->usec
);
122 bool CCaptureFile::Close()
128 __uint32_t
CCaptureFile::GetDeltaTime()
130 return m_TimeSec
-m_nFirstFrameTime
;
133 __uint32_t
CCaptureFile::GetBufferLen(BJ_UINT8
* pStart
)
135 return m_nCaptureLen
- (__uint32_t
) (pStart
- m_pFrameData
);