diff --git a/src/modules/module-tunnel-sink-new.c b/src/modules/module-tunnel-sink-new.c index ee05d18f9..8d0409275 100644 --- a/src/modules/module-tunnel-sink-new.c +++ b/src/modules/module-tunnel-sink-new.c @@ -56,7 +56,8 @@ PA_MODULE_USAGE( "format= " "channels= " "rate= " - "channel_map=" + "channel_map= " + "cookie=" ); #define TUNNEL_THREAD_FAILED_MAINLOOP 1 @@ -82,6 +83,7 @@ struct userdata { bool connected; + char *cookie_file; char *remote_server; char *remote_sink_name; }; @@ -95,7 +97,7 @@ static const char* const valid_modargs[] = { "channels", "rate", "channel_map", - /* "cookie", unimplemented */ + "cookie", /* "reconnect", reconnect if server comes back again - unimplemented */ NULL, }; @@ -139,6 +141,11 @@ static void thread_func(void *userdata) { goto fail; } + if (u->cookie_file && pa_context_load_cookie_from_file(u->context, u->cookie_file) != 0) { + pa_log_error("Can not load cookie file!"); + goto fail; + } + pa_context_set_state_callback(u->context, context_state_cb, u); if (pa_context_connect(u->context, u->remote_server, @@ -450,7 +457,7 @@ int pa__init(pa_module *m) { goto fail; } u->thread_mainloop_api = pa_mainloop_get_api(u->thread_mainloop); - + u->cookie_file = pa_xstrdup(pa_modargs_get_value(ma, "cookie", NULL)); u->remote_sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL)); u->thread_mq = pa_xnew0(pa_thread_mq, 1); @@ -541,6 +548,9 @@ void pa__done(pa_module *m) { if (u->thread_mainloop) pa_mainloop_free(u->thread_mainloop); + if (u->cookie_file) + pa_xfree(u->cookie_file); + if (u->remote_sink_name) pa_xfree(u->remote_sink_name); diff --git a/src/modules/module-tunnel-source-new.c b/src/modules/module-tunnel-source-new.c index 8169b07f7..d2e2d6c68 100644 --- a/src/modules/module-tunnel-source-new.c +++ b/src/modules/module-tunnel-source-new.c @@ -56,7 +56,8 @@ PA_MODULE_USAGE( "format= " "channels= " "rate= " - "channel_map=" + "channel_map= " + "cookie=" ); #define TUNNEL_THREAD_FAILED_MAINLOOP 1 @@ -81,6 +82,7 @@ struct userdata { bool connected; bool new_data; + char *cookie_file; char *remote_server; char *remote_source_name; }; @@ -94,7 +96,7 @@ static const char* const valid_modargs[] = { "channels", "rate", "channel_map", - /* "cookie", unimplemented */ + "cookie", /* "reconnect", reconnect if server comes back again - unimplemented */ NULL, }; @@ -198,6 +200,11 @@ static void thread_func(void *userdata) { goto fail; } + if (u->cookie_file && pa_context_load_cookie_from_file(u->context, u->cookie_file) != 0) { + pa_log_error("Can not load cookie file!"); + goto fail; + } + pa_context_set_state_callback(u->context, context_state_cb, u); if (pa_context_connect(u->context, u->remote_server, @@ -454,6 +461,7 @@ int pa__init(pa_module *m) { goto fail; } u->thread_mainloop_api = pa_mainloop_get_api(u->thread_mainloop); + u->cookie_file = pa_xstrdup(pa_modargs_get_value(ma, "cookie", NULL)); u->remote_source_name = pa_xstrdup(pa_modargs_get_value(ma, "source", NULL)); u->thread_mq = pa_xnew0(pa_thread_mq, 1); @@ -543,6 +551,9 @@ void pa__done(pa_module *m) { if (u->thread_mainloop) pa_mainloop_free(u->thread_mainloop); + if (u->cookie_file) + pa_xfree(u->cookie_file); + if (u->remote_source_name) pa_xfree(u->remote_source_name);