/** * WinPR: Windows Portable Runtime * WinPR Logger * * Copyright 2013 Marc-Andre Moreau * * 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. */ #ifndef WINPR_WLOG_PACKET_MESSAGE_PRIVATE_H #define WINPR_WLOG_PACKET_MESSAGE_PRIVATE_H #include "wlog.h" #define PCAP_MAGIC_NUMBER 0xA1B2C3D4 struct _wPcapHeader { UINT32 magic_number; /* magic number */ UINT16 version_major; /* major version number */ UINT16 version_minor; /* minor version number */ INT32 thiszone; /* GMT to local correction */ UINT32 sigfigs; /* accuracy of timestamps */ UINT32 snaplen; /* max length of captured packets, in octets */ UINT32 network; /* data link type */ }; typedef struct _wPcapHeader wPcapHeader; struct _wPcapRecordHeader { UINT32 ts_sec; /* timestamp seconds */ UINT32 ts_usec; /* timestamp microseconds */ UINT32 incl_len; /* number of octets of packet saved in file */ UINT32 orig_len; /* actual length of packet */ }; typedef struct _wPcapRecordHeader wPcapRecordHeader; typedef struct _wPcapRecord wPcapRecord; struct _wPcapRecord { wPcapRecordHeader header; void* data; UINT32 length; wPcapRecord* next; }; struct _wPcap { FILE* fp; char* name; BOOL write; int file_size; int record_count; wPcapHeader header; wPcapRecord* head; wPcapRecord* tail; wPcapRecord* record; }; typedef struct _wPcap wPcap; wPcap* Pcap_Open(char* name, BOOL write); void Pcap_Close(wPcap* pcap); void Pcap_Flush(wPcap* pcap); struct _wEthernetHeader { BYTE Destination[6]; BYTE Source[6]; UINT16 Type; }; typedef struct _wEthernetHeader wEthernetHeader; struct _wIPv4Header { BYTE Version; BYTE InternetHeaderLength; BYTE TypeOfService; UINT16 TotalLength; UINT16 Identification; BYTE InternetProtocolFlags; UINT16 FragmentOffset; BYTE TimeToLive; BYTE Protocol; UINT16 HeaderChecksum; UINT32 SourceAddress; UINT32 DestinationAddress; }; typedef struct _wIPv4Header wIPv4Header; struct _wTcpHeader { UINT16 SourcePort; UINT16 DestinationPort; UINT32 SequenceNumber; UINT32 AcknowledgementNumber; BYTE Offset; BYTE Reserved; BYTE TcpFlags; UINT16 Window; UINT16 Checksum; UINT16 UrgentPointer; }; typedef struct _wTcpHeader wTcpHeader; BOOL WLog_PacketMessage_Write(wPcap* pcap, void* data, DWORD length, DWORD flags); #endif /* WINPR_WLOG_PACKET_MESSAGE_PRIVATE_H */