1/* 2 * Copyright (c) 2007 The Libav Project 3 * 4 * This file is part of Libav. 5 * 6 * Libav is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * Libav is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with Libav; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21#ifndef AVFORMAT_NETWORK_H 22#define AVFORMAT_NETWORK_H 23 24#include <errno.h> 25 26#include "config.h" 27#include "libavutil/error.h" 28#include "os_support.h" 29 30#if HAVE_WINSOCK2_H 31#include <winsock2.h> 32#include <ws2tcpip.h> 33 34#define EPROTONOSUPPORT WSAEPROTONOSUPPORT 35#define ETIMEDOUT WSAETIMEDOUT 36#define ECONNREFUSED WSAECONNREFUSED 37#define EINPROGRESS WSAEINPROGRESS 38 39int ff_neterrno(void); 40#else 41#include <sys/types.h> 42#include <sys/socket.h> 43#include <netinet/in.h> 44#include <netdb.h> 45 46#define ff_neterrno() AVERROR(errno) 47#endif 48 49#if HAVE_ARPA_INET_H 50#include <arpa/inet.h> 51#endif 52 53#if HAVE_POLL_H 54#include <poll.h> 55#endif 56 57int ff_socket_nonblock(int socket, int enable); 58 59extern int ff_network_inited_globally; 60int ff_network_init(void); 61void ff_network_close(void); 62 63void ff_tls_init(void); 64void ff_tls_deinit(void); 65 66int ff_network_wait_fd(int fd, int write); 67 68int ff_inet_aton (const char * str, struct in_addr * add); 69 70#if !HAVE_STRUCT_SOCKADDR_STORAGE 71struct sockaddr_storage { 72#if HAVE_STRUCT_SOCKADDR_SA_LEN 73 uint8_t ss_len; 74 uint8_t ss_family; 75#else 76 uint16_t ss_family; 77#endif 78 char ss_pad1[6]; 79 int64_t ss_align; 80 char ss_pad2[112]; 81}; 82#endif 83 84#if !HAVE_STRUCT_ADDRINFO 85struct addrinfo { 86 int ai_flags; 87 int ai_family; 88 int ai_socktype; 89 int ai_protocol; 90 int ai_addrlen; 91 struct sockaddr *ai_addr; 92 char *ai_canonname; 93 struct addrinfo *ai_next; 94}; 95#endif 96 97/* getaddrinfo constants */ 98#ifndef EAI_FAIL 99#define EAI_FAIL 4 100#endif 101 102#ifndef EAI_FAMILY 103#define EAI_FAMILY 5 104#endif 105 106#ifndef EAI_NONAME 107#define EAI_NONAME 8 108#endif 109 110#ifndef AI_PASSIVE 111#define AI_PASSIVE 1 112#endif 113 114#ifndef AI_CANONNAME 115#define AI_CANONNAME 2 116#endif 117 118#ifndef AI_NUMERICHOST 119#define AI_NUMERICHOST 4 120#endif 121 122#ifndef NI_NOFQDN 123#define NI_NOFQDN 1 124#endif 125 126#ifndef NI_NUMERICHOST 127#define NI_NUMERICHOST 2 128#endif 129 130#ifndef NI_NAMERQD 131#define NI_NAMERQD 4 132#endif 133 134#ifndef NI_NUMERICSERV 135#define NI_NUMERICSERV 8 136#endif 137 138#ifndef NI_DGRAM 139#define NI_DGRAM 16 140#endif 141 142#if !HAVE_GETADDRINFO 143int ff_getaddrinfo(const char *node, const char *service, 144 const struct addrinfo *hints, struct addrinfo **res); 145void ff_freeaddrinfo(struct addrinfo *res); 146int ff_getnameinfo(const struct sockaddr *sa, int salen, 147 char *host, int hostlen, 148 char *serv, int servlen, int flags); 149const char *ff_gai_strerror(int ecode); 150#define getaddrinfo ff_getaddrinfo 151#define freeaddrinfo ff_freeaddrinfo 152#define getnameinfo ff_getnameinfo 153#define gai_strerror ff_gai_strerror 154#endif 155 156#ifndef INET6_ADDRSTRLEN 157#define INET6_ADDRSTRLEN INET_ADDRSTRLEN 158#endif 159 160#ifndef IN_MULTICAST 161#define IN_MULTICAST(a) ((((uint32_t)(a)) & 0xf0000000) == 0xe0000000) 162#endif 163#ifndef IN6_IS_ADDR_MULTICAST 164#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff) 165#endif 166 167int ff_is_multicast_address(struct sockaddr *addr); 168 169#endif /* AVFORMAT_NETWORK_H */ 170