1/* 2 * Copyright (c) 2007 The FFmpeg Project 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg 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 * FFmpeg 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 FFmpeg; 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 "config.h" 25 26#if HAVE_WINSOCK2_H 27#include <winsock2.h> 28#include <ws2tcpip.h> 29 30#define ff_neterrno() (-WSAGetLastError()) 31#define FF_NETERROR(err) (-WSA##err) 32#define WSAEAGAIN WSAEWOULDBLOCK 33#else 34#include <sys/types.h> 35#include <sys/socket.h> 36#include <netinet/in.h> 37#include <netdb.h> 38 39#define ff_neterrno() AVERROR(errno) 40#define FF_NETERROR(err) AVERROR(err) 41#endif 42 43#if HAVE_ARPA_INET_H 44#include <arpa/inet.h> 45#endif 46 47int ff_socket_nonblock(int socket, int enable); 48 49static inline int ff_network_init(void) 50{ 51#if HAVE_WINSOCK2_H 52 WSADATA wsaData; 53 if (WSAStartup(MAKEWORD(1,1), &wsaData)) 54 return 0; 55#endif 56 return 1; 57} 58 59static inline void ff_network_close(void) 60{ 61#if HAVE_WINSOCK2_H 62 WSACleanup(); 63#endif 64} 65 66int ff_inet_aton (const char * str, struct in_addr * add); 67 68#if !HAVE_STRUCT_SOCKADDR_STORAGE 69struct sockaddr_storage { 70#if HAVE_STRUCT_SOCKADDR_SA_LEN 71 uint8_t ss_len; 72 uint8_t ss_family; 73#else 74 uint16_t ss_family; 75#endif 76 char ss_pad1[6]; 77 int64_t ss_align; 78 char ss_pad2[112]; 79}; 80#endif 81 82#if !HAVE_STRUCT_ADDRINFO 83struct addrinfo { 84 int ai_flags; 85 int ai_family; 86 int ai_socktype; 87 int ai_protocol; 88 int ai_addrlen; 89 struct sockaddr *ai_addr; 90 char *ai_canonname; 91 struct addrinfo *ai_next; 92}; 93#endif 94 95/* getaddrinfo constants */ 96#ifndef EAI_FAIL 97#define EAI_FAIL 4 98#endif 99 100#ifndef EAI_FAMILY 101#define EAI_FAMILY 5 102#endif 103 104#ifndef EAI_NONAME 105#define EAI_NONAME 8 106#endif 107 108#ifndef AI_PASSIVE 109#define AI_PASSIVE 1 110#endif 111 112#ifndef AI_CANONNAME 113#define AI_CANONNAME 2 114#endif 115 116#ifndef AI_NUMERICHOST 117#define AI_NUMERICHOST 4 118#endif 119 120#ifndef NI_NOFQDN 121#define NI_NOFQDN 1 122#endif 123 124#ifndef NI_NUMERICHOST 125#define NI_NUMERICHOST 2 126#endif 127 128#ifndef NI_NAMERQD 129#define NI_NAMERQD 4 130#endif 131 132#ifndef NI_NUMERICSERV 133#define NI_NUMERICSERV 8 134#endif 135 136#ifndef NI_DGRAM 137#define NI_DGRAM 16 138#endif 139 140#if !HAVE_GETADDRINFO 141int ff_getaddrinfo(const char *node, const char *service, 142 const struct addrinfo *hints, struct addrinfo **res); 143void ff_freeaddrinfo(struct addrinfo *res); 144int ff_getnameinfo(const struct sockaddr *sa, int salen, 145 char *host, int hostlen, 146 char *serv, int servlen, int flags); 147const char *ff_gai_strerror(int ecode); 148#define getaddrinfo ff_getaddrinfo 149#define freeaddrinfo ff_freeaddrinfo 150#define getnameinfo ff_getnameinfo 151#define gai_strerror ff_gai_strerror 152#endif 153 154#endif /* AVFORMAT_NETWORK_H */ 155