#include <errno.h>
#include <string.h>
#include <unistd.h>
+#include <poll.h>
#include <pulse/timeval.h>
#include <pulse/xmalloc.h>
static int rtpoll_work_cb(pa_rtpoll_item *i) {
pa_memchunk chunk;
int64_t k, j, delta;
- struct timespec now;
+ struct timeval now;
struct session *s;
struct pollfd *p;
-
+
pa_assert_se(s = pa_rtpoll_item_get_userdata(i));
p = pa_rtpoll_item_get_pollfd(i, NULL);
pa_log("poll() signalled bad revents.");
return -1;
}
-
+
if ((p->revents & POLLIN) == 0)
return 0;
p->revents = 0;
-
+
if (pa_rtp_recv(&s->rtp_context, &chunk, s->userdata->module->core->mempool) < 0)
return 0;
static void sink_input_attach(pa_sink_input *i) {
struct session *s;
struct pollfd *p;
-
+
pa_sink_input_assert_ref(i);
pa_assert_se(s = i->userdata);
int fd = -1;
pa_memblock *silence;
pa_sink_input_new_data data;
- struct timespec now;
+ struct timeval now;
pa_assert(u);
pa_assert(sdp_info);
if (fd >= 0)
pa_close(fd);
-
+
return NULL;
}
pa_assert(s->userdata->n_sessions >= 1);
s->userdata->n_sessions--;
pa_hashmap_remove(s->userdata->by_origin, s->sdp_info.origin);
-
+
pa_memblockq_free(s->memblockq);
pa_sdp_info_destroy(&s->sdp_info);
pa_rtp_context_destroy(&s->rtp_context);
pa_sdp_info_destroy(&info);
} else {
- struct timespec now;
+ struct timeval now;
pa_rtclock_get(&now);
pa_atomic_store(&s->timestamp, now.tv_sec);
-
+
pa_sdp_info_destroy(&info);
}
}
static void check_death_event_cb(pa_mainloop_api *m, pa_time_event *t, const struct timeval *ptv, void *userdata) {
struct session *s, *n;
struct userdata *u = userdata;
- struct timespec now;
+ struct timeval now;
struct timeval tv;
pa_assert(m);
pa_rtclock_get(&now);
pa_log_debug("Checking for dead streams ...");
-
+
for (s = u->sessions; s; s = n) {
int k;
n = s->next;
const char *sap_address;
int fd = -1;
struct timeval tv;
-
+
pa_assert(m);
if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
pa_gettimeofday(&tv);
pa_timeval_add(&tv, DEATH_TIMEOUT * PA_USEC_PER_SEC);
u->check_death_event = m->core->mainloop->time_new(m->core->mainloop, &tv, check_death_event_cb, u);
-
+
pa_modargs_free(ma);
return 0;
void pa__done(pa_module*m) {
struct userdata *u;
struct session *s;
-
+
pa_assert(m);
if (!(u = m->userdata))
if (u->by_origin) {
while ((s = pa_hashmap_get_first(u->by_origin)))
session_free(s);
-
+
pa_hashmap_free(u->by_origin, NULL, NULL);
}