]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/network.h
In mxf muxer, check the return value of gmtime, fix #2494
[ffmpeg] / libavformat / network.h
index ea8e946701beb3d740330b05c4c525134b866e5d..d6aee931217d419b2a4718d328bf046a197b9413 100644 (file)
@@ -27,8 +27,8 @@
 #include <winsock2.h>
 #include <ws2tcpip.h>
 
-#define ff_neterrno() WSAGetLastError()
-#define FF_NETERROR(err) WSA##err
+#define ff_neterrno() (-WSAGetLastError())
+#define FF_NETERROR(err) (-WSA##err)
 #define WSAEAGAIN WSAEWOULDBLOCK
 #else
 #include <sys/types.h>
@@ -36,8 +36,8 @@
 #include <netinet/in.h>
 #include <netdb.h>
 
-#define ff_neterrno() errno
-#define FF_NETERROR(err) err
+#define ff_neterrno() AVERROR(errno)
+#define FF_NETERROR(err) AVERROR(err)
 #endif
 
 #if HAVE_ARPA_INET_H
@@ -63,14 +63,19 @@ static inline void ff_network_close(void)
 #endif
 }
 
-#if !HAVE_INET_ATON
-/* in os_support.c */
-int inet_aton (const char * str, struct in_addr * add);
-#endif
+int ff_inet_aton (const char * str, struct in_addr * add);
 
 #if !HAVE_STRUCT_SOCKADDR_STORAGE
 struct sockaddr_storage {
-    struct sockaddr_in x;
+#if HAVE_STRUCT_SOCKADDR_SA_LEN
+    uint8_t ss_len;
+    uint8_t ss_family;
+#else
+    uint16_t ss_family;
+#endif
+    char ss_pad1[6];
+    int64_t ss_align;
+    char ss_pad2[112];
 };
 #endif
 
@@ -139,9 +144,36 @@ void ff_freeaddrinfo(struct addrinfo *res);
 int ff_getnameinfo(const struct sockaddr *sa, int salen,
                    char *host, int hostlen,
                    char *serv, int servlen, int flags);
+const char *ff_gai_strerror(int ecode);
 #define getaddrinfo ff_getaddrinfo
 #define freeaddrinfo ff_freeaddrinfo
 #define getnameinfo ff_getnameinfo
+#define gai_strerror ff_gai_strerror
+#endif
+
+#ifndef INET6_ADDRSTRLEN
+#define INET6_ADDRSTRLEN INET_ADDRSTRLEN
+#endif
+
+#ifndef IN_MULTICAST
+#define IN_MULTICAST(a) ((((uint32_t)(a)) & 0xf0000000) == 0xe0000000)
 #endif
+#ifndef IN6_IS_ADDR_MULTICAST
+#define IN6_IS_ADDR_MULTICAST(a) (((uint8_t *) (a))[0] == 0xff)
+#endif
+
+static inline int ff_is_multicast_address(struct sockaddr *addr)
+{
+    if (addr->sa_family == AF_INET) {
+        return IN_MULTICAST(ntohl(((struct sockaddr_in *)addr)->sin_addr.s_addr));
+    }
+#if HAVE_STRUCT_SOCKADDR_IN6
+    if (addr->sa_family == AF_INET6) {
+        return IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6 *)addr)->sin6_addr);
+    }
+#endif
+
+    return 0;
+}
 
 #endif /* AVFORMAT_NETWORK_H */