]> git.sesse.net Git - vlc/commitdiff
New useful API to combine get(sock|peer)name() and vlc_getnameinfo()
authorRémi Denis-Courmont <rem@videolan.org>
Wed, 13 Jul 2005 18:11:18 +0000 (18:11 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Wed, 13 Jul 2005 18:11:18 +0000 (18:11 +0000)
include/network.h
include/vlc_symbols.h
src/misc/net.c

index 4fcf4a741f348eeac0e8f25f2f89d95054f0d74d..ed79473473487eb716bff07f2abfa4e8434f0b6f 100644 (file)
@@ -352,6 +352,10 @@ VLC_EXPORT( int, net_Printf, ( vlc_object_t *p_this, int fd, v_socket_t *, const
 #define net_vaPrintf(a,b,c,d,e) __net_vaPrintf(VLC_OBJECT(a),b,c,d,e)
 VLC_EXPORT( int, __net_vaPrintf, ( vlc_object_t *p_this, int fd, v_socket_t *, const char *psz_fmt, va_list args ) );
 
+#define net_GetSockAddress(a,b,c,d) __net_GetAddress(VLC_OBJECT(a),VLC_FALSE,b,c,d)
+#define net_GetPeerAddress(a,b,c,d) __net_GetAddress(VLC_OBJECT(a),VLC_TRUE,b,c,d)
+VLC_EXPORT( int, __net_GetAddress, ( vlc_object_t *p_this, vlc_bool_t peer, int fd, char *address, int *port ) );
+
 /*****************************************************************************
  * net_StopRecv/Send
  *****************************************************************************
index 5ea737d851c57cd95c3257d87f1315ef473500d5..a21de7ae1ba98c6074664f55a8d22a289b884593 100644 (file)
@@ -382,6 +382,7 @@ struct module_symbols_t
     int (*ACL_LoadFile_inner) (vlc_acl_t *p_acl, const char *path);
     int (*ACL_AddNet_inner) (vlc_acl_t *p_acl, const char *psz_ip, int i_len, vlc_bool_t b_allow);
     void (*ACL_Destroy_inner) (vlc_acl_t *p_acl);
+    int (*__net_GetAddress_inner) (vlc_object_t *p_this, vlc_bool_t peer, int fd, char *address, int *port);
 };
 # if defined (__PLUGIN__)
 #  define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
@@ -749,6 +750,7 @@ struct module_symbols_t
 #  define ACL_LoadFile (p_symbols)->ACL_LoadFile_inner
 #  define ACL_AddNet (p_symbols)->ACL_AddNet_inner
 #  define ACL_Destroy (p_symbols)->ACL_Destroy_inner
+#  define __net_GetAddress (p_symbols)->__net_GetAddress_inner
 # elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
 /******************************************************************
  * STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
@@ -1119,6 +1121,7 @@ struct module_symbols_t
     ((p_symbols)->ACL_LoadFile_inner) = ACL_LoadFile; \
     ((p_symbols)->ACL_AddNet_inner) = ACL_AddNet; \
     ((p_symbols)->ACL_Destroy_inner) = ACL_Destroy; \
+    ((p_symbols)->__net_GetAddress_inner) = __net_GetAddress; \
     (p_symbols)->net_ConvertIPv4_deprecated = NULL; \
 
 # endif /* __PLUGIN__ */
index a34877d02747e3d84c0c7e9ce7937212bffedcd2..7c25fe82b068e0cb12c407d9010dd684ca6a9ebd 100644 (file)
@@ -1156,3 +1156,32 @@ static int SocksHandshakeTCP( vlc_object_t *p_obj,
     return VLC_SUCCESS;
 }
 
+int __net_GetAddress( vlc_object_t *p_this, vlc_bool_t peer, int fd,
+                      char *address, int *port )
+{
+    struct sockaddr_storage addr;
+    socklen_t addrlen = sizeof( addr );
+    int val;
+
+    val = peer ? getpeername( fd, (struct sockaddr *)&addr, &addrlen )
+               : getsockname( fd, (struct sockaddr *)&addr, &addrlen );
+
+    if (val)
+    {
+#if defined(WIN32) || defined (UNDER_CE)
+        msg_Err( p_this, "socket address error : %d", WSAGetLastError( ) );
+#else
+        msg_Err( p_this, "socket address error : %s", strerror( errno ) );
+#endif
+        return val;
+    }
+
+    val = vlc_getnameinfo( (struct sockaddr *)&addr, addrlen,
+                           address, NI_MAXNUMERICHOST, port, NI_NUMERICHOST );
+    if( val )
+    {
+        msg_Err( p_this, "socket address error : %s",
+                 vlc_gai_strerror( val ) );
+    }
+    return 0;
+}