mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-03 09:01:50 -05:00
add new functions pa_socket_is_local() and pa_socket_address_is_local()
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@2532 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
2af243305f
commit
30a8800210
2 changed files with 44 additions and 1 deletions
|
|
@ -129,8 +129,8 @@ void pa_socket_peer_to_string(int fd, char *c, size_t l) {
|
|||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#ifndef OS_IS_WIN32
|
||||
pa_snprintf(c, l, "Unknown network client");
|
||||
return;
|
||||
|
|
@ -284,3 +284,40 @@ int pa_unix_socket_remove_stale(const char *fn) {
|
|||
}
|
||||
|
||||
#endif /* HAVE_SYS_UN_H */
|
||||
|
||||
|
||||
pa_bool_t pa_socket_address_is_local(const struct sockaddr *sa) {
|
||||
pa_assert(sa);
|
||||
|
||||
switch (sa->sa_family) {
|
||||
case AF_UNIX:
|
||||
return TRUE;
|
||||
|
||||
case AF_INET:
|
||||
return ((const struct sockaddr_in*) sa)->sin_addr.s_addr == INADDR_LOOPBACK;
|
||||
|
||||
case AF_INET6:
|
||||
return memcmp(&((const struct sockaddr_in6*) sa)->sin6_addr, &in6addr_loopback, sizeof(struct in6_addr)) == 0;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
pa_bool_t pa_socket_is_local(int fd) {
|
||||
|
||||
union {
|
||||
struct sockaddr sa;
|
||||
struct sockaddr_in in;
|
||||
struct sockaddr_in6 in6;
|
||||
#ifdef HAVE_SYS_UN_H
|
||||
struct sockaddr_un un;
|
||||
#endif
|
||||
} sa;
|
||||
socklen_t sa_len = sizeof(sa);
|
||||
|
||||
if (getpeername(fd, &sa.sa, &sa_len) < 0)
|
||||
return FALSE;
|
||||
|
||||
return pa_socket_address_is_local(&sa.sa);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue