#include <sys/types.h>
#include <pulse/xmalloc.h>
-#include <pulse/util.h>
#include <pulsecore/refcnt.h>
#include <pulsecore/macro.h>
size_t size;
};
-pa_auth_cookie* pa_auth_cookie_get(pa_core *core, const char *cn, size_t size) {
+pa_auth_cookie* pa_auth_cookie_get(pa_core *core, const char *cn, bool create, size_t size) {
pa_auth_cookie *c;
char *t;
pa_assert_se(pa_shared_set(core, t, c) >= 0);
- if (pa_authkey_load_auto(cn, (uint8_t*) c + PA_ALIGN(sizeof(pa_auth_cookie)), size) < 0) {
+ if (pa_authkey_load_auto(cn, create, (uint8_t*) c + PA_ALIGN(sizeof(pa_auth_cookie)), size) < 0) {
pa_auth_cookie_unref(c);
return NULL;
}
return c;
}
+pa_auth_cookie *pa_auth_cookie_create(pa_core *core, const void *data, size_t size) {
+ pa_auth_cookie *c;
+ char *t;
+
+ pa_assert(core);
+ pa_assert(data);
+ pa_assert(size > 0);
+
+ t = pa_xstrdup("auth-cookie");
+
+ if ((c = pa_shared_get(core, t))) {
+
+ pa_xfree(t);
+
+ if (c->size != size)
+ return NULL;
+
+ return pa_auth_cookie_ref(c);
+ }
+
+ c = pa_xmalloc(PA_ALIGN(sizeof(pa_auth_cookie)) + size);
+ PA_REFCNT_INIT(c);
+ c->core = core;
+ c->name = t;
+ c->size = size;
+
+ pa_assert_se(pa_shared_set(core, t, c) >= 0);
+
+ memcpy((uint8_t *) c + PA_ALIGN(sizeof(pa_auth_cookie)), data, size);
+
+ return c;
+}
+
pa_auth_cookie* pa_auth_cookie_ref(pa_auth_cookie *c) {
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);