#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
*****************************************************************************
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
# 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.
((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__ */
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;
+}