Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  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 <errno.h>
  25. #include <stdint.h>
  26.  
  27. #include "config.h"
  28. #include "libavutil/error.h"
  29. #include "os_support.h"
  30. #include "avio.h"
  31. #include "url.h"
  32.  
  33. #if HAVE_UNISTD_H
  34. #include <unistd.h>
  35. #endif
  36.  
  37. #if HAVE_WINSOCK2_H
  38. #include <winsock2.h>
  39. #include <ws2tcpip.h>
  40.  
  41. #ifndef EPROTONOSUPPORT
  42. #define EPROTONOSUPPORT WSAEPROTONOSUPPORT
  43. #endif
  44. #ifndef ETIMEDOUT
  45. #define ETIMEDOUT       WSAETIMEDOUT
  46. #endif
  47. #ifndef ECONNREFUSED
  48. #define ECONNREFUSED    WSAECONNREFUSED
  49. #endif
  50. #ifndef EINPROGRESS
  51. #define EINPROGRESS     WSAEINPROGRESS
  52. #endif
  53.  
  54. #define getsockopt(a, b, c, d, e) getsockopt(a, b, c, (char*) d, e)
  55. #define setsockopt(a, b, c, d, e) setsockopt(a, b, c, (const char*) d, e)
  56.  
  57. int ff_neterrno(void);
  58. #else
  59. #include <sys/types.h>
  60. #include <sys/socket.h>
  61. #include <netinet/in.h>
  62. #include <netdb.h>
  63.  
  64. #define ff_neterrno() AVERROR(errno)
  65. #endif
  66.  
  67. #if HAVE_ARPA_INET_H
  68. #include <arpa/inet.h>
  69. #endif
  70.  
  71. #if HAVE_POLL_H
  72. #include <poll.h>
  73. #endif
  74.  
  75. int ff_socket_nonblock(int socket, int enable);
  76.  
  77. extern int ff_network_inited_globally;
  78. int ff_network_init(void);
  79. void ff_network_close(void);
  80.  
  81. void ff_tls_init(void);
  82. void ff_tls_deinit(void);
  83.  
  84. int ff_network_wait_fd(int fd, int write);
  85.  
  86. /**
  87.  * This works similarly to ff_network_wait_fd, but waits up to 'timeout' microseconds
  88.  * Uses ff_network_wait_fd in a loop
  89.  *
  90.  * @fd Socket descriptor
  91.  * @write Set 1 to wait for socket able to be read, 0 to be written
  92.  * @timeout Timeout interval, in microseconds. Actual precision is 100000 mcs, due to ff_network_wait_fd usage
  93.  * @param int_cb Interrupt callback, is checked before each ff_network_wait_fd call
  94.  * @return 0 if data can be read/written, AVERROR(ETIMEDOUT) if timeout expired, or negative error code
  95.  */
  96. int ff_network_wait_fd_timeout(int fd, int write, int64_t timeout, AVIOInterruptCB *int_cb);
  97.  
  98. int ff_inet_aton (const char * str, struct in_addr * add);
  99.  
  100. #if !HAVE_STRUCT_SOCKADDR_STORAGE
  101. struct sockaddr_storage {
  102. #if HAVE_STRUCT_SOCKADDR_SA_LEN
  103.     uint8_t ss_len;
  104.     uint8_t ss_family;
  105. #else
  106.     uint16_t ss_family;
  107. #endif
  108.     char ss_pad1[6];
  109.     int64_t ss_align;
  110.     char ss_pad2[112];
  111. };
  112. #endif
  113.  
  114. #if !HAVE_STRUCT_ADDRINFO
  115. struct addrinfo {
  116.     int ai_flags;
  117.     int ai_family;
  118.     int ai_socktype;
  119.     int ai_protocol;
  120.     int ai_addrlen;
  121.     struct sockaddr *ai_addr;
  122.     char *ai_canonname;
  123.     struct addrinfo *ai_next;
  124. };
  125. #endif
  126.  
  127. /* getaddrinfo constants */
  128. #ifndef EAI_AGAIN
  129. #define EAI_AGAIN 2
  130. #endif
  131. #ifndef EAI_BADFLAGS
  132. #define EAI_BADFLAGS 3
  133. #endif
  134. #ifndef EAI_FAIL
  135. #define EAI_FAIL 4
  136. #endif
  137. #ifndef EAI_FAMILY
  138. #define EAI_FAMILY 5
  139. #endif
  140. #ifndef EAI_MEMORY
  141. #define EAI_MEMORY 6
  142. #endif
  143. #ifndef EAI_NODATA
  144. #define EAI_NODATA 7
  145. #endif
  146. #ifndef EAI_NONAME
  147. #define EAI_NONAME 8
  148. #endif
  149. #ifndef EAI_SERVICE
  150. #define EAI_SERVICE 9
  151. #endif
  152. #ifndef EAI_SOCKTYPE
  153. #define EAI_SOCKTYPE 10
  154. #endif
  155.  
  156. #ifndef AI_PASSIVE
  157. #define AI_PASSIVE 1
  158. #endif
  159.  
  160. #ifndef AI_CANONNAME
  161. #define AI_CANONNAME 2
  162. #endif
  163.  
  164. #ifndef AI_NUMERICHOST
  165. #define AI_NUMERICHOST 4
  166. #endif
  167.  
  168. #ifndef NI_NOFQDN
  169. #define NI_NOFQDN 1
  170. #endif
  171.  
  172. #ifndef NI_NUMERICHOST
  173. #define NI_NUMERICHOST 2
  174. #endif
  175.  
  176. #ifndef NI_NAMERQD
  177. #define NI_NAMERQD 4
  178. #endif
  179.  
  180. #ifndef NI_NUMERICSERV
  181. #define NI_NUMERICSERV 8
  182. #endif
  183.  
  184. #ifndef NI_DGRAM
  185. #define NI_DGRAM 16
  186. #endif
  187.  
  188. #if !HAVE_GETADDRINFO
  189. int ff_getaddrinfo(const char *node, const char *service,
  190.                    const struct addrinfo *hints, struct addrinfo **res);
  191. void ff_freeaddrinfo(struct addrinfo *res);
  192. int ff_getnameinfo(const struct sockaddr *sa, int salen,
  193.                    char *host, int hostlen,
  194.                    char *serv, int servlen, int flags);
  195. #define getaddrinfo ff_getaddrinfo
  196. #define freeaddrinfo ff_freeaddrinfo
  197. #define getnameinfo ff_getnameinfo
  198. #endif
  199. #if !HAVE_GETADDRINFO || HAVE_WINSOCK2_H
  200. const char *ff_gai_strerror(int ecode);
  201. #undef gai_strerror
  202. #define gai_strerror ff_gai_strerror
  203. #endif
  204.  
  205. #ifndef INADDR_LOOPBACK
  206. #define INADDR_LOOPBACK 0x7f000001
  207. #endif
  208.  
  209. #ifndef INET_ADDRSTRLEN
  210. #define INET_ADDRSTRLEN 16
  211. #endif
  212.  
  213. #ifndef INET6_ADDRSTRLEN
  214. #define INET6_ADDRSTRLEN INET_ADDRSTRLEN
  215. #endif
  216.  
  217. #ifndef IN_MULTICAST
  218. #define IN_MULTICAST(a) ((((uint32_t)(a)) & 0xf0000000) == 0xe0000000)
  219. #endif
  220. #ifndef IN6_IS_ADDR_MULTICAST
  221. #define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff)
  222. #endif
  223.  
  224. int ff_is_multicast_address(struct sockaddr *addr);
  225.  
  226. #define POLLING_TIME 100 /// Time in milliseconds between interrupt check
  227.  
  228. /**
  229.  * Bind to a file descriptor and poll for a connection.
  230.  *
  231.  * @param fd      First argument of bind().
  232.  * @param addr    Second argument of bind().
  233.  * @param addrlen Third argument of bind().
  234.  * @param timeout Polling timeout in milliseconds.
  235.  * @param h       URLContext providing interrupt check
  236.  *                callback and logging context.
  237.  * @return        A non-blocking file descriptor on success
  238.  *                or an AVERROR on failure.
  239.  */
  240. int ff_listen_bind(int fd, const struct sockaddr *addr,
  241.                    socklen_t addrlen, int timeout,
  242.                    URLContext *h);
  243.  
  244. /**
  245.  * Connect to a file descriptor and poll for result.
  246.  *
  247.  * @param fd       First argument of connect(),
  248.  *                 will be set as non-blocking.
  249.  * @param addr     Second argument of connect().
  250.  * @param addrlen  Third argument of connect().
  251.  * @param timeout  Polling timeout in milliseconds.
  252.  * @param h        URLContext providing interrupt check
  253.  *                 callback and logging context.
  254.  * @param will_try_next Whether the caller will try to connect to another
  255.  *                 address for the same host name, affecting the form of
  256.  *                 logged errors.
  257.  * @return         0 on success, AVERROR on failure.
  258.  */
  259. int ff_listen_connect(int fd, const struct sockaddr *addr,
  260.                       socklen_t addrlen, int timeout,
  261.                       URLContext *h, int will_try_next);
  262.  
  263. int ff_http_match_no_proxy(const char *no_proxy, const char *hostname);
  264.  
  265. int ff_socket(int domain, int type, int protocol);
  266.  
  267. #endif /* AVFORMAT_NETWORK_H */
  268.