]> code.delx.au - pulseaudio/blobdiff - src/pulse/context.c
client-conf: Don't create multiple cookie files
[pulseaudio] / src / pulse / context.c
index 11dac151b846f28ec3c11d108465fd069c315c6a..ce19d91ea55a1c1d9fc4db1829b2fa53bece3015 100644 (file)
@@ -166,16 +166,16 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *
 #endif
 
     c->conf = pa_client_conf_new();
-    pa_client_conf_load(c->conf, NULL);
+    pa_client_conf_load(c->conf);
 #ifdef HAVE_X11
-    pa_client_conf_from_x11(c->conf, NULL);
+    pa_client_conf_from_x11(c->conf);
 #endif
     pa_client_conf_env(c->conf);
 
     if (!(c->mempool = pa_mempool_new(!c->conf->disable_shm, c->conf->shm_size))) {
 
         if (!c->conf->disable_shm)
-            c->mempool = pa_mempool_new(FALSE, c->conf->shm_size);
+            c->mempool = pa_mempool_new(false, c->conf->shm_size);
 
         if (!c->mempool) {
             context_free(c);
@@ -241,9 +241,9 @@ static void context_free(pa_context *c) {
 #endif
 
     if (c->record_streams)
-        pa_hashmap_free(c->record_streams, NULL);
+        pa_hashmap_free(c->record_streams);
     if (c->playback_streams)
-        pa_hashmap_free(c->playback_streams, NULL);
+        pa_hashmap_free(c->playback_streams);
 
     if (c->mempool)
         pa_mempool_free(c->mempool);
@@ -353,10 +353,10 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
     if ((s = pa_hashmap_get(c->record_streams, PA_UINT32_TO_PTR(channel)))) {
 
         if (chunk->memblock) {
-            pa_memblockq_seek(s->record_memblockq, offset, seek, TRUE);
+            pa_memblockq_seek(s->record_memblockq, offset, seek, true);
             pa_memblockq_push_align(s->record_memblockq, chunk);
         } else
-            pa_memblockq_seek(s->record_memblockq, offset+chunk->length, seek, TRUE);
+            pa_memblockq_seek(s->record_memblockq, offset+chunk->length, seek, true);
 
         if (s->read_callback) {
             size_t l;
@@ -369,7 +369,7 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
     pa_context_unref(c);
 }
 
-int pa_context_handle_error(pa_context *c, uint32_t command, pa_tagstruct *t, pa_bool_t fail) {
+int pa_context_handle_error(pa_context *c, uint32_t command, pa_tagstruct *t, bool fail) {
     uint32_t err;
     pa_assert(c);
     pa_assert(PA_REFCNT_VALUE(c) >= 1);
@@ -418,14 +418,14 @@ static void setup_complete_callback(pa_pdispatch *pd, uint32_t command, uint32_t
     pa_context_ref(c);
 
     if (command != PA_COMMAND_REPLY) {
-        pa_context_handle_error(c, command, t, TRUE);
+        pa_context_handle_error(c, command, t, true);
         goto finish;
     }
 
     switch(c->state) {
         case PA_CONTEXT_AUTHORIZING: {
             pa_tagstruct *reply;
-            pa_bool_t shm_on_remote = FALSE;
+            bool shm_on_remote = false;
 
             if (pa_tagstruct_getu32(t, &c->version) < 0 ||
                 !pa_tagstruct_eof(t)) {
@@ -452,7 +452,7 @@ static void setup_complete_callback(pa_pdispatch *pd, uint32_t command, uint32_t
             /* Enable shared memory support if possible */
             if (c->do_shm)
                 if (c->version < 10 || (c->version >= 13 && !shm_on_remote))
-                    c->do_shm = FALSE;
+                    c->do_shm = false;
 
             if (c->do_shm) {
 
@@ -463,7 +463,7 @@ static void setup_complete_callback(pa_pdispatch *pd, uint32_t command, uint32_t
 #ifdef HAVE_CREDS
                 const pa_creds *creds;
                 if (!(creds = pa_pdispatch_creds(pd)) || getuid() != creds->uid)
-                    c->do_shm = FALSE;
+                    c->do_shm = false;
 #endif
             }
 
@@ -506,6 +506,7 @@ finish:
 }
 
 static void setup_context(pa_context *c, pa_iochannel *io) {
+    uint8_t cookie[PA_NATIVE_COOKIE_LENGTH];
     pa_tagstruct *t;
     uint32_t tag;
 
@@ -524,7 +525,7 @@ static void setup_context(pa_context *c, pa_iochannel *io) {
     pa_assert(!c->pdispatch);
     c->pdispatch = pa_pdispatch_new(c->mainloop, c->use_rtclock, command_table, PA_COMMAND_MAX);
 
-    if (!c->conf->cookie_valid)
+    if (pa_client_conf_load_cookie(c->conf, cookie, sizeof(cookie)) < 0)
         pa_log_info(_("No cookie loaded. Attempting to connect without."));
 
     t = pa_tagstruct_command(c, PA_COMMAND_AUTH, &tag);
@@ -538,7 +539,7 @@ static void setup_context(pa_context *c, pa_iochannel *io) {
     /* Starting with protocol version 13 we use the MSB of the version
      * tag for informing the other side if we could do SHM or not */
     pa_tagstruct_putu32(t, PA_PROTOCOL_VERSION | (c->do_shm ? 0x80000000U : 0));
-    pa_tagstruct_put_arbitrary(t, c->conf->cookie, sizeof(c->conf->cookie));
+    pa_tagstruct_put_arbitrary(t, cookie, sizeof(cookie));
 
 #ifdef HAVE_CREDS
 {
@@ -707,7 +708,7 @@ static void track_pulseaudio_on_dbus(pa_context *c, DBusBusType type, pa_dbus_wr
         pa_log_warn("Failed to add filter function");
         goto fail;
     }
-    c->filter_added = TRUE;
+    c->filter_added = true;
 
     if (pa_dbus_add_matches(
                 pa_dbus_wrap_connection_get(*conn), &error,
@@ -751,7 +752,7 @@ static int try_next_connection(pa_context *c) {
                     goto finish;
 
                 /* Autospawn only once */
-                c->do_autospawn = FALSE;
+                c->do_autospawn = false;
 
                 /* Connect only to per-user sockets this time */
                 c->server_list = prepend_per_user(c->server_list);
@@ -830,7 +831,7 @@ finish:
 #ifdef HAVE_DBUS
 static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *message, void *userdata) {
     pa_context *c = userdata;
-    pa_bool_t is_session;
+    bool is_session;
 
     pa_assert(bus);
     pa_assert(message);
@@ -879,7 +880,7 @@ int pa_context_connect(
     PA_CHECK_VALIDITY(c, !server || *server, PA_ERR_INVALID);
 
     if (server)
-        c->conf->autospawn = FALSE;
+        c->conf->autospawn = false;
     else
         server = c->conf->default_server;
 
@@ -932,7 +933,7 @@ int pa_context_connect(
         if (getuid() == 0)
             pa_log_debug("Not doing autospawn since we are root.");
         else {
-            c->do_autospawn = TRUE;
+            c->do_autospawn = true;
 
             if (api)
                 c->spawn_api = *api;
@@ -1088,7 +1089,7 @@ void pa_context_simple_ack_callback(pa_pdispatch *pd, uint32_t command, uint32_t
         goto finish;
 
     if (command != PA_COMMAND_REPLY) {
-        if (pa_context_handle_error(o->context, command, t, FALSE) < 0)
+        if (pa_context_handle_error(o->context, command, t, false) < 0)
             goto finish;
 
         success = 0;
@@ -1448,3 +1449,16 @@ size_t pa_context_get_tile_size(pa_context *c, const pa_sample_spec *ss) {
     mbs = PA_ROUND_DOWN(pa_mempool_block_size_max(c->mempool), fs);
     return PA_MAX(mbs, fs);
 }
+
+int pa_context_load_cookie_from_file(pa_context *c, const char *cookie_file_path) {
+    pa_assert(c);
+    pa_assert(PA_REFCNT_VALUE(c) >= 1);
+
+    PA_CHECK_VALIDITY(c, !pa_detect_fork(), PA_ERR_FORKED);
+    PA_CHECK_VALIDITY(c, c->state == PA_CONTEXT_UNCONNECTED, PA_ERR_BADSTATE);
+    PA_CHECK_VALIDITY(c, !cookie_file_path || *cookie_file_path, PA_ERR_INVALID);
+
+    pa_client_conf_set_cookie_file_from_application(c->conf, cookie_file_path);
+
+    return 0;
+}