From 10d52d86b8e178b066974db36c93af56916a8740 Mon Sep 17 00:00:00 2001 From: Andy Sun Date: Wed, 20 Oct 2021 15:38:35 +0800 Subject: Adjust the location of using_mbedtls and socket_wrapper --- .../Common/WinPCap/Packet32.h | 398 --------- .../Common/WinPCap/PacketData.h | 267 ------ .../Common/WinPCap/Win32-Extensions.h | 127 --- .../Common/WinPCap/bittypes.h | 137 --- .../Common/WinPCap/ip6_misc.h | 165 ---- .../Common/WinPCap/netif.h | 52 -- .../Common/WinPCap/pcap-bpf.h | 47 -- .../Common/WinPCap/pcap-namedb.h | 42 - .../Common/WinPCap/pcap-stdinc.h | 93 -- .../Common/WinPCap/pcap.h | 45 - .../Common/WinPCap/pcap/bluetooth.h | 48 -- .../Common/WinPCap/pcap/bpf.h | 934 --------------------- .../Common/WinPCap/pcap/namedb.h | 89 -- .../Common/WinPCap/pcap/pcap.h | 407 --------- .../Common/WinPCap/pcap/sll.h | 129 --- .../Common/WinPCap/pcap/usb.h | 90 -- .../Common/WinPCap/pcap/vlan.h | 46 - .../Common/WinPCap/remote-ext.h | 472 ----------- .../Common/WinPCap/wpcap.lib | Bin 19320 -> 0 bytes .../Common/mbedtls/sockets_wrapper.c | 931 -------------------- .../Common/mbedtls/sockets_wrapper.h | 136 --- .../MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj | 12 +- .../WIN32.vcxproj.filters | 18 +- .../network_transport/cellular/sockets_wrapper.c | 931 ++++++++++++++++++++ .../network_transport/cellular/sockets_wrapper.h | 136 +++ .../cellular/using_mbedtls/using_mbedtls.c | 847 +++++++++++++++++++ .../cellular/using_mbedtls/using_mbedtls.h | 218 +++++ 27 files changed, 2148 insertions(+), 4669 deletions(-) delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/Packet32.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/PacketData.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/Win32-Extensions.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/bittypes.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/ip6_misc.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/netif.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-bpf.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-namedb.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-stdinc.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/bluetooth.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/bpf.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/namedb.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/pcap.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/sll.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/usb.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/vlan.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/remote-ext.h delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/wpcap.lib delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/mbedtls/sockets_wrapper.c delete mode 100644 FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/mbedtls/sockets_wrapper.h create mode 100644 FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/sockets_wrapper.c create mode 100644 FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/sockets_wrapper.h create mode 100644 FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/using_mbedtls/using_mbedtls.c create mode 100644 FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/using_mbedtls/using_mbedtls.h diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/Packet32.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/Packet32.h deleted file mode 100644 index e8a444dee..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/Packet32.h +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2007 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -/** @ingroup packetapi - * @{ - */ - -/** @defgroup packet32h Packet.dll definitions and data structures - * Packet32.h contains the data structures and the definitions used by packet.dll. - * The file is used both by the Win9x and the WinNTx versions of packet.dll, and can be included - * by the applications that use the functions of this library - * @{ - */ - -#ifndef __PACKET32 - #define __PACKET32 - - #include - - #ifdef HAVE_AIRPCAP_API - #include - #else - #if !defined( AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ ) - #define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ - typedef struct _AirpcapHandle * PAirpcapHandle; - #endif /* AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ */ - #endif /* HAVE_AIRPCAP_API */ - - #ifdef HAVE_DAG_API - #include - #endif /* HAVE_DAG_API */ - -/* Working modes */ - #define PACKET_MODE_CAPT 0x0 /*/< Capture mode */ - #define PACKET_MODE_STAT 0x1 /*/< Statistical mode */ - #define PACKET_MODE_MON 0x2 /*/< Monitoring mode */ - #define PACKET_MODE_DUMP 0x10 /*/< Dump mode */ - #define PACKET_MODE_STAT_DUMP MODE_DUMP | MODE_STAT /*/< Statistical dump Mode */ - - -/*/ Alignment macro. Defines the alignment size. */ - #define Packet_ALIGNMENT sizeof( int ) -/*/ Alignment macro. Rounds up to the next even multiple of Packet_ALIGNMENT. */ - #define Packet_WORDALIGN( x ) ( ( ( x ) + ( Packet_ALIGNMENT - 1 ) ) & ~( Packet_ALIGNMENT - 1 ) ) - - #define NdisMediumNull -1 /*/< Custom linktype: NDIS doesn't provide an equivalent */ - #define NdisMediumCHDLC -2 /*/< Custom linktype: NDIS doesn't provide an equivalent */ - #define NdisMediumPPPSerial -3 /*/< Custom linktype: NDIS doesn't provide an equivalent */ - #define NdisMediumBare80211 -4 /*/< Custom linktype: NDIS doesn't provide an equivalent */ - #define NdisMediumRadio80211 -5 /*/< Custom linktype: NDIS doesn't provide an equivalent */ - #define NdisMediumPpi -6 /*/< Custom linktype: NDIS doesn't provide an equivalent */ - -/* Loopback behaviour definitions */ - #define NPF_DISABLE_LOOPBACK 1 /*/< Drop the packets sent by the NPF driver */ - #define NPF_ENABLE_LOOPBACK 2 /*/< Capture the packets sent by the NPF driver */ - -/*! - * \brief Network type structure. - * - * This structure is used by the PacketGetNetType() function to return information on the current adapter's type and speed. - */ - typedef struct NetType - { - UINT LinkType; /*/< The MAC of the current network adapter (see function PacketGetNetType() for more information) */ - ULONGLONG LinkSpeed; /*/< The speed of the network in bits per second */ - } NetType; - - -/*some definitions stolen from libpcap */ - - #ifndef BPF_MAJOR_VERSION - -/*! - * \brief A BPF pseudo-assembly program. - * - * The program will be injected in the kernel by the PacketSetBPF() function and applied to every incoming packet. - */ - struct bpf_program - { - UINT bf_len; /*/< Indicates the number of instructions of the program, i.e. the number of struct bpf_insn that will follow. */ - struct bpf_insn * bf_insns; /*/< A pointer to the first instruction of the program. */ - }; - -/*! - * \brief A single BPF pseudo-instruction. - * - * bpf_insn contains a single instruction for the BPF register-machine. It is used to send a filter program to the driver. - */ - struct bpf_insn - { - USHORT code; /*/< Instruction type and addressing mode. */ - UCHAR jt; /*/< Jump if true */ - UCHAR jf; /*/< Jump if false */ - int k; /*/< Generic field used for various purposes. */ - }; - -/*! - * \brief Structure that contains a couple of statistics values on the current capture. - * - * It is used by packet.dll to return statistics about a capture session. - */ - struct bpf_stat - { - UINT bs_recv; /*/< Number of packets that the driver received from the network adapter */ - /*/< from the beginning of the current capture. This value includes the packets */ - /*/< lost by the driver. */ - UINT bs_drop; /*/< number of packets that the driver lost from the beginning of a capture. */ - /*/< Basically, a packet is lost when the the buffer of the driver is full. */ - /*/< In this situation the packet cannot be stored and the driver rejects it. */ - UINT ps_ifdrop; /*/< drops by interface. XXX not yet supported */ - UINT bs_capt; /*/< number of packets that pass the filter, find place in the kernel buffer and */ - /*/< thus reach the application. */ - }; - -/*! - * \brief Packet header. - * - * This structure defines the header associated with every packet delivered to the application. - */ - struct bpf_hdr - { - struct timeval bh_tstamp; /*/< The timestamp associated with the captured packet. */ - /*/< It is stored in a TimeVal structure. */ - UINT bh_caplen; /*/< Length of captured portion. The captured portion can be different */ - /*/< from the original packet, because it is possible (with a proper filter) */ - /*/< to instruct the driver to capture only a portion of the packets. */ - UINT bh_datalen; /*/< Original length of packet */ - USHORT bh_hdrlen; /*/< Length of bpf header (this struct plus alignment padding). In some cases, */ - /*/< a padding could be added between the end of this structure and the packet */ - /*/< data for performance reasons. This filed can be used to retrieve the actual data */ - /*/< of the packet. */ - }; - -/*! - * \brief Dump packet header. - * - * This structure defines the header associated with the packets in a buffer to be used with PacketSendPackets(). - * It is simpler than the bpf_hdr, because it corresponds to the header associated by WinPcap and libpcap to a - * packet in a dump file. This makes straightforward sending WinPcap dump files to the network. - */ - struct dump_bpf_hdr - { - struct timeval ts; /*/< Time stamp of the packet */ - UINT caplen; /*/< Length of captured portion. The captured portion can smaller than the */ - /*/< the original packet, because it is possible (with a proper filter) to */ - /*/< instruct the driver to capture only a portion of the packets. */ - UINT len; /*/< Length of the original packet (off wire). */ - }; - - - #endif /* ifndef BPF_MAJOR_VERSION */ - - struct bpf_stat; - - #define DOSNAMEPREFIX TEXT( "Packet_" ) /*/< Prefix added to the adapters device names to create the WinPcap devices */ - #define MAX_LINK_NAME_LENGTH 64 /*< Maximum length of the devices symbolic links */ - #define NMAX_PACKET 65535 - -/*! - * \brief Addresses of a network adapter. - * - * This structure is used by the PacketGetNetInfoEx() function to return the IP addresses associated with - * an adapter. - */ - typedef struct npf_if_addr - { - struct sockaddr_storage IPAddress; /*/< IP address. */ - struct sockaddr_storage SubnetMask; /*/< Netmask for that address. */ - struct sockaddr_storage Broadcast; /*/< Broadcast address. */ - } npf_if_addr; - - - #define ADAPTER_NAME_LENGTH 256 + 12 /*/< Maximum length for the name of an adapter. The value is the same used by the IP Helper API. */ - #define ADAPTER_DESC_LENGTH 128 /*/< Maximum length for the description of an adapter. The value is the same used by the IP Helper API. */ - #define MAX_MAC_ADDR_LENGTH 8 /*/< Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API. */ - #define MAX_NETWORK_ADDRESSES 16 /*/< Maximum length for the link layer address of an adapter. The value is the same used by the IP Helper API. */ - - - typedef struct WAN_ADAPTER_INT WAN_ADAPTER; /*/< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API */ - typedef WAN_ADAPTER * PWAN_ADAPTER; /*/< Describes an opened wan (dialup, VPN...) network adapter using the NetMon API */ - - #define INFO_FLAG_NDIS_ADAPTER 0 /*/< Flag for ADAPTER_INFO: this is a traditional ndis adapter */ - #define INFO_FLAG_NDISWAN_ADAPTER 1 /*/< Flag for ADAPTER_INFO: this is a NdisWan adapter, and it's managed by WANPACKET */ - #define INFO_FLAG_DAG_CARD 2 /*/< Flag for ADAPTER_INFO: this is a DAG card */ - #define INFO_FLAG_DAG_FILE 6 /*/< Flag for ADAPTER_INFO: this is a DAG file */ - #define INFO_FLAG_DONT_EXPORT 8 /*/< Flag for ADAPTER_INFO: when this flag is set, the adapter will not be listed or openend by winpcap. This allows to prevent exporting broken network adapters, like for example FireWire ones. */ - #define INFO_FLAG_AIRPCAP_CARD 16 /*/< Flag for ADAPTER_INFO: this is an airpcap card */ - #define INFO_FLAG_NPFIM_DEVICE 32 - -/*! - * \brief Describes an opened network adapter. - * - * This structure is the most important for the functioning of packet.dll, but the great part of its fields - * should be ignored by the user, since the library offers functions that avoid to cope with low-level parameters - */ - typedef struct _ADAPTER - { - HANDLE hFile; /*/< \internal Handle to an open instance of the NPF driver. */ - CHAR SymbolicLink[ MAX_LINK_NAME_LENGTH ]; /*/< \internal A string containing the name of the network adapter currently opened. */ - int NumWrites; /*/< \internal Number of times a packets written on this adapter will be repeated */ - /*/< on the wire. */ - HANDLE ReadEvent; /*/< A notification event associated with the read calls on the adapter. */ - /*/< It can be passed to standard Win32 functions (like WaitForSingleObject */ - /*/< or WaitForMultipleObjects) to wait until the driver's buffer contains some */ - /*/< data. It is particularly useful in GUI applications that need to wait */ - /*/< concurrently on several events. In Windows NT/2000 the PacketSetMinToCopy() */ - /*/< function can be used to define the minimum amount of data in the kernel buffer */ - /*/< that will cause the event to be signalled. */ - - UINT ReadTimeOut; /*/< \internal The amount of time after which a read on the driver will be released and */ - /*/< ReadEvent will be signaled, also if no packets were captured */ - CHAR Name[ ADAPTER_NAME_LENGTH ]; - PWAN_ADAPTER pWanAdapter; - UINT Flags; /*/< Adapter's flags. Tell if this adapter must be treated in a different way, using the Netmon API or the dagc API. */ - - #ifdef HAVE_AIRPCAP_API - PAirpcapHandle AirpcapAd; - #endif // HAVE_AIRPCAP_API - - #ifdef HAVE_NPFIM_API - void * NpfImHandle; - #endif // HAVE_NPFIM_API - - #ifdef HAVE_DAG_API - dagc_t * pDagCard; /*/< Pointer to the dagc API adapter descriptor for this adapter */ - PCHAR DagBuffer; /*/< Pointer to the buffer with the packets that is received from the DAG card */ - struct timeval DagReadTimeout; /*/< Read timeout. The dagc API requires a timeval structure */ - unsigned DagFcsLen; /*/< Length of the frame check sequence attached to any packet by the card. Obtained from the registry */ - DWORD DagFastProcess; /*/< True if the user requests fast capture processing on this card. Higher level applications can use this value to provide a faster but possibly unprecise capture (for example, libpcap doesn't convert the timestamps). */ - #endif // HAVE_DAG_API - } ADAPTER, * LPADAPTER; - -/*! - * \brief Structure that contains a group of packets coming from the driver. - * - * This structure defines the header associated with every packet delivered to the application. - */ - typedef struct _PACKET - { - HANDLE hEvent; /*/< \deprecated Still present for compatibility with old applications. */ - OVERLAPPED OverLapped; /*/< \deprecated Still present for compatibility with old applications. */ - PVOID Buffer; /*/< Buffer with containing the packets. See the PacketReceivePacket() for */ - /*/< details about the organization of the data in this buffer */ - UINT Length; /*/< Length of the buffer */ - DWORD ulBytesReceived; /*/< Number of valid bytes present in the buffer, i.e. amount of data */ - /*/< received by the last call to PacketReceivePacket() */ - BOOLEAN bIoComplete; /*/< \deprecated Still present for compatibility with old applications. */ - } PACKET, * LPPACKET; - -/*! - * \brief Structure containing an OID request. - * - * It is used by the PacketRequest() function to send an OID to the interface card driver. - * It can be used, for example, to retrieve the status of the error counters on the adapter, its MAC address, - * the list of the multicast groups defined on it, and so on. - */ - struct _PACKET_OID_DATA - { - ULONG Oid; /*/< OID code. See the Microsoft DDK documentation or the file ntddndis.h */ - /*/< for a complete list of valid codes. */ - ULONG Length; /*/< Length of the data field */ - UCHAR Data[ 1 ]; /*/< variable-lenght field that contains the information passed to or received */ - /*/< from the adapter. */ - }; - typedef struct _PACKET_OID_DATA PACKET_OID_DATA, * PPACKET_OID_DATA; - - #ifdef __cplusplus - extern "C" { - #endif - -/** - * @} - */ - -/* - * BOOLEAN QueryWinPcapRegistryStringA(CHAR *SubKeyName, - * CHAR *Value, - * UINT *pValueLen, - * CHAR *DefaultVal); - * - * BOOLEAN QueryWinPcapRegistryStringW(WCHAR *SubKeyName, - * WCHAR *Value, - * UINT *pValueLen, - * WCHAR *DefaultVal); - */ - -/*--------------------------------------------------------------------------- */ -/* EXPORTED FUNCTIONS */ -/*--------------------------------------------------------------------------- */ - - PCHAR PacketGetVersion(); - PCHAR PacketGetDriverVersion(); - BOOLEAN PacketSetMinToCopy( LPADAPTER AdapterObject, - int nbytes ); - BOOLEAN PacketSetNumWrites( LPADAPTER AdapterObject, - int nwrites ); - BOOLEAN PacketSetMode( LPADAPTER AdapterObject, - int mode ); - BOOLEAN PacketSetReadTimeout( LPADAPTER AdapterObject, - int timeout ); - BOOLEAN PacketSetBpf( LPADAPTER AdapterObject, - struct bpf_program * fp ); - BOOLEAN PacketSetLoopbackBehavior( LPADAPTER AdapterObject, - UINT LoopbackBehavior ); - INT PacketSetSnapLen( LPADAPTER AdapterObject, - int snaplen ); - BOOLEAN PacketGetStats( LPADAPTER AdapterObject, - struct bpf_stat * s ); - BOOLEAN PacketGetStatsEx( LPADAPTER AdapterObject, - struct bpf_stat * s ); - BOOLEAN PacketSetBuff( LPADAPTER AdapterObject, - int dim ); - BOOLEAN PacketGetNetType( LPADAPTER AdapterObject, - NetType * type ); - LPADAPTER PacketOpenAdapter( PCHAR AdapterName ); - BOOLEAN PacketSendPacket( LPADAPTER AdapterObject, - LPPACKET pPacket, - BOOLEAN Sync ); - INT PacketSendPackets( LPADAPTER AdapterObject, - PVOID PacketBuff, - ULONG Size, - BOOLEAN Sync ); - LPPACKET PacketAllocatePacket( void ); - VOID PacketInitPacket( LPPACKET lpPacket, - PVOID Buffer, - UINT Length ); - VOID PacketFreePacket( LPPACKET lpPacket ); - BOOLEAN PacketReceivePacket( LPADAPTER AdapterObject, - LPPACKET lpPacket, - BOOLEAN Sync ); - BOOLEAN PacketSetHwFilter( LPADAPTER AdapterObject, - ULONG Filter ); - BOOLEAN PacketGetAdapterNames( PTSTR pStr, - PULONG BufferSize ); - BOOLEAN PacketGetNetInfoEx( PCHAR AdapterName, - npf_if_addr * buffer, - PLONG NEntries ); - BOOLEAN PacketRequest( LPADAPTER AdapterObject, - BOOLEAN Set, - PPACKET_OID_DATA OidData ); - HANDLE PacketGetReadEvent( LPADAPTER AdapterObject ); - BOOLEAN PacketSetDumpName( LPADAPTER AdapterObject, - void * name, - int len ); - BOOLEAN PacketSetDumpLimits( LPADAPTER AdapterObject, - UINT maxfilesize, - UINT maxnpacks ); - BOOLEAN PacketIsDumpEnded( LPADAPTER AdapterObject, - BOOLEAN sync ); - BOOL PacketStopDriver(); - VOID PacketCloseAdapter( LPADAPTER lpAdapter ); - BOOLEAN PacketStartOem( PCHAR errorString, - UINT errorStringLength ); - BOOLEAN PacketStartOemEx( PCHAR errorString, - UINT errorStringLength, - ULONG flags ); - PAirpcapHandle PacketGetAirPcapHandle( LPADAPTER AdapterObject ); - -/* */ -/* Used by PacketStartOemEx */ -/* */ - #define PACKET_START_OEM_NO_NETMON 0x00000001 - - #ifdef __cplusplus - } - #endif - -#endif //__PACKET32 diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/PacketData.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/PacketData.h deleted file mode 100644 index baf732ee9..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/PacketData.h +++ /dev/null @@ -1,267 +0,0 @@ -char pkt1[] = { - 0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14, - 0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x30, 0x09, 0x9c, 0x40, 0x00, 0x80, 0x06, - 0x6f, 0x07, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8, - 0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7, - 0xc7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02, - 0x40, 0x00, 0xdf, 0xab, 0x00, 0x00, 0x02, 0x04, - 0x05, 0xb4, 0x01, 0x01, 0x04, 0x02 }; - -char pkt2[] = { - 0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01, - 0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x2c, 0x00, 0x01, 0x00, 0x00, 0x40, 0x06, - 0xf8, 0xa6, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8, - 0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00, - 0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12, - 0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04, - 0x05, 0x92 }; - -char pkt3[] = { - 0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14, - 0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x28, 0x09, 0x9e, 0x40, 0x00, 0x80, 0x06, - 0x6f, 0x0d, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8, - 0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7, - 0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10, - 0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 }; - -char pkt4[] = { - 0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14, - 0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00, - 0x02, 0x27, 0x09, 0x9f, 0x40, 0x00, 0x80, 0x06, - 0x6d, 0x0d, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8, - 0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7, - 0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x18, - 0x42, 0xd8, 0x84, 0x3e, 0x00, 0x00, 0x47, 0x45, - 0x54, 0x20, 0x2f, 0x20, 0x48, 0x54, 0x54, 0x50, - 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0x2c, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, - 0x2d, 0x78, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70, - 0x2c, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, - 0x6a, 0x70, 0x65, 0x67, 0x2c, 0x20, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6a, 0x70, 0x65, - 0x67, 0x2c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, - 0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d, 0x65, 0x78, - 0x63, 0x65, 0x6c, 0x2c, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x6d, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2c, - 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x6e, 0x64, - 0x2e, 0x6d, 0x73, 0x2d, 0x70, 0x6f, 0x77, 0x65, - 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73, - 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73, 0x2d, 0x78, - 0x62, 0x61, 0x70, 0x2c, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x76, 0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d, - 0x78, 0x70, 0x73, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x78, 0x61, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, - 0x6c, 0x2c, 0x20, 0x2a, 0x2f, 0x2a, 0x0d, 0x0a, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, - 0x20, 0x65, 0x6e, 0x2d, 0x67, 0x62, 0x0d, 0x0a, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, - 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, - 0x20, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x20, 0x64, - 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x0d, 0x0a, - 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, - 0x6c, 0x6c, 0x61, 0x2f, 0x34, 0x2e, 0x30, 0x20, - 0x28, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, - 0x62, 0x6c, 0x65, 0x3b, 0x20, 0x4d, 0x53, 0x49, - 0x45, 0x20, 0x36, 0x2e, 0x30, 0x3b, 0x20, 0x57, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x4e, - 0x54, 0x20, 0x35, 0x2e, 0x31, 0x3b, 0x20, 0x53, - 0x56, 0x31, 0x3b, 0x20, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x54, 0x35, 0x3b, 0x20, 0x2e, 0x4e, - 0x45, 0x54, 0x20, 0x43, 0x4c, 0x52, 0x20, 0x32, - 0x2e, 0x30, 0x2e, 0x35, 0x30, 0x37, 0x32, 0x37, - 0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43, - 0x4c, 0x52, 0x20, 0x33, 0x2e, 0x30, 0x2e, 0x30, - 0x34, 0x35, 0x30, 0x36, 0x2e, 0x36, 0x34, 0x38, - 0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43, - 0x4c, 0x52, 0x20, 0x33, 0x2e, 0x35, 0x2e, 0x32, - 0x31, 0x30, 0x32, 0x32, 0x29, 0x0d, 0x0a, 0x48, - 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x39, 0x32, - 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x30, 0x2e, 0x31, - 0x32, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4b, - 0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76, - 0x65, 0x0d, 0x0a, 0x0d, 0x0a }; - -char pkt5[] = { - 0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01, - 0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x2c, 0x00, 0x02, 0x00, 0x00, 0x40, 0x06, - 0xf8, 0xa5, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8, - 0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00, - 0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12, - 0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04, - 0x05, 0x92 }; - -char pkt6[] = { - 0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14, - 0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x28, 0x09, 0xa1, 0x40, 0x00, 0x80, 0x06, - 0x6f, 0x0a, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8, - 0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7, - 0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10, - 0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 }; - -char pkt7[] = { - 0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14, - 0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00, - 0x02, 0x27, 0x09, 0xa2, 0x40, 0x00, 0x80, 0x06, - 0x6d, 0x0a, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8, - 0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7, - 0xc7, 0x36, 0x00, 0x00, 0x06, 0x69, 0x50, 0x18, - 0x42, 0xd8, 0x84, 0x3e, 0x00, 0x00, 0x47, 0x45, - 0x54, 0x20, 0x2f, 0x20, 0x48, 0x54, 0x54, 0x50, - 0x2f, 0x31, 0x2e, 0x31, 0x0d, 0x0a, 0x41, 0x63, - 0x63, 0x65, 0x70, 0x74, 0x3a, 0x20, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x2f, 0x67, 0x69, 0x66, 0x2c, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x78, - 0x2d, 0x78, 0x62, 0x69, 0x74, 0x6d, 0x61, 0x70, - 0x2c, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, - 0x6a, 0x70, 0x65, 0x67, 0x2c, 0x20, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x2f, 0x70, 0x6a, 0x70, 0x65, - 0x67, 0x2c, 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, - 0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d, 0x65, 0x78, - 0x63, 0x65, 0x6c, 0x2c, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x6d, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2c, - 0x20, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x6e, 0x64, - 0x2e, 0x6d, 0x73, 0x2d, 0x70, 0x6f, 0x77, 0x65, - 0x72, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x2c, 0x20, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73, - 0x2d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x78, 0x2d, 0x6d, 0x73, 0x2d, 0x78, - 0x62, 0x61, 0x70, 0x2c, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x76, 0x6e, 0x64, 0x2e, 0x6d, 0x73, 0x2d, - 0x78, 0x70, 0x73, 0x64, 0x6f, 0x63, 0x75, 0x6d, - 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x78, 0x61, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, - 0x6c, 0x2c, 0x20, 0x2a, 0x2f, 0x2a, 0x0d, 0x0a, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x4c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x3a, - 0x20, 0x65, 0x6e, 0x2d, 0x67, 0x62, 0x0d, 0x0a, - 0x41, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x45, - 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x3a, - 0x20, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x20, 0x64, - 0x65, 0x66, 0x6c, 0x61, 0x74, 0x65, 0x0d, 0x0a, - 0x55, 0x73, 0x65, 0x72, 0x2d, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x3a, 0x20, 0x4d, 0x6f, 0x7a, 0x69, - 0x6c, 0x6c, 0x61, 0x2f, 0x34, 0x2e, 0x30, 0x20, - 0x28, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, - 0x62, 0x6c, 0x65, 0x3b, 0x20, 0x4d, 0x53, 0x49, - 0x45, 0x20, 0x36, 0x2e, 0x30, 0x3b, 0x20, 0x57, - 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x73, 0x20, 0x4e, - 0x54, 0x20, 0x35, 0x2e, 0x31, 0x3b, 0x20, 0x53, - 0x56, 0x31, 0x3b, 0x20, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x54, 0x35, 0x3b, 0x20, 0x2e, 0x4e, - 0x45, 0x54, 0x20, 0x43, 0x4c, 0x52, 0x20, 0x32, - 0x2e, 0x30, 0x2e, 0x35, 0x30, 0x37, 0x32, 0x37, - 0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43, - 0x4c, 0x52, 0x20, 0x33, 0x2e, 0x30, 0x2e, 0x30, - 0x34, 0x35, 0x30, 0x36, 0x2e, 0x36, 0x34, 0x38, - 0x3b, 0x20, 0x2e, 0x4e, 0x45, 0x54, 0x20, 0x43, - 0x4c, 0x52, 0x20, 0x33, 0x2e, 0x35, 0x2e, 0x32, - 0x31, 0x30, 0x32, 0x32, 0x29, 0x0d, 0x0a, 0x48, - 0x6f, 0x73, 0x74, 0x3a, 0x20, 0x31, 0x39, 0x32, - 0x2e, 0x31, 0x36, 0x38, 0x2e, 0x30, 0x2e, 0x31, - 0x32, 0x0d, 0x0a, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x20, 0x4b, - 0x65, 0x65, 0x70, 0x2d, 0x41, 0x6c, 0x69, 0x76, - 0x65, 0x0d, 0x0a, 0x0d, 0x0a }; - -char pkt8[] = { - 0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01, - 0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x2c, 0x00, 0x03, 0x00, 0x00, 0x40, 0x06, - 0xf8, 0xa4, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8, - 0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00, - 0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12, - 0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04, - 0x05, 0x92 }; - -char pkt9[] = { - 0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14, - 0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x28, 0x09, 0xa3, 0x40, 0x00, 0x80, 0x06, - 0x6f, 0x08, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8, - 0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7, - 0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10, - 0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 }; - -char pkt10[] = { - 0x00, 0x14, 0x22, 0xcb, 0x18, 0x2d, 0x00, 0x01, - 0x02, 0x45, 0x09, 0x11, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x2c, 0x00, 0x04, 0x00, 0x00, 0x40, 0x06, - 0xf8, 0xa3, 0xc0, 0xa8, 0x00, 0x0c, 0xc0, 0xa8, - 0x00, 0xc8, 0x00, 0x50, 0x0f, 0xe2, 0x00, 0x00, - 0x06, 0x68, 0x09, 0xe7, 0xc7, 0x36, 0x60, 0x12, - 0x05, 0x92, 0x28, 0xca, 0x00, 0x00, 0x02, 0x04, - 0x05, 0x92 }; - -char pkt11[] = { - 0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14, - 0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x28, 0x09, 0xa6, 0x40, 0x00, 0x80, 0x06, - 0x6f, 0x05, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8, - 0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7, - 0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x10, - 0x42, 0xd8, 0x82, 0x3f, 0x00, 0x00 }; - -char pkt12[] = { - 0x00, 0x01, 0x02, 0x45, 0x09, 0x11, 0x00, 0x14, - 0x22, 0xcb, 0x18, 0x2d, 0x08, 0x00, 0x45, 0x00, - 0x00, 0x28, 0x09, 0xa7, 0x40, 0x00, 0x80, 0x06, - 0x6f, 0x04, 0xc0, 0xa8, 0x00, 0xc8, 0xc0, 0xa8, - 0x00, 0x0c, 0x0f, 0xe2, 0x00, 0x50, 0x09, 0xe7, - 0xc9, 0x35, 0x00, 0x00, 0x06, 0x69, 0x50, 0x14, - 0x00, 0x00, 0x43, 0xf4, 0x00, 0x00 }; - - -typedef struct -{ - char * pcData; - int iDataLen; -} xPacketData; - -xPacketData xAllPackets[] = -{ - { pkt1, sizeof( pkt1 ) }, -/* { pkt2, sizeof( pkt2 ) }, */ - { pkt3, sizeof( pkt3 ) }, - { pkt4, sizeof( pkt4 ) }, -/* { pkt5, sizeof( pkt5 ) }, */ - { pkt6, sizeof( pkt6 ) }, - { pkt7, sizeof( pkt7 ) }, - { pkt8, sizeof( pkt8 ) }, - { pkt9, sizeof( pkt9 ) }, - { pkt10, sizeof( pkt10 ) }, -/* { pkt11, sizeof( pkt11 ) }, */ -/* { pkt12, sizeof( pkt12 ) }, */ -/* { pkt13, sizeof( pkt13 ) }, */ -/* { pkt14, sizeof( pkt14 ) }, */ -/* { pkt15, sizeof( pkt15 ) }, */ -/* { pkt16, sizeof( pkt16 ) }, */ -}; diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/Win32-Extensions.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/Win32-Extensions.h deleted file mode 100644 index aad6a2866..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/Win32-Extensions.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c) 1999 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2006 CACE Technologies, Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino, CACE Technologies - * nor the names of its contributors may be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#ifndef __WIN32_EXTENSIONS_H__ - #define __WIN32_EXTENSIONS_H__ - - #ifdef __cplusplus - extern "C" { - #endif - -/* Definitions */ - -/*! - * \brief A queue of raw packets that will be sent to the network with pcap_sendqueue_transmit(). - */ - struct pcap_send_queue - { - u_int maxlen; /*/< Maximum size of the the queue, in bytes. This variable contains the size of the buffer field. */ - u_int len; /*/< Current size of the queue, in bytes. */ - char * buffer; /*/< Buffer containing the packets to be sent. */ - }; - - typedef struct pcap_send_queue pcap_send_queue; - -/*! - * \brief This typedef is a support for the pcap_get_airpcap_handle() function - */ - #if !defined( AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ ) - #define AIRPCAP_HANDLE__EAE405F5_0171_9592_B3C2_C19EC426AD34__DEFINED_ - typedef struct _AirpcapHandle * PAirpcapHandle; - #endif - - #define BPF_MEM_EX_IMM 0xc0 - #define BPF_MEM_EX_IND 0xe0 - -/*used for ST*/ - #define BPF_MEM_EX 0xc0 - #define BPF_TME 0x08 - - #define BPF_LOOKUP 0x90 - #define BPF_EXECUTE 0xa0 - #define BPF_INIT 0xb0 - #define BPF_VALIDATE 0xc0 - #define BPF_SET_ACTIVE 0xd0 - #define BPF_RESET 0xe0 - #define BPF_SET_MEMORY 0x80 - #define BPF_GET_REGISTER_VALUE 0x70 - #define BPF_SET_REGISTER_VALUE 0x60 - #define BPF_SET_WORKING 0x50 - #define BPF_SET_ACTIVE_READ 0x40 - #define BPF_SET_AUTODELETION 0x30 - #define BPF_SEPARATION 0xff - -/* Prototypes */ - pcap_send_queue * pcap_sendqueue_alloc( u_int memsize ); - - void pcap_sendqueue_destroy( pcap_send_queue * queue ); - - int pcap_sendqueue_queue( pcap_send_queue * queue, - const struct pcap_pkthdr * pkt_header, - const u_char * pkt_data ); - - u_int pcap_sendqueue_transmit( pcap_t * p, - pcap_send_queue * queue, - int sync ); - - HANDLE pcap_getevent( pcap_t * p ); - - struct pcap_stat * pcap_stats_ex( pcap_t * p, - int * pcap_stat_size ); - - int pcap_setuserbuffer( pcap_t * p, - int size ); - - int pcap_live_dump( pcap_t * p, - char * filename, - int maxsize, - int maxpacks ); - - int pcap_live_dump_ended( pcap_t * p, - int sync ); - - int pcap_offline_filter( struct bpf_program * prog, - const struct pcap_pkthdr * header, - const u_char * pkt_data ); - - int pcap_start_oem( char * err_str, - int flags ); - - PAirpcapHandle pcap_get_airpcap_handle( pcap_t * p ); - - #ifdef __cplusplus - } - #endif - -#endif //__WIN32_EXTENSIONS_H__ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/bittypes.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/bittypes.h deleted file mode 100644 index 2be3d28db..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/bittypes.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (C) 1999 WIDE Project. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the project nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#ifndef _BITTYPES_H -#define _BITTYPES_H - -#ifndef HAVE_U_INT8_T - - #if SIZEOF_CHAR == 1 - typedef unsigned char u_int8_t; - typedef signed char _int8_t; - #elif SIZEOF_INT == 1 - typedef unsigned int u_int8_t; - typedef signed int int8_t; - #else /* XXX */ - #error "there's no appropriate type for u_int8_t" - #endif - #define HAVE_U_INT8_T 1 - #define HAVE_INT8_T 1 - -#endif /* HAVE_U_INT8_T */ - -#ifndef HAVE_U_INT16_T - - #if SIZEOF_SHORT == 2 - typedef unsigned short u_int16_t; - typedef signed short _int16_t; - #elif SIZEOF_INT == 2 - typedef unsigned int u_int16_t; - typedef signed int int16_t; - #elif SIZEOF_CHAR == 2 - typedef unsigned char u_int16_t; - typedef signed char int16_t; - #else /* XXX */ - #error "there's no appropriate type for u_int16_t" - #endif /* if SIZEOF_SHORT == 2 */ - #define HAVE_U_INT16_T 1 - #define HAVE_INT16_T 1 - -#endif /* HAVE_U_INT16_T */ - -#ifndef HAVE_U_INT32_T - - #if SIZEOF_INT == 4 - typedef unsigned int u_int32_t; - typedef signed int _int32_t; - #elif SIZEOF_LONG == 4 - typedef unsigned long u_int32_t; - typedef signed long int32_t; - #elif SIZEOF_SHORT == 4 - typedef unsigned short u_int32_t; - typedef signed short int32_t; - #else /* XXX */ - #error "there's no appropriate type for u_int32_t" - #endif /* if SIZEOF_INT == 4 */ - #define HAVE_U_INT32_T 1 - #define HAVE_INT32_T 1 - -#endif /* HAVE_U_INT32_T */ - -#ifndef HAVE_U_INT64_T - #if SIZEOF_LONG_LONG == 8 - typedef unsigned long long u_int64_t; - typedef long long int64_t; - #elif defined( _MSC_EXTENSIONS ) - typedef unsigned _int64 u_int64_t; - typedef _int64 int64_t; - #elif SIZEOF_INT == 8 - typedef unsigned int u_int64_t; - #elif SIZEOF_LONG == 8 - typedef unsigned long u_int64_t; - #elif SIZEOF_SHORT == 8 - typedef unsigned short u_int64_t; - #else /* XXX */ - #error "there's no appropriate type for u_int64_t" - #endif /* if SIZEOF_LONG_LONG == 8 */ - -#endif /* HAVE_U_INT64_T */ - -#ifndef PRId64 - #ifdef _MSC_EXTENSIONS - #define PRId64 "I64d" - #else /* _MSC_EXTENSIONS */ - #define PRId64 "lld" - #endif /* _MSC_EXTENSIONS */ -#endif /* PRId64 */ - -#ifndef PRIo64 - #ifdef _MSC_EXTENSIONS - #define PRIo64 "I64o" - #else /* _MSC_EXTENSIONS */ - #define PRIo64 "llo" - #endif /* _MSC_EXTENSIONS */ -#endif /* PRIo64 */ - -#ifndef PRIx64 - #ifdef _MSC_EXTENSIONS - #define PRIx64 "I64x" - #else /* _MSC_EXTENSIONS */ - #define PRIx64 "llx" - #endif /* _MSC_EXTENSIONS */ -#endif /* PRIx64 */ - -#ifndef PRIu64 - #ifdef _MSC_EXTENSIONS - #define PRIu64 "I64u" - #else /* _MSC_EXTENSIONS */ - #define PRIu64 "llu" - #endif /* _MSC_EXTENSIONS */ -#endif /* PRIu64 */ - -#endif /* _BITTYPES_H */ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/ip6_misc.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/ip6_misc.h deleted file mode 100644 index 1b2e4337b..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/ip6_misc.h +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c) 1993, 1994, 1997 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that: (1) source code distributions - * retain the above copyright notice and this paragraph in its entirety, (2) - * distributions including binary code include the above copyright notice and - * this paragraph in its entirety in the documentation or other materials - * provided with the distribution, and (3) all advertising materials mentioning - * features or use of this software display the following acknowledgement: - * ``This product includes software developed by the University of California, - * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of - * the University nor the names of its contributors may be used to endorse - * or promote products derived from this software without specific prior - * written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * @(#) $Header: /tcpdump/master/libpcap/Win32/Include/ip6_misc.h,v 1.5 2006-01-22 18:02:18 gianluca Exp $ (LBL) - */ - -/* - * This file contains a collage of declarations for IPv6 from FreeBSD not present in Windows - */ - -#include - -#include - -#ifndef __MINGW32__ - #define IN_MULTICAST( a ) IN_CLASSD( a ) -#endif - -#define IN_EXPERIMENTAL( a ) ( ( ( ( u_int32_t ) ( a ) ) & 0xf0000000 ) == 0xf0000000 ) - -#define IN_LOOPBACKNET 127 - -#if defined( __MINGW32__ ) && defined( DEFINE_ADDITIONAL_IPV6_STUFF ) -/* IPv6 address */ - struct in6_addr - { - union - { - u_int8_t u6_addr8[ 16 ]; - u_int16_t u6_addr16[ 8 ]; - u_int32_t u6_addr32[ 4 ]; - } - in6_u; - #define s6_addr in6_u.u6_addr8 - #define s6_addr16 in6_u.u6_addr16 - #define s6_addr32 in6_u.u6_addr32 - #define s6_addr64 in6_u.u6_addr64 - }; - - #define IN6ADDR_ANY_INIT { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - #define IN6ADDR_LOOPBACK_INIT { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } -#endif /* __MINGW32__ */ - - -#if ( defined _MSC_VER ) || ( defined( __MINGW32__ ) && defined( DEFINE_ADDITIONAL_IPV6_STUFF ) ) - typedef unsigned short sa_family_t; -#endif - - -#if defined( __MINGW32__ ) && defined( DEFINE_ADDITIONAL_IPV6_STUFF ) - - #define __SOCKADDR_COMMON( sa_prefix ) \ - sa_family_t sa_prefix ## family - -/* Ditto, for IPv6. */ - struct sockaddr_in6 - { - __SOCKADDR_COMMON( sin6_ ); - u_int16_t sin6_port; /* Transport layer port # */ - u_int32_t sin6_flowinfo; /* IPv6 flow information */ - struct in6_addr sin6_addr; /* IPv6 address */ - }; - - #define IN6_IS_ADDR_V4MAPPED( a ) \ - ( ( ( ( u_int32_t * ) ( a ) )[ 0 ] == 0 ) && ( ( ( u_int32_t * ) ( a ) )[ 1 ] == 0 ) && \ - ( ( ( u_int32_t * ) ( a ) )[ 2 ] == htonl( 0xffff ) ) ) - - #define IN6_IS_ADDR_MULTICAST( a ) ( ( ( u_int8_t * ) ( a ) )[ 0 ] == 0xff ) - - #define IN6_IS_ADDR_LINKLOCAL( a ) \ - ( ( ( ( u_int32_t * ) ( a ) )[ 0 ] & htonl( 0xffc00000 ) ) == htonl( 0xfe800000 ) ) - - #define IN6_IS_ADDR_LOOPBACK( a ) \ - ( ( ( u_int32_t * ) ( a ) )[ 0 ] == 0 && ( ( u_int32_t * ) ( a ) )[ 1 ] == 0 && \ - ( ( u_int32_t * ) ( a ) )[ 2 ] == 0 && ( ( u_int32_t * ) ( a ) )[ 3 ] == htonl( 1 ) ) -#endif /* __MINGW32__ */ - -#define ip6_vfc ip6_ctlun.ip6_un2_vfc -#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow -#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen -#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt -#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim -#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim - -#define nd_rd_type nd_rd_hdr.icmp6_type -#define nd_rd_code nd_rd_hdr.icmp6_code -#define nd_rd_cksum nd_rd_hdr.icmp6_cksum -#define nd_rd_reserved nd_rd_hdr.icmp6_data32[ 0 ] - -/* - * IPV6 extension headers - */ -#define IPPROTO_HOPOPTS 0 /* IPv6 hop-by-hop options */ -#define IPPROTO_IPV6 41 /* IPv6 header. */ -#define IPPROTO_ROUTING 43 /* IPv6 routing header */ -#define IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */ -#define IPPROTO_ESP 50 /* encapsulating security payload */ -#define IPPROTO_AH 51 /* authentication header */ -#define IPPROTO_ICMPV6 58 /* ICMPv6 */ -#define IPPROTO_NONE 59 /* IPv6 no next header */ -#define IPPROTO_DSTOPTS 60 /* IPv6 destination options */ -#define IPPROTO_PIM 103 /* Protocol Independent Multicast. */ - -#define IPV6_RTHDR_TYPE_0 0 - -/* Option types and related macros */ -#define IP6OPT_PAD1 0x00 /* 00 0 00000 */ -#define IP6OPT_PADN 0x01 /* 00 0 00001 */ -#define IP6OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */ -#define IP6OPT_JUMBO_LEN 6 -#define IP6OPT_ROUTER_ALERT 0x05 /* 00 0 00101 */ - -#define IP6OPT_RTALERT_LEN 4 -#define IP6OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */ -#define IP6OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */ -#define IP6OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */ -#define IP6OPT_MINLEN 2 - -#define IP6OPT_BINDING_UPDATE 0xc6 /* 11 0 00110 */ -#define IP6OPT_BINDING_ACK 0x07 /* 00 0 00111 */ -#define IP6OPT_BINDING_REQ 0x08 /* 00 0 01000 */ -#define IP6OPT_HOME_ADDRESS 0xc9 /* 11 0 01001 */ -#define IP6OPT_EID 0x8a /* 10 0 01010 */ - -#define IP6OPT_TYPE( o ) ( ( o ) & 0xC0 ) -#define IP6OPT_TYPE_SKIP 0x00 -#define IP6OPT_TYPE_DISCARD 0x40 -#define IP6OPT_TYPE_FORCEICMP 0x80 -#define IP6OPT_TYPE_ICMP 0xC0 - -#define IP6OPT_MUTABLE 0x20 - - -#if defined( __MINGW32__ ) && defined( DEFINE_ADDITIONAL_IPV6_STUFF ) - #ifndef EAI_ADDRFAMILY - struct addrinfo - { - int ai_flags; /* AI_PASSIVE, AI_CANONNAME */ - int ai_family; /* PF_xxx */ - int ai_socktype; /* SOCK_xxx */ - int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */ - size_t ai_addrlen; /* length of ai_addr */ - char * ai_canonname; /* canonical name for hostname */ - struct sockaddr * ai_addr; /* binary address */ - struct addrinfo * ai_next; /* next structure in linked list */ - }; - #endif /* ifndef EAI_ADDRFAMILY */ -#endif /* __MINGW32__ */ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/netif.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/netif.h deleted file mode 100644 index 2d3c0d216..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/netif.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * FreeRTOS V202107.00 - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://www.FreeRTOS.org - * http://aws.amazon.com/freertos - * - * 1 tab == 4 spaces! - */ - -#ifndef NET_IF_H -#define NET_IF_H - -/* - * Send uip_len bytes from uip_buf to the network interface selected by the - * configNETWORK_INTERFACE_TO_USE constant (defined in FreeRTOSConfig.h). - */ -void vNetifTx( void ); - -/* - * Receive bytes from the network interface selected by the - * configNETWORK_INTERFACE_TO_USE constant (defined in FreeRTOSConfig.h). The - * bytes are placed in uip_buf. The number of bytes copied into uip_buf is - * returned. - */ -UBaseType_t uxNetifRx( void ); - -/* - * Prepare a packet capture session. This will print out all the network - * interfaces available, and the one actually used is set by the - * configNETWORK_INTERFACE_TO_USE constant that is defined in - * FreeRTOSConfig.h. */ -BaseType_t xNetifInit( void ); - -#endif /* NET_IF_H */ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-bpf.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-bpf.h deleted file mode 100644 index 2657827e0..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-bpf.h +++ /dev/null @@ -1,47 +0,0 @@ -/*- - * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from the Stanford/CMU enet packet filter, - * (net/enet.c) distributed as part of 4.3BSD, and code contributed - * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence - * Berkeley Laboratory. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) $Header: /tcpdump/master/libpcap/pcap-bpf.h,v 1.50 2007/04/01 21:43:55 guy Exp $ (LBL) - */ - -/* - * For backwards compatibility. - * - * Note to OS vendors: do NOT get rid of this file! Some applications - * might expect to be able to include . - */ -#include diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-namedb.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-namedb.h deleted file mode 100644 index 80a2f0040..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-namedb.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 1994, 1996 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the Computer Systems - * Engineering Group at Lawrence Berkeley Laboratory. - * 4. Neither the name of the University nor of the Laboratory may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) $Header: /tcpdump/master/libpcap/pcap-namedb.h,v 1.13 2006/10/04 18:13:32 guy Exp $ (LBL) - */ - -/* - * For backwards compatibility. - * - * Note to OS vendors: do NOT get rid of this file! Some applications - * might expect to be able to include . - */ -#include diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-stdinc.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-stdinc.h deleted file mode 100644 index 9cde17fb3..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap-stdinc.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2002 - 2005 NetGroup, Politecnico di Torino (Italy) - * Copyright (c) 2005 - 2009 CACE Technologies, Inc. Davis (California) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * @(#) $Header: /tcpdump/master/libpcap/pcap-stdinc.h,v 1.10.2.1 2008-10-06 15:38:39 gianluca Exp $ (LBL) - */ - -#define SIZEOF_CHAR 1 -#define SIZEOF_SHORT 2 -#define SIZEOF_INT 4 -#ifndef _MSC_EXTENSIONS - #define SIZEOF_LONG_LONG 8 -#endif - -/* - * Avoids a compiler warning in case this was already defined - * (someone defined _WINSOCKAPI_ when including 'windows.h', in order - * to prevent it from including 'winsock.h') - */ -#ifdef _WINSOCKAPI_ - #undef _WINSOCKAPI_ -#endif -#include - -#include - -#include "bittypes.h" -#include -#include - -#ifndef __MINGW32__ - #include "IP6_misc.h" -#endif - -#define caddr_t char * - -#if _MSC_VER < 1500 - #define snprintf _snprintf - #define vsnprintf _vsnprintf - #define strdup _strdup -#endif - -#define inline __inline - -#ifdef __MINGW32__ - #include -#else /*__MINGW32__*/ -/* MSVC compiler */ - #ifndef _UINTPTR_T_DEFINED - #ifdef _WIN64 - typedef unsigned __int64 uintptr_t; - #else - typedef _W64 unsigned int uintptr_t; - #endif - #define _UINTPTR_T_DEFINED - #endif - - #ifndef _INTPTR_T_DEFINED - #ifdef _WIN64 - typedef __int64 intptr_t; - #else - typedef _W64 int intptr_t; - #endif - #define _INTPTR_T_DEFINED - #endif - -#endif /*__MINGW32__*/ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap.h deleted file mode 100644 index 935f9494c..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 1993, 1994, 1995, 1996, 1997 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the Computer Systems - * Engineering Group at Lawrence Berkeley Laboratory. - * 4. Neither the name of the University nor of the Laboratory may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) $Header: /tcpdump/master/libpcap/pcap.h,v 1.59 2006/10/04 18:09:22 guy Exp $ (LBL) - */ - -/* - * For backwards compatibility. - * - * Note to OS vendors: do NOT get rid of this file! Many applications - * expect to be able to include , and at least some of them - * go through contortions in their configure scripts to try to detect - * OSes that have "helpfully" moved pcap.h to without - * leaving behind a file. - */ -#include diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/bluetooth.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/bluetooth.h deleted file mode 100644 index 7bf65df03..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/bluetooth.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2006 Paolo Abeni (Italy) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * bluetooth data struct - * By Paolo Abeni - * - * @(#) $Header: /tcpdump/master/libpcap/pcap/bluetooth.h,v 1.1 2007/09/22 02:10:17 guy Exp $ - */ - -#ifndef _PCAP_BLUETOOTH_STRUCTS_H__ -#define _PCAP_BLUETOOTH_STRUCTS_H__ - -/* - * Header prepended libpcap to each bluetooth h:4 frame. - * fields are in network byte order - */ -typedef struct _pcap_bluetooth_h4_header { - u_int32_t direction; /* if first bit is set direction is incoming */ -} pcap_bluetooth_h4_header; - - -#endif diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/bpf.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/bpf.h deleted file mode 100644 index 9f4ca33e3..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/bpf.h +++ /dev/null @@ -1,934 +0,0 @@ -/*- - * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from the Stanford/CMU enet packet filter, - * (net/enet.c) distributed as part of 4.3BSD, and code contributed - * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence - * Berkeley Laboratory. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)bpf.h 7.1 (Berkeley) 5/7/91 - * - * @(#) $Header: /tcpdump/master/libpcap/pcap/bpf.h,v 1.19.2.8 2008-09-22 20:16:01 guy Exp $ (LBL) - */ - -/* - * This is libpcap's cut-down version of bpf.h; it includes only - * the stuff needed for the code generator and the userland BPF - * interpreter, and the libpcap APIs for setting filters, etc.. - * - * "pcap-bpf.c" will include the native OS version, as it deals with - * the OS's BPF implementation. - * - * XXX - should this all just be moved to "pcap.h"? - */ - -#ifndef BPF_MAJOR_VERSION - -#ifdef __cplusplus -extern "C" { -#endif - -/* BSD style release date */ -#define BPF_RELEASE 199606 - -#ifdef MSDOS /* must be 32-bit */ -typedef long bpf_int32; -typedef unsigned long bpf_u_int32; -#else -typedef int bpf_int32; -typedef u_int bpf_u_int32; -#endif - -/* - * Alignment macros. BPF_WORDALIGN rounds up to the next - * even multiple of BPF_ALIGNMENT. - */ -#ifndef __NetBSD__ -#define BPF_ALIGNMENT sizeof(bpf_int32) -#else -#define BPF_ALIGNMENT sizeof(long) -#endif -#define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1)) - -#define BPF_MAXBUFSIZE 0x8000 -#define BPF_MINBUFSIZE 32 - -/* - * Structure for "pcap_compile()", "pcap_setfilter()", etc.. - */ -struct bpf_program { - u_int bf_len; - struct bpf_insn *bf_insns; -}; - -/* - * Struct return by BIOCVERSION. This represents the version number of - * the filter language described by the instruction encodings below. - * bpf understands a program iff kernel_major == filter_major && - * kernel_minor >= filter_minor, that is, if the value returned by the - * running kernel has the same major number and a minor number equal - * equal to or less than the filter being downloaded. Otherwise, the - * results are undefined, meaning an error may be returned or packets - * may be accepted haphazardly. - * It has nothing to do with the source code version. - */ -struct bpf_version { - u_short bv_major; - u_short bv_minor; -}; -/* Current version number of filter architecture. */ -#define BPF_MAJOR_VERSION 1 -#define BPF_MINOR_VERSION 1 - -/* - * Data-link level type codes. - * - * Do *NOT* add new values to this list without asking - * "tcpdump-workers@lists.tcpdump.org" for a value. Otherwise, you run - * the risk of using a value that's already being used for some other - * purpose, and of having tools that read libpcap-format captures not - * being able to handle captures with your new DLT_ value, with no hope - * that they will ever be changed to do so (as that would destroy their - * ability to read captures using that value for that other purpose). - */ - -/* - * These are the types that are the same on all platforms, and that - * have been defined by for ages. - */ -#define DLT_NULL 0 /* BSD loopback encapsulation */ -#define DLT_EN10MB 1 /* Ethernet (10Mb) */ -#define DLT_EN3MB 2 /* Experimental Ethernet (3Mb) */ -#define DLT_AX25 3 /* Amateur Radio AX.25 */ -#define DLT_PRONET 4 /* Proteon ProNET Token Ring */ -#define DLT_CHAOS 5 /* Chaos */ -#define DLT_IEEE802 6 /* 802.5 Token Ring */ -#define DLT_ARCNET 7 /* ARCNET, with BSD-style header */ -#define DLT_SLIP 8 /* Serial Line IP */ -#define DLT_PPP 9 /* Point-to-point Protocol */ -#define DLT_FDDI 10 /* FDDI */ - -/* - * These are types that are different on some platforms, and that - * have been defined by for ages. We use #ifdefs to - * detect the BSDs that define them differently from the traditional - * libpcap - * - * XXX - DLT_ATM_RFC1483 is 13 in BSD/OS, and DLT_RAW is 14 in BSD/OS, - * but I don't know what the right #define is for BSD/OS. - */ -#define DLT_ATM_RFC1483 11 /* LLC-encapsulated ATM */ - -#ifdef __OpenBSD__ -#define DLT_RAW 14 /* raw IP */ -#else -#define DLT_RAW 12 /* raw IP */ -#endif - -/* - * Given that the only OS that currently generates BSD/OS SLIP or PPP - * is, well, BSD/OS, arguably everybody should have chosen its values - * for DLT_SLIP_BSDOS and DLT_PPP_BSDOS, which are 15 and 16, but they - * didn't. So it goes. - */ -#if defined(__NetBSD__) || defined(__FreeBSD__) -#ifndef DLT_SLIP_BSDOS -#define DLT_SLIP_BSDOS 13 /* BSD/OS Serial Line IP */ -#define DLT_PPP_BSDOS 14 /* BSD/OS Point-to-point Protocol */ -#endif -#else -#define DLT_SLIP_BSDOS 15 /* BSD/OS Serial Line IP */ -#define DLT_PPP_BSDOS 16 /* BSD/OS Point-to-point Protocol */ -#endif - -/* - * 17 is used for DLT_OLD_PFLOG in OpenBSD; - * OBSOLETE: DLT_PFLOG is 117 in OpenBSD now as well. See below. - * 18 is used for DLT_PFSYNC in OpenBSD; don't use it for anything else. - */ - -#define DLT_ATM_CLIP 19 /* Linux Classical-IP over ATM */ - -/* - * Apparently Redback uses this for its SmartEdge 400/800. I hope - * nobody else decided to use it, too. - */ -#define DLT_REDBACK_SMARTEDGE 32 - -/* - * These values are defined by NetBSD; other platforms should refrain from - * using them for other purposes, so that NetBSD savefiles with link - * types of 50 or 51 can be read as this type on all platforms. - */ -#define DLT_PPP_SERIAL 50 /* PPP over serial with HDLC encapsulation */ -#define DLT_PPP_ETHER 51 /* PPP over Ethernet */ - -/* - * The Axent Raptor firewall - now the Symantec Enterprise Firewall - uses - * a link-layer type of 99 for the tcpdump it supplies. The link-layer - * header has 6 bytes of unknown data, something that appears to be an - * Ethernet type, and 36 bytes that appear to be 0 in at least one capture - * I've seen. - */ -#define DLT_SYMANTEC_FIREWALL 99 - -/* - * Values between 100 and 103 are used in capture file headers as - * link-layer types corresponding to DLT_ types that differ - * between platforms; don't use those values for new DLT_ new types. - */ - -/* - * This value was defined by libpcap 0.5; platforms that have defined - * it with a different value should define it here with that value - - * a link type of 104 in a save file will be mapped to DLT_C_HDLC, - * whatever value that happens to be, so programs will correctly - * handle files with that link type regardless of the value of - * DLT_C_HDLC. - * - * The name DLT_C_HDLC was used by BSD/OS; we use that name for source - * compatibility with programs written for BSD/OS. - * - * libpcap 0.5 defined it as DLT_CHDLC; we define DLT_CHDLC as well, - * for source compatibility with programs written for libpcap 0.5. - */ -#define DLT_C_HDLC 104 /* Cisco HDLC */ -#define DLT_CHDLC DLT_C_HDLC - -#define DLT_IEEE802_11 105 /* IEEE 802.11 wireless */ - -/* - * 106 is reserved for Linux Classical IP over ATM; it's like DLT_RAW, - * except when it isn't. (I.e., sometimes it's just raw IP, and - * sometimes it isn't.) We currently handle it as DLT_LINUX_SLL, - * so that we don't have to worry about the link-layer header.) - */ - -/* - * Frame Relay; BSD/OS has a DLT_FR with a value of 11, but that collides - * with other values. - * DLT_FR and DLT_FRELAY packets start with the Q.922 Frame Relay header - * (DLCI, etc.). - */ -#define DLT_FRELAY 107 - -/* - * OpenBSD DLT_LOOP, for loopback devices; it's like DLT_NULL, except - * that the AF_ type in the link-layer header is in network byte order. - * - * DLT_LOOP is 12 in OpenBSD, but that's DLT_RAW in other OSes, so - * we don't use 12 for it in OSes other than OpenBSD. - */ -#ifdef __OpenBSD__ -#define DLT_LOOP 12 -#else -#define DLT_LOOP 108 -#endif - -/* - * Encapsulated packets for IPsec; DLT_ENC is 13 in OpenBSD, but that's - * DLT_SLIP_BSDOS in NetBSD, so we don't use 13 for it in OSes other - * than OpenBSD. - */ -#ifdef __OpenBSD__ -#define DLT_ENC 13 -#else -#define DLT_ENC 109 -#endif - -/* - * Values between 110 and 112 are reserved for use in capture file headers - * as link-layer types corresponding to DLT_ types that might differ - * between platforms; don't use those values for new DLT_ types - * other than the corresponding DLT_ types. - */ - -/* - * This is for Linux cooked sockets. - */ -#define DLT_LINUX_SLL 113 - -/* - * Apple LocalTalk hardware. - */ -#define DLT_LTALK 114 - -/* - * Acorn Econet. - */ -#define DLT_ECONET 115 - -/* - * Reserved for use with OpenBSD ipfilter. - */ -#define DLT_IPFILTER 116 - -/* - * OpenBSD DLT_PFLOG; DLT_PFLOG is 17 in OpenBSD, but that's DLT_LANE8023 - * in SuSE 6.3, so we can't use 17 for it in capture-file headers. - * - * XXX: is there a conflict with DLT_PFSYNC 18 as well? - */ -#ifdef __OpenBSD__ -#define DLT_OLD_PFLOG 17 -#define DLT_PFSYNC 18 -#endif -#define DLT_PFLOG 117 - -/* - * Registered for Cisco-internal use. - */ -#define DLT_CISCO_IOS 118 - -/* - * For 802.11 cards using the Prism II chips, with a link-layer - * header including Prism monitor mode information plus an 802.11 - * header. - */ -#define DLT_PRISM_HEADER 119 - -/* - * Reserved for Aironet 802.11 cards, with an Aironet link-layer header - * (see Doug Ambrisko's FreeBSD patches). - */ -#define DLT_AIRONET_HEADER 120 - -/* - * Reserved for Siemens HiPath HDLC. - */ -#define DLT_HHDLC 121 - -/* - * This is for RFC 2625 IP-over-Fibre Channel. - * - * This is not for use with raw Fibre Channel, where the link-layer - * header starts with a Fibre Channel frame header; it's for IP-over-FC, - * where the link-layer header starts with an RFC 2625 Network_Header - * field. - */ -#define DLT_IP_OVER_FC 122 - -/* - * This is for Full Frontal ATM on Solaris with SunATM, with a - * pseudo-header followed by an AALn PDU. - * - * There may be other forms of Full Frontal ATM on other OSes, - * with different pseudo-headers. - * - * If ATM software returns a pseudo-header with VPI/VCI information - * (and, ideally, packet type information, e.g. signalling, ILMI, - * LANE, LLC-multiplexed traffic, etc.), it should not use - * DLT_ATM_RFC1483, but should get a new DLT_ value, so tcpdump - * and the like don't have to infer the presence or absence of a - * pseudo-header and the form of the pseudo-header. - */ -#define DLT_SUNATM 123 /* Solaris+SunATM */ - -/* - * Reserved as per request from Kent Dahlgren - * for private use. - */ -#define DLT_RIO 124 /* RapidIO */ -#define DLT_PCI_EXP 125 /* PCI Express */ -#define DLT_AURORA 126 /* Xilinx Aurora link layer */ - -/* - * Header for 802.11 plus a number of bits of link-layer information - * including radio information, used by some recent BSD drivers as - * well as the madwifi Atheros driver for Linux. - */ -#define DLT_IEEE802_11_RADIO 127 /* 802.11 plus radiotap radio header */ - -/* - * Reserved for the TZSP encapsulation, as per request from - * Chris Waters - * TZSP is a generic encapsulation for any other link type, - * which includes a means to include meta-information - * with the packet, e.g. signal strength and channel - * for 802.11 packets. - */ -#define DLT_TZSP 128 /* Tazmen Sniffer Protocol */ - -/* - * BSD's ARCNET headers have the source host, destination host, - * and type at the beginning of the packet; that's what's handed - * up to userland via BPF. - * - * Linux's ARCNET headers, however, have a 2-byte offset field - * between the host IDs and the type; that's what's handed up - * to userland via PF_PACKET sockets. - * - * We therefore have to have separate DLT_ values for them. - */ -#define DLT_ARCNET_LINUX 129 /* ARCNET */ - -/* - * Juniper-private data link types, as per request from - * Hannes Gredler . The DLT_s are used - * for passing on chassis-internal metainformation such as - * QOS profiles, etc.. - */ -#define DLT_JUNIPER_MLPPP 130 -#define DLT_JUNIPER_MLFR 131 -#define DLT_JUNIPER_ES 132 -#define DLT_JUNIPER_GGSN 133 -#define DLT_JUNIPER_MFR 134 -#define DLT_JUNIPER_ATM2 135 -#define DLT_JUNIPER_SERVICES 136 -#define DLT_JUNIPER_ATM1 137 - -/* - * Apple IP-over-IEEE 1394, as per a request from Dieter Siegmund - * . The header that's presented is an Ethernet-like - * header: - * - * #define FIREWIRE_EUI64_LEN 8 - * struct firewire_header { - * u_char firewire_dhost[FIREWIRE_EUI64_LEN]; - * u_char firewire_shost[FIREWIRE_EUI64_LEN]; - * u_short firewire_type; - * }; - * - * with "firewire_type" being an Ethernet type value, rather than, - * for example, raw GASP frames being handed up. - */ -#define DLT_APPLE_IP_OVER_IEEE1394 138 - -/* - * Various SS7 encapsulations, as per a request from Jeff Morriss - * and subsequent discussions. - */ -#define DLT_MTP2_WITH_PHDR 139 /* pseudo-header with various info, followed by MTP2 */ -#define DLT_MTP2 140 /* MTP2, without pseudo-header */ -#define DLT_MTP3 141 /* MTP3, without pseudo-header or MTP2 */ -#define DLT_SCCP 142 /* SCCP, without pseudo-header or MTP2 or MTP3 */ - -/* - * DOCSIS MAC frames. - */ -#define DLT_DOCSIS 143 - -/* - * Linux-IrDA packets. Protocol defined at http://www.irda.org. - * Those packets include IrLAP headers and above (IrLMP...), but - * don't include Phy framing (SOF/EOF/CRC & byte stuffing), because Phy - * framing can be handled by the hardware and depend on the bitrate. - * This is exactly the format you would get capturing on a Linux-IrDA - * interface (irdaX), but not on a raw serial port. - * Note the capture is done in "Linux-cooked" mode, so each packet include - * a fake packet header (struct sll_header). This is because IrDA packet - * decoding is dependant on the direction of the packet (incomming or - * outgoing). - * When/if other platform implement IrDA capture, we may revisit the - * issue and define a real DLT_IRDA... - * Jean II - */ -#define DLT_LINUX_IRDA 144 - -/* - * Reserved for IBM SP switch and IBM Next Federation switch. - */ -#define DLT_IBM_SP 145 -#define DLT_IBM_SN 146 - -/* - * Reserved for private use. If you have some link-layer header type - * that you want to use within your organization, with the capture files - * using that link-layer header type not ever be sent outside your - * organization, you can use these values. - * - * No libpcap release will use these for any purpose, nor will any - * tcpdump release use them, either. - * - * Do *NOT* use these in capture files that you expect anybody not using - * your private versions of capture-file-reading tools to read; in - * particular, do *NOT* use them in products, otherwise you may find that - * people won't be able to use tcpdump, or snort, or Ethereal, or... to - * read capture files from your firewall/intrusion detection/traffic - * monitoring/etc. appliance, or whatever product uses that DLT_ value, - * and you may also find that the developers of those applications will - * not accept patches to let them read those files. - * - * Also, do not use them if somebody might send you a capture using them - * for *their* private type and tools using them for *your* private type - * would have to read them. - * - * Instead, ask "tcpdump-workers@lists.tcpdump.org" for a new DLT_ value, - * as per the comment above, and use the type you're given. - */ -#define DLT_USER0 147 -#define DLT_USER1 148 -#define DLT_USER2 149 -#define DLT_USER3 150 -#define DLT_USER4 151 -#define DLT_USER5 152 -#define DLT_USER6 153 -#define DLT_USER7 154 -#define DLT_USER8 155 -#define DLT_USER9 156 -#define DLT_USER10 157 -#define DLT_USER11 158 -#define DLT_USER12 159 -#define DLT_USER13 160 -#define DLT_USER14 161 -#define DLT_USER15 162 - -/* - * For future use with 802.11 captures - defined by AbsoluteValue - * Systems to store a number of bits of link-layer information - * including radio information: - * - * http://www.shaftnet.org/~pizza/software/capturefrm.txt - * - * but it might be used by some non-AVS drivers now or in the - * future. - */ -#define DLT_IEEE802_11_RADIO_AVS 163 /* 802.11 plus AVS radio header */ - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . The DLT_s are used - * for passing on chassis-internal metainformation such as - * QOS profiles, etc.. - */ -#define DLT_JUNIPER_MONITOR 164 - -/* - * Reserved for BACnet MS/TP. - */ -#define DLT_BACNET_MS_TP 165 - -/* - * Another PPP variant as per request from Karsten Keil . - * - * This is used in some OSes to allow a kernel socket filter to distinguish - * between incoming and outgoing packets, on a socket intended to - * supply pppd with outgoing packets so it can do dial-on-demand and - * hangup-on-lack-of-demand; incoming packets are filtered out so they - * don't cause pppd to hold the connection up (you don't want random - * input packets such as port scans, packets from old lost connections, - * etc. to force the connection to stay up). - * - * The first byte of the PPP header (0xff03) is modified to accomodate - * the direction - 0x00 = IN, 0x01 = OUT. - */ -#define DLT_PPP_PPPD 166 - -/* - * Names for backwards compatibility with older versions of some PPP - * software; new software should use DLT_PPP_PPPD. - */ -#define DLT_PPP_WITH_DIRECTION DLT_PPP_PPPD -#define DLT_LINUX_PPP_WITHDIRECTION DLT_PPP_PPPD - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . The DLT_s are used - * for passing on chassis-internal metainformation such as - * QOS profiles, cookies, etc.. - */ -#define DLT_JUNIPER_PPPOE 167 -#define DLT_JUNIPER_PPPOE_ATM 168 - -#define DLT_GPRS_LLC 169 /* GPRS LLC */ -#define DLT_GPF_T 170 /* GPF-T (ITU-T G.7041/Y.1303) */ -#define DLT_GPF_F 171 /* GPF-F (ITU-T G.7041/Y.1303) */ - -/* - * Requested by Oolan Zimmer for use in Gcom's T1/E1 line - * monitoring equipment. - */ -#define DLT_GCOM_T1E1 172 -#define DLT_GCOM_SERIAL 173 - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . The DLT_ is used - * for internal communication to Physical Interface Cards (PIC) - */ -#define DLT_JUNIPER_PIC_PEER 174 - -/* - * Link types requested by Gregor Maier of Endace - * Measurement Systems. They add an ERF header (see - * http://www.endace.com/support/EndaceRecordFormat.pdf) in front of - * the link-layer header. - */ -#define DLT_ERF_ETH 175 /* Ethernet */ -#define DLT_ERF_POS 176 /* Packet-over-SONET */ - -/* - * Requested by Daniele Orlandi for raw LAPD - * for vISDN (http://www.orlandi.com/visdn/). Its link-layer header - * includes additional information before the LAPD header, so it's - * not necessarily a generic LAPD header. - */ -#define DLT_LINUX_LAPD 177 - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . - * The DLT_ are used for prepending meta-information - * like interface index, interface name - * before standard Ethernet, PPP, Frelay & C-HDLC Frames - */ -#define DLT_JUNIPER_ETHER 178 -#define DLT_JUNIPER_PPP 179 -#define DLT_JUNIPER_FRELAY 180 -#define DLT_JUNIPER_CHDLC 181 - -/* - * Multi Link Frame Relay (FRF.16) - */ -#define DLT_MFR 182 - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . - * The DLT_ is used for internal communication with a - * voice Adapter Card (PIC) - */ -#define DLT_JUNIPER_VP 183 - -/* - * Arinc 429 frames. - * DLT_ requested by Gianluca Varenni . - * Every frame contains a 32bit A429 label. - * More documentation on Arinc 429 can be found at - * http://www.condoreng.com/support/downloads/tutorials/ARINCTutorial.pdf - */ -#define DLT_A429 184 - -/* - * Arinc 653 Interpartition Communication messages. - * DLT_ requested by Gianluca Varenni . - * Please refer to the A653-1 standard for more information. - */ -#define DLT_A653_ICM 185 - -/* - * USB packets, beginning with a USB setup header; requested by - * Paolo Abeni . - */ -#define DLT_USB 186 - -/* - * Bluetooth HCI UART transport layer (part H:4); requested by - * Paolo Abeni. - */ -#define DLT_BLUETOOTH_HCI_H4 187 - -/* - * IEEE 802.16 MAC Common Part Sublayer; requested by Maria Cruz - * . - */ -#define DLT_IEEE802_16_MAC_CPS 188 - -/* - * USB packets, beginning with a Linux USB header; requested by - * Paolo Abeni . - */ -#define DLT_USB_LINUX 189 - -/* - * Controller Area Network (CAN) v. 2.0B packets. - * DLT_ requested by Gianluca Varenni . - * Used to dump CAN packets coming from a CAN Vector board. - * More documentation on the CAN v2.0B frames can be found at - * http://www.can-cia.org/downloads/?269 - */ -#define DLT_CAN20B 190 - -/* - * IEEE 802.15.4, with address fields padded, as is done by Linux - * drivers; requested by Juergen Schimmer. - */ -#define DLT_IEEE802_15_4_LINUX 191 - -/* - * Per Packet Information encapsulated packets. - * DLT_ requested by Gianluca Varenni . - */ -#define DLT_PPI 192 - -/* - * Header for 802.16 MAC Common Part Sublayer plus a radiotap radio header; - * requested by Charles Clancy. - */ -#define DLT_IEEE802_16_MAC_CPS_RADIO 193 - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . - * The DLT_ is used for internal communication with a - * integrated service module (ISM). - */ -#define DLT_JUNIPER_ISM 194 - -/* - * IEEE 802.15.4, exactly as it appears in the spec (no padding, no - * nothing); requested by Mikko Saarnivala . - */ -#define DLT_IEEE802_15_4 195 - -/* - * Various link-layer types, with a pseudo-header, for SITA - * (http://www.sita.aero/); requested by Fulko Hew (fulko.hew@gmail.com). - */ -#define DLT_SITA 196 - -/* - * Various link-layer types, with a pseudo-header, for Endace DAG cards; - * encapsulates Endace ERF records. Requested by Stephen Donnelly - * . - */ -#define DLT_ERF 197 - -/* - * Special header prepended to Ethernet packets when capturing from a - * u10 Networks board. Requested by Phil Mulholland - * . - */ -#define DLT_RAIF1 198 - -/* - * IPMB packet for IPMI, beginning with the I2C slave address, followed - * by the netFn and LUN, etc.. Requested by Chanthy Toeung - * . - */ -#define DLT_IPMB 199 - -/* - * Juniper-private data link type, as per request from - * Hannes Gredler . - * The DLT_ is used for capturing data on a secure tunnel interface. - */ -#define DLT_JUNIPER_ST 200 - -/* - * Bluetooth HCI UART transport layer (part H:4), with pseudo-header - * that includes direction information; requested by Paolo Abeni. - */ -#define DLT_BLUETOOTH_HCI_H4_WITH_PHDR 201 - -/* - * AX.25 packet with a 1-byte KISS header; see - * - * http://www.ax25.net/kiss.htm - * - * as per Richard Stearn . - */ -#define DLT_AX25_KISS 202 - -/* - * LAPD packets from an ISDN channel, starting with the address field, - * with no pseudo-header. - * Requested by Varuna De Silva . - */ -#define DLT_LAPD 203 - -/* - * Variants of various link-layer headers, with a one-byte direction - * pseudo-header prepended - zero means "received by this host", - * non-zero (any non-zero value) means "sent by this host" - as per - * Will Barker . - */ -#define DLT_PPP_WITH_DIR 204 /* PPP - don't confuse with DLT_PPP_WITH_DIRECTION */ -#define DLT_C_HDLC_WITH_DIR 205 /* Cisco HDLC */ -#define DLT_FRELAY_WITH_DIR 206 /* Frame Relay */ -#define DLT_LAPB_WITH_DIR 207 /* LAPB */ - -/* - * 208 is reserved for an as-yet-unspecified proprietary link-layer - * type, as requested by Will Barker. - */ - -/* - * IPMB with a Linux-specific pseudo-header; as requested by Alexey Neyman - * . - */ -#define DLT_IPMB_LINUX 209 - -/* - * FlexRay automotive bus - http://www.flexray.com/ - as requested - * by Hannes Kaelber . - */ -#define DLT_FLEXRAY 210 - -/* - * Media Oriented Systems Transport (MOST) bus for multimedia - * transport - http://www.mostcooperation.com/ - as requested - * by Hannes Kaelber . - */ -#define DLT_MOST 211 - -/* - * Local Interconnect Network (LIN) bus for vehicle networks - - * http://www.lin-subbus.org/ - as requested by Hannes Kaelber - * . - */ -#define DLT_LIN 212 - -/* - * X2E-private data link type used for serial line capture, - * as requested by Hannes Kaelber . - */ -#define DLT_X2E_SERIAL 213 - -/* - * X2E-private data link type used for the Xoraya data logger - * family, as requested by Hannes Kaelber . - */ -#define DLT_X2E_XORAYA 214 - -/* - * IEEE 802.15.4, exactly as it appears in the spec (no padding, no - * nothing), but with the PHY-level data for non-ASK PHYs (4 octets - * of 0 as preamble, one octet of SFD, one octet of frame length+ - * reserved bit, and then the MAC-layer data, starting with the - * frame control field). - * - * Requested by Max Filippov . - */ -#define DLT_IEEE802_15_4_NONASK_PHY 215 - - -/* - * DLT and savefile link type values are split into a class and - * a member of that class. A class value of 0 indicates a regular - * DLT_/LINKTYPE_ value. - */ -#define DLT_CLASS(x) ((x) & 0x03ff0000) - -/* - * NetBSD-specific generic "raw" link type. The class value indicates - * that this is the generic raw type, and the lower 16 bits are the - * address family we're dealing with. Those values are NetBSD-specific; - * do not assume that they correspond to AF_ values for your operating - * system. - */ -#define DLT_CLASS_NETBSD_RAWAF 0x02240000 -#define DLT_NETBSD_RAWAF(af) (DLT_CLASS_NETBSD_RAWAF | (af)) -#define DLT_NETBSD_RAWAF_AF(x) ((x) & 0x0000ffff) -#define DLT_IS_NETBSD_RAWAF(x) (DLT_CLASS(x) == DLT_CLASS_NETBSD_RAWAF) - - -/* - * The instruction encodings. - */ -/* instruction classes */ -#define BPF_CLASS(code) ((code) & 0x07) -#define BPF_LD 0x00 -#define BPF_LDX 0x01 -#define BPF_ST 0x02 -#define BPF_STX 0x03 -#define BPF_ALU 0x04 -#define BPF_JMP 0x05 -#define BPF_RET 0x06 -#define BPF_MISC 0x07 - -/* ld/ldx fields */ -#define BPF_SIZE(code) ((code) & 0x18) -#define BPF_W 0x00 -#define BPF_H 0x08 -#define BPF_B 0x10 -#define BPF_MODE(code) ((code) & 0xe0) -#define BPF_IMM 0x00 -#define BPF_ABS 0x20 -#define BPF_IND 0x40 -#define BPF_MEM 0x60 -#define BPF_LEN 0x80 -#define BPF_MSH 0xa0 - -/* alu/jmp fields */ -#define BPF_OP(code) ((code) & 0xf0) -#define BPF_ADD 0x00 -#define BPF_SUB 0x10 -#define BPF_MUL 0x20 -#define BPF_DIV 0x30 -#define BPF_OR 0x40 -#define BPF_AND 0x50 -#define BPF_LSH 0x60 -#define BPF_RSH 0x70 -#define BPF_NEG 0x80 -#define BPF_JA 0x00 -#define BPF_JEQ 0x10 -#define BPF_JGT 0x20 -#define BPF_JGE 0x30 -#define BPF_JSET 0x40 -#define BPF_SRC(code) ((code) & 0x08) -#define BPF_K 0x00 -#define BPF_X 0x08 - -/* ret - BPF_K and BPF_X also apply */ -#define BPF_RVAL(code) ((code) & 0x18) -#define BPF_A 0x10 - -/* misc */ -#define BPF_MISCOP(code) ((code) & 0xf8) -#define BPF_TAX 0x00 -#define BPF_TXA 0x80 - -/* - * The instruction data structure. - */ -struct bpf_insn { - u_short code; - u_char jt; - u_char jf; - bpf_u_int32 k; -}; - -/* - * Macros for insn array initializers. - */ -#define BPF_STMT(code, k) { (u_short)(code), 0, 0, k } -#define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k } - -#if __STDC__ || defined(__cplusplus) -extern int bpf_validate(const struct bpf_insn *, int); -extern u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int); -#else -extern int bpf_validate(); -extern u_int bpf_filter(); -#endif - -/* - * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST). - */ -#define BPF_MEMWORDS 16 - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/namedb.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/namedb.h deleted file mode 100644 index 9002c7509..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/namedb.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 1994, 1996 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the Computer Systems - * Engineering Group at Lawrence Berkeley Laboratory. - * 4. Neither the name of the University nor of the Laboratory may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) $Header: /tcpdump/master/libpcap/pcap/namedb.h,v 1.1 2006/10/04 18:09:22 guy Exp $ (LBL) - */ - -#ifndef lib_pcap_namedb_h -#define lib_pcap_namedb_h - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * As returned by the pcap_next_etherent() - * XXX this stuff doesn't belong in this interface, but this - * library already must do name to address translation, so - * on systems that don't have support for /etc/ethers, we - * export these hooks since they'll - */ -struct pcap_etherent { - u_char addr[6]; - char name[122]; -}; -#ifndef PCAP_ETHERS_FILE -#define PCAP_ETHERS_FILE "/etc/ethers" -#endif -struct pcap_etherent *pcap_next_etherent(FILE *); -u_char *pcap_ether_hostton(const char*); -u_char *pcap_ether_aton(const char *); - -bpf_u_int32 **pcap_nametoaddr(const char *); -#ifdef INET6 -struct addrinfo *pcap_nametoaddrinfo(const char *); -#endif -bpf_u_int32 pcap_nametonetaddr(const char *); - -int pcap_nametoport(const char *, int *, int *); -int pcap_nametoportrange(const char *, int *, int *, int *); -int pcap_nametoproto(const char *); -int pcap_nametoeproto(const char *); -int pcap_nametollc(const char *); -/* - * If a protocol is unknown, PROTO_UNDEF is returned. - * Also, pcap_nametoport() returns the protocol along with the port number. - * If there are ambiguous entried in /etc/services (i.e. domain - * can be either tcp or udp) PROTO_UNDEF is returned. - */ -#define PROTO_UNDEF -1 - -/* XXX move these to pcap-int.h? */ -int __pcap_atodn(const char *, bpf_u_int32 *); -int __pcap_atoin(const char *, bpf_u_int32 *); -u_short __pcap_nametodnaddr(const char *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/pcap.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/pcap.h deleted file mode 100644 index ad8fc40ac..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/pcap.h +++ /dev/null @@ -1,407 +0,0 @@ -/* -*- Mode: c; tab-width: 8; indent-tabs-mode: 1; c-basic-offset: 8; -*- */ -/* - * Copyright (c) 1993, 1994, 1995, 1996, 1997 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the Computer Systems - * Engineering Group at Lawrence Berkeley Laboratory. - * 4. Neither the name of the University nor of the Laboratory may be used - * to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) $Header: /tcpdump/master/libpcap/pcap/pcap.h,v 1.4.2.11 2008-10-06 15:38:39 gianluca Exp $ (LBL) - */ - -#ifndef lib_pcap_pcap_h -#define lib_pcap_pcap_h - -#if defined(WIN32) - #include -#elif defined(MSDOS) - #include - #include /* u_int, u_char etc. */ -#else /* UN*X */ - #include - #include -#endif /* WIN32/MSDOS/UN*X */ - -#ifndef PCAP_DONT_INCLUDE_PCAP_BPF_H -#include -#endif - -#include - -#ifdef HAVE_REMOTE - // We have to define the SOCKET here, although it has been defined in sockutils.h - // This is to avoid the distribution of the 'sockutils.h' file around - // (for example in the WinPcap developer's pack) - #ifndef SOCKET - #ifdef WIN32 - #define SOCKET unsigned int - #else - #define SOCKET int - #endif - #endif -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#define PCAP_VERSION_MAJOR 2 -#define PCAP_VERSION_MINOR 4 - -#define PCAP_ERRBUF_SIZE 256 - -/* - * Compatibility for systems that have a bpf.h that - * predates the bpf typedefs for 64-bit support. - */ -#if BPF_RELEASE - 0 < 199406 -typedef int bpf_int32; -typedef u_int bpf_u_int32; -#endif - -typedef struct pcap pcap_t; -typedef struct pcap_dumper pcap_dumper_t; -typedef struct pcap_if pcap_if_t; -typedef struct pcap_addr pcap_addr_t; - -/* - * The first record in the file contains saved values for some - * of the flags used in the printout phases of tcpdump. - * Many fields here are 32 bit ints so compilers won't insert unwanted - * padding; these files need to be interchangeable across architectures. - * - * Do not change the layout of this structure, in any way (this includes - * changes that only affect the length of fields in this structure). - * - * Also, do not change the interpretation of any of the members of this - * structure, in any way (this includes using values other than - * LINKTYPE_ values, as defined in "savefile.c", in the "linktype" - * field). - * - * Instead: - * - * introduce a new structure for the new format, if the layout - * of the structure changed; - * - * send mail to "tcpdump-workers@lists.tcpdump.org", requesting - * a new magic number for your new capture file format, and, when - * you get the new magic number, put it in "savefile.c"; - * - * use that magic number for save files with the changed file - * header; - * - * make the code in "savefile.c" capable of reading files with - * the old file header as well as files with the new file header - * (using the magic number to determine the header format). - * - * Then supply the changes as a patch at - * - * http://sourceforge.net/projects/libpcap/ - * - * so that future versions of libpcap and programs that use it (such as - * tcpdump) will be able to read your new capture file format. - */ -struct pcap_file_header { - bpf_u_int32 magic; - u_short version_major; - u_short version_minor; - bpf_int32 thiszone; /* gmt to local correction */ - bpf_u_int32 sigfigs; /* accuracy of timestamps */ - bpf_u_int32 snaplen; /* max length saved portion of each pkt */ - bpf_u_int32 linktype; /* data link type (LINKTYPE_*) */ -}; - -/* - * Macros for the value returned by pcap_datalink_ext(). - * - * If LT_FCS_LENGTH_PRESENT(x) is true, the LT_FCS_LENGTH(x) macro - * gives the FCS length of packets in the capture. - */ -#define LT_FCS_LENGTH_PRESENT(x) ((x) & 0x04000000) -#define LT_FCS_LENGTH(x) (((x) & 0xF0000000) >> 28) -#define LT_FCS_DATALINK_EXT(x) ((((x) & 0xF) << 28) | 0x04000000) - -typedef enum { - PCAP_D_INOUT = 0, - PCAP_D_IN, - PCAP_D_OUT -} pcap_direction_t; - -/* - * Generic per-packet information, as supplied by libpcap. - * - * The time stamp can and should be a "struct timeval", regardless of - * whether your system supports 32-bit tv_sec in "struct timeval", - * 64-bit tv_sec in "struct timeval", or both if it supports both 32-bit - * and 64-bit applications. The on-disk format of savefiles uses 32-bit - * tv_sec (and tv_usec); this structure is irrelevant to that. 32-bit - * and 64-bit versions of libpcap, even if they're on the same platform, - * should supply the appropriate version of "struct timeval", even if - * that's not what the underlying packet capture mechanism supplies. - */ -struct pcap_pkthdr { - struct timeval ts; /* time stamp */ - bpf_u_int32 caplen; /* length of portion present */ - bpf_u_int32 len; /* length this packet (off wire) */ -}; - -/* - * As returned by the pcap_stats() - */ -struct pcap_stat { - u_int ps_recv; /* number of packets received */ - u_int ps_drop; /* number of packets dropped */ - u_int ps_ifdrop; /* drops by interface XXX not yet supported */ -#ifdef HAVE_REMOTE - u_int ps_capt; /* number of packets that are received by the application; please get rid off the Win32 ifdef */ - u_int ps_sent; /* number of packets sent by the server on the network */ - u_int ps_netdrop; /* number of packets lost on the network */ -#endif /* HAVE_REMOTE */ -}; - -#ifdef MSDOS -/* - * As returned by the pcap_stats_ex() - */ -struct pcap_stat_ex { - u_long rx_packets; /* total packets received */ - u_long tx_packets; /* total packets transmitted */ - u_long rx_bytes; /* total bytes received */ - u_long tx_bytes; /* total bytes transmitted */ - u_long rx_errors; /* bad packets received */ - u_long tx_errors; /* packet transmit problems */ - u_long rx_dropped; /* no space in Rx buffers */ - u_long tx_dropped; /* no space available for Tx */ - u_long multicast; /* multicast packets received */ - u_long collisions; - - /* detailed rx_errors: */ - u_long rx_length_errors; - u_long rx_over_errors; /* receiver ring buff overflow */ - u_long rx_crc_errors; /* recv'd pkt with crc error */ - u_long rx_frame_errors; /* recv'd frame alignment error */ - u_long rx_fifo_errors; /* recv'r fifo overrun */ - u_long rx_missed_errors; /* recv'r missed packet */ - - /* detailed tx_errors */ - u_long tx_aborted_errors; - u_long tx_carrier_errors; - u_long tx_fifo_errors; - u_long tx_heartbeat_errors; - u_long tx_window_errors; - }; -#endif - -/* - * Item in a list of interfaces. - */ -struct pcap_if { - struct pcap_if *next; - char *name; /* name to hand to "pcap_open_live()" */ - char *description; /* textual description of interface, or NULL */ - struct pcap_addr *addresses; - bpf_u_int32 flags; /* PCAP_IF_ interface flags */ -}; - -#define PCAP_IF_LOOPBACK 0x00000001 /* interface is loopback */ - -/* - * Representation of an interface address. - */ -struct pcap_addr { - struct pcap_addr *next; - struct sockaddr *addr; /* address */ - struct sockaddr *netmask; /* netmask for that address */ - struct sockaddr *broadaddr; /* broadcast address for that address */ - struct sockaddr *dstaddr; /* P2P destination address for that address */ -}; - -typedef void (*pcap_handler)(u_char *, const struct pcap_pkthdr *, - const u_char *); - -/* - * Error codes for the pcap API. - * These will all be negative, so you can check for the success or - * failure of a call that returns these codes by checking for a - * negative value. - */ -#define PCAP_ERROR -1 /* generic error code */ -#define PCAP_ERROR_BREAK -2 /* loop terminated by pcap_breakloop */ -#define PCAP_ERROR_NOT_ACTIVATED -3 /* the capture needs to be activated */ -#define PCAP_ERROR_ACTIVATED -4 /* the operation can't be performed on already activated captures */ -#define PCAP_ERROR_NO_SUCH_DEVICE -5 /* no such device exists */ -#define PCAP_ERROR_RFMON_NOTSUP -6 /* this device doesn't support rfmon (monitor) mode */ -#define PCAP_ERROR_NOT_RFMON -7 /* operation supported only in monitor mode */ -#define PCAP_ERROR_PERM_DENIED -8 /* no permission to open the device */ -#define PCAP_ERROR_IFACE_NOT_UP -9 /* interface isn't up */ - -/* - * Warning codes for the pcap API. - * These will all be positive and non-zero, so they won't look like - * errors. - */ -#define PCAP_WARNING 1 /* generic warning code */ -#define PCAP_WARNING_PROMISC_NOTSUP 2 /* this device doesn't support promiscuous mode */ - -char *pcap_lookupdev(char *); -int pcap_lookupnet(const char *, bpf_u_int32 *, bpf_u_int32 *, char *); - -pcap_t *pcap_create(const char *, char *); -int pcap_set_snaplen(pcap_t *, int); -int pcap_set_promisc(pcap_t *, int); -int pcap_can_set_rfmon(pcap_t *); -int pcap_set_rfmon(pcap_t *, int); -int pcap_set_timeout(pcap_t *, int); -int pcap_set_buffer_size(pcap_t *, int); -int pcap_activate(pcap_t *); - -pcap_t *pcap_open_live(const char *, int, int, int, char *); -pcap_t *pcap_open_dead(int, int); -pcap_t *pcap_open_offline(const char *, char *); -#if defined(WIN32) -pcap_t *pcap_hopen_offline(intptr_t, char *); -#if !defined(LIBPCAP_EXPORTS) -#define pcap_fopen_offline(f,b) \ - pcap_hopen_offline(_get_osfhandle(_fileno(f)), b) -#else /*LIBPCAP_EXPORTS*/ -static pcap_t *pcap_fopen_offline(FILE *, char *); -#endif -#else /*WIN32*/ -pcap_t *pcap_fopen_offline(FILE *, char *); -#endif /*WIN32*/ - -void pcap_close(pcap_t *); -int pcap_loop(pcap_t *, int, pcap_handler, u_char *); -int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *); -const u_char* - pcap_next(pcap_t *, struct pcap_pkthdr *); -int pcap_next_ex(pcap_t *, struct pcap_pkthdr **, const u_char **); -void pcap_breakloop(pcap_t *); -int pcap_stats(pcap_t *, struct pcap_stat *); -int pcap_setfilter(pcap_t *, struct bpf_program *); -int pcap_setdirection(pcap_t *, pcap_direction_t); -int pcap_getnonblock(pcap_t *, char *); -int pcap_setnonblock(pcap_t *, int, char *); -int pcap_inject(pcap_t *, const void *, size_t); -int pcap_sendpacket(pcap_t *, const u_char *, int); -const char *pcap_statustostr(int); -const char *pcap_strerror(int); -char *pcap_geterr(pcap_t *); -void pcap_perror(pcap_t *, char *); -int pcap_compile(pcap_t *, struct bpf_program *, const char *, int, - bpf_u_int32); -int pcap_compile_nopcap(int, int, struct bpf_program *, - const char *, int, bpf_u_int32); -void pcap_freecode(struct bpf_program *); -int pcap_offline_filter(struct bpf_program *, const struct pcap_pkthdr *, - const u_char *); -int pcap_datalink(pcap_t *); -int pcap_datalink_ext(pcap_t *); -int pcap_list_datalinks(pcap_t *, int **); -int pcap_set_datalink(pcap_t *, int); -void pcap_free_datalinks(int *); -int pcap_datalink_name_to_val(const char *); -const char *pcap_datalink_val_to_name(int); -const char *pcap_datalink_val_to_description(int); -int pcap_snapshot(pcap_t *); -int pcap_is_swapped(pcap_t *); -int pcap_major_version(pcap_t *); -int pcap_minor_version(pcap_t *); - -/* XXX */ -FILE *pcap_file(pcap_t *); -int pcap_fileno(pcap_t *); - -pcap_dumper_t *pcap_dump_open(pcap_t *, const char *); -pcap_dumper_t *pcap_dump_fopen(pcap_t *, FILE *fp); -FILE *pcap_dump_file(pcap_dumper_t *); -long pcap_dump_ftell(pcap_dumper_t *); -int pcap_dump_flush(pcap_dumper_t *); -void pcap_dump_close(pcap_dumper_t *); -void pcap_dump(u_char *, const struct pcap_pkthdr *, const u_char *); - -int pcap_findalldevs(pcap_if_t **, char *); -void pcap_freealldevs(pcap_if_t *); - -const char *pcap_lib_version(void); - -/* XXX this guy lives in the bpf tree */ -u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int); -int bpf_validate(const struct bpf_insn *f, int len); -char *bpf_image(const struct bpf_insn *, int); -void bpf_dump(const struct bpf_program *, int); - -#if defined(WIN32) - -/* - * Win32 definitions - */ - -int pcap_setbuff(pcap_t *p, int dim); -int pcap_setmode(pcap_t *p, int mode); -int pcap_setmintocopy(pcap_t *p, int size); - -#ifdef WPCAP -/* Include file with the wpcap-specific extensions */ -#include -#endif /* WPCAP */ - -#define MODE_CAPT 0 -#define MODE_STAT 1 -#define MODE_MON 2 - -#elif defined(MSDOS) - -/* - * MS-DOS definitions - */ - -int pcap_stats_ex (pcap_t *, struct pcap_stat_ex *); -void pcap_set_wait (pcap_t *p, void (*yield)(void), int wait); -u_long pcap_mac_packets (void); - -#else /* UN*X */ - -/* - * UN*X definitions - */ - -int pcap_get_selectable_fd(pcap_t *); - -#endif /* WIN32/MSDOS/UN*X */ - -#ifdef HAVE_REMOTE -/* Includes most of the public stuff that is needed for the remote capture */ -#include -#endif /* HAVE_REMOTE */ - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/sll.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/sll.h deleted file mode 100644 index e9d5452af..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/sll.h +++ /dev/null @@ -1,129 +0,0 @@ -/*- - * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 - * The Regents of the University of California. All rights reserved. - * - * This code is derived from the Stanford/CMU enet packet filter, - * (net/enet.c) distributed as part of 4.3BSD, and code contributed - * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence - * Berkeley Laboratory. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) $Header: /tcpdump/master/libpcap/pcap/sll.h,v 1.2.2.1 2008-05-30 01:36:06 guy Exp $ (LBL) - */ - -/* - * For captures on Linux cooked sockets, we construct a fake header - * that includes: - * - * a 2-byte "packet type" which is one of: - * - * LINUX_SLL_HOST packet was sent to us - * LINUX_SLL_BROADCAST packet was broadcast - * LINUX_SLL_MULTICAST packet was multicast - * LINUX_SLL_OTHERHOST packet was sent to somebody else - * LINUX_SLL_OUTGOING packet was sent *by* us; - * - * a 2-byte Ethernet protocol field; - * - * a 2-byte link-layer type; - * - * a 2-byte link-layer address length; - * - * an 8-byte source link-layer address, whose actual length is - * specified by the previous value. - * - * All fields except for the link-layer address are in network byte order. - * - * DO NOT change the layout of this structure, or change any of the - * LINUX_SLL_ values below. If you must change the link-layer header - * for a "cooked" Linux capture, introduce a new DLT_ type (ask - * "tcpdump-workers@lists.tcpdump.org" for one, so that you don't give it - * a value that collides with a value already being used), and use the - * new header in captures of that type, so that programs that can - * handle DLT_LINUX_SLL captures will continue to handle them correctly - * without any change, and so that capture files with different headers - * can be told apart and programs that read them can dissect the - * packets in them. - */ - -#ifndef lib_pcap_sll_h -#define lib_pcap_sll_h - -/* - * A DLT_LINUX_SLL fake link-layer header. - */ -#define SLL_HDR_LEN 16 /* total header length */ -#define SLL_ADDRLEN 8 /* length of address field */ - -struct sll_header { - u_int16_t sll_pkttype; /* packet type */ - u_int16_t sll_hatype; /* link-layer address type */ - u_int16_t sll_halen; /* link-layer address length */ - u_int8_t sll_addr[SLL_ADDRLEN]; /* link-layer address */ - u_int16_t sll_protocol; /* protocol */ -}; - -/* - * The LINUX_SLL_ values for "sll_pkttype"; these correspond to the - * PACKET_ values on Linux, but are defined here so that they're - * available even on systems other than Linux, and so that they - * don't change even if the PACKET_ values change. - */ -#define LINUX_SLL_HOST 0 -#define LINUX_SLL_BROADCAST 1 -#define LINUX_SLL_MULTICAST 2 -#define LINUX_SLL_OTHERHOST 3 -#define LINUX_SLL_OUTGOING 4 - -/* - * The LINUX_SLL_ values for "sll_protocol"; these correspond to the - * ETH_P_ values on Linux, but are defined here so that they're - * available even on systems other than Linux. We assume, for now, - * that the ETH_P_ values won't change in Linux; if they do, then: - * - * if we don't translate them in "pcap-linux.c", capture files - * won't necessarily be readable if captured on a system that - * defines ETH_P_ values that don't match these values; - * - * if we do translate them in "pcap-linux.c", that makes life - * unpleasant for the BPF code generator, as the values you test - * for in the kernel aren't the values that you test for when - * reading a capture file, so the fixup code run on BPF programs - * handed to the kernel ends up having to do more work. - * - * Add other values here as necessary, for handling packet types that - * might show up on non-Ethernet, non-802.x networks. (Not all the ones - * in the Linux "if_ether.h" will, I suspect, actually show up in - * captures.) - */ -#define LINUX_SLL_P_802_3 0x0001 /* Novell 802.3 frames without 802.2 LLC header */ -#define LINUX_SLL_P_802_2 0x0004 /* 802.2 frames (not D/I/X Ethernet) */ - -#endif diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/usb.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/usb.h deleted file mode 100644 index adcd19c05..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/usb.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2006 Paolo Abeni (Italy) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * Basic USB data struct - * By Paolo Abeni - * - * @(#) $Header: /tcpdump/master/libpcap/pcap/usb.h,v 1.6 2007/09/22 02:06:08 guy Exp $ - */ - -#ifndef _PCAP_USB_STRUCTS_H__ -#define _PCAP_USB_STRUCTS_H__ - -/* - * possible transfer mode - */ -#define URB_TRANSFER_IN 0x80 -#define URB_ISOCHRONOUS 0x0 -#define URB_INTERRUPT 0x1 -#define URB_CONTROL 0x2 -#define URB_BULK 0x3 - -/* - * possible event type - */ -#define URB_SUBMIT 'S' -#define URB_COMPLETE 'C' -#define URB_ERROR 'E' - -/* - * USB setup header as defined in USB specification. - * Appears at the front of each packet in DLT_USB captures. - */ -typedef struct _usb_setup { - u_int8_t bmRequestType; - u_int8_t bRequest; - u_int16_t wValue; - u_int16_t wIndex; - u_int16_t wLength; -} pcap_usb_setup; - - -/* - * Header prepended by linux kernel to each event. - * Appears at the front of each packet in DLT_USB_LINUX captures. - */ -typedef struct _usb_header { - u_int64_t id; - u_int8_t event_type; - u_int8_t transfer_type; - u_int8_t endpoint_number; - u_int8_t device_address; - u_int16_t bus_id; - char setup_flag;/*if !=0 the urb setup header is not present*/ - char data_flag; /*if !=0 no urb data is present*/ - int64_t ts_sec; - int32_t ts_usec; - int32_t status; - u_int32_t urb_len; - u_int32_t data_len; /* amount of urb data really present in this event*/ - pcap_usb_setup setup; -} pcap_usb_header; - - -#endif diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/vlan.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/vlan.h deleted file mode 100644 index b0cb7949b..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/pcap/vlan.h +++ /dev/null @@ -1,46 +0,0 @@ -/*- - * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#) $Header: /tcpdump/master/libpcap/pcap/vlan.h,v 1.1.2.2 2008-08-06 07:45:59 guy Exp $ - */ - -#ifndef lib_pcap_vlan_h -#define lib_pcap_vlan_h - -struct vlan_tag { - u_int16_t vlan_tpid; /* ETH_P_8021Q */ - u_int16_t vlan_tci; /* VLAN TCI */ -}; - -#define VLAN_TAG_LEN 4 - -#endif diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/remote-ext.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/remote-ext.h deleted file mode 100644 index 580dea589..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/remote-ext.h +++ /dev/null @@ -1,472 +0,0 @@ -/* - * Copyright (c) 2002 - 2003 - * NetGroup, Politecnico di Torino (Italy) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Politecnico di Torino nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - - -#ifndef __REMOTE_EXT_H__ - #define __REMOTE_EXT_H__ - - - #ifndef HAVE_REMOTE - #error Please do not include this file directly. Just define HAVE_REMOTE and then include pcap.h - #endif - -/* Definition for Microsoft Visual Studio */ - #if _MSC_VER > 1000 - #pragma once - #endif - - #ifdef __cplusplus - extern "C" { - #endif - -/*! - * \file remote-ext.h - * - * The goal of this file it to include most of the new definitions that should be - * placed into the pcap.h file. - * - * It includes all new definitions (structures and functions like pcap_open(). - * Some of the functions are not really a remote feature, but, right now, - * they are placed here. - */ - - - -/* All this stuff is public */ - -/*! \addtogroup remote_struct - \{ - */ - - - -/*! - * \brief Defines the maximum buffer size in which address, port, interface names are kept. - * - * In case the adapter name or such is larger than this value, it is truncated. - * This is not used by the user; however it must be aware that an hostname / interface - * name longer than this value will be truncated. - */ - #define PCAP_BUF_SIZE 1024 - - -/*! \addtogroup remote_source_ID - \{ - */ - - -/*! - * \brief Internal representation of the type of source in use (file, - * remote/local interface). - * - * This indicates a file, i.e. the user want to open a capture from a local file. - */ - #define PCAP_SRC_FILE 2 - -/*! - * \brief Internal representation of the type of source in use (file, - * remote/local interface). - * - * This indicates a local interface, i.e. the user want to open a capture from - * a local interface. This does not involve the RPCAP protocol. - */ - #define PCAP_SRC_IFLOCAL 3 - -/*! - * \brief Internal representation of the type of source in use (file, - * remote/local interface). - * - * This indicates a remote interface, i.e. the user want to open a capture from - * an interface on a remote host. This does involve the RPCAP protocol. - */ - #define PCAP_SRC_IFREMOTE 4 - -/*! - \} - */ - - - -/*! \addtogroup remote_source_string - * - * The formats allowed by the pcap_open() are the following: - * - file://path_and_filename [opens a local file] - * - rpcap://devicename [opens the selected device devices available on the local host, without using the RPCAP protocol] - * - rpcap://host/devicename [opens the selected device available on a remote host] - * - rpcap://host:port/devicename [opens the selected device available on a remote host, using a non-standard port for RPCAP] - * - adaptername [to open a local adapter; kept for compability, but it is strongly discouraged] - * - (NULL) [to open the first local adapter; kept for compability, but it is strongly discouraged] - * - * The formats allowed by the pcap_findalldevs_ex() are the following: - * - file://folder/ [lists all the files in the given folder] - * - rpcap:// [lists all local adapters] - * - rpcap://host:port/ [lists the devices available on a remote host] - * - * Referring to the 'host' and 'port' paramters, they can be either numeric or literal. Since - * IPv6 is fully supported, these are the allowed formats: - * - * - host (literal): e.g. host.foo.bar - * - host (numeric IPv4): e.g. 10.11.12.13 - * - host (numeric IPv4, IPv6 style): e.g. [10.11.12.13] - * - host (numeric IPv6): e.g. [1:2:3::4] - * - port: can be either numeric (e.g. '80') or literal (e.g. 'http') - * - * Here you find some allowed examples: - * - rpcap://host.foo.bar/devicename [everything literal, no port number] - * - rpcap://host.foo.bar:1234/devicename [everything literal, with port number] - * - rpcap://10.11.12.13/devicename [IPv4 numeric, no port number] - * - rpcap://10.11.12.13:1234/devicename [IPv4 numeric, with port number] - * - rpcap://[10.11.12.13]:1234/devicename [IPv4 numeric with IPv6 format, with port number] - * - rpcap://[1:2:3::4]/devicename [IPv6 numeric, no port number] - * - rpcap://[1:2:3::4]:1234/devicename [IPv6 numeric, with port number] - * - rpcap://[1:2:3::4]:http/devicename [IPv6 numeric, with literal port number] - * - \{ - */ - - -/*! - * \brief String that will be used to determine the type of source in use (file, - * remote/local interface). - * - * This string will be prepended to the interface name in order to create a string - * that contains all the information required to open the source. - * - * This string indicates that the user wants to open a capture from a local file. - */ - #define PCAP_SRC_FILE_STRING "file://" - -/*! - * \brief String that will be used to determine the type of source in use (file, - * remote/local interface). - * - * This string will be prepended to the interface name in order to create a string - * that contains all the information required to open the source. - * - * This string indicates that the user wants to open a capture from a network interface. - * This string does not necessarily involve the use of the RPCAP protocol. If the - * interface required resides on the local host, the RPCAP protocol is not involved - * and the local functions are used. - */ - #define PCAP_SRC_IF_STRING "rpcap://" - -/*! - \} - */ - - - -/*! - * \addtogroup remote_open_flags - \{ - */ - -/*! - * \brief Defines if the adapter has to go in promiscuous mode. - * - * It is '1' if you have to open the adapter in promiscuous mode, '0' otherwise. - * Note that even if this parameter is false, the interface could well be in promiscuous - * mode for some other reason (for example because another capture process with - * promiscuous mode enabled is currently using that interface). - * On on Linux systems with 2.2 or later kernels (that have the "any" device), this - * flag does not work on the "any" device; if an argument of "any" is supplied, - * the 'promisc' flag is ignored. - */ - #define PCAP_OPENFLAG_PROMISCUOUS 1 - -/*! - * \brief Defines if the data trasfer (in case of a remote - * capture) has to be done with UDP protocol. - * - * If it is '1' if you want a UDP data connection, '0' if you want - * a TCP data connection; control connection is always TCP-based. - * A UDP connection is much lighter, but it does not guarantee that all - * the captured packets arrive to the client workstation. Moreover, - * it could be harmful in case of network congestion. - * This flag is meaningless if the source is not a remote interface. - * In that case, it is simply ignored. - */ - #define PCAP_OPENFLAG_DATATX_UDP 2 - - -/*! - * \brief Defines if the remote probe will capture its own generated traffic. - * - * In case the remote probe uses the same interface to capture traffic and to send - * data back to the caller, the captured traffic includes the RPCAP traffic as well. - * If this flag is turned on, the RPCAP traffic is excluded from the capture, so that - * the trace returned back to the collector is does not include this traffic. - */ - #define PCAP_OPENFLAG_NOCAPTURE_RPCAP 4 - -/*! - * \brief Defines if the local adapter will capture its own generated traffic. - * - * This flag tells the underlying capture driver to drop the packets that were sent by itself. - * This is usefult when building applications like bridges, that should ignore the traffic - * they just sent. - */ - #define PCAP_OPENFLAG_NOCAPTURE_LOCAL 8 - -/*! - * \brief This flag configures the adapter for maximum responsiveness. - * - * In presence of a large value for nbytes, WinPcap waits for the arrival of several packets before - * copying the data to the user. This guarantees a low number of system calls, i.e. lower processor usage, - * i.e. better performance, which is good for applications like sniffers. If the user sets the - * PCAP_OPENFLAG_MAX_RESPONSIVENESS flag, the capture driver will copy the packets as soon as the application - * is ready to receive them. This is suggested for real time applications (like, for example, a bridge) - * that need the best responsiveness.*/ - #define PCAP_OPENFLAG_MAX_RESPONSIVENESS 16 - -/*! - \} - */ - - -/*! - * \addtogroup remote_samp_methods - \{ - */ - -/*! - * \brief No sampling has to be done on the current capture. - * - * In this case, no sampling algorithms are applied to the current capture. - */ - #define PCAP_SAMP_NOSAMP 0 - -/*! - * \brief It defines that only 1 out of N packets must be returned to the user. - * - * In this case, the 'value' field of the 'pcap_samp' structure indicates the - * number of packets (minus 1) that must be discarded before one packet got accepted. - * In other words, if 'value = 10', the first packet is returned to the caller, while - * the following 9 are discarded. - */ - #define PCAP_SAMP_1_EVERY_N 1 - -/*! - * \brief It defines that we have to return 1 packet every N milliseconds. - * - * In this case, the 'value' field of the 'pcap_samp' structure indicates the 'waiting - * time' in milliseconds before one packet got accepted. - * In other words, if 'value = 10', the first packet is returned to the caller; the next - * returned one will be the first packet that arrives when 10ms have elapsed. - */ - #define PCAP_SAMP_FIRST_AFTER_N_MS 2 - -/*! - \} - */ - - -/*! - * \addtogroup remote_auth_methods - \{ - */ - -/*! - * \brief It defines the NULL authentication. - * - * This value has to be used within the 'type' member of the pcap_rmtauth structure. - * The 'NULL' authentication has to be equal to 'zero', so that old applications - * can just put every field of struct pcap_rmtauth to zero, and it does work. - */ - #define RPCAP_RMTAUTH_NULL 0 - -/*! - * \brief It defines the username/password authentication. - * - * With this type of authentication, the RPCAP protocol will use the username/ - * password provided to authenticate the user on the remote machine. If the - * authentication is successful (and the user has the right to open network devices) - * the RPCAP connection will continue; otherwise it will be dropped. - * - * This value has to be used within the 'type' member of the pcap_rmtauth structure. - */ - #define RPCAP_RMTAUTH_PWD 1 - -/*! - \} - */ - - - -/*! - * - * \brief This structure keeps the information needed to autheticate - * the user on a remote machine. - * - * The remote machine can either grant or refuse the access according - * to the information provided. - * In case the NULL authentication is required, both 'username' and - * 'password' can be NULL pointers. - * - * This structure is meaningless if the source is not a remote interface; - * in that case, the functions which requires such a structure can accept - * a NULL pointer as well. - */ - struct pcap_rmtauth - { - /*! - * \brief Type of the authentication required. - * - * In order to provide maximum flexibility, we can support different types - * of authentication based on the value of this 'type' variable. The currently - * supported authentication methods are defined into the - * \link remote_auth_methods Remote Authentication Methods Section\endlink. - * - */ - int type; - - /*! - * \brief Zero-terminated string containing the username that has to be - * used on the remote machine for authentication. - * - * This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication - * and it can be NULL. - */ - char * username; - - /*! - * \brief Zero-terminated string containing the password that has to be - * used on the remote machine for authentication. - * - * This field is meaningless in case of the RPCAP_RMTAUTH_NULL authentication - * and it can be NULL. - */ - char * password; - }; - - -/*! - * \brief This structure defines the information related to sampling. - * - * In case the sampling is requested, the capturing device should read - * only a subset of the packets coming from the source. The returned packets depend - * on the sampling parameters. - * - * \warning The sampling process is applied after the filtering process. - * In other words, packets are filtered first, then the sampling process selects a - * subset of the 'filtered' packets and it returns them to the caller. - */ - struct pcap_samp - { - /*! - * Method used for sampling. Currently, the supported methods are listed in the - * \link remote_samp_methods Sampling Methods Section\endlink. - */ - int method; - - /*! - * This value depends on the sampling method defined. For its meaning, please check - * at the \link remote_samp_methods Sampling Methods Section\endlink. - */ - int value; - }; - - - -/*! Maximum lenght of an host name (needed for the RPCAP active mode) */ - #define RPCAP_HOSTLIST_SIZE 1024 - - -/*! - \} - *//* end of public documentation */ - - -/* Exported functions */ - - - -/** \name New WinPcap functions - * - * This section lists the new functions that are able to help considerably in writing - * WinPcap programs because of their easiness of use. - */ -/*\{ */ - pcap_t * pcap_open( const char * source, - int snaplen, - int flags, - int read_timeout, - struct pcap_rmtauth * auth, - char * errbuf ); - int pcap_createsrcstr( char * source, - int type, - const char * host, - const char * port, - const char * name, - char * errbuf ); - int pcap_parsesrcstr( const char * source, - int * type, - char * host, - char * port, - char * name, - char * errbuf ); - int pcap_findalldevs_ex( char * source, - struct pcap_rmtauth * auth, - pcap_if_t ** alldevs, - char * errbuf ); - struct pcap_samp * pcap_setsampling( pcap_t * p ); - -/*\} */ -/* End of new winpcap functions */ - - - -/** \name Remote Capture functions - */ -/*\{ */ - SOCKET pcap_remoteact_accept( const char * address, - const char * port, - const char * hostlist, - char * connectinghost, - struct pcap_rmtauth * auth, - char * errbuf ); - int pcap_remoteact_list( char * hostlist, - char sep, - int size, - char * errbuf ); - int pcap_remoteact_close( const char * host, - char * errbuf ); - void pcap_remoteact_cleanup(); -/*\} */ -/* End of remote capture functions */ - - #ifdef __cplusplus - } - #endif - - -#endif /* ifndef __REMOTE_EXT_H__ */ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/wpcap.lib b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/wpcap.lib deleted file mode 100644 index f832e0445..000000000 Binary files a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/WinPCap/wpcap.lib and /dev/null differ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/mbedtls/sockets_wrapper.c b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/mbedtls/sockets_wrapper.c deleted file mode 100644 index c335e75c5..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/mbedtls/sockets_wrapper.c +++ /dev/null @@ -1,931 +0,0 @@ -/* - * Amazon FreeRTOS CELLULAR Preview Release - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - * - * http://aws.amazon.com/freertos - * http://www.FreeRTOS.org - */ - -/* Standard includes. */ -#include -#include -#include - -/* FreeRTOS includes. */ -#include "FreeRTOS.h" -#include "event_groups.h" - -/* Sockets wrapper includes. */ -#include "sockets_wrapper.h" - -/* FreeRTOS Cellular Library api includes. */ -#include "cellular_config.h" -#include "cellular_config_defaults.h" -#include "cellular_api.h" - -/* Configure logs for the functions in this file. */ -#include "logging_levels.h" -#ifndef LIBRARY_LOG_NAME - #define LIBRARY_LOG_NAME "CELLULAR_SOCKETS" -#endif -#ifndef LIBRARY_LOG_LEVEL - #define LIBRARY_LOG_LEVEL LOG_INFO -#endif -#include "logging_stack.h" - -/*-----------------------------------------------------------*/ - -/* Cellular socket wrapper needs application provide the cellular handle and pdn context id. */ -/* User of cellular socket wrapper should provide this variable. */ -/* coverity[misra_c_2012_rule_8_6_violation] */ -extern CellularHandle_t CellularHandle; - -/* User of cellular socket wrapper should provide this variable. */ -/* coverity[misra_c_2012_rule_8_6_violation] */ -extern uint8_t CellularSocketPdnContextId; - -/*-----------------------------------------------------------*/ - -/* Windows simulator implementation. */ -#if defined( _WIN32 ) || defined( _WIN64 ) - #define strtok_r strtok_s -#endif - -#define CELLULAR_SOCKET_OPEN_FLAG ( 1UL << 0 ) -#define CELLULAR_SOCKET_CONNECT_FLAG ( 1UL << 1 ) - -#define SOCKET_DATA_RECEIVED_CALLBACK_BIT ( 0x00000001U ) -#define SOCKET_OPEN_CALLBACK_BIT ( 0x00000002U ) -#define SOCKET_OPEN_FAILED_CALLBACK_BIT ( 0x00000004U ) -#define SOCKET_CLOSE_CALLBACK_BIT ( 0x00000008U ) - -/* Ticks MS conversion macros. */ -#define TICKS_TO_MS( xTicks ) ( ( ( xTicks ) * 1000U ) / ( ( uint32_t ) configTICK_RATE_HZ ) ) -#define UINT32_MAX_DELAY_MS ( 0xFFFFFFFFUL ) -#define UINT32_MAX_MS_TICKS ( UINT32_MAX_DELAY_MS / ( TICKS_TO_MS( 1U ) ) ) - -/* Cellular socket access mode. */ -#define CELLULAR_SOCKET_ACCESS_MODE CELLULAR_ACCESSMODE_BUFFER - -/* Cellular socket open timeout. */ -#define CELLULAR_SOCKET_OPEN_TIMEOUT_TICKS ( portMAX_DELAY ) -#define CELLULAR_SOCKET_CLOSE_TIMEOUT_TICKS ( pdMS_TO_TICKS( 10000U ) ) - -/* Cellular socket AT command timeout. */ -#define CELLULAR_SOCKET_RECV_TIMEOUT_MS ( 1000UL ) - -/* Time conversion constants. */ -#define _MILLISECONDS_PER_SECOND ( 1000 ) /**< @brief Milliseconds per second. */ -#define _MILLISECONDS_PER_TICK ( _MILLISECONDS_PER_SECOND / configTICK_RATE_HZ ) /**< Milliseconds per FreeRTOS tick. */ - -/* Logging macros definition. */ -#define IotLogError( ... ) LogError( ( __VA_ARGS__ ) ) -#define IotLogWarn( ... ) LogWarn( ( __VA_ARGS__ ) ) -#define IotLogInfo( ... ) LogInfo( ( __VA_ARGS__ ) ) -#define IotLogDebug( ... ) LogDebug( ( __VA_ARGS__ ) ) - -/*-----------------------------------------------------------*/ - -typedef struct xSOCKET -{ - CellularSocketHandle_t cellularSocketHandle; - uint32_t ulFlags; - - TickType_t receiveTimeout; - TickType_t sendTimeout; - - EventGroupHandle_t socketEventGroupHandle; -} cellularSocketWrapper_t; - -/*-----------------------------------------------------------*/ - -/** - * @brief Get the count of milliseconds since vTaskStartScheduler was called. - * - * @return The count of milliseconds since vTaskStartScheduler was called. - */ -static uint64_t getTimeMs( void ); - -/** - * @brief Receive data from cellular socket. - * - * @param[in] pCellularSocketContext Cellular socket wrapper context for socket operations. - * @param[out] buf The data buffer for receiving data. - * @param[in] len The length of the data buffer - * - * @note This function receives data. It returns when non-zero bytes of data is received, - * when an error occurs, or when timeout occurs. Receive timeout unit is TickType_t. - * Any timeout value bigger than portMAX_DELAY will be regarded as portMAX_DELAY. - * In this case, this function waits portMAX_DELAY until non-zero bytes of data is received - * or until an error occurs. - * - * @return Positive value indicate the number of bytes received. Otherwise, error code defined - * in sockets_wrapper.h is returned. - */ -static BaseType_t prvNetworkRecvCellular( const cellularSocketWrapper_t * pCellularSocketContext, - uint8_t * buf, - size_t len ); - -/** - * @brief Callback used to inform about the status of socket open. - * - * @param[in] urcEvent URC Event that happened. - * @param[in] socketHandle Socket handle for which data is ready. - * @param[in] pCallbackContext pCallbackContext parameter in - * Cellular_SocketRegisterSocketOpenCallback function. - */ -static void prvCellularSocketOpenCallback( CellularUrcEvent_t urcEvent, - CellularSocketHandle_t socketHandle, - void * pCallbackContext ); - -/** - * @brief Callback used to inform that data is ready for reading on a socket. - * - * @param[in] socketHandle Socket handle for which data is ready. - * @param[in] pCallbackContext pCallbackContext parameter in - * Cellular_SocketRegisterDataReadyCallback function. - */ -static void prvCellularSocketDataReadyCallback( CellularSocketHandle_t socketHandle, - void * pCallbackContext ); - - -/** - * @brief Callback used to inform that remote end closed the connection for a - * connected socket. - * - * @param[in] socketHandle Socket handle for which remote end closed the - * connection. - * @param[in] pCallbackContext pCallbackContext parameter in - * Cellular_SocketRegisterClosedCallback function. - */ -static void prvCellularSocketClosedCallback( CellularSocketHandle_t socketHandle, - void * pCallbackContext ); - -/** - * @brief Setup socket receive timeout. - * - * @param[in] pCellularSocketContext Cellular socket wrapper context for socket operations. - * @param[out] receiveTimeout Socket receive timeout in TickType_t. - * - * @return On success, SOCKETS_ERROR_NONE is returned. If an error occurred, error code defined - * in sockets_wrapper.h is returned. - */ -static BaseType_t prvSetupSocketRecvTimeout( cellularSocketWrapper_t * pCellularSocketContext, - TickType_t receiveTimeout ); - -/** - * @brief Setup socket send timeout. - * - * @param[in] pCellularSocketContext Cellular socket wrapper context for socket operations. - * @param[out] sendTimeout Socket send timeout in TickType_t. - * - * @note Send timeout unit is TickType_t. The underlying cellular API uses miliseconds for timeout. - * Any send timeout greater than UINT32_MAX_MS_TICKS( UINT32_MAX_DELAY_MS/MS_PER_TICKS ) or - * portMAX_DELAY is regarded as UINT32_MAX_DELAY_MS for cellular API. - * - * @return On success, SOCKETS_ERROR_NONE is returned. If an error occurred, error code defined - * in sockets_wrapper.h is returned. - */ -static BaseType_t prvSetupSocketSendTimeout( cellularSocketWrapper_t * pCellularSocketContext, - TickType_t sendTimeout ); - -/** - * @brief Setup cellular socket callback function. - * - * @param[in] CellularSocketHandle_t Cellular socket handle for cellular socket operations. - * @param[in] pCellularSocketContext Cellular socket wrapper context for socket operations. - * - * @return On success, SOCKETS_ERROR_NONE is returned. If an error occurred, error code defined - * in sockets_wrapper.h is returned. - */ -static BaseType_t prvCellularSocketRegisterCallback( CellularSocketHandle_t cellularSocketHandle, - cellularSocketWrapper_t * pCellularSocketContext ); - -/** - * @brief Calculate elapsed time from current time and input parameters. - * - * @param[in] entryTimeMs The entry time to be compared with current time. - * @param[in] timeoutValueMs Timeout value for the comparison between entry time and current time. - * @param[out] pElapsedTimeMs The elapsed time if timeout condition is true. - * - * @return True if the difference between entry time and current time is bigger or - * equal to timeoutValueMs. Otherwise, return false. - */ -static bool _calculateElapsedTime( uint64_t entryTimeMs, - uint32_t timeoutValueMs, - uint64_t * pElapsedTimeMs ); - -/*-----------------------------------------------------------*/ - -static uint64_t getTimeMs( void ) -{ - TimeOut_t xCurrentTime = { 0 }; - - /* This must be unsigned because the behavior of signed integer overflow is undefined. */ - uint64_t ullTickCount = 0ULL; - - /* Get the current tick count and overflow count. vTaskSetTimeOutState() - * is used to get these values because they are both static in tasks.c. */ - vTaskSetTimeOutState( &xCurrentTime ); - - /* Adjust the tick count for the number of times a TickType_t has overflowed. */ - ullTickCount = ( uint64_t ) ( xCurrentTime.xOverflowCount ) << ( sizeof( TickType_t ) * 8 ); - - /* Add the current tick count. */ - ullTickCount += xCurrentTime.xTimeOnEntering; - - /* Return the ticks converted to milliseconds. */ - return ullTickCount * _MILLISECONDS_PER_TICK; -} - -/*-----------------------------------------------------------*/ - -static BaseType_t prvNetworkRecvCellular( const cellularSocketWrapper_t * pCellularSocketContext, - uint8_t * buf, - size_t len ) -{ - CellularSocketHandle_t cellularSocketHandle = NULL; - BaseType_t retRecvLength = 0; - uint32_t recvLength = 0; - TickType_t recvTimeout = 0; - TickType_t recvStartTime = 0; - CellularError_t socketStatus = CELLULAR_SUCCESS; - EventBits_t waitEventBits = 0; - - cellularSocketHandle = pCellularSocketContext->cellularSocketHandle; - - if( pCellularSocketContext->receiveTimeout >= portMAX_DELAY ) - { - recvTimeout = portMAX_DELAY; - } - else - { - recvTimeout = pCellularSocketContext->receiveTimeout; - } - - recvStartTime = xTaskGetTickCount(); - - ( void ) xEventGroupClearBits( pCellularSocketContext->socketEventGroupHandle, - SOCKET_DATA_RECEIVED_CALLBACK_BIT ); - socketStatus = Cellular_SocketRecv( CellularHandle, cellularSocketHandle, buf, len, &recvLength ); - - /* Calculate remain recvTimeout. */ - if( recvTimeout != portMAX_DELAY ) - { - if( ( recvStartTime + recvTimeout ) > xTaskGetTickCount() ) - { - recvTimeout = recvTimeout - ( xTaskGetTickCount() - recvStartTime ); - } - else - { - recvTimeout = 0; - } - } - - if( ( socketStatus == CELLULAR_SUCCESS ) && ( recvLength == 0U ) && - ( recvTimeout != 0U ) ) - { - waitEventBits = xEventGroupWaitBits( pCellularSocketContext->socketEventGroupHandle, - SOCKET_DATA_RECEIVED_CALLBACK_BIT | SOCKET_CLOSE_CALLBACK_BIT, - pdTRUE, - pdFALSE, - recvTimeout ); - - if( ( waitEventBits & SOCKET_CLOSE_CALLBACK_BIT ) != 0U ) - { - socketStatus = CELLULAR_SOCKET_CLOSED; - } - else if( ( waitEventBits & SOCKET_DATA_RECEIVED_CALLBACK_BIT ) != 0U ) - { - socketStatus = Cellular_SocketRecv( CellularHandle, cellularSocketHandle, buf, len, &recvLength ); - } - else - { - IotLogInfo( "prvNetworkRecv timeout" ); - socketStatus = CELLULAR_SUCCESS; - recvLength = 0; - } - } - - if( socketStatus == CELLULAR_SUCCESS ) - { - retRecvLength = ( BaseType_t ) recvLength; - } - else - { - IotLogError( "prvNetworkRecv failed %d", socketStatus ); - retRecvLength = SOCKETS_SOCKET_ERROR; - } - - IotLogDebug( "prvNetworkRecv expect %d read %d", len, recvLength ); - return retRecvLength; -} - -/*-----------------------------------------------------------*/ - -static void prvCellularSocketOpenCallback( CellularUrcEvent_t urcEvent, - CellularSocketHandle_t socketHandle, - void * pCallbackContext ) -{ - cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) pCallbackContext; - - ( void ) socketHandle; - - if( pCellularSocketContext != NULL ) - { - IotLogDebug( "Socket open callback on Socket %p %d %d.", - pCellularSocketContext, socketHandle, urcEvent ); - - if( urcEvent == CELLULAR_URC_SOCKET_OPENED ) - { - pCellularSocketContext->ulFlags = pCellularSocketContext->ulFlags | CELLULAR_SOCKET_CONNECT_FLAG; - ( void ) xEventGroupSetBits( pCellularSocketContext->socketEventGroupHandle, - SOCKET_OPEN_CALLBACK_BIT ); - } - else - { - /* Socket open failed. */ - ( void ) xEventGroupSetBits( pCellularSocketContext->socketEventGroupHandle, - SOCKET_OPEN_FAILED_CALLBACK_BIT ); - } - } - else - { - IotLogError( "Spurious socket open callback." ); - } -} - -/*-----------------------------------------------------------*/ - -static void prvCellularSocketDataReadyCallback( CellularSocketHandle_t socketHandle, - void * pCallbackContext ) -{ - cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) pCallbackContext; - - ( void ) socketHandle; - - if( pCellularSocketContext != NULL ) - { - IotLogDebug( "Data ready on Socket %p", pCellularSocketContext ); - ( void ) xEventGroupSetBits( pCellularSocketContext->socketEventGroupHandle, - SOCKET_DATA_RECEIVED_CALLBACK_BIT ); - } - else - { - IotLogError( "spurious data callback" ); - } -} - -/*-----------------------------------------------------------*/ - -static void prvCellularSocketClosedCallback( CellularSocketHandle_t socketHandle, - void * pCallbackContext ) -{ - cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) pCallbackContext; - - ( void ) socketHandle; - - if( pCellularSocketContext != NULL ) - { - IotLogInfo( "Socket Close on Socket %p", pCellularSocketContext ); - pCellularSocketContext->ulFlags = pCellularSocketContext->ulFlags & ( ~CELLULAR_SOCKET_CONNECT_FLAG ); - ( void ) xEventGroupSetBits( pCellularSocketContext->socketEventGroupHandle, - SOCKET_CLOSE_CALLBACK_BIT ); - } - else - { - IotLogError( "spurious socket close callback" ); - } -} - -/*-----------------------------------------------------------*/ - -static BaseType_t prvSetupSocketRecvTimeout( cellularSocketWrapper_t * pCellularSocketContext, - TickType_t receiveTimeout ) -{ - BaseType_t retSetSockOpt = SOCKETS_ERROR_NONE; - - if( pCellularSocketContext == NULL ) - { - retSetSockOpt = SOCKETS_EINVAL; - } - else - { - if( receiveTimeout >= portMAX_DELAY ) - { - pCellularSocketContext->receiveTimeout = portMAX_DELAY; - } - else - { - pCellularSocketContext->receiveTimeout = receiveTimeout; - } - } - - return retSetSockOpt; -} - -/*-----------------------------------------------------------*/ - -static BaseType_t prvSetupSocketSendTimeout( cellularSocketWrapper_t * pCellularSocketContext, - TickType_t sendTimeout ) -{ - CellularError_t socketStatus = CELLULAR_SUCCESS; - BaseType_t retSetSockOpt = SOCKETS_ERROR_NONE; - uint32_t sendTimeoutMs = 0; - CellularSocketHandle_t cellularSocketHandle = NULL; - - if( pCellularSocketContext == NULL ) - { - retSetSockOpt = SOCKETS_EINVAL; - } - else - { - cellularSocketHandle = pCellularSocketContext->cellularSocketHandle; - - if( sendTimeout >= UINT32_MAX_MS_TICKS ) - { - /* Check if the ticks cause overflow. */ - pCellularSocketContext->sendTimeout = portMAX_DELAY; - sendTimeoutMs = UINT32_MAX_DELAY_MS; - } - else if( sendTimeout >= portMAX_DELAY ) - { - IotLogWarn( "Sendtimeout %d longer than portMAX_DELAY, %d ms is used instead", - sendTimeout, UINT32_MAX_DELAY_MS ); - pCellularSocketContext->sendTimeout = portMAX_DELAY; - sendTimeoutMs = UINT32_MAX_DELAY_MS; - } - else - { - pCellularSocketContext->sendTimeout = sendTimeout; - sendTimeoutMs = TICKS_TO_MS( sendTimeout ); - } - - socketStatus = Cellular_SocketSetSockOpt( CellularHandle, - cellularSocketHandle, - CELLULAR_SOCKET_OPTION_LEVEL_TRANSPORT, - CELLULAR_SOCKET_OPTION_SEND_TIMEOUT, - ( const uint8_t * ) &sendTimeoutMs, - sizeof( uint32_t ) ); - - if( socketStatus != CELLULAR_SUCCESS ) - { - retSetSockOpt = SOCKETS_EINVAL; - } - } - - return retSetSockOpt; -} - -/*-----------------------------------------------------------*/ - -static BaseType_t prvCellularSocketRegisterCallback( CellularSocketHandle_t cellularSocketHandle, - cellularSocketWrapper_t * pCellularSocketContext ) -{ - BaseType_t retRegCallback = SOCKETS_ERROR_NONE; - CellularError_t socketStatus = CELLULAR_SUCCESS; - - if( cellularSocketHandle == NULL ) - { - retRegCallback = SOCKETS_EINVAL; - } - - if( retRegCallback == SOCKETS_ERROR_NONE ) - { - socketStatus = Cellular_SocketRegisterDataReadyCallback( CellularHandle, cellularSocketHandle, - prvCellularSocketDataReadyCallback, ( void * ) pCellularSocketContext ); - - if( socketStatus != CELLULAR_SUCCESS ) - { - IotLogError( "Failed to SocketRegisterDataReadyCallback. Socket status %d.", socketStatus ); - retRegCallback = SOCKETS_SOCKET_ERROR; - } - } - - if( retRegCallback == SOCKETS_ERROR_NONE ) - { - socketStatus = Cellular_SocketRegisterSocketOpenCallback( CellularHandle, cellularSocketHandle, - prvCellularSocketOpenCallback, ( void * ) pCellularSocketContext ); - - if( socketStatus != CELLULAR_SUCCESS ) - { - IotLogError( "Failed to SocketRegisterSocketOpenCallbac. Socket status %d.", socketStatus ); - retRegCallback = SOCKETS_SOCKET_ERROR; - } - } - - if( retRegCallback == SOCKETS_ERROR_NONE ) - { - socketStatus = Cellular_SocketRegisterClosedCallback( CellularHandle, cellularSocketHandle, - prvCellularSocketClosedCallback, ( void * ) pCellularSocketContext ); - - if( socketStatus != CELLULAR_SUCCESS ) - { - IotLogError( "Failed to SocketRegisterClosedCallback. Socket status %d.", socketStatus ); - retRegCallback = SOCKETS_SOCKET_ERROR; - } - } - - return retRegCallback; -} - -/*-----------------------------------------------------------*/ - -static bool _calculateElapsedTime( uint64_t entryTimeMs, - uint32_t timeoutValueMs, - uint64_t * pElapsedTimeMs ) -{ - uint64_t currentTimeMs = getTimeMs(); - bool isExpired = false; - - /* timeoutValueMs with UINT32_MAX_DELAY_MS means wait for ever, same behavior as freertos_plus_tcp. */ - if( timeoutValueMs == UINT32_MAX_DELAY_MS ) - { - isExpired = false; - } - - /* timeoutValueMs = 0 means none blocking mode. */ - else if( timeoutValueMs == 0U ) - { - isExpired = true; - } - else - { - *pElapsedTimeMs = currentTimeMs - entryTimeMs; - - if( ( currentTimeMs - entryTimeMs ) >= timeoutValueMs ) - { - isExpired = true; - } - else - { - isExpired = false; - } - } - - return isExpired; -} - -/*-----------------------------------------------------------*/ - -BaseType_t Sockets_Connect( Socket_t * pTcpSocket, - const char * pHostName, - uint16_t port, - uint32_t receiveTimeoutMs, - uint32_t sendTimeoutMs ) -{ - CellularSocketHandle_t cellularSocketHandle = NULL; - cellularSocketWrapper_t * pCellularSocketContext = NULL; - CellularError_t cellularSocketStatus = CELLULAR_INVALID_HANDLE; - - CellularSocketAddress_t serverAddress = { 0 }; - EventBits_t waitEventBits = 0; - BaseType_t retConnect = SOCKETS_ERROR_NONE; - const uint32_t defaultReceiveTimeoutMs = CELLULAR_SOCKET_RECV_TIMEOUT_MS; - - /* Create a new TCP socket. */ - cellularSocketStatus = Cellular_CreateSocket( CellularHandle, - CellularSocketPdnContextId, - CELLULAR_SOCKET_DOMAIN_AF_INET, - CELLULAR_SOCKET_TYPE_STREAM, - CELLULAR_SOCKET_PROTOCOL_TCP, - &cellularSocketHandle ); - - if( cellularSocketStatus != CELLULAR_SUCCESS ) - { - IotLogError( "Failed to create cellular sockets. %d", cellularSocketStatus ); - retConnect = SOCKETS_SOCKET_ERROR; - } - - /* Allocate socket context. */ - if( retConnect == SOCKETS_ERROR_NONE ) - { - pCellularSocketContext = pvPortMalloc( sizeof( cellularSocketWrapper_t ) ); - - if( pCellularSocketContext == NULL ) - { - IotLogError( "Failed to allocate new socket context." ); - ( void ) Cellular_SocketClose( CellularHandle, cellularSocketHandle ); - retConnect = SOCKETS_ENOMEM; - } - else - { - /* Initialize all the members to sane values. */ - IotLogDebug( "Created CELLULAR Socket %p.", pCellularSocketContext ); - ( void ) memset( pCellularSocketContext, 0, sizeof( cellularSocketWrapper_t ) ); - pCellularSocketContext->cellularSocketHandle = cellularSocketHandle; - pCellularSocketContext->ulFlags |= CELLULAR_SOCKET_OPEN_FLAG; - pCellularSocketContext->socketEventGroupHandle = NULL; - } - } - - /* Allocate event group for callback function. */ - if( retConnect == SOCKETS_ERROR_NONE ) - { - pCellularSocketContext->socketEventGroupHandle = xEventGroupCreate(); - - if( pCellularSocketContext->socketEventGroupHandle == NULL ) - { - IotLogError( "Failed create cellular socket eventGroupHandle %p.", pCellularSocketContext ); - retConnect = SOCKETS_ENOMEM; - } - } - - /* Register cellular socket callback function. */ - if( retConnect == SOCKETS_ERROR_NONE ) - { - serverAddress.ipAddress.ipAddressType = CELLULAR_IP_ADDRESS_V4; - strncpy( serverAddress.ipAddress.ipAddress, pHostName, CELLULAR_IP_ADDRESS_MAX_SIZE ); - serverAddress.port = port; - - IotLogDebug( "Ip address %s port %d\r\n", serverAddress.ipAddress.ipAddress, serverAddress.port ); - retConnect = prvCellularSocketRegisterCallback( cellularSocketHandle, pCellularSocketContext ); - } - - /* Setup cellular socket recv AT command default timeout. */ - if( retConnect == SOCKETS_ERROR_NONE ) - { - cellularSocketStatus = Cellular_SocketSetSockOpt( CellularHandle, - cellularSocketHandle, - CELLULAR_SOCKET_OPTION_LEVEL_TRANSPORT, - CELLULAR_SOCKET_OPTION_RECV_TIMEOUT, - ( const uint8_t * ) &defaultReceiveTimeoutMs, - sizeof( uint32_t ) ); - - if( cellularSocketStatus != CELLULAR_SUCCESS ) - { - IotLogError( "Failed to setup cellular AT command receive timeout %d.", cellularSocketStatus ); - retConnect = SOCKETS_SOCKET_ERROR; - } - } - - /* Setup cellular socket send/recv timeout. */ - if( retConnect == SOCKETS_ERROR_NONE ) - { - retConnect = prvSetupSocketSendTimeout( pCellularSocketContext, pdMS_TO_TICKS( sendTimeoutMs ) ); - } - - if( retConnect == SOCKETS_ERROR_NONE ) - { - retConnect = prvSetupSocketRecvTimeout( pCellularSocketContext, pdMS_TO_TICKS( receiveTimeoutMs ) ); - } - - /* Cellular socket connect. */ - if( retConnect == SOCKETS_ERROR_NONE ) - { - ( void ) xEventGroupClearBits( pCellularSocketContext->socketEventGroupHandle, - SOCKET_DATA_RECEIVED_CALLBACK_BIT | SOCKET_OPEN_FAILED_CALLBACK_BIT ); - cellularSocketStatus = Cellular_SocketConnect( CellularHandle, cellularSocketHandle, CELLULAR_SOCKET_ACCESS_MODE, &serverAddress ); - - if( cellularSocketStatus != CELLULAR_SUCCESS ) - { - IotLogError( "Failed to establish new connection. Socket status %d.", cellularSocketStatus ); - retConnect = SOCKETS_SOCKET_ERROR; - } - } - - /* Wait the socket connection. */ - if( retConnect == SOCKETS_ERROR_NONE ) - { - waitEventBits = xEventGroupWaitBits( pCellularSocketContext->socketEventGroupHandle, - SOCKET_OPEN_CALLBACK_BIT | SOCKET_OPEN_FAILED_CALLBACK_BIT, - pdTRUE, - pdFALSE, - CELLULAR_SOCKET_OPEN_TIMEOUT_TICKS ); - - if( waitEventBits != SOCKET_OPEN_CALLBACK_BIT ) - { - IotLogError( "Socket connect timeout." ); - retConnect = SOCKETS_ENOTCONN; - } - } - - /* Cleanup the socket if any error. */ - if( retConnect != SOCKETS_ERROR_NONE ) - { - if( cellularSocketHandle != NULL ) - { - ( void ) Cellular_SocketClose( CellularHandle, cellularSocketHandle ); - ( void ) Cellular_SocketRegisterDataReadyCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); - ( void ) Cellular_SocketRegisterSocketOpenCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); - ( void ) Cellular_SocketRegisterClosedCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); - - if( pCellularSocketContext != NULL ) - { - pCellularSocketContext->cellularSocketHandle = NULL; - } - } - - if( ( pCellularSocketContext != NULL ) && ( pCellularSocketContext->socketEventGroupHandle != NULL ) ) - { - vEventGroupDelete( pCellularSocketContext->socketEventGroupHandle ); - pCellularSocketContext->socketEventGroupHandle = NULL; - } - - if( pCellularSocketContext != NULL ) - { - vPortFree( pCellularSocketContext ); - pCellularSocketContext = NULL; - } - } - - *pTcpSocket = pCellularSocketContext; - - return retConnect; -} - -/*-----------------------------------------------------------*/ - -void Sockets_Disconnect( Socket_t xSocket ) -{ - int32_t retClose = SOCKETS_ERROR_NONE; - cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) xSocket; - CellularSocketHandle_t cellularSocketHandle = NULL; - uint32_t recvLength = 0; - uint8_t buf[ 128 ] = { 0 }; - CellularError_t cellularSocketStatus = CELLULAR_SUCCESS; - - /* xSocket need to be check against SOCKET_INVALID_SOCKET. */ - /* coverity[misra_c_2012_rule_11_4_violation] */ - if( ( pCellularSocketContext == NULL ) || ( xSocket == SOCKETS_INVALID_SOCKET ) ) - { - IotLogError( "Invalid xSocket %p", pCellularSocketContext ); - retClose = SOCKETS_EINVAL; - } - else - { - cellularSocketHandle = pCellularSocketContext->cellularSocketHandle; - } - - if( retClose == SOCKETS_ERROR_NONE ) - { - if( cellularSocketHandle != NULL ) - { - /* Receive all the data before socket close. */ - do - { - recvLength = 0; - cellularSocketStatus = Cellular_SocketRecv( CellularHandle, cellularSocketHandle, buf, 128, &recvLength ); - IotLogDebug( "%u bytes received in close", recvLength ); - } while( ( recvLength != 0 ) && ( cellularSocketStatus == CELLULAR_SUCCESS ) ); - - /* Close sockets. */ - if( Cellular_SocketClose( CellularHandle, cellularSocketHandle ) != CELLULAR_SUCCESS ) - { - IotLogWarn( "Failed to destroy connection." ); - retClose = SOCKETS_SOCKET_ERROR; - } - - ( void ) Cellular_SocketRegisterDataReadyCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); - ( void ) Cellular_SocketRegisterSocketOpenCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); - ( void ) Cellular_SocketRegisterClosedCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); - pCellularSocketContext->cellularSocketHandle = NULL; - } - - if( pCellularSocketContext->socketEventGroupHandle != NULL ) - { - vEventGroupDelete( pCellularSocketContext->socketEventGroupHandle ); - pCellularSocketContext->socketEventGroupHandle = NULL; - } - - vPortFree( pCellularSocketContext ); - } - - IotLogDebug( "Sockets close exit with code %d", retClose ); -} - -/*-----------------------------------------------------------*/ - -int32_t Sockets_Recv( Socket_t xSocket, - void * pvBuffer, - size_t xBufferLength ) -{ - cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) xSocket; - uint8_t * buf = ( uint8_t * ) pvBuffer; - BaseType_t retRecvLength = 0; - - if( pCellularSocketContext == NULL ) - { - IotLogError( "Cellular prvNetworkRecv Invalid xSocket %p", pCellularSocketContext ); - retRecvLength = ( BaseType_t ) SOCKETS_EINVAL; - } - else if( ( ( pCellularSocketContext->ulFlags & CELLULAR_SOCKET_OPEN_FLAG ) == 0U ) || - ( ( pCellularSocketContext->ulFlags & CELLULAR_SOCKET_CONNECT_FLAG ) == 0U ) ) - { - IotLogError( "Cellular prvNetworkRecv Invalid xSocket flag %p %u", - pCellularSocketContext, pCellularSocketContext->ulFlags ); - retRecvLength = ( BaseType_t ) SOCKETS_ENOTCONN; - } - else - { - retRecvLength = ( BaseType_t ) prvNetworkRecvCellular( pCellularSocketContext, buf, xBufferLength ); - } - - return retRecvLength; -} - -/*-----------------------------------------------------------*/ - -/* This function sends the data until timeout or data is completely sent to server. - * Send timeout unit is TickType_t. Any timeout value greater than UINT32_MAX_MS_TICKS - * or portMAX_DELAY will be regarded as MAX delay. In this case, this function - * will not return until all bytes of data are sent successfully or until an error occurs. */ -int32_t Sockets_Send( Socket_t xSocket, - const void * pvBuffer, - size_t xDataLength ) -{ - uint8_t * buf = ( uint8_t * ) pvBuffer; - CellularSocketHandle_t cellularSocketHandle = NULL; - BaseType_t retSendLength = 0; - uint32_t sentLength = 0; - CellularError_t socketStatus = CELLULAR_SUCCESS; - cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) xSocket; - uint32_t bytesToSend = xDataLength; - uint64_t entryTimeMs = getTimeMs(); - uint64_t elapsedTimeMs = 0; - uint32_t sendTimeoutMs = 0; - - if( pCellularSocketContext == NULL ) - { - IotLogError( "Cellular Sockets_Send Invalid xSocket %p", pCellularSocketContext ); - retSendLength = ( BaseType_t ) SOCKETS_SOCKET_ERROR; - } - else if( ( ( pCellularSocketContext->ulFlags & CELLULAR_SOCKET_OPEN_FLAG ) == 0U ) || - ( ( pCellularSocketContext->ulFlags & CELLULAR_SOCKET_CONNECT_FLAG ) == 0U ) ) - { - IotLogError( "Cellular Sockets_Send Invalid xSocket flag %p 0x%08x", - pCellularSocketContext, pCellularSocketContext->ulFlags ); - retSendLength = ( BaseType_t ) SOCKETS_SOCKET_ERROR; - } - else - { - cellularSocketHandle = pCellularSocketContext->cellularSocketHandle; - - /* Convert ticks to ms delay. */ - if( ( pCellularSocketContext->sendTimeout >= UINT32_MAX_MS_TICKS ) || ( pCellularSocketContext->sendTimeout >= portMAX_DELAY ) ) - { - /* Check if the ticks cause overflow. */ - sendTimeoutMs = UINT32_MAX_DELAY_MS; - } - else - { - sendTimeoutMs = TICKS_TO_MS( pCellularSocketContext->sendTimeout ); - } - - /* Loop sending data until data is sent completely or timeout. */ - while( bytesToSend > 0U ) - { - socketStatus = Cellular_SocketSend( CellularHandle, - cellularSocketHandle, - &buf[ retSendLength ], - bytesToSend, - &sentLength ); - - if( socketStatus == CELLULAR_SUCCESS ) - { - retSendLength = retSendLength + ( BaseType_t ) sentLength; - bytesToSend = bytesToSend - sentLength; - } - - /* Check socket status or timeout break. */ - if( ( socketStatus != CELLULAR_SUCCESS ) || - ( _calculateElapsedTime( entryTimeMs, sendTimeoutMs, &elapsedTimeMs ) ) ) - { - if( socketStatus == CELLULAR_SOCKET_CLOSED ) - { - /* Socket already closed. No data is sent. */ - retSendLength = 0; - } - else if( socketStatus != CELLULAR_SUCCESS ) - { - retSendLength = ( BaseType_t ) SOCKETS_SOCKET_ERROR; - } - - break; - } - } - - IotLogDebug( "Sockets_Send expect %d write %d", len, sentLength ); - } - - return retSendLength; -} - -/*-----------------------------------------------------------*/ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/mbedtls/sockets_wrapper.h b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/mbedtls/sockets_wrapper.h deleted file mode 100644 index d9c7adb2b..000000000 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/Common/mbedtls/sockets_wrapper.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Amazon FreeRTOS CELLULAR Preview Release - * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -/** - * @file sockets_wrapper.h - * @brief FreeRTOS Sockets connect and disconnect function wrapper. - */ - -#ifndef SOCKETS_WRAPPER_H -#define SOCKETS_WRAPPER_H - -/**************************************************/ -/******* DO NOT CHANGE the following order ********/ -/**************************************************/ - -/* Logging related header files are required to be included in the following order: - * 1. Include the header file "logging_levels.h". - * 2. Define LIBRARY_LOG_NAME and LIBRARY_LOG_LEVEL. - * 3. Include the header file "logging_stack.h". - */ - -/* Include header that defines log levels. */ -#include "logging_levels.h" - -/* Logging configuration for the Sockets. */ -#ifndef LIBRARY_LOG_NAME - #define LIBRARY_LOG_NAME "Sockets" -#endif -#ifndef LIBRARY_LOG_LEVEL - #define LIBRARY_LOG_LEVEL LOG_INFO -#endif - -#include "logging_stack.h" - -/************ End of logging configuration ****************/ - -#define SOCKETS_ERROR_NONE ( 0 ) /*!< No error. */ -#define SOCKETS_SOCKET_ERROR ( -1 ) /*!< Catch-all sockets error code. */ -#define SOCKETS_EWOULDBLOCK ( -11 ) /*!< A resource is temporarily unavailable. */ -#define SOCKETS_ENOMEM ( -12 ) /*!< Memory allocation failed. */ -#define SOCKETS_EINVAL ( -22 ) /*!< Invalid argument. */ -#define SOCKETS_ENOPROTOOPT ( -109 ) /*!< A bad option was specified . */ -#define SOCKETS_ENOTCONN ( -126 ) /*!< The supplied socket is not connected. */ -#define SOCKETS_EISCONN ( -127 ) /*!< The supplied socket is already connected. */ -#define SOCKETS_ECLOSED ( -128 ) /*!< The supplied socket has already been closed. */ -#define SOCKETS_PERIPHERAL_RESET ( -1006 ) /*!< Communications peripheral has been reset. */ - -#define SOCKETS_INVALID_SOCKET ( ( Socket_t ) ~0U ) - -struct xSOCKET; -typedef struct xSOCKET * Socket_t; /**< @brief Socket handle data type. */ - -/** - * @brief Establish a connection to server. - * - * @param[out] pTcpSocket The output parameter to return the created socket descriptor. - * @param[in] pHostName Server hostname to connect to. - * @param[in] pServerInfo Server port to connect to. - * @param[in] receiveTimeoutMs Timeout (in milliseconds) for transport receive. - * @param[in] sendTimeoutMs Timeout (in milliseconds) for transport send. - * - * @note A timeout of 0 means infinite timeout. - * - * @return Non-zero value on error, 0 on success. - */ -BaseType_t Sockets_Connect( Socket_t * pTcpSocket, - const char * pHostName, - uint16_t port, - uint32_t receiveTimeoutMs, - uint32_t sendTimeoutMs ); - -/** - * @brief End connection to server. - * - * @param[in] tcpSocket The socket descriptor. - */ -void Sockets_Disconnect( Socket_t tcpSocket ); - -/** - * @brief Transmit data to the remote socket. - * - * The socket must have already been created using a call to Sockets_Connect(). - * - * @param[in] xSocket The handle of the sending socket. - * @param[in] pvBuffer The buffer containing the data to be sent. - * @param[in] xDataLength The length of the data to be sent. - * - * @return - * * On success, the number of bytes actually sent is returned. - * * If an error occurred, a negative value is returned. @ref SocketsErrors - */ -int32_t Sockets_Send( Socket_t xSocket, - const void * pvBuffer, - size_t xDataLength ); - -/** - * @brief Receive data from a TCP socket. - * - * The socket must have already been created using a call to Sockets_Connect(). - * - * @param[in] xSocket The handle of the socket from which data is being received. - * @param[out] pvBuffer The buffer into which the received data will be placed. - * @param[in] xBufferLength The maximum number of bytes which can be received. - * pvBuffer must be at least xBufferLength bytes long. - * - * @return - * * If the receive was successful then the number of bytes received (placed in the - * buffer pointed to by pvBuffer) is returned. - * * If a timeout occurred before data could be received then 0 is returned (timeout - * is set using @ref SOCKETS_SO_RCVTIMEO). - * * If an error occurred, a negative value is returned. @ref SocketsErrors - */ -int32_t Sockets_Recv( Socket_t xSocket, - void * pvBuffer, - size_t xBufferLength ); - -#endif /* ifndef SOCKETS_WRAPPER_H */ diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj index 71ac799ad..8dc609a87 100644 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj +++ b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj @@ -58,7 +58,7 @@ Disabled - ..\..\..\..\Source\FreeRTOS-Plus-Trace\Include;..\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-TCP\include;..\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-TCP\portable\BufferManagement;..\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-TCP\portable\Compiler\MSVC;..\..\..\..\FreeRTOS-Plus\Source\Utilities\logging;..\common\WinPCap;..\..\..\..\FreeRTOS\Source\include;..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW;..\..\..\Source\Application-Protocols\coreMQTT\source\include;..\..\..\Source\Application-Protocols\coreMQTT\source\interface;..\..\..\Source\Utilities\backoff_algorithm\source\include;..\..\..\Source\Application-Protocols\network_transport\freertos_plus_tcp;..\..\..\Source\Utilities\mbedtls_freertos;..\..\..\..\Source\mbedtls_utils;..\..\..\ThirdParty\mbedtls\include;..\common;.;..\..\..\Source\FreeRTOS-Cellular-Interface\source\include;..\..\..\Source\FreeRTOS-Cellular-Interface\source\include\common;..\..\..\Source\FreeRTOS-Cellular-Interface\source\include\private;..\..\..\Source\FreeRTOS-Cellular-Interface\source\interface;..\..\..\Source\Application-Protocols\network_transport\freertos_plus_tcp\using_mbedtls;%(AdditionalIncludeDirectories) + ..\..\..\..\Source\FreeRTOS-Plus-Trace\Include;..\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-TCP\include;..\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-TCP\portable\BufferManagement;..\..\..\..\FreeRTOS-Plus\Source\FreeRTOS-Plus-TCP\portable\Compiler\MSVC;..\..\..\..\FreeRTOS-Plus\Source\Utilities\logging;..\..\common\WinPCap;..\..\..\..\FreeRTOS\Source\include;..\..\..\..\FreeRTOS\Source\portable\MSVC-MingW;..\..\..\Source\Application-Protocols\coreMQTT\source\include;..\..\..\Source\Application-Protocols\coreMQTT\source\interface;..\..\..\Source\Utilities\backoff_algorithm\source\include;..\..\..\Source\Application-Protocols\network_transport\cellular;..\..\..\Source\Utilities\mbedtls_freertos;..\..\..\..\Source\mbedtls_utils;..\..\..\ThirdParty\mbedtls\include;..\common;.;..\..\..\Source\FreeRTOS-Cellular-Interface\source\include;..\..\..\Source\FreeRTOS-Cellular-Interface\source\include\common;..\..\..\Source\FreeRTOS-Cellular-Interface\source\include\private;..\..\..\Source\FreeRTOS-Cellular-Interface\source\interface;..\..\..\Source\Application-Protocols\network_transport\freertos_plus_tcp\using_mbedtls;%(AdditionalIncludeDirectories) MBEDTLS_CONFIG_FILE="mbedtls_config.h";WIN32;_DEBUG;_CONSOLE;_WIN32_WINNT=0x0500;WINVER=0x400;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) false EnableFastChecks @@ -89,7 +89,7 @@ Console MachineX86 wpcap.lib;Bcrypt.lib;%(AdditionalDependencies) - ..\Common\WinPCap + ..\..\Common\WinPCap false false @@ -146,7 +146,8 @@ - + + @@ -496,7 +497,6 @@ - @@ -513,7 +513,8 @@ - + + @@ -629,7 +630,6 @@ - diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj.filters b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj.filters index cb9eb09ed..84dbacbfe 100644 --- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj.filters +++ b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj.filters @@ -452,16 +452,17 @@ Common\mbedtls - - Common\mbedtls - FreeRTOS+\FreeRTOS IoT Libraries\platform\cellular - + + + Common\mbedtls + + @@ -865,15 +866,16 @@ FreeRTOS+\FreeRTOS+TCP\include - - Common\mbedtls - FreeRTOS+\FreeRTOS IoT Libraries\platform\transport - + + + Common\mbedtls + + \ No newline at end of file diff --git a/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/sockets_wrapper.c b/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/sockets_wrapper.c new file mode 100644 index 000000000..c335e75c5 --- /dev/null +++ b/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/sockets_wrapper.c @@ -0,0 +1,931 @@ +/* + * Amazon FreeRTOS CELLULAR Preview Release + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * http://aws.amazon.com/freertos + * http://www.FreeRTOS.org + */ + +/* Standard includes. */ +#include +#include +#include + +/* FreeRTOS includes. */ +#include "FreeRTOS.h" +#include "event_groups.h" + +/* Sockets wrapper includes. */ +#include "sockets_wrapper.h" + +/* FreeRTOS Cellular Library api includes. */ +#include "cellular_config.h" +#include "cellular_config_defaults.h" +#include "cellular_api.h" + +/* Configure logs for the functions in this file. */ +#include "logging_levels.h" +#ifndef LIBRARY_LOG_NAME + #define LIBRARY_LOG_NAME "CELLULAR_SOCKETS" +#endif +#ifndef LIBRARY_LOG_LEVEL + #define LIBRARY_LOG_LEVEL LOG_INFO +#endif +#include "logging_stack.h" + +/*-----------------------------------------------------------*/ + +/* Cellular socket wrapper needs application provide the cellular handle and pdn context id. */ +/* User of cellular socket wrapper should provide this variable. */ +/* coverity[misra_c_2012_rule_8_6_violation] */ +extern CellularHandle_t CellularHandle; + +/* User of cellular socket wrapper should provide this variable. */ +/* coverity[misra_c_2012_rule_8_6_violation] */ +extern uint8_t CellularSocketPdnContextId; + +/*-----------------------------------------------------------*/ + +/* Windows simulator implementation. */ +#if defined( _WIN32 ) || defined( _WIN64 ) + #define strtok_r strtok_s +#endif + +#define CELLULAR_SOCKET_OPEN_FLAG ( 1UL << 0 ) +#define CELLULAR_SOCKET_CONNECT_FLAG ( 1UL << 1 ) + +#define SOCKET_DATA_RECEIVED_CALLBACK_BIT ( 0x00000001U ) +#define SOCKET_OPEN_CALLBACK_BIT ( 0x00000002U ) +#define SOCKET_OPEN_FAILED_CALLBACK_BIT ( 0x00000004U ) +#define SOCKET_CLOSE_CALLBACK_BIT ( 0x00000008U ) + +/* Ticks MS conversion macros. */ +#define TICKS_TO_MS( xTicks ) ( ( ( xTicks ) * 1000U ) / ( ( uint32_t ) configTICK_RATE_HZ ) ) +#define UINT32_MAX_DELAY_MS ( 0xFFFFFFFFUL ) +#define UINT32_MAX_MS_TICKS ( UINT32_MAX_DELAY_MS / ( TICKS_TO_MS( 1U ) ) ) + +/* Cellular socket access mode. */ +#define CELLULAR_SOCKET_ACCESS_MODE CELLULAR_ACCESSMODE_BUFFER + +/* Cellular socket open timeout. */ +#define CELLULAR_SOCKET_OPEN_TIMEOUT_TICKS ( portMAX_DELAY ) +#define CELLULAR_SOCKET_CLOSE_TIMEOUT_TICKS ( pdMS_TO_TICKS( 10000U ) ) + +/* Cellular socket AT command timeout. */ +#define CELLULAR_SOCKET_RECV_TIMEOUT_MS ( 1000UL ) + +/* Time conversion constants. */ +#define _MILLISECONDS_PER_SECOND ( 1000 ) /**< @brief Milliseconds per second. */ +#define _MILLISECONDS_PER_TICK ( _MILLISECONDS_PER_SECOND / configTICK_RATE_HZ ) /**< Milliseconds per FreeRTOS tick. */ + +/* Logging macros definition. */ +#define IotLogError( ... ) LogError( ( __VA_ARGS__ ) ) +#define IotLogWarn( ... ) LogWarn( ( __VA_ARGS__ ) ) +#define IotLogInfo( ... ) LogInfo( ( __VA_ARGS__ ) ) +#define IotLogDebug( ... ) LogDebug( ( __VA_ARGS__ ) ) + +/*-----------------------------------------------------------*/ + +typedef struct xSOCKET +{ + CellularSocketHandle_t cellularSocketHandle; + uint32_t ulFlags; + + TickType_t receiveTimeout; + TickType_t sendTimeout; + + EventGroupHandle_t socketEventGroupHandle; +} cellularSocketWrapper_t; + +/*-----------------------------------------------------------*/ + +/** + * @brief Get the count of milliseconds since vTaskStartScheduler was called. + * + * @return The count of milliseconds since vTaskStartScheduler was called. + */ +static uint64_t getTimeMs( void ); + +/** + * @brief Receive data from cellular socket. + * + * @param[in] pCellularSocketContext Cellular socket wrapper context for socket operations. + * @param[out] buf The data buffer for receiving data. + * @param[in] len The length of the data buffer + * + * @note This function receives data. It returns when non-zero bytes of data is received, + * when an error occurs, or when timeout occurs. Receive timeout unit is TickType_t. + * Any timeout value bigger than portMAX_DELAY will be regarded as portMAX_DELAY. + * In this case, this function waits portMAX_DELAY until non-zero bytes of data is received + * or until an error occurs. + * + * @return Positive value indicate the number of bytes received. Otherwise, error code defined + * in sockets_wrapper.h is returned. + */ +static BaseType_t prvNetworkRecvCellular( const cellularSocketWrapper_t * pCellularSocketContext, + uint8_t * buf, + size_t len ); + +/** + * @brief Callback used to inform about the status of socket open. + * + * @param[in] urcEvent URC Event that happened. + * @param[in] socketHandle Socket handle for which data is ready. + * @param[in] pCallbackContext pCallbackContext parameter in + * Cellular_SocketRegisterSocketOpenCallback function. + */ +static void prvCellularSocketOpenCallback( CellularUrcEvent_t urcEvent, + CellularSocketHandle_t socketHandle, + void * pCallbackContext ); + +/** + * @brief Callback used to inform that data is ready for reading on a socket. + * + * @param[in] socketHandle Socket handle for which data is ready. + * @param[in] pCallbackContext pCallbackContext parameter in + * Cellular_SocketRegisterDataReadyCallback function. + */ +static void prvCellularSocketDataReadyCallback( CellularSocketHandle_t socketHandle, + void * pCallbackContext ); + + +/** + * @brief Callback used to inform that remote end closed the connection for a + * connected socket. + * + * @param[in] socketHandle Socket handle for which remote end closed the + * connection. + * @param[in] pCallbackContext pCallbackContext parameter in + * Cellular_SocketRegisterClosedCallback function. + */ +static void prvCellularSocketClosedCallback( CellularSocketHandle_t socketHandle, + void * pCallbackContext ); + +/** + * @brief Setup socket receive timeout. + * + * @param[in] pCellularSocketContext Cellular socket wrapper context for socket operations. + * @param[out] receiveTimeout Socket receive timeout in TickType_t. + * + * @return On success, SOCKETS_ERROR_NONE is returned. If an error occurred, error code defined + * in sockets_wrapper.h is returned. + */ +static BaseType_t prvSetupSocketRecvTimeout( cellularSocketWrapper_t * pCellularSocketContext, + TickType_t receiveTimeout ); + +/** + * @brief Setup socket send timeout. + * + * @param[in] pCellularSocketContext Cellular socket wrapper context for socket operations. + * @param[out] sendTimeout Socket send timeout in TickType_t. + * + * @note Send timeout unit is TickType_t. The underlying cellular API uses miliseconds for timeout. + * Any send timeout greater than UINT32_MAX_MS_TICKS( UINT32_MAX_DELAY_MS/MS_PER_TICKS ) or + * portMAX_DELAY is regarded as UINT32_MAX_DELAY_MS for cellular API. + * + * @return On success, SOCKETS_ERROR_NONE is returned. If an error occurred, error code defined + * in sockets_wrapper.h is returned. + */ +static BaseType_t prvSetupSocketSendTimeout( cellularSocketWrapper_t * pCellularSocketContext, + TickType_t sendTimeout ); + +/** + * @brief Setup cellular socket callback function. + * + * @param[in] CellularSocketHandle_t Cellular socket handle for cellular socket operations. + * @param[in] pCellularSocketContext Cellular socket wrapper context for socket operations. + * + * @return On success, SOCKETS_ERROR_NONE is returned. If an error occurred, error code defined + * in sockets_wrapper.h is returned. + */ +static BaseType_t prvCellularSocketRegisterCallback( CellularSocketHandle_t cellularSocketHandle, + cellularSocketWrapper_t * pCellularSocketContext ); + +/** + * @brief Calculate elapsed time from current time and input parameters. + * + * @param[in] entryTimeMs The entry time to be compared with current time. + * @param[in] timeoutValueMs Timeout value for the comparison between entry time and current time. + * @param[out] pElapsedTimeMs The elapsed time if timeout condition is true. + * + * @return True if the difference between entry time and current time is bigger or + * equal to timeoutValueMs. Otherwise, return false. + */ +static bool _calculateElapsedTime( uint64_t entryTimeMs, + uint32_t timeoutValueMs, + uint64_t * pElapsedTimeMs ); + +/*-----------------------------------------------------------*/ + +static uint64_t getTimeMs( void ) +{ + TimeOut_t xCurrentTime = { 0 }; + + /* This must be unsigned because the behavior of signed integer overflow is undefined. */ + uint64_t ullTickCount = 0ULL; + + /* Get the current tick count and overflow count. vTaskSetTimeOutState() + * is used to get these values because they are both static in tasks.c. */ + vTaskSetTimeOutState( &xCurrentTime ); + + /* Adjust the tick count for the number of times a TickType_t has overflowed. */ + ullTickCount = ( uint64_t ) ( xCurrentTime.xOverflowCount ) << ( sizeof( TickType_t ) * 8 ); + + /* Add the current tick count. */ + ullTickCount += xCurrentTime.xTimeOnEntering; + + /* Return the ticks converted to milliseconds. */ + return ullTickCount * _MILLISECONDS_PER_TICK; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvNetworkRecvCellular( const cellularSocketWrapper_t * pCellularSocketContext, + uint8_t * buf, + size_t len ) +{ + CellularSocketHandle_t cellularSocketHandle = NULL; + BaseType_t retRecvLength = 0; + uint32_t recvLength = 0; + TickType_t recvTimeout = 0; + TickType_t recvStartTime = 0; + CellularError_t socketStatus = CELLULAR_SUCCESS; + EventBits_t waitEventBits = 0; + + cellularSocketHandle = pCellularSocketContext->cellularSocketHandle; + + if( pCellularSocketContext->receiveTimeout >= portMAX_DELAY ) + { + recvTimeout = portMAX_DELAY; + } + else + { + recvTimeout = pCellularSocketContext->receiveTimeout; + } + + recvStartTime = xTaskGetTickCount(); + + ( void ) xEventGroupClearBits( pCellularSocketContext->socketEventGroupHandle, + SOCKET_DATA_RECEIVED_CALLBACK_BIT ); + socketStatus = Cellular_SocketRecv( CellularHandle, cellularSocketHandle, buf, len, &recvLength ); + + /* Calculate remain recvTimeout. */ + if( recvTimeout != portMAX_DELAY ) + { + if( ( recvStartTime + recvTimeout ) > xTaskGetTickCount() ) + { + recvTimeout = recvTimeout - ( xTaskGetTickCount() - recvStartTime ); + } + else + { + recvTimeout = 0; + } + } + + if( ( socketStatus == CELLULAR_SUCCESS ) && ( recvLength == 0U ) && + ( recvTimeout != 0U ) ) + { + waitEventBits = xEventGroupWaitBits( pCellularSocketContext->socketEventGroupHandle, + SOCKET_DATA_RECEIVED_CALLBACK_BIT | SOCKET_CLOSE_CALLBACK_BIT, + pdTRUE, + pdFALSE, + recvTimeout ); + + if( ( waitEventBits & SOCKET_CLOSE_CALLBACK_BIT ) != 0U ) + { + socketStatus = CELLULAR_SOCKET_CLOSED; + } + else if( ( waitEventBits & SOCKET_DATA_RECEIVED_CALLBACK_BIT ) != 0U ) + { + socketStatus = Cellular_SocketRecv( CellularHandle, cellularSocketHandle, buf, len, &recvLength ); + } + else + { + IotLogInfo( "prvNetworkRecv timeout" ); + socketStatus = CELLULAR_SUCCESS; + recvLength = 0; + } + } + + if( socketStatus == CELLULAR_SUCCESS ) + { + retRecvLength = ( BaseType_t ) recvLength; + } + else + { + IotLogError( "prvNetworkRecv failed %d", socketStatus ); + retRecvLength = SOCKETS_SOCKET_ERROR; + } + + IotLogDebug( "prvNetworkRecv expect %d read %d", len, recvLength ); + return retRecvLength; +} + +/*-----------------------------------------------------------*/ + +static void prvCellularSocketOpenCallback( CellularUrcEvent_t urcEvent, + CellularSocketHandle_t socketHandle, + void * pCallbackContext ) +{ + cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) pCallbackContext; + + ( void ) socketHandle; + + if( pCellularSocketContext != NULL ) + { + IotLogDebug( "Socket open callback on Socket %p %d %d.", + pCellularSocketContext, socketHandle, urcEvent ); + + if( urcEvent == CELLULAR_URC_SOCKET_OPENED ) + { + pCellularSocketContext->ulFlags = pCellularSocketContext->ulFlags | CELLULAR_SOCKET_CONNECT_FLAG; + ( void ) xEventGroupSetBits( pCellularSocketContext->socketEventGroupHandle, + SOCKET_OPEN_CALLBACK_BIT ); + } + else + { + /* Socket open failed. */ + ( void ) xEventGroupSetBits( pCellularSocketContext->socketEventGroupHandle, + SOCKET_OPEN_FAILED_CALLBACK_BIT ); + } + } + else + { + IotLogError( "Spurious socket open callback." ); + } +} + +/*-----------------------------------------------------------*/ + +static void prvCellularSocketDataReadyCallback( CellularSocketHandle_t socketHandle, + void * pCallbackContext ) +{ + cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) pCallbackContext; + + ( void ) socketHandle; + + if( pCellularSocketContext != NULL ) + { + IotLogDebug( "Data ready on Socket %p", pCellularSocketContext ); + ( void ) xEventGroupSetBits( pCellularSocketContext->socketEventGroupHandle, + SOCKET_DATA_RECEIVED_CALLBACK_BIT ); + } + else + { + IotLogError( "spurious data callback" ); + } +} + +/*-----------------------------------------------------------*/ + +static void prvCellularSocketClosedCallback( CellularSocketHandle_t socketHandle, + void * pCallbackContext ) +{ + cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) pCallbackContext; + + ( void ) socketHandle; + + if( pCellularSocketContext != NULL ) + { + IotLogInfo( "Socket Close on Socket %p", pCellularSocketContext ); + pCellularSocketContext->ulFlags = pCellularSocketContext->ulFlags & ( ~CELLULAR_SOCKET_CONNECT_FLAG ); + ( void ) xEventGroupSetBits( pCellularSocketContext->socketEventGroupHandle, + SOCKET_CLOSE_CALLBACK_BIT ); + } + else + { + IotLogError( "spurious socket close callback" ); + } +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvSetupSocketRecvTimeout( cellularSocketWrapper_t * pCellularSocketContext, + TickType_t receiveTimeout ) +{ + BaseType_t retSetSockOpt = SOCKETS_ERROR_NONE; + + if( pCellularSocketContext == NULL ) + { + retSetSockOpt = SOCKETS_EINVAL; + } + else + { + if( receiveTimeout >= portMAX_DELAY ) + { + pCellularSocketContext->receiveTimeout = portMAX_DELAY; + } + else + { + pCellularSocketContext->receiveTimeout = receiveTimeout; + } + } + + return retSetSockOpt; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvSetupSocketSendTimeout( cellularSocketWrapper_t * pCellularSocketContext, + TickType_t sendTimeout ) +{ + CellularError_t socketStatus = CELLULAR_SUCCESS; + BaseType_t retSetSockOpt = SOCKETS_ERROR_NONE; + uint32_t sendTimeoutMs = 0; + CellularSocketHandle_t cellularSocketHandle = NULL; + + if( pCellularSocketContext == NULL ) + { + retSetSockOpt = SOCKETS_EINVAL; + } + else + { + cellularSocketHandle = pCellularSocketContext->cellularSocketHandle; + + if( sendTimeout >= UINT32_MAX_MS_TICKS ) + { + /* Check if the ticks cause overflow. */ + pCellularSocketContext->sendTimeout = portMAX_DELAY; + sendTimeoutMs = UINT32_MAX_DELAY_MS; + } + else if( sendTimeout >= portMAX_DELAY ) + { + IotLogWarn( "Sendtimeout %d longer than portMAX_DELAY, %d ms is used instead", + sendTimeout, UINT32_MAX_DELAY_MS ); + pCellularSocketContext->sendTimeout = portMAX_DELAY; + sendTimeoutMs = UINT32_MAX_DELAY_MS; + } + else + { + pCellularSocketContext->sendTimeout = sendTimeout; + sendTimeoutMs = TICKS_TO_MS( sendTimeout ); + } + + socketStatus = Cellular_SocketSetSockOpt( CellularHandle, + cellularSocketHandle, + CELLULAR_SOCKET_OPTION_LEVEL_TRANSPORT, + CELLULAR_SOCKET_OPTION_SEND_TIMEOUT, + ( const uint8_t * ) &sendTimeoutMs, + sizeof( uint32_t ) ); + + if( socketStatus != CELLULAR_SUCCESS ) + { + retSetSockOpt = SOCKETS_EINVAL; + } + } + + return retSetSockOpt; +} + +/*-----------------------------------------------------------*/ + +static BaseType_t prvCellularSocketRegisterCallback( CellularSocketHandle_t cellularSocketHandle, + cellularSocketWrapper_t * pCellularSocketContext ) +{ + BaseType_t retRegCallback = SOCKETS_ERROR_NONE; + CellularError_t socketStatus = CELLULAR_SUCCESS; + + if( cellularSocketHandle == NULL ) + { + retRegCallback = SOCKETS_EINVAL; + } + + if( retRegCallback == SOCKETS_ERROR_NONE ) + { + socketStatus = Cellular_SocketRegisterDataReadyCallback( CellularHandle, cellularSocketHandle, + prvCellularSocketDataReadyCallback, ( void * ) pCellularSocketContext ); + + if( socketStatus != CELLULAR_SUCCESS ) + { + IotLogError( "Failed to SocketRegisterDataReadyCallback. Socket status %d.", socketStatus ); + retRegCallback = SOCKETS_SOCKET_ERROR; + } + } + + if( retRegCallback == SOCKETS_ERROR_NONE ) + { + socketStatus = Cellular_SocketRegisterSocketOpenCallback( CellularHandle, cellularSocketHandle, + prvCellularSocketOpenCallback, ( void * ) pCellularSocketContext ); + + if( socketStatus != CELLULAR_SUCCESS ) + { + IotLogError( "Failed to SocketRegisterSocketOpenCallbac. Socket status %d.", socketStatus ); + retRegCallback = SOCKETS_SOCKET_ERROR; + } + } + + if( retRegCallback == SOCKETS_ERROR_NONE ) + { + socketStatus = Cellular_SocketRegisterClosedCallback( CellularHandle, cellularSocketHandle, + prvCellularSocketClosedCallback, ( void * ) pCellularSocketContext ); + + if( socketStatus != CELLULAR_SUCCESS ) + { + IotLogError( "Failed to SocketRegisterClosedCallback. Socket status %d.", socketStatus ); + retRegCallback = SOCKETS_SOCKET_ERROR; + } + } + + return retRegCallback; +} + +/*-----------------------------------------------------------*/ + +static bool _calculateElapsedTime( uint64_t entryTimeMs, + uint32_t timeoutValueMs, + uint64_t * pElapsedTimeMs ) +{ + uint64_t currentTimeMs = getTimeMs(); + bool isExpired = false; + + /* timeoutValueMs with UINT32_MAX_DELAY_MS means wait for ever, same behavior as freertos_plus_tcp. */ + if( timeoutValueMs == UINT32_MAX_DELAY_MS ) + { + isExpired = false; + } + + /* timeoutValueMs = 0 means none blocking mode. */ + else if( timeoutValueMs == 0U ) + { + isExpired = true; + } + else + { + *pElapsedTimeMs = currentTimeMs - entryTimeMs; + + if( ( currentTimeMs - entryTimeMs ) >= timeoutValueMs ) + { + isExpired = true; + } + else + { + isExpired = false; + } + } + + return isExpired; +} + +/*-----------------------------------------------------------*/ + +BaseType_t Sockets_Connect( Socket_t * pTcpSocket, + const char * pHostName, + uint16_t port, + uint32_t receiveTimeoutMs, + uint32_t sendTimeoutMs ) +{ + CellularSocketHandle_t cellularSocketHandle = NULL; + cellularSocketWrapper_t * pCellularSocketContext = NULL; + CellularError_t cellularSocketStatus = CELLULAR_INVALID_HANDLE; + + CellularSocketAddress_t serverAddress = { 0 }; + EventBits_t waitEventBits = 0; + BaseType_t retConnect = SOCKETS_ERROR_NONE; + const uint32_t defaultReceiveTimeoutMs = CELLULAR_SOCKET_RECV_TIMEOUT_MS; + + /* Create a new TCP socket. */ + cellularSocketStatus = Cellular_CreateSocket( CellularHandle, + CellularSocketPdnContextId, + CELLULAR_SOCKET_DOMAIN_AF_INET, + CELLULAR_SOCKET_TYPE_STREAM, + CELLULAR_SOCKET_PROTOCOL_TCP, + &cellularSocketHandle ); + + if( cellularSocketStatus != CELLULAR_SUCCESS ) + { + IotLogError( "Failed to create cellular sockets. %d", cellularSocketStatus ); + retConnect = SOCKETS_SOCKET_ERROR; + } + + /* Allocate socket context. */ + if( retConnect == SOCKETS_ERROR_NONE ) + { + pCellularSocketContext = pvPortMalloc( sizeof( cellularSocketWrapper_t ) ); + + if( pCellularSocketContext == NULL ) + { + IotLogError( "Failed to allocate new socket context." ); + ( void ) Cellular_SocketClose( CellularHandle, cellularSocketHandle ); + retConnect = SOCKETS_ENOMEM; + } + else + { + /* Initialize all the members to sane values. */ + IotLogDebug( "Created CELLULAR Socket %p.", pCellularSocketContext ); + ( void ) memset( pCellularSocketContext, 0, sizeof( cellularSocketWrapper_t ) ); + pCellularSocketContext->cellularSocketHandle = cellularSocketHandle; + pCellularSocketContext->ulFlags |= CELLULAR_SOCKET_OPEN_FLAG; + pCellularSocketContext->socketEventGroupHandle = NULL; + } + } + + /* Allocate event group for callback function. */ + if( retConnect == SOCKETS_ERROR_NONE ) + { + pCellularSocketContext->socketEventGroupHandle = xEventGroupCreate(); + + if( pCellularSocketContext->socketEventGroupHandle == NULL ) + { + IotLogError( "Failed create cellular socket eventGroupHandle %p.", pCellularSocketContext ); + retConnect = SOCKETS_ENOMEM; + } + } + + /* Register cellular socket callback function. */ + if( retConnect == SOCKETS_ERROR_NONE ) + { + serverAddress.ipAddress.ipAddressType = CELLULAR_IP_ADDRESS_V4; + strncpy( serverAddress.ipAddress.ipAddress, pHostName, CELLULAR_IP_ADDRESS_MAX_SIZE ); + serverAddress.port = port; + + IotLogDebug( "Ip address %s port %d\r\n", serverAddress.ipAddress.ipAddress, serverAddress.port ); + retConnect = prvCellularSocketRegisterCallback( cellularSocketHandle, pCellularSocketContext ); + } + + /* Setup cellular socket recv AT command default timeout. */ + if( retConnect == SOCKETS_ERROR_NONE ) + { + cellularSocketStatus = Cellular_SocketSetSockOpt( CellularHandle, + cellularSocketHandle, + CELLULAR_SOCKET_OPTION_LEVEL_TRANSPORT, + CELLULAR_SOCKET_OPTION_RECV_TIMEOUT, + ( const uint8_t * ) &defaultReceiveTimeoutMs, + sizeof( uint32_t ) ); + + if( cellularSocketStatus != CELLULAR_SUCCESS ) + { + IotLogError( "Failed to setup cellular AT command receive timeout %d.", cellularSocketStatus ); + retConnect = SOCKETS_SOCKET_ERROR; + } + } + + /* Setup cellular socket send/recv timeout. */ + if( retConnect == SOCKETS_ERROR_NONE ) + { + retConnect = prvSetupSocketSendTimeout( pCellularSocketContext, pdMS_TO_TICKS( sendTimeoutMs ) ); + } + + if( retConnect == SOCKETS_ERROR_NONE ) + { + retConnect = prvSetupSocketRecvTimeout( pCellularSocketContext, pdMS_TO_TICKS( receiveTimeoutMs ) ); + } + + /* Cellular socket connect. */ + if( retConnect == SOCKETS_ERROR_NONE ) + { + ( void ) xEventGroupClearBits( pCellularSocketContext->socketEventGroupHandle, + SOCKET_DATA_RECEIVED_CALLBACK_BIT | SOCKET_OPEN_FAILED_CALLBACK_BIT ); + cellularSocketStatus = Cellular_SocketConnect( CellularHandle, cellularSocketHandle, CELLULAR_SOCKET_ACCESS_MODE, &serverAddress ); + + if( cellularSocketStatus != CELLULAR_SUCCESS ) + { + IotLogError( "Failed to establish new connection. Socket status %d.", cellularSocketStatus ); + retConnect = SOCKETS_SOCKET_ERROR; + } + } + + /* Wait the socket connection. */ + if( retConnect == SOCKETS_ERROR_NONE ) + { + waitEventBits = xEventGroupWaitBits( pCellularSocketContext->socketEventGroupHandle, + SOCKET_OPEN_CALLBACK_BIT | SOCKET_OPEN_FAILED_CALLBACK_BIT, + pdTRUE, + pdFALSE, + CELLULAR_SOCKET_OPEN_TIMEOUT_TICKS ); + + if( waitEventBits != SOCKET_OPEN_CALLBACK_BIT ) + { + IotLogError( "Socket connect timeout." ); + retConnect = SOCKETS_ENOTCONN; + } + } + + /* Cleanup the socket if any error. */ + if( retConnect != SOCKETS_ERROR_NONE ) + { + if( cellularSocketHandle != NULL ) + { + ( void ) Cellular_SocketClose( CellularHandle, cellularSocketHandle ); + ( void ) Cellular_SocketRegisterDataReadyCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); + ( void ) Cellular_SocketRegisterSocketOpenCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); + ( void ) Cellular_SocketRegisterClosedCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); + + if( pCellularSocketContext != NULL ) + { + pCellularSocketContext->cellularSocketHandle = NULL; + } + } + + if( ( pCellularSocketContext != NULL ) && ( pCellularSocketContext->socketEventGroupHandle != NULL ) ) + { + vEventGroupDelete( pCellularSocketContext->socketEventGroupHandle ); + pCellularSocketContext->socketEventGroupHandle = NULL; + } + + if( pCellularSocketContext != NULL ) + { + vPortFree( pCellularSocketContext ); + pCellularSocketContext = NULL; + } + } + + *pTcpSocket = pCellularSocketContext; + + return retConnect; +} + +/*-----------------------------------------------------------*/ + +void Sockets_Disconnect( Socket_t xSocket ) +{ + int32_t retClose = SOCKETS_ERROR_NONE; + cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) xSocket; + CellularSocketHandle_t cellularSocketHandle = NULL; + uint32_t recvLength = 0; + uint8_t buf[ 128 ] = { 0 }; + CellularError_t cellularSocketStatus = CELLULAR_SUCCESS; + + /* xSocket need to be check against SOCKET_INVALID_SOCKET. */ + /* coverity[misra_c_2012_rule_11_4_violation] */ + if( ( pCellularSocketContext == NULL ) || ( xSocket == SOCKETS_INVALID_SOCKET ) ) + { + IotLogError( "Invalid xSocket %p", pCellularSocketContext ); + retClose = SOCKETS_EINVAL; + } + else + { + cellularSocketHandle = pCellularSocketContext->cellularSocketHandle; + } + + if( retClose == SOCKETS_ERROR_NONE ) + { + if( cellularSocketHandle != NULL ) + { + /* Receive all the data before socket close. */ + do + { + recvLength = 0; + cellularSocketStatus = Cellular_SocketRecv( CellularHandle, cellularSocketHandle, buf, 128, &recvLength ); + IotLogDebug( "%u bytes received in close", recvLength ); + } while( ( recvLength != 0 ) && ( cellularSocketStatus == CELLULAR_SUCCESS ) ); + + /* Close sockets. */ + if( Cellular_SocketClose( CellularHandle, cellularSocketHandle ) != CELLULAR_SUCCESS ) + { + IotLogWarn( "Failed to destroy connection." ); + retClose = SOCKETS_SOCKET_ERROR; + } + + ( void ) Cellular_SocketRegisterDataReadyCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); + ( void ) Cellular_SocketRegisterSocketOpenCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); + ( void ) Cellular_SocketRegisterClosedCallback( CellularHandle, cellularSocketHandle, NULL, NULL ); + pCellularSocketContext->cellularSocketHandle = NULL; + } + + if( pCellularSocketContext->socketEventGroupHandle != NULL ) + { + vEventGroupDelete( pCellularSocketContext->socketEventGroupHandle ); + pCellularSocketContext->socketEventGroupHandle = NULL; + } + + vPortFree( pCellularSocketContext ); + } + + IotLogDebug( "Sockets close exit with code %d", retClose ); +} + +/*-----------------------------------------------------------*/ + +int32_t Sockets_Recv( Socket_t xSocket, + void * pvBuffer, + size_t xBufferLength ) +{ + cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) xSocket; + uint8_t * buf = ( uint8_t * ) pvBuffer; + BaseType_t retRecvLength = 0; + + if( pCellularSocketContext == NULL ) + { + IotLogError( "Cellular prvNetworkRecv Invalid xSocket %p", pCellularSocketContext ); + retRecvLength = ( BaseType_t ) SOCKETS_EINVAL; + } + else if( ( ( pCellularSocketContext->ulFlags & CELLULAR_SOCKET_OPEN_FLAG ) == 0U ) || + ( ( pCellularSocketContext->ulFlags & CELLULAR_SOCKET_CONNECT_FLAG ) == 0U ) ) + { + IotLogError( "Cellular prvNetworkRecv Invalid xSocket flag %p %u", + pCellularSocketContext, pCellularSocketContext->ulFlags ); + retRecvLength = ( BaseType_t ) SOCKETS_ENOTCONN; + } + else + { + retRecvLength = ( BaseType_t ) prvNetworkRecvCellular( pCellularSocketContext, buf, xBufferLength ); + } + + return retRecvLength; +} + +/*-----------------------------------------------------------*/ + +/* This function sends the data until timeout or data is completely sent to server. + * Send timeout unit is TickType_t. Any timeout value greater than UINT32_MAX_MS_TICKS + * or portMAX_DELAY will be regarded as MAX delay. In this case, this function + * will not return until all bytes of data are sent successfully or until an error occurs. */ +int32_t Sockets_Send( Socket_t xSocket, + const void * pvBuffer, + size_t xDataLength ) +{ + uint8_t * buf = ( uint8_t * ) pvBuffer; + CellularSocketHandle_t cellularSocketHandle = NULL; + BaseType_t retSendLength = 0; + uint32_t sentLength = 0; + CellularError_t socketStatus = CELLULAR_SUCCESS; + cellularSocketWrapper_t * pCellularSocketContext = ( cellularSocketWrapper_t * ) xSocket; + uint32_t bytesToSend = xDataLength; + uint64_t entryTimeMs = getTimeMs(); + uint64_t elapsedTimeMs = 0; + uint32_t sendTimeoutMs = 0; + + if( pCellularSocketContext == NULL ) + { + IotLogError( "Cellular Sockets_Send Invalid xSocket %p", pCellularSocketContext ); + retSendLength = ( BaseType_t ) SOCKETS_SOCKET_ERROR; + } + else if( ( ( pCellularSocketContext->ulFlags & CELLULAR_SOCKET_OPEN_FLAG ) == 0U ) || + ( ( pCellularSocketContext->ulFlags & CELLULAR_SOCKET_CONNECT_FLAG ) == 0U ) ) + { + IotLogError( "Cellular Sockets_Send Invalid xSocket flag %p 0x%08x", + pCellularSocketContext, pCellularSocketContext->ulFlags ); + retSendLength = ( BaseType_t ) SOCKETS_SOCKET_ERROR; + } + else + { + cellularSocketHandle = pCellularSocketContext->cellularSocketHandle; + + /* Convert ticks to ms delay. */ + if( ( pCellularSocketContext->sendTimeout >= UINT32_MAX_MS_TICKS ) || ( pCellularSocketContext->sendTimeout >= portMAX_DELAY ) ) + { + /* Check if the ticks cause overflow. */ + sendTimeoutMs = UINT32_MAX_DELAY_MS; + } + else + { + sendTimeoutMs = TICKS_TO_MS( pCellularSocketContext->sendTimeout ); + } + + /* Loop sending data until data is sent completely or timeout. */ + while( bytesToSend > 0U ) + { + socketStatus = Cellular_SocketSend( CellularHandle, + cellularSocketHandle, + &buf[ retSendLength ], + bytesToSend, + &sentLength ); + + if( socketStatus == CELLULAR_SUCCESS ) + { + retSendLength = retSendLength + ( BaseType_t ) sentLength; + bytesToSend = bytesToSend - sentLength; + } + + /* Check socket status or timeout break. */ + if( ( socketStatus != CELLULAR_SUCCESS ) || + ( _calculateElapsedTime( entryTimeMs, sendTimeoutMs, &elapsedTimeMs ) ) ) + { + if( socketStatus == CELLULAR_SOCKET_CLOSED ) + { + /* Socket already closed. No data is sent. */ + retSendLength = 0; + } + else if( socketStatus != CELLULAR_SUCCESS ) + { + retSendLength = ( BaseType_t ) SOCKETS_SOCKET_ERROR; + } + + break; + } + } + + IotLogDebug( "Sockets_Send expect %d write %d", len, sentLength ); + } + + return retSendLength; +} + +/*-----------------------------------------------------------*/ diff --git a/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/sockets_wrapper.h b/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/sockets_wrapper.h new file mode 100644 index 000000000..d9c7adb2b --- /dev/null +++ b/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/sockets_wrapper.h @@ -0,0 +1,136 @@ +/* + * Amazon FreeRTOS CELLULAR Preview Release + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * @file sockets_wrapper.h + * @brief FreeRTOS Sockets connect and disconnect function wrapper. + */ + +#ifndef SOCKETS_WRAPPER_H +#define SOCKETS_WRAPPER_H + +/**************************************************/ +/******* DO NOT CHANGE the following order ********/ +/**************************************************/ + +/* Logging related header files are required to be included in the following order: + * 1. Include the header file "logging_levels.h". + * 2. Define LIBRARY_LOG_NAME and LIBRARY_LOG_LEVEL. + * 3. Include the header file "logging_stack.h". + */ + +/* Include header that defines log levels. */ +#include "logging_levels.h" + +/* Logging configuration for the Sockets. */ +#ifndef LIBRARY_LOG_NAME + #define LIBRARY_LOG_NAME "Sockets" +#endif +#ifndef LIBRARY_LOG_LEVEL + #define LIBRARY_LOG_LEVEL LOG_INFO +#endif + +#include "logging_stack.h" + +/************ End of logging configuration ****************/ + +#define SOCKETS_ERROR_NONE ( 0 ) /*!< No error. */ +#define SOCKETS_SOCKET_ERROR ( -1 ) /*!< Catch-all sockets error code. */ +#define SOCKETS_EWOULDBLOCK ( -11 ) /*!< A resource is temporarily unavailable. */ +#define SOCKETS_ENOMEM ( -12 ) /*!< Memory allocation failed. */ +#define SOCKETS_EINVAL ( -22 ) /*!< Invalid argument. */ +#define SOCKETS_ENOPROTOOPT ( -109 ) /*!< A bad option was specified . */ +#define SOCKETS_ENOTCONN ( -126 ) /*!< The supplied socket is not connected. */ +#define SOCKETS_EISCONN ( -127 ) /*!< The supplied socket is already connected. */ +#define SOCKETS_ECLOSED ( -128 ) /*!< The supplied socket has already been closed. */ +#define SOCKETS_PERIPHERAL_RESET ( -1006 ) /*!< Communications peripheral has been reset. */ + +#define SOCKETS_INVALID_SOCKET ( ( Socket_t ) ~0U ) + +struct xSOCKET; +typedef struct xSOCKET * Socket_t; /**< @brief Socket handle data type. */ + +/** + * @brief Establish a connection to server. + * + * @param[out] pTcpSocket The output parameter to return the created socket descriptor. + * @param[in] pHostName Server hostname to connect to. + * @param[in] pServerInfo Server port to connect to. + * @param[in] receiveTimeoutMs Timeout (in milliseconds) for transport receive. + * @param[in] sendTimeoutMs Timeout (in milliseconds) for transport send. + * + * @note A timeout of 0 means infinite timeout. + * + * @return Non-zero value on error, 0 on success. + */ +BaseType_t Sockets_Connect( Socket_t * pTcpSocket, + const char * pHostName, + uint16_t port, + uint32_t receiveTimeoutMs, + uint32_t sendTimeoutMs ); + +/** + * @brief End connection to server. + * + * @param[in] tcpSocket The socket descriptor. + */ +void Sockets_Disconnect( Socket_t tcpSocket ); + +/** + * @brief Transmit data to the remote socket. + * + * The socket must have already been created using a call to Sockets_Connect(). + * + * @param[in] xSocket The handle of the sending socket. + * @param[in] pvBuffer The buffer containing the data to be sent. + * @param[in] xDataLength The length of the data to be sent. + * + * @return + * * On success, the number of bytes actually sent is returned. + * * If an error occurred, a negative value is returned. @ref SocketsErrors + */ +int32_t Sockets_Send( Socket_t xSocket, + const void * pvBuffer, + size_t xDataLength ); + +/** + * @brief Receive data from a TCP socket. + * + * The socket must have already been created using a call to Sockets_Connect(). + * + * @param[in] xSocket The handle of the socket from which data is being received. + * @param[out] pvBuffer The buffer into which the received data will be placed. + * @param[in] xBufferLength The maximum number of bytes which can be received. + * pvBuffer must be at least xBufferLength bytes long. + * + * @return + * * If the receive was successful then the number of bytes received (placed in the + * buffer pointed to by pvBuffer) is returned. + * * If a timeout occurred before data could be received then 0 is returned (timeout + * is set using @ref SOCKETS_SO_RCVTIMEO). + * * If an error occurred, a negative value is returned. @ref SocketsErrors + */ +int32_t Sockets_Recv( Socket_t xSocket, + void * pvBuffer, + size_t xBufferLength ); + +#endif /* ifndef SOCKETS_WRAPPER_H */ diff --git a/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/using_mbedtls/using_mbedtls.c b/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/using_mbedtls/using_mbedtls.c new file mode 100644 index 000000000..e0d3fff9b --- /dev/null +++ b/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/using_mbedtls/using_mbedtls.c @@ -0,0 +1,847 @@ +/* + * FreeRTOS V202107.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * https://www.FreeRTOS.org + * https://github.com/FreeRTOS + * + */ + +/** + * @file tls_freertos.c + * @brief TLS transport interface implementations. This implementation uses + * mbedTLS. + */ + +/* Standard includes. */ +#include + +/* FreeRTOS includes. */ +#include "FreeRTOS.h" + +/* FreeRTOS+TCP includes. */ +#include "FreeRTOS_IP.h" +#include "FreeRTOS_Sockets.h" + +/* TLS transport header. */ +#include "using_mbedtls.h" + +/* FreeRTOS Socket wrapper include. */ +#include "sockets_wrapper.h" + +/*-----------------------------------------------------------*/ + +/** + * @brief Each compilation unit that consumes the NetworkContext must define it. + * It should contain a single pointer as seen below whenever the header file + * of this transport implementation is included to your project. + * + * @note When using multiple transports in the same compilation unit, + * define this pointer as void *. + */ +struct NetworkContext +{ + TlsTransportParams_t * pParams; +}; + +/*-----------------------------------------------------------*/ + +/** + * @brief Represents string to be logged when mbedTLS returned error + * does not contain a high-level code. + */ +static const char * pNoHighLevelMbedTlsCodeStr = ""; + +/** + * @brief Represents string to be logged when mbedTLS returned error + * does not contain a low-level code. + */ +static const char * pNoLowLevelMbedTlsCodeStr = ""; + +/** + * @brief Utility for converting the high-level code in an mbedTLS error to string, + * if the code-contains a high-level code; otherwise, using a default string. + */ +#define mbedtlsHighLevelCodeOrDefault( mbedTlsCode ) \ + ( mbedtls_high_level_strerr( mbedTlsCode ) != NULL ) ? \ + mbedtls_high_level_strerr( mbedTlsCode ) : pNoHighLevelMbedTlsCodeStr + +/** + * @brief Utility for converting the level-level code in an mbedTLS error to string, + * if the code-contains a level-level code; otherwise, using a default string. + */ +#define mbedtlsLowLevelCodeOrDefault( mbedTlsCode ) \ + ( mbedtls_low_level_strerr( mbedTlsCode ) != NULL ) ? \ + mbedtls_low_level_strerr( mbedTlsCode ) : pNoLowLevelMbedTlsCodeStr + +/*-----------------------------------------------------------*/ + +/** + * @brief Initialize the mbed TLS structures in a network connection. + * + * @param[in] pSslContext The SSL context to initialize. + */ +static void sslContextInit( SSLContext_t * pSslContext ); + +/** + * @brief Free the mbed TLS structures in a network connection. + * + * @param[in] pSslContext The SSL context to free. + */ +static void sslContextFree( SSLContext_t * pSslContext ); + +/** + * @brief Add X509 certificate to the trusted list of root certificates. + * + * OpenSSL does not provide a single function for reading and loading certificates + * from files into stores, so the file API must be called. Start with the + * root certificate. + * + * @param[out] pSslContext SSL context to which the trusted server root CA is to be added. + * @param[in] pRootCa PEM-encoded string of the trusted server root CA. + * @param[in] rootCaSize Size of the trusted server root CA. + * + * @return 0 on success; otherwise, failure; + */ +static int32_t setRootCa( SSLContext_t * pSslContext, + const uint8_t * pRootCa, + size_t rootCaSize ); + +/** + * @brief Set X509 certificate as client certificate for the server to authenticate. + * + * @param[out] pSslContext SSL context to which the client certificate is to be set. + * @param[in] pClientCert PEM-encoded string of the client certificate. + * @param[in] clientCertSize Size of the client certificate. + * + * @return 0 on success; otherwise, failure; + */ +static int32_t setClientCertificate( SSLContext_t * pSslContext, + const uint8_t * pClientCert, + size_t clientCertSize ); + +/** + * @brief Set private key for the client's certificate. + * + * @param[out] pSslContext SSL context to which the private key is to be set. + * @param[in] pPrivateKey PEM-encoded string of the client private key. + * @param[in] privateKeySize Size of the client private key. + * + * @return 0 on success; otherwise, failure; + */ +static int32_t setPrivateKey( SSLContext_t * pSslContext, + const uint8_t * pPrivateKey, + size_t privateKeySize ); + +/** + * @brief Passes TLS credentials to the OpenSSL library. + * + * Provides the root CA certificate, client certificate, and private key to the + * OpenSSL library. If the client certificate or private key is not NULL, mutual + * authentication is used when performing the TLS handshake. + * + * @param[out] pSslContext SSL context to which the credentials are to be imported. + * @param[in] pNetworkCredentials TLS credentials to be imported. + * + * @return 0 on success; otherwise, failure; + */ +static int32_t setCredentials( SSLContext_t * pSslContext, + const NetworkCredentials_t * pNetworkCredentials ); + +/** + * @brief Set optional configurations for the TLS connection. + * + * This function is used to set SNI and ALPN protocols. + * + * @param[in] pSslContext SSL context to which the optional configurations are to be set. + * @param[in] pHostName Remote host name, used for server name indication. + * @param[in] pNetworkCredentials TLS setup parameters. + */ +static void setOptionalConfigurations( SSLContext_t * pSslContext, + const char * pHostName, + const NetworkCredentials_t * pNetworkCredentials ); + +/** + * @brief Setup TLS by initializing contexts and setting configurations. + * + * @param[in] pNetworkContext Network context. + * @param[in] pHostName Remote host name, used for server name indication. + * @param[in] pNetworkCredentials TLS setup parameters. + * + * @return #TLS_TRANSPORT_SUCCESS, #TLS_TRANSPORT_INSUFFICIENT_MEMORY, #TLS_TRANSPORT_INVALID_CREDENTIALS, + * or #TLS_TRANSPORT_INTERNAL_ERROR. + */ +static TlsTransportStatus_t tlsSetup( NetworkContext_t * pNetworkContext, + const char * pHostName, + const NetworkCredentials_t * pNetworkCredentials ); + +/** + * @brief Perform the TLS handshake on a TCP connection. + * + * @param[in] pNetworkContext Network context. + * @param[in] pNetworkCredentials TLS setup parameters. + * + * @return #TLS_TRANSPORT_SUCCESS, #TLS_TRANSPORT_HANDSHAKE_FAILED, or #TLS_TRANSPORT_INTERNAL_ERROR. + */ +static TlsTransportStatus_t tlsHandshake( NetworkContext_t * pNetworkContext, + const NetworkCredentials_t * pNetworkCredentials ); + +/** + * @brief Initialize mbedTLS. + * + * @param[out] entropyContext mbed TLS entropy context for generation of random numbers. + * @param[out] ctrDrgbContext mbed TLS CTR DRBG context for generation of random numbers. + * + * @return #TLS_TRANSPORT_SUCCESS, or #TLS_TRANSPORT_INTERNAL_ERROR. + */ +static TlsTransportStatus_t initMbedtls( mbedtls_entropy_context * pEntropyContext, + mbedtls_ctr_drbg_context * pCtrDrgbContext ); + +/*-----------------------------------------------------------*/ + +static void sslContextInit( SSLContext_t * pSslContext ) +{ + configASSERT( pSslContext != NULL ); + + mbedtls_ssl_config_init( &( pSslContext->config ) ); + mbedtls_x509_crt_init( &( pSslContext->rootCa ) ); + mbedtls_pk_init( &( pSslContext->privKey ) ); + mbedtls_x509_crt_init( &( pSslContext->clientCert ) ); + mbedtls_ssl_init( &( pSslContext->context ) ); +} +/*-----------------------------------------------------------*/ + +static void sslContextFree( SSLContext_t * pSslContext ) +{ + configASSERT( pSslContext != NULL ); + + mbedtls_ssl_free( &( pSslContext->context ) ); + mbedtls_x509_crt_free( &( pSslContext->rootCa ) ); + mbedtls_x509_crt_free( &( pSslContext->clientCert ) ); + mbedtls_pk_free( &( pSslContext->privKey ) ); + mbedtls_entropy_free( &( pSslContext->entropyContext ) ); + mbedtls_ctr_drbg_free( &( pSslContext->ctrDrgbContext ) ); + mbedtls_ssl_config_free( &( pSslContext->config ) ); +} +/*-----------------------------------------------------------*/ + +static int32_t setRootCa( SSLContext_t * pSslContext, + const uint8_t * pRootCa, + size_t rootCaSize ) +{ + int32_t mbedtlsError = -1; + + configASSERT( pSslContext != NULL ); + configASSERT( pRootCa != NULL ); + + /* Parse the server root CA certificate into the SSL context. */ + mbedtlsError = mbedtls_x509_crt_parse( &( pSslContext->rootCa ), + pRootCa, + rootCaSize ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to parse server root CA certificate: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + } + else + { + mbedtls_ssl_conf_ca_chain( &( pSslContext->config ), + &( pSslContext->rootCa ), + NULL ); + } + + return mbedtlsError; +} +/*-----------------------------------------------------------*/ + +static int32_t setClientCertificate( SSLContext_t * pSslContext, + const uint8_t * pClientCert, + size_t clientCertSize ) +{ + int32_t mbedtlsError = -1; + + configASSERT( pSslContext != NULL ); + configASSERT( pClientCert != NULL ); + + /* Setup the client certificate. */ + mbedtlsError = mbedtls_x509_crt_parse( &( pSslContext->clientCert ), + pClientCert, + clientCertSize ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to parse the client certificate: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + } + + return mbedtlsError; +} +/*-----------------------------------------------------------*/ + +static int32_t setPrivateKey( SSLContext_t * pSslContext, + const uint8_t * pPrivateKey, + size_t privateKeySize ) +{ + int32_t mbedtlsError = -1; + + configASSERT( pSslContext != NULL ); + configASSERT( pPrivateKey != NULL ); + + /* Setup the client private key. */ + mbedtlsError = mbedtls_pk_parse_key( &( pSslContext->privKey ), + pPrivateKey, + privateKeySize, + NULL, + 0 ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to parse the client key: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + } + + return mbedtlsError; +} +/*-----------------------------------------------------------*/ + +static int32_t setCredentials( SSLContext_t * pSslContext, + const NetworkCredentials_t * pNetworkCredentials ) +{ + int32_t mbedtlsError = -1; + + configASSERT( pSslContext != NULL ); + configASSERT( pNetworkCredentials != NULL ); + + /* Set up the certificate security profile, starting from the default value. */ + pSslContext->certProfile = mbedtls_x509_crt_profile_default; + + /* Set SSL authmode and the RNG context. */ + mbedtls_ssl_conf_authmode( &( pSslContext->config ), + MBEDTLS_SSL_VERIFY_REQUIRED ); + mbedtls_ssl_conf_rng( &( pSslContext->config ), + mbedtls_ctr_drbg_random, + &( pSslContext->ctrDrgbContext ) ); + mbedtls_ssl_conf_cert_profile( &( pSslContext->config ), + &( pSslContext->certProfile ) ); + + mbedtlsError = setRootCa( pSslContext, + pNetworkCredentials->pRootCa, + pNetworkCredentials->rootCaSize ); + + if( ( pNetworkCredentials->pClientCert != NULL ) && + ( pNetworkCredentials->pPrivateKey != NULL ) ) + { + if( mbedtlsError == 0 ) + { + mbedtlsError = setClientCertificate( pSslContext, + pNetworkCredentials->pClientCert, + pNetworkCredentials->clientCertSize ); + } + + if( mbedtlsError == 0 ) + { + mbedtlsError = setPrivateKey( pSslContext, + pNetworkCredentials->pPrivateKey, + pNetworkCredentials->privateKeySize ); + } + + if( mbedtlsError == 0 ) + { + mbedtlsError = mbedtls_ssl_conf_own_cert( &( pSslContext->config ), + &( pSslContext->clientCert ), + &( pSslContext->privKey ) ); + } + } + + return mbedtlsError; +} +/*-----------------------------------------------------------*/ + +static void setOptionalConfigurations( SSLContext_t * pSslContext, + const char * pHostName, + const NetworkCredentials_t * pNetworkCredentials ) +{ + int32_t mbedtlsError = -1; + + configASSERT( pSslContext != NULL ); + configASSERT( pHostName != NULL ); + configASSERT( pNetworkCredentials != NULL ); + + if( pNetworkCredentials->pAlpnProtos != NULL ) + { + /* Include an application protocol list in the TLS ClientHello + * message. */ + mbedtlsError = mbedtls_ssl_conf_alpn_protocols( &( pSslContext->config ), + pNetworkCredentials->pAlpnProtos ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to configure ALPN protocol in mbed TLS: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + } + } + + /* Enable SNI if requested. */ + if( pNetworkCredentials->disableSni == pdFALSE ) + { + mbedtlsError = mbedtls_ssl_set_hostname( &( pSslContext->context ), + pHostName ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to set server name: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + } + } + + /* Set Maximum Fragment Length if enabled. */ + #ifdef MBEDTLS_SSL_MAX_FRAGMENT_LENGTH + + /* Enable the max fragment extension. 4096 bytes is currently the largest fragment size permitted. + * See RFC 8449 https://tools.ietf.org/html/rfc8449 for more information. + * + * Smaller values can be found in "mbedtls/include/ssl.h". + */ + mbedtlsError = mbedtls_ssl_conf_max_frag_len( &( pSslContext->config ), MBEDTLS_SSL_MAX_FRAG_LEN_4096 ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to maximum fragment length extension: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + } + #endif /* ifdef MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ +} +/*-----------------------------------------------------------*/ + +static TlsTransportStatus_t tlsSetup( NetworkContext_t * pNetworkContext, + const char * pHostName, + const NetworkCredentials_t * pNetworkCredentials ) +{ + TlsTransportParams_t * pTlsTransportParams = NULL; + TlsTransportStatus_t returnStatus = TLS_TRANSPORT_SUCCESS; + int32_t mbedtlsError = 0; + + configASSERT( pNetworkContext != NULL ); + configASSERT( pNetworkContext->pParams != NULL ); + configASSERT( pHostName != NULL ); + configASSERT( pNetworkCredentials != NULL ); + configASSERT( pNetworkCredentials->pRootCa != NULL ); + + pTlsTransportParams = pNetworkContext->pParams; + /* Initialize the mbed TLS context structures. */ + sslContextInit( &( pTlsTransportParams->sslContext ) ); + + mbedtlsError = mbedtls_ssl_config_defaults( &( pTlsTransportParams->sslContext.config ), + MBEDTLS_SSL_IS_CLIENT, + MBEDTLS_SSL_TRANSPORT_STREAM, + MBEDTLS_SSL_PRESET_DEFAULT ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to set default SSL configuration: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + + /* Per mbed TLS docs, mbedtls_ssl_config_defaults only fails on memory allocation. */ + returnStatus = TLS_TRANSPORT_INSUFFICIENT_MEMORY; + } + + if( returnStatus == TLS_TRANSPORT_SUCCESS ) + { + mbedtlsError = setCredentials( &( pTlsTransportParams->sslContext ), + pNetworkCredentials ); + + if( mbedtlsError != 0 ) + { + returnStatus = TLS_TRANSPORT_INVALID_CREDENTIALS; + } + else + { + /* Optionally set SNI and ALPN protocols. */ + setOptionalConfigurations( &( pTlsTransportParams->sslContext ), + pHostName, + pNetworkCredentials ); + } + } + + return returnStatus; +} +/*-----------------------------------------------------------*/ + +static TlsTransportStatus_t tlsHandshake( NetworkContext_t * pNetworkContext, + const NetworkCredentials_t * pNetworkCredentials ) +{ + TlsTransportParams_t * pTlsTransportParams = NULL; + TlsTransportStatus_t returnStatus = TLS_TRANSPORT_SUCCESS; + int32_t mbedtlsError = 0; + + configASSERT( pNetworkContext != NULL ); + configASSERT( pNetworkContext->pParams != NULL ); + configASSERT( pNetworkCredentials != NULL ); + + pTlsTransportParams = pNetworkContext->pParams; + /* Initialize the mbed TLS secured connection context. */ + mbedtlsError = mbedtls_ssl_setup( &( pTlsTransportParams->sslContext.context ), + &( pTlsTransportParams->sslContext.config ) ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to set up mbed TLS SSL context: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + + returnStatus = TLS_TRANSPORT_INTERNAL_ERROR; + } + else + { + /* Set the underlying IO for the TLS connection. */ + + /* MISRA Rule 11.2 flags the following line for casting the second + * parameter to void *. This rule is suppressed because + * #mbedtls_ssl_set_bio requires the second parameter as void *. + */ + /* coverity[misra_c_2012_rule_11_2_violation] */ + mbedtls_ssl_set_bio( &( pTlsTransportParams->sslContext.context ), + ( void * ) pTlsTransportParams->tcpSocket, + mbedtls_platform_send, + mbedtls_platform_recv, + NULL ); + } + + if( returnStatus == TLS_TRANSPORT_SUCCESS ) + { + /* Perform the TLS handshake. */ + do + { + mbedtlsError = mbedtls_ssl_handshake( &( pTlsTransportParams->sslContext.context ) ); + } while( ( mbedtlsError == MBEDTLS_ERR_SSL_WANT_READ ) || + ( mbedtlsError == MBEDTLS_ERR_SSL_WANT_WRITE ) ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to perform TLS handshake: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + + returnStatus = TLS_TRANSPORT_HANDSHAKE_FAILED; + } + else + { + LogInfo( ( "(Network connection %p) TLS handshake successful.", + pNetworkContext ) ); + } + } + + return returnStatus; +} +/*-----------------------------------------------------------*/ + +static TlsTransportStatus_t initMbedtls( mbedtls_entropy_context * pEntropyContext, + mbedtls_ctr_drbg_context * pCtrDrgbContext ) +{ + TlsTransportStatus_t returnStatus = TLS_TRANSPORT_SUCCESS; + int32_t mbedtlsError = 0; + + /* Set the mutex functions for mbed TLS thread safety. */ + mbedtls_threading_set_alt( mbedtls_platform_mutex_init, + mbedtls_platform_mutex_free, + mbedtls_platform_mutex_lock, + mbedtls_platform_mutex_unlock ); + + /* Initialize contexts for random number generation. */ + mbedtls_entropy_init( pEntropyContext ); + mbedtls_ctr_drbg_init( pCtrDrgbContext ); + + /* Add a strong entropy source. At least one is required. */ + mbedtlsError = mbedtls_entropy_add_source( pEntropyContext, + mbedtls_platform_entropy_poll, + NULL, + 32, + MBEDTLS_ENTROPY_SOURCE_STRONG ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to add entropy source: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + returnStatus = TLS_TRANSPORT_INTERNAL_ERROR; + } + + if( returnStatus == TLS_TRANSPORT_SUCCESS ) + { + /* Seed the random number generator. */ + mbedtlsError = mbedtls_ctr_drbg_seed( pCtrDrgbContext, + mbedtls_entropy_func, + pEntropyContext, + NULL, + 0 ); + + if( mbedtlsError != 0 ) + { + LogError( ( "Failed to seed PRNG: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( mbedtlsError ), + mbedtlsLowLevelCodeOrDefault( mbedtlsError ) ) ); + returnStatus = TLS_TRANSPORT_INTERNAL_ERROR; + } + } + + if( returnStatus == TLS_TRANSPORT_SUCCESS ) + { + LogDebug( ( "Successfully initialized mbedTLS." ) ); + } + + return returnStatus; +} +/*-----------------------------------------------------------*/ + +TlsTransportStatus_t TLS_FreeRTOS_Connect( NetworkContext_t * pNetworkContext, + const char * pHostName, + uint16_t port, + const NetworkCredentials_t * pNetworkCredentials, + uint32_t receiveTimeoutMs, + uint32_t sendTimeoutMs ) +{ + TlsTransportParams_t * pTlsTransportParams = NULL; + TlsTransportStatus_t returnStatus = TLS_TRANSPORT_SUCCESS; + BaseType_t socketStatus = 0; + + if( ( pNetworkContext == NULL ) || + ( pNetworkContext->pParams == NULL ) || + ( pHostName == NULL ) || + ( pNetworkCredentials == NULL ) ) + { + LogError( ( "Invalid input parameter(s): Arguments cannot be NULL. pNetworkContext=%p, " + "pHostName=%p, pNetworkCredentials=%p.", + pNetworkContext, + pHostName, + pNetworkCredentials ) ); + returnStatus = TLS_TRANSPORT_INVALID_PARAMETER; + } + else if( ( pNetworkCredentials->pRootCa == NULL ) ) + { + LogError( ( "pRootCa cannot be NULL." ) ); + returnStatus = TLS_TRANSPORT_INVALID_PARAMETER; + } + else + { + /* Empty else for MISRA 15.7 compliance. */ + } + + /* Establish a TCP connection with the server. */ + if( returnStatus == TLS_TRANSPORT_SUCCESS ) + { + pTlsTransportParams = pNetworkContext->pParams; + socketStatus = Sockets_Connect( &( pTlsTransportParams->tcpSocket ), + pHostName, + port, + receiveTimeoutMs, + sendTimeoutMs ); + + if( socketStatus != 0 ) + { + LogError( ( "Failed to connect to %s with error %d.", + pHostName, + socketStatus ) ); + returnStatus = TLS_TRANSPORT_CONNECT_FAILURE; + } + } + + /* Initialize mbedtls. */ + if( returnStatus == TLS_TRANSPORT_SUCCESS ) + { + returnStatus = initMbedtls( &( pTlsTransportParams->sslContext.entropyContext ), + &( pTlsTransportParams->sslContext.ctrDrgbContext ) ); + } + + /* Initialize TLS contexts and set credentials. */ + if( returnStatus == TLS_TRANSPORT_SUCCESS ) + { + returnStatus = tlsSetup( pNetworkContext, pHostName, pNetworkCredentials ); + } + + /* Perform TLS handshake. */ + if( returnStatus == TLS_TRANSPORT_SUCCESS ) + { + returnStatus = tlsHandshake( pNetworkContext, pNetworkCredentials ); + } + + /* Clean up on failure. */ + if( returnStatus != TLS_TRANSPORT_SUCCESS ) + { + if( ( pNetworkContext != NULL ) && ( pNetworkContext->pParams != NULL ) ) + { + sslContextFree( &( pTlsTransportParams->sslContext ) ); + + if( pTlsTransportParams->tcpSocket != FREERTOS_INVALID_SOCKET ) + { + ( void ) FreeRTOS_closesocket( pTlsTransportParams->tcpSocket ); + } + } + } + else + { + LogInfo( ( "(Network connection %p) Connection to %s established.", + pNetworkContext, + pHostName ) ); + } + + return returnStatus; +} +/*-----------------------------------------------------------*/ + +void TLS_FreeRTOS_Disconnect( NetworkContext_t * pNetworkContext ) +{ + TlsTransportParams_t * pTlsTransportParams = NULL; + BaseType_t tlsStatus = 0; + + if( ( pNetworkContext != NULL ) && ( pNetworkContext->pParams != NULL ) ) + { + pTlsTransportParams = pNetworkContext->pParams; + /* Attempting to terminate TLS connection. */ + tlsStatus = ( BaseType_t ) mbedtls_ssl_close_notify( &( pTlsTransportParams->sslContext.context ) ); + + /* Ignore the WANT_READ and WANT_WRITE return values. */ + if( ( tlsStatus != ( BaseType_t ) MBEDTLS_ERR_SSL_WANT_READ ) && + ( tlsStatus != ( BaseType_t ) MBEDTLS_ERR_SSL_WANT_WRITE ) ) + { + if( tlsStatus == 0 ) + { + LogInfo( ( "(Network connection %p) TLS close-notify sent.", + pNetworkContext ) ); + } + else + { + LogError( ( "(Network connection %p) Failed to send TLS close-notify: mbedTLSError= %s : %s.", + pNetworkContext, + mbedtlsHighLevelCodeOrDefault( tlsStatus ), + mbedtlsLowLevelCodeOrDefault( tlsStatus ) ) ); + } + } + else + { + /* WANT_READ and WANT_WRITE can be ignored. Logging for debugging purposes. */ + LogInfo( ( "(Network connection %p) TLS close-notify sent; ", + "received %s as the TLS status can be ignored for close-notify." + ( tlsStatus == MBEDTLS_ERR_SSL_WANT_READ ) ? "WANT_READ" : "WANT_WRITE", + pNetworkContext ) ); + } + + /* Call socket shutdown function to close connection. */ + Sockets_Disconnect( pTlsTransportParams->tcpSocket ); + + /* Free mbed TLS contexts. */ + sslContextFree( &( pTlsTransportParams->sslContext ) ); + } + + /* Clear the mutex functions for mbed TLS thread safety. */ + mbedtls_threading_free_alt(); +} +/*-----------------------------------------------------------*/ + +int32_t TLS_FreeRTOS_recv( NetworkContext_t * pNetworkContext, + void * pBuffer, + size_t bytesToRecv ) +{ + TlsTransportParams_t * pTlsTransportParams = NULL; + int32_t tlsStatus = 0; + + configASSERT( ( pNetworkContext != NULL ) && ( pNetworkContext->pParams != NULL ) ); + + pTlsTransportParams = pNetworkContext->pParams; + tlsStatus = ( int32_t ) mbedtls_ssl_read( &( pTlsTransportParams->sslContext.context ), + pBuffer, + bytesToRecv ); + + if( ( tlsStatus == MBEDTLS_ERR_SSL_TIMEOUT ) || + ( tlsStatus == MBEDTLS_ERR_SSL_WANT_READ ) || + ( tlsStatus == MBEDTLS_ERR_SSL_WANT_WRITE ) ) + { + LogDebug( ( "Failed to read data. However, a read can be retried on this error. " + "mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( tlsStatus ), + mbedtlsLowLevelCodeOrDefault( tlsStatus ) ) ); + + /* Mark these set of errors as a timeout. The libraries may retry read + * on these errors. */ + tlsStatus = 0; + } + else if( tlsStatus < 0 ) + { + LogError( ( "Failed to read data: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( tlsStatus ), + mbedtlsLowLevelCodeOrDefault( tlsStatus ) ) ); + } + else + { + /* Empty else marker. */ + } + + return tlsStatus; +} +/*-----------------------------------------------------------*/ + +int32_t TLS_FreeRTOS_send( NetworkContext_t * pNetworkContext, + const void * pBuffer, + size_t bytesToSend ) +{ + TlsTransportParams_t * pTlsTransportParams = NULL; + int32_t tlsStatus = 0; + + configASSERT( ( pNetworkContext != NULL ) && ( pNetworkContext->pParams != NULL ) ); + + pTlsTransportParams = pNetworkContext->pParams; + tlsStatus = ( int32_t ) mbedtls_ssl_write( &( pTlsTransportParams->sslContext.context ), + pBuffer, + bytesToSend ); + + if( ( tlsStatus == MBEDTLS_ERR_SSL_TIMEOUT ) || + ( tlsStatus == MBEDTLS_ERR_SSL_WANT_READ ) || + ( tlsStatus == MBEDTLS_ERR_SSL_WANT_WRITE ) ) + { + LogDebug( ( "Failed to send data. However, send can be retried on this error. " + "mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( tlsStatus ), + mbedtlsLowLevelCodeOrDefault( tlsStatus ) ) ); + + /* Mark these set of errors as a timeout. The libraries may retry send + * on these errors. */ + tlsStatus = 0; + } + else if( tlsStatus < 0 ) + { + LogError( ( "Failed to send data: mbedTLSError= %s : %s.", + mbedtlsHighLevelCodeOrDefault( tlsStatus ), + mbedtlsLowLevelCodeOrDefault( tlsStatus ) ) ); + } + else + { + /* Empty else marker. */ + } + + return tlsStatus; +} +/*-----------------------------------------------------------*/ diff --git a/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/using_mbedtls/using_mbedtls.h b/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/using_mbedtls/using_mbedtls.h new file mode 100644 index 000000000..25eb5074c --- /dev/null +++ b/FreeRTOS-Plus/Source/Application-Protocols/network_transport/cellular/using_mbedtls/using_mbedtls.h @@ -0,0 +1,218 @@ +/* + * FreeRTOS V202107.00 + * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * https://www.FreeRTOS.org + * https://github.com/FreeRTOS + * + */ + +/** + * @file tls_freertos.h + * @brief TLS transport interface header. + */ + +#ifndef USING_MBEDTLS +#define USING_MBEDTLS + +/**************************************************/ +/******* DO NOT CHANGE the following order ********/ +/**************************************************/ + +/* Logging related header files are required to be included in the following order: + * 1. Include the header file "logging_levels.h". + * 2. Define LIBRARY_LOG_NAME and LIBRARY_LOG_LEVEL. + * 3. Include the header file "logging_stack.h". + */ + +/* Include header that defines log levels. */ +#include "logging_levels.h" + +/* Logging configuration for the Sockets. */ +#ifndef LIBRARY_LOG_NAME + #define LIBRARY_LOG_NAME "TlsTransport" +#endif +#ifndef LIBRARY_LOG_LEVEL + #define LIBRARY_LOG_LEVEL LOG_ERROR +#endif + +/* Prototype for the function used to print to console on Windows simulator + * of FreeRTOS. + * The function prints to the console before the network is connected; + * then a UDP port after the network has connected. */ +extern void vLoggingPrintf( const char * pcFormatString, + ... ); + +/* Map the SdkLog macro to the logging function to enable logging + * on Windows simulator. */ +#ifndef SdkLog + #define SdkLog( message ) vLoggingPrintf message +#endif + +#include "logging_stack.h" + +/************ End of logging configuration ****************/ + +/* FreeRTOS+TCP include. */ +#include "FreeRTOS_Sockets.h" + +/* Transport interface include. */ +#include "transport_interface.h" + +/* mbed TLS includes. */ +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/entropy.h" +#include "mbedtls/ssl.h" +#include "mbedtls/threading.h" +#include "mbedtls/x509.h" +#include "mbedtls/error.h" + +/** + * @brief Secured connection context. + */ +typedef struct SSLContext +{ + mbedtls_ssl_config config; /**< @brief SSL connection configuration. */ + mbedtls_ssl_context context; /**< @brief SSL connection context */ + mbedtls_x509_crt_profile certProfile; /**< @brief Certificate security profile for this connection. */ + mbedtls_x509_crt rootCa; /**< @brief Root CA certificate context. */ + mbedtls_x509_crt clientCert; /**< @brief Client certificate context. */ + mbedtls_pk_context privKey; /**< @brief Client private key context. */ + mbedtls_entropy_context entropyContext; /**< @brief Entropy context for random number generation. */ + mbedtls_ctr_drbg_context ctrDrgbContext; /**< @brief CTR DRBG context for random number generation. */ +} SSLContext_t; + +/** + * @brief Parameters for the network context of the transport interface + * implementation that uses mbedTLS and FreeRTOS+TCP sockets. + */ +typedef struct TlsTransportParams +{ + Socket_t tcpSocket; + SSLContext_t sslContext; +} TlsTransportParams_t; + +/** + * @brief Contains the credentials necessary for tls connection setup. + */ +typedef struct NetworkCredentials +{ + /** + * @brief To use ALPN, set this to a NULL-terminated list of supported + * protocols in decreasing order of preference. + * + * See [this link] + * (https://aws.amazon.com/blogs/iot/mqtt-with-tls-client-authentication-on-port-443-why-it-is-useful-and-how-it-works/) + * for more information. + */ + const char ** pAlpnProtos; + + /** + * @brief Disable server name indication (SNI) for a TLS session. + */ + BaseType_t disableSni; + + const uint8_t * pRootCa; /**< @brief String representing a trusted server root certificate. */ + size_t rootCaSize; /**< @brief Size associated with #NetworkCredentials.pRootCa. */ + const uint8_t * pClientCert; /**< @brief String representing the client certificate. */ + size_t clientCertSize; /**< @brief Size associated with #NetworkCredentials.pClientCert. */ + const uint8_t * pPrivateKey; /**< @brief String representing the client certificate's private key. */ + size_t privateKeySize; /**< @brief Size associated with #NetworkCredentials.pPrivateKey. */ +} NetworkCredentials_t; + +/** + * @brief TLS Connect / Disconnect return status. + */ +typedef enum TlsTransportStatus +{ + TLS_TRANSPORT_SUCCESS = 0, /**< Function successfully completed. */ + TLS_TRANSPORT_INVALID_PARAMETER, /**< At least one parameter was invalid. */ + TLS_TRANSPORT_INSUFFICIENT_MEMORY, /**< Insufficient memory required to establish connection. */ + TLS_TRANSPORT_INVALID_CREDENTIALS, /**< Provided credentials were invalid. */ + TLS_TRANSPORT_HANDSHAKE_FAILED, /**< Performing TLS handshake with server failed. */ + TLS_TRANSPORT_INTERNAL_ERROR, /**< A call to a system API resulted in an internal error. */ + TLS_TRANSPORT_CONNECT_FAILURE /**< Initial connection to the server failed. */ +} TlsTransportStatus_t; + +/** + * @brief Create a TLS connection with FreeRTOS sockets. + * + * @param[out] pNetworkContext Pointer to a network context to contain the + * initialized socket handle. + * @param[in] pHostName The hostname of the remote endpoint. + * @param[in] port The destination port. + * @param[in] pNetworkCredentials Credentials for the TLS connection. + * @param[in] receiveTimeoutMs Receive socket timeout. + * @param[in] sendTimeoutMs Send socket timeout. + * + * @return #TLS_TRANSPORT_SUCCESS, #TLS_TRANSPORT_INSUFFICIENT_MEMORY, #TLS_TRANSPORT_INVALID_CREDENTIALS, + * #TLS_TRANSPORT_HANDSHAKE_FAILED, #TLS_TRANSPORT_INTERNAL_ERROR, or #TLS_TRANSPORT_CONNECT_FAILURE. + */ +TlsTransportStatus_t TLS_FreeRTOS_Connect( NetworkContext_t * pNetworkContext, + const char * pHostName, + uint16_t port, + const NetworkCredentials_t * pNetworkCredentials, + uint32_t receiveTimeoutMs, + uint32_t sendTimeoutMs ); + +/** + * @brief Gracefully disconnect an established TLS connection. + * + * @param[in] pNetworkContext Network context. + */ +void TLS_FreeRTOS_Disconnect( NetworkContext_t * pNetworkContext ); + +/** + * @brief Receives data from an established TLS connection. + * + * This is the TLS version of the transport interface's + * #TransportRecv_t function. + * + * @param[in] pNetworkContext The Network context. + * @param[out] pBuffer Buffer to receive bytes into. + * @param[in] bytesToRecv Number of bytes to receive from the network. + * + * @return Number of bytes (> 0) received if successful; + * 0 if the socket times out without reading any bytes; + * negative value on error. + */ +int32_t TLS_FreeRTOS_recv( NetworkContext_t * pNetworkContext, + void * pBuffer, + size_t bytesToRecv ); + +/** + * @brief Sends data over an established TLS connection. + * + * This is the TLS version of the transport interface's + * #TransportSend_t function. + * + * @param[in] pNetworkContext The network context. + * @param[in] pBuffer Buffer containing the bytes to send. + * @param[in] bytesToSend Number of bytes to send from the buffer. + * + * @return Number of bytes (> 0) sent on success; + * 0 if the socket times out without sending any bytes; + * else a negative value to represent error. + */ +int32_t TLS_FreeRTOS_send( NetworkContext_t * pNetworkContext, + const void * pBuffer, + size_t bytesToSend ); + +#endif /* ifndef USING_MBEDTLS */ -- cgit v1.2.1