mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-02 09:01:46 -05:00
a few modernizations
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/glitch-free@2346 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
parent
06b9140e10
commit
bfb2691fac
2 changed files with 30 additions and 28 deletions
|
|
@ -77,9 +77,9 @@ struct pa_socket_client {
|
||||||
pa_io_event *io_event;
|
pa_io_event *io_event;
|
||||||
pa_time_event *timeout_event;
|
pa_time_event *timeout_event;
|
||||||
pa_defer_event *defer_event;
|
pa_defer_event *defer_event;
|
||||||
void (*callback)(pa_socket_client*c, pa_iochannel *io, void *userdata);
|
pa_socket_client_cb_t callback;
|
||||||
void *userdata;
|
void *userdata;
|
||||||
int local;
|
pa_bool_t local;
|
||||||
#ifdef HAVE_LIBASYNCNS
|
#ifdef HAVE_LIBASYNCNS
|
||||||
asyncns_t *asyncns;
|
asyncns_t *asyncns;
|
||||||
asyncns_query_t * asyncns_query;
|
asyncns_query_t * asyncns_query;
|
||||||
|
|
@ -87,7 +87,7 @@ struct pa_socket_client {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static pa_socket_client*pa_socket_client_new(pa_mainloop_api *m) {
|
static pa_socket_client* socket_client_new(pa_mainloop_api *m) {
|
||||||
pa_socket_client *c;
|
pa_socket_client *c;
|
||||||
pa_assert(m);
|
pa_assert(m);
|
||||||
|
|
||||||
|
|
@ -96,11 +96,11 @@ static pa_socket_client*pa_socket_client_new(pa_mainloop_api *m) {
|
||||||
c->mainloop = m;
|
c->mainloop = m;
|
||||||
c->fd = -1;
|
c->fd = -1;
|
||||||
c->io_event = NULL;
|
c->io_event = NULL;
|
||||||
c->defer_event = NULL;
|
|
||||||
c->timeout_event = NULL;
|
c->timeout_event = NULL;
|
||||||
|
c->defer_event = NULL;
|
||||||
c->callback = NULL;
|
c->callback = NULL;
|
||||||
c->userdata = NULL;
|
c->userdata = NULL;
|
||||||
c->local = 0;
|
c->local = FALSE;
|
||||||
|
|
||||||
#ifdef HAVE_LIBASYNCNS
|
#ifdef HAVE_LIBASYNCNS
|
||||||
c->asyncns = NULL;
|
c->asyncns = NULL;
|
||||||
|
|
@ -119,15 +119,15 @@ static void free_events(pa_socket_client *c) {
|
||||||
c->io_event = NULL;
|
c->io_event = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c->defer_event) {
|
|
||||||
c->mainloop->defer_free(c->defer_event);
|
|
||||||
c->defer_event = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c->timeout_event) {
|
if (c->timeout_event) {
|
||||||
c->mainloop->time_free(c->timeout_event);
|
c->mainloop->time_free(c->timeout_event);
|
||||||
c->timeout_event = NULL;
|
c->timeout_event = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (c->defer_event) {
|
||||||
|
c->mainloop->defer_free(c->defer_event);
|
||||||
|
c->defer_event = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_call(pa_socket_client *c) {
|
static void do_call(pa_socket_client *c) {
|
||||||
|
|
@ -177,7 +177,7 @@ finish:
|
||||||
pa_socket_client_unref(c);
|
pa_socket_client_unref(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void connect_fixed_cb(pa_mainloop_api *m, pa_defer_event *e, void *userdata) {
|
static void connect_defer_cb(pa_mainloop_api *m, pa_defer_event *e, void *userdata) {
|
||||||
pa_socket_client *c = userdata;
|
pa_socket_client *c = userdata;
|
||||||
|
|
||||||
pa_assert(m);
|
pa_assert(m);
|
||||||
|
|
@ -223,7 +223,7 @@ static int do_connect(pa_socket_client *c, const struct sockaddr *sa, socklen_t
|
||||||
|
|
||||||
pa_assert_se(c->io_event = c->mainloop->io_new(c->mainloop, c->fd, PA_IO_EVENT_OUTPUT, connect_io_cb, c));
|
pa_assert_se(c->io_event = c->mainloop->io_new(c->mainloop, c->fd, PA_IO_EVENT_OUTPUT, connect_io_cb, c));
|
||||||
} else
|
} else
|
||||||
pa_assert_se(c->defer_event = c->mainloop->defer_new(c->mainloop, connect_fixed_cb, c));
|
pa_assert_se(c->defer_event = c->mainloop->defer_new(c->mainloop, connect_defer_cb, c));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -252,8 +252,7 @@ pa_socket_client* pa_socket_client_new_unix(pa_mainloop_api *m, const char *file
|
||||||
|
|
||||||
memset(&sa, 0, sizeof(sa));
|
memset(&sa, 0, sizeof(sa));
|
||||||
sa.sun_family = AF_UNIX;
|
sa.sun_family = AF_UNIX;
|
||||||
strncpy(sa.sun_path, filename, sizeof(sa.sun_path)-1);
|
pa_strlcpy(sa.sun_path, filename, sizeof(sa.sun_path));
|
||||||
sa.sun_path[sizeof(sa.sun_path) - 1] = 0;
|
|
||||||
|
|
||||||
return pa_socket_client_new_sockaddr(m, (struct sockaddr*) &sa, sizeof(sa));
|
return pa_socket_client_new_sockaddr(m, (struct sockaddr*) &sa, sizeof(sa));
|
||||||
}
|
}
|
||||||
|
|
@ -273,7 +272,7 @@ static int sockaddr_prepare(pa_socket_client *c, const struct sockaddr *sa, size
|
||||||
|
|
||||||
switch (sa->sa_family) {
|
switch (sa->sa_family) {
|
||||||
case AF_UNIX:
|
case AF_UNIX:
|
||||||
c->local = 1;
|
c->local = TRUE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
|
|
@ -285,7 +284,7 @@ static int sockaddr_prepare(pa_socket_client *c, const struct sockaddr *sa, size
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
c->local = 0;
|
c->local = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((c->fd = socket(sa->sa_family, SOCK_STREAM, 0)) < 0) {
|
if ((c->fd = socket(sa->sa_family, SOCK_STREAM, 0)) < 0) {
|
||||||
|
|
@ -294,6 +293,7 @@ static int sockaddr_prepare(pa_socket_client *c, const struct sockaddr *sa, size
|
||||||
}
|
}
|
||||||
|
|
||||||
pa_make_fd_cloexec(c->fd);
|
pa_make_fd_cloexec(c->fd);
|
||||||
|
|
||||||
if (sa->sa_family == AF_INET || sa->sa_family == AF_INET6)
|
if (sa->sa_family == AF_INET || sa->sa_family == AF_INET6)
|
||||||
pa_make_tcp_socket_low_delay(c->fd);
|
pa_make_tcp_socket_low_delay(c->fd);
|
||||||
else
|
else
|
||||||
|
|
@ -312,7 +312,7 @@ pa_socket_client* pa_socket_client_new_sockaddr(pa_mainloop_api *m, const struct
|
||||||
pa_assert(sa);
|
pa_assert(sa);
|
||||||
pa_assert(salen > 0);
|
pa_assert(salen > 0);
|
||||||
|
|
||||||
pa_assert_se(c = pa_socket_client_new(m));
|
pa_assert_se(c = socket_client_new(m));
|
||||||
|
|
||||||
if (sockaddr_prepare(c, sa, salen) < 0)
|
if (sockaddr_prepare(c, sa, salen) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
@ -361,7 +361,7 @@ pa_socket_client* pa_socket_client_ref(pa_socket_client *c) {
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pa_socket_client_set_callback(pa_socket_client *c, void (*on_connection)(pa_socket_client *c, pa_iochannel*io, void *userdata), void *userdata) {
|
void pa_socket_client_set_callback(pa_socket_client *c, pa_socket_client_cb_t on_connection, void *userdata) {
|
||||||
pa_assert(c);
|
pa_assert(c);
|
||||||
pa_assert(PA_REFCNT_VALUE(c) >= 1);
|
pa_assert(PA_REFCNT_VALUE(c) >= 1);
|
||||||
|
|
||||||
|
|
@ -489,23 +489,22 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
|
||||||
hints.ai_family = a.type == PA_PARSED_ADDRESS_TCP4 ? PF_INET : (a.type == PA_PARSED_ADDRESS_TCP6 ? PF_INET6 : PF_UNSPEC);
|
hints.ai_family = a.type == PA_PARSED_ADDRESS_TCP4 ? PF_INET : (a.type == PA_PARSED_ADDRESS_TCP6 ? PF_INET6 : PF_UNSPEC);
|
||||||
hints.ai_socktype = SOCK_STREAM;
|
hints.ai_socktype = SOCK_STREAM;
|
||||||
|
|
||||||
#ifdef HAVE_LIBASYNCNS
|
#if defined(HAVE_LIBASYNCNS)
|
||||||
{
|
{
|
||||||
asyncns_t *asyncns;
|
asyncns_t *asyncns;
|
||||||
|
|
||||||
if (!(asyncns = asyncns_new(1)))
|
if (!(asyncns = asyncns_new(1)))
|
||||||
goto finish;
|
goto finish;
|
||||||
|
|
||||||
c = pa_socket_client_new(m);
|
pa_assert_se(c = socket_client_new(m));
|
||||||
c->asyncns = asyncns;
|
c->asyncns = asyncns;
|
||||||
c->asyncns_io_event = m->io_new(m, asyncns_fd(c->asyncns), PA_IO_EVENT_INPUT, asyncns_cb, c);
|
c->asyncns_io_event = m->io_new(m, asyncns_fd(c->asyncns), PA_IO_EVENT_INPUT, asyncns_cb, c);
|
||||||
c->asyncns_query = asyncns_getaddrinfo(c->asyncns, a.path_or_host, port, &hints);
|
c->asyncns_query = asyncns_getaddrinfo(c->asyncns, a.path_or_host, port, &hints);
|
||||||
pa_assert(c->asyncns_query);
|
pa_assert(c->asyncns_query);
|
||||||
start_timeout(c);
|
start_timeout(c);
|
||||||
}
|
}
|
||||||
#else /* HAVE_LIBASYNCNS */
|
#elif defined(HAVE_GETADDRINFO)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_GETADDRINFO
|
|
||||||
int ret;
|
int ret;
|
||||||
struct addrinfo *res = NULL;
|
struct addrinfo *res = NULL;
|
||||||
|
|
||||||
|
|
@ -520,7 +519,9 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
|
||||||
}
|
}
|
||||||
|
|
||||||
freeaddrinfo(res);
|
freeaddrinfo(res);
|
||||||
#else /* HAVE_GETADDRINFO */
|
}
|
||||||
|
#else
|
||||||
|
{
|
||||||
struct hostent *host = NULL;
|
struct hostent *host = NULL;
|
||||||
struct sockaddr_in s;
|
struct sockaddr_in s;
|
||||||
|
|
||||||
|
|
@ -546,7 +547,6 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
|
||||||
|
|
||||||
if ((c = pa_socket_client_new_sockaddr(m, (struct sockaddr*)&s, sizeof(s))))
|
if ((c = pa_socket_client_new_sockaddr(m, (struct sockaddr*)&s, sizeof(s))))
|
||||||
start_timeout(c);
|
start_timeout(c);
|
||||||
#endif /* HAVE_GETADDRINFO */
|
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LIBASYNCNS */
|
#endif /* HAVE_LIBASYNCNS */
|
||||||
}
|
}
|
||||||
|
|
@ -561,7 +561,7 @@ finish:
|
||||||
/* Return non-zero when the target sockaddr is considered
|
/* Return non-zero when the target sockaddr is considered
|
||||||
local. "local" means UNIX socket or TCP socket on localhost. Other
|
local. "local" means UNIX socket or TCP socket on localhost. Other
|
||||||
local IP addresses are not considered local. */
|
local IP addresses are not considered local. */
|
||||||
int pa_socket_client_is_local(pa_socket_client *c) {
|
pa_bool_t pa_socket_client_is_local(pa_socket_client *c) {
|
||||||
pa_assert(c);
|
pa_assert(c);
|
||||||
pa_assert(PA_REFCNT_VALUE(c) >= 1);
|
pa_assert(PA_REFCNT_VALUE(c) >= 1);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,17 +34,19 @@ struct sockaddr;
|
||||||
|
|
||||||
typedef struct pa_socket_client pa_socket_client;
|
typedef struct pa_socket_client pa_socket_client;
|
||||||
|
|
||||||
|
typedef void (*pa_socket_client_cb_t)(pa_socket_client *c, pa_iochannel*io, void *userdata);
|
||||||
|
|
||||||
pa_socket_client* pa_socket_client_new_ipv4(pa_mainloop_api *m, uint32_t address, uint16_t port);
|
pa_socket_client* pa_socket_client_new_ipv4(pa_mainloop_api *m, uint32_t address, uint16_t port);
|
||||||
pa_socket_client* pa_socket_client_new_ipv6(pa_mainloop_api *m, uint8_t address[16], uint16_t port);
|
pa_socket_client* pa_socket_client_new_ipv6(pa_mainloop_api *m, uint8_t address[16], uint16_t port);
|
||||||
pa_socket_client* pa_socket_client_new_unix(pa_mainloop_api *m, const char *filename);
|
pa_socket_client* pa_socket_client_new_unix(pa_mainloop_api *m, const char *filename);
|
||||||
pa_socket_client* pa_socket_client_new_sockaddr(pa_mainloop_api *m, const struct sockaddr *sa, size_t salen);
|
pa_socket_client* pa_socket_client_new_sockaddr(pa_mainloop_api *m, const struct sockaddr *sa, size_t salen);
|
||||||
pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char *a, uint16_t default_port);
|
pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char *a, uint16_t default_port);
|
||||||
|
|
||||||
void pa_socket_client_unref(pa_socket_client *c);
|
|
||||||
pa_socket_client* pa_socket_client_ref(pa_socket_client *c);
|
pa_socket_client* pa_socket_client_ref(pa_socket_client *c);
|
||||||
|
void pa_socket_client_unref(pa_socket_client *c);
|
||||||
|
|
||||||
void pa_socket_client_set_callback(pa_socket_client *c, void (*on_connection)(pa_socket_client *c, pa_iochannel*io, void *userdata), void *userdata);
|
void pa_socket_client_set_callback(pa_socket_client *c, pa_socket_client_cb_t on_connection, void *userdata);
|
||||||
|
|
||||||
int pa_socket_client_is_local(pa_socket_client *c);
|
pa_bool_t pa_socket_client_is_local(pa_socket_client *c);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue