1*8b26181fSAndroid Build Coastguard Worker /* 2*8b26181fSAndroid Build Coastguard Worker * Copyright (c) 2002 - 2003 3*8b26181fSAndroid Build Coastguard Worker * NetGroup, Politecnico di Torino (Italy) 4*8b26181fSAndroid Build Coastguard Worker * All rights reserved. 5*8b26181fSAndroid Build Coastguard Worker * 6*8b26181fSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 7*8b26181fSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 8*8b26181fSAndroid Build Coastguard Worker * are met: 9*8b26181fSAndroid Build Coastguard Worker * 10*8b26181fSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright 11*8b26181fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 12*8b26181fSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright 13*8b26181fSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the 14*8b26181fSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution. 15*8b26181fSAndroid Build Coastguard Worker * 3. Neither the name of the Politecnico di Torino nor the names of its 16*8b26181fSAndroid Build Coastguard Worker * contributors may be used to endorse or promote products derived from 17*8b26181fSAndroid Build Coastguard Worker * this software without specific prior written permission. 18*8b26181fSAndroid Build Coastguard Worker * 19*8b26181fSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20*8b26181fSAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21*8b26181fSAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22*8b26181fSAndroid Build Coastguard Worker * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23*8b26181fSAndroid Build Coastguard Worker * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24*8b26181fSAndroid Build Coastguard Worker * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25*8b26181fSAndroid Build Coastguard Worker * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26*8b26181fSAndroid Build Coastguard Worker * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27*8b26181fSAndroid Build Coastguard Worker * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28*8b26181fSAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29*8b26181fSAndroid Build Coastguard Worker * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*8b26181fSAndroid Build Coastguard Worker * 31*8b26181fSAndroid Build Coastguard Worker */ 32*8b26181fSAndroid Build Coastguard Worker 33*8b26181fSAndroid Build Coastguard Worker #ifndef __SOCKUTILS_H__ 34*8b26181fSAndroid Build Coastguard Worker #define __SOCKUTILS_H__ 35*8b26181fSAndroid Build Coastguard Worker 36*8b26181fSAndroid Build Coastguard Worker #ifdef _MSC_VER 37*8b26181fSAndroid Build Coastguard Worker #pragma once 38*8b26181fSAndroid Build Coastguard Worker #endif 39*8b26181fSAndroid Build Coastguard Worker 40*8b26181fSAndroid Build Coastguard Worker #include <stdarg.h> /* we declare varargs functions */ 41*8b26181fSAndroid Build Coastguard Worker 42*8b26181fSAndroid Build Coastguard Worker #include "pcap/funcattrs.h" 43*8b26181fSAndroid Build Coastguard Worker 44*8b26181fSAndroid Build Coastguard Worker #include "pcap/socket.h" 45*8b26181fSAndroid Build Coastguard Worker 46*8b26181fSAndroid Build Coastguard Worker #ifndef _WIN32 47*8b26181fSAndroid Build Coastguard Worker /* UN*X */ 48*8b26181fSAndroid Build Coastguard Worker #include <unistd.h> /* close() */ 49*8b26181fSAndroid Build Coastguard Worker 50*8b26181fSAndroid Build Coastguard Worker /*! 51*8b26181fSAndroid Build Coastguard Worker * \brief In Winsock, the close() call cannot be used on a socket; 52*8b26181fSAndroid Build Coastguard Worker * closesocket() must be used. 53*8b26181fSAndroid Build Coastguard Worker * We define closesocket() to be a wrapper around close() on UN*X, 54*8b26181fSAndroid Build Coastguard Worker * so that it can be used on both platforms. 55*8b26181fSAndroid Build Coastguard Worker */ 56*8b26181fSAndroid Build Coastguard Worker #define closesocket(a) close(a) 57*8b26181fSAndroid Build Coastguard Worker #endif 58*8b26181fSAndroid Build Coastguard Worker 59*8b26181fSAndroid Build Coastguard Worker #include "sslutils.h" // for SSL type, whatever that turns out to be 60*8b26181fSAndroid Build Coastguard Worker 61*8b26181fSAndroid Build Coastguard Worker /* 62*8b26181fSAndroid Build Coastguard Worker * MingW headers include this definition, but only for Windows XP and above. 63*8b26181fSAndroid Build Coastguard Worker * MSDN states that this function is available for most versions on Windows. 64*8b26181fSAndroid Build Coastguard Worker */ 65*8b26181fSAndroid Build Coastguard Worker #if ((defined(__MINGW32__)) && (_WIN32_WINNT < 0x0501)) 66*8b26181fSAndroid Build Coastguard Worker int WSAAPI getnameinfo(const struct sockaddr*,socklen_t,char*,DWORD, 67*8b26181fSAndroid Build Coastguard Worker char*,DWORD,int); 68*8b26181fSAndroid Build Coastguard Worker #endif 69*8b26181fSAndroid Build Coastguard Worker 70*8b26181fSAndroid Build Coastguard Worker /* 71*8b26181fSAndroid Build Coastguard Worker * \defgroup SockUtils Cross-platform socket utilities (IPv4-IPv6) 72*8b26181fSAndroid Build Coastguard Worker */ 73*8b26181fSAndroid Build Coastguard Worker 74*8b26181fSAndroid Build Coastguard Worker /* 75*8b26181fSAndroid Build Coastguard Worker * \addtogroup SockUtils 76*8b26181fSAndroid Build Coastguard Worker * \{ 77*8b26181fSAndroid Build Coastguard Worker */ 78*8b26181fSAndroid Build Coastguard Worker 79*8b26181fSAndroid Build Coastguard Worker /* 80*8b26181fSAndroid Build Coastguard Worker * \defgroup ExportedStruct Exported Structures and Definitions 81*8b26181fSAndroid Build Coastguard Worker */ 82*8b26181fSAndroid Build Coastguard Worker 83*8b26181fSAndroid Build Coastguard Worker /* 84*8b26181fSAndroid Build Coastguard Worker * \addtogroup ExportedStruct 85*8b26181fSAndroid Build Coastguard Worker * \{ 86*8b26181fSAndroid Build Coastguard Worker */ 87*8b26181fSAndroid Build Coastguard Worker 88*8b26181fSAndroid Build Coastguard Worker /**************************************************** 89*8b26181fSAndroid Build Coastguard Worker * * 90*8b26181fSAndroid Build Coastguard Worker * Exported functions / definitions * 91*8b26181fSAndroid Build Coastguard Worker * * 92*8b26181fSAndroid Build Coastguard Worker ****************************************************/ 93*8b26181fSAndroid Build Coastguard Worker 94*8b26181fSAndroid Build Coastguard Worker /* 'checkonly' flag, into the rpsock_bufferize() */ 95*8b26181fSAndroid Build Coastguard Worker #define SOCKBUF_CHECKONLY 1 96*8b26181fSAndroid Build Coastguard Worker /* no 'checkonly' flag, into the rpsock_bufferize() */ 97*8b26181fSAndroid Build Coastguard Worker #define SOCKBUF_BUFFERIZE 0 98*8b26181fSAndroid Build Coastguard Worker 99*8b26181fSAndroid Build Coastguard Worker /* no 'server' flag; it opens a client socket */ 100*8b26181fSAndroid Build Coastguard Worker #define SOCKOPEN_CLIENT 0 101*8b26181fSAndroid Build Coastguard Worker /* 'server' flag; it opens a server socket */ 102*8b26181fSAndroid Build Coastguard Worker #define SOCKOPEN_SERVER 1 103*8b26181fSAndroid Build Coastguard Worker 104*8b26181fSAndroid Build Coastguard Worker /* 105*8b26181fSAndroid Build Coastguard Worker * Flags for sock_recv(). 106*8b26181fSAndroid Build Coastguard Worker */ 107*8b26181fSAndroid Build Coastguard Worker #define SOCK_RECEIVEALL_NO 0x00000000 /* Don't wait to receive all data */ 108*8b26181fSAndroid Build Coastguard Worker #define SOCK_RECEIVEALL_YES 0x00000001 /* Wait to receive all data */ 109*8b26181fSAndroid Build Coastguard Worker 110*8b26181fSAndroid Build Coastguard Worker #define SOCK_EOF_ISNT_ERROR 0x00000000 /* Return 0 on EOF */ 111*8b26181fSAndroid Build Coastguard Worker #define SOCK_EOF_IS_ERROR 0x00000002 /* Return an error on EOF */ 112*8b26181fSAndroid Build Coastguard Worker 113*8b26181fSAndroid Build Coastguard Worker #define SOCK_MSG_PEEK 0x00000004 /* Return data but leave it in the socket queue */ 114*8b26181fSAndroid Build Coastguard Worker 115*8b26181fSAndroid Build Coastguard Worker /* 116*8b26181fSAndroid Build Coastguard Worker * \} 117*8b26181fSAndroid Build Coastguard Worker */ 118*8b26181fSAndroid Build Coastguard Worker 119*8b26181fSAndroid Build Coastguard Worker #ifdef __cplusplus 120*8b26181fSAndroid Build Coastguard Worker extern "C" { 121*8b26181fSAndroid Build Coastguard Worker #endif 122*8b26181fSAndroid Build Coastguard Worker 123*8b26181fSAndroid Build Coastguard Worker /* 124*8b26181fSAndroid Build Coastguard Worker * \defgroup ExportedFunc Exported Functions 125*8b26181fSAndroid Build Coastguard Worker */ 126*8b26181fSAndroid Build Coastguard Worker 127*8b26181fSAndroid Build Coastguard Worker /* 128*8b26181fSAndroid Build Coastguard Worker * \addtogroup ExportedFunc 129*8b26181fSAndroid Build Coastguard Worker * \{ 130*8b26181fSAndroid Build Coastguard Worker */ 131*8b26181fSAndroid Build Coastguard Worker 132*8b26181fSAndroid Build Coastguard Worker int sock_init(char *errbuf, int errbuflen); 133*8b26181fSAndroid Build Coastguard Worker void sock_cleanup(void); 134*8b26181fSAndroid Build Coastguard Worker int sock_geterrcode(void); 135*8b26181fSAndroid Build Coastguard Worker void sock_vfmterrmsg(char *errbuf, size_t errbuflen, int errcode, 136*8b26181fSAndroid Build Coastguard Worker PCAP_FORMAT_STRING(const char *fmt), va_list ap) PCAP_PRINTFLIKE(4, 0); 137*8b26181fSAndroid Build Coastguard Worker void sock_fmterrmsg(char *errbuf, size_t errbuflen, int errcode, 138*8b26181fSAndroid Build Coastguard Worker PCAP_FORMAT_STRING(const char *fmt), ...) PCAP_PRINTFLIKE(4, 5); 139*8b26181fSAndroid Build Coastguard Worker void sock_geterrmsg(char *errbuf, size_t errbuflen, 140*8b26181fSAndroid Build Coastguard Worker PCAP_FORMAT_STRING(const char *fmt), ...) PCAP_PRINTFLIKE(3, 4); 141*8b26181fSAndroid Build Coastguard Worker int sock_initaddress(const char *address, const char *port, 142*8b26181fSAndroid Build Coastguard Worker struct addrinfo *hints, struct addrinfo **addrinfo, 143*8b26181fSAndroid Build Coastguard Worker char *errbuf, int errbuflen); 144*8b26181fSAndroid Build Coastguard Worker int sock_recv(SOCKET sock, SSL *, void *buffer, size_t size, int receiveall, 145*8b26181fSAndroid Build Coastguard Worker char *errbuf, int errbuflen); 146*8b26181fSAndroid Build Coastguard Worker int sock_recv_dgram(SOCKET sock, SSL *, void *buffer, size_t size, 147*8b26181fSAndroid Build Coastguard Worker char *errbuf, int errbuflen); 148*8b26181fSAndroid Build Coastguard Worker SOCKET sock_open(const char *host, struct addrinfo *addrinfo, int server, int nconn, char *errbuf, int errbuflen); 149*8b26181fSAndroid Build Coastguard Worker int sock_close(SOCKET sock, char *errbuf, int errbuflen); 150*8b26181fSAndroid Build Coastguard Worker 151*8b26181fSAndroid Build Coastguard Worker int sock_send(SOCKET sock, SSL *, const char *buffer, size_t size, 152*8b26181fSAndroid Build Coastguard Worker char *errbuf, int errbuflen); 153*8b26181fSAndroid Build Coastguard Worker int sock_bufferize(const void *data, int size, char *outbuf, int *offset, int totsize, int checkonly, char *errbuf, int errbuflen); 154*8b26181fSAndroid Build Coastguard Worker int sock_discard(SOCKET sock, SSL *, int size, char *errbuf, int errbuflen); 155*8b26181fSAndroid Build Coastguard Worker int sock_check_hostlist(char *hostlist, const char *sep, struct sockaddr_storage *from, char *errbuf, int errbuflen); 156*8b26181fSAndroid Build Coastguard Worker int sock_cmpaddr(struct sockaddr_storage *first, struct sockaddr_storage *second); 157*8b26181fSAndroid Build Coastguard Worker 158*8b26181fSAndroid Build Coastguard Worker int sock_getmyinfo(SOCKET sock, char *address, int addrlen, char *port, int portlen, int flags, char *errbuf, int errbuflen); 159*8b26181fSAndroid Build Coastguard Worker 160*8b26181fSAndroid Build Coastguard Worker int sock_getascii_addrport(const struct sockaddr_storage *sockaddr, char *address, int addrlen, char *port, int portlen, int flags, char *errbuf, size_t errbuflen); 161*8b26181fSAndroid Build Coastguard Worker int sock_present2network(const char *address, struct sockaddr_storage *sockaddr, int addr_family, char *errbuf, int errbuflen); 162*8b26181fSAndroid Build Coastguard Worker 163*8b26181fSAndroid Build Coastguard Worker #ifdef __cplusplus 164*8b26181fSAndroid Build Coastguard Worker } 165*8b26181fSAndroid Build Coastguard Worker #endif 166*8b26181fSAndroid Build Coastguard Worker 167*8b26181fSAndroid Build Coastguard Worker /* 168*8b26181fSAndroid Build Coastguard Worker * \} 169*8b26181fSAndroid Build Coastguard Worker */ 170*8b26181fSAndroid Build Coastguard Worker 171*8b26181fSAndroid Build Coastguard Worker /* 172*8b26181fSAndroid Build Coastguard Worker * \} 173*8b26181fSAndroid Build Coastguard Worker */ 174*8b26181fSAndroid Build Coastguard Worker 175*8b26181fSAndroid Build Coastguard Worker #endif 176