};
struct pa_protocol_native {
+ struct pa_module *module;
int public;
struct pa_core *core;
struct pa_socket_server *server;
s->source_output->push = source_output_push_cb;
s->source_output->kill = source_output_kill_cb;
s->source_output->userdata = s;
+ s->source_output->owner = c->protocol->module;
+ s->source_output->client = c->client;
s->memblockq = pa_memblockq_new(maxlength, 0, base = pa_sample_size(ss), 0, 0);
assert(s->memblockq);
s->sink_input->kill = sink_input_kill_cb;
s->sink_input->get_latency = sink_input_get_latency_cb;
s->sink_input->userdata = s;
+ s->sink_input->owner = c->protocol->module;
+ s->sink_input->client = c->client;
s->memblockq = pa_memblockq_new(maxlength, tlength, pa_sample_size(ss), prebuf, minreq);
assert(s->memblockq);
assert(c->client);
c->client->kill = client_kill_cb;
c->client->userdata = c;
+ c->client->owner = p->module;
+
c->pstream = pa_pstream_new(p->core->mainloop, io);
assert(c->pstream);
/*** module entry points ***/
-struct pa_protocol_native* pa_protocol_native_new(struct pa_core *core, struct pa_socket_server *server) {
+struct pa_protocol_native* pa_protocol_native_new(struct pa_core *core, struct pa_socket_server *server, struct pa_module *m, struct pa_modargs *ma) {
struct pa_protocol_native *p;
- assert(core && server);
+ uint32_t public;
+ assert(core && server && ma);
+ if (pa_modargs_get_value_u32(ma, "public", &public) < 0) {
+ fprintf(stderr, __FILE__": public= expects numeric argument.\n");
+ return NULL;
+ }
+
p = malloc(sizeof(struct pa_protocol_native));
assert(p);
- if (pa_authkey_load_from_home(PA_NATIVE_COOKIE_FILE, p->auth_cookie, sizeof(p->auth_cookie)) < 0) {
+ if (pa_authkey_load_from_home(pa_modargs_get_value(ma, "cookie", PA_NATIVE_COOKIE_FILE), p->auth_cookie, sizeof(p->auth_cookie)) < 0) {
free(p);
return NULL;
}
-
- p->public = 1;
+
+ p->module = m;
+ p->public = public;
p->server = server;
p->core = core;
p->connections = pa_idxset_new(NULL, NULL);