summaryrefslogtreecommitdiffstats
path: root/src/polypcore/pdispatch.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/polypcore/pdispatch.c')
-rw-r--r--src/polypcore/pdispatch.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/polypcore/pdispatch.c b/src/polypcore/pdispatch.c
index 56a21bd6..a4e58f8c 100644
--- a/src/polypcore/pdispatch.c
+++ b/src/polypcore/pdispatch.c
@@ -109,6 +109,7 @@ struct pa_pdispatch {
PA_LLIST_HEAD(struct reply_info, replies);
pa_pdispatch_drain_callback drain_callback;
void *drain_userdata;
+ const void *creds;
};
static void reply_info_free(struct reply_info *r) {
@@ -136,7 +137,8 @@ pa_pdispatch* pa_pdispatch_new(pa_mainloop_api *mainloop, const pa_pdispatch_cb_
PA_LLIST_HEAD_INIT(pa_reply_info, pd->replies);
pd->drain_callback = NULL;
pd->drain_userdata = NULL;
-
+ pd->creds = NULL;
+
return pd;
}
@@ -171,7 +173,7 @@ static void run_action(pa_pdispatch *pd, struct reply_info *r, uint32_t command,
pa_pdispatch_unref(pd);
}
-int pa_pdispatch_run(pa_pdispatch *pd, pa_packet*packet, void *userdata) {
+int pa_pdispatch_run(pa_pdispatch *pd, pa_packet*packet, const void *creds, void *userdata) {
uint32_t tag, command;
pa_tagstruct *ts = NULL;
int ret = -1;
@@ -188,18 +190,20 @@ int pa_pdispatch_run(pa_pdispatch *pd, pa_packet*packet, void *userdata) {
if (pa_tagstruct_getu32(ts, &command) < 0 ||
pa_tagstruct_getu32(ts, &tag) < 0)
goto finish;
-
+
#ifdef DEBUG_OPCODES
{
char t[256];
char const *p;
if (!(p = command_names[command]))
snprintf((char*) (p = t), sizeof(t), "%u", command);
-
+
pa_log(__FILE__": Recieved opcode <%s>", p);
}
#endif
+ pd->creds = creds;
+
if (command == PA_COMMAND_ERROR || command == PA_COMMAND_REPLY) {
struct reply_info *r;
@@ -222,6 +226,8 @@ int pa_pdispatch_run(pa_pdispatch *pd, pa_packet*packet, void *userdata) {
ret = 0;
finish:
+ pd->creds = NULL;
+
if (ts)
pa_tagstruct_free(ts);
@@ -295,3 +301,10 @@ pa_pdispatch* pa_pdispatch_ref(pa_pdispatch *pd) {
pd->ref++;
return pd;
}
+
+const void * pa_pdispatch_creds(pa_pdispatch *pd) {
+ assert(pd);
+ assert(pd->ref >= 1);
+
+ return pd->creds;
+}