add description field for sinks/sources
[profile/ivi/pulseaudio.git] / src / client.c
1 #include <stdio.h>
2 #include <assert.h>
3 #include <stdlib.h>
4 #include <string.h>
5
6 #include "client.h"
7 #include "strbuf.h"
8
9 struct pa_client *pa_client_new(struct pa_core *core, const char *protocol_name, char *name) {
10     struct pa_client *c;
11     int r;
12     assert(core);
13
14     c = malloc(sizeof(struct pa_client));
15     assert(c);
16     c->name = name ? strdup(name) : NULL;
17     c->owner = NULL;
18     c->core = core;
19     c->protocol_name = protocol_name;
20
21     c->kill = NULL;
22     c->userdata = NULL;
23
24     r = pa_idxset_put(core->clients, c, &c->index);
25     assert(c->index != PA_IDXSET_INVALID && r >= 0);
26
27     fprintf(stderr, "client: created %u \"%s\"\n", c->index, c->name);
28     
29     return c;
30 }
31
32 void pa_client_free(struct pa_client *c) {
33     assert(c && c->core);
34
35     pa_idxset_remove_by_data(c->core->clients, c, NULL);
36     fprintf(stderr, "client: freed %u \"%s\"\n", c->index, c->name);
37     free(c->name);
38     free(c);
39 }
40
41 void pa_client_kill(struct pa_client *c) {
42     assert(c);
43     if (!c->kill) {
44         fprintf(stderr, "kill() operation not implemented for client %u\n", c->index);
45         return;
46     }
47
48     c->kill(c);
49 }
50
51 char *pa_client_list_to_string(struct pa_core *c) {
52     struct pa_strbuf *s;
53     struct pa_client *client;
54     uint32_t index = PA_IDXSET_INVALID;
55     assert(c);
56
57     s = pa_strbuf_new();
58     assert(s);
59
60     pa_strbuf_printf(s, "%u client(s).\n", pa_idxset_ncontents(c->clients));
61     
62     for (client = pa_idxset_first(c->clients, &index); client; client = pa_idxset_next(c->clients, &index)) {
63         pa_strbuf_printf(s, "    index: %u\n\tname: <%s>\n\tprotocol_name: <%s>\n", client->index, client->name, client->protocol_name);
64
65         if (client->owner)
66             pa_strbuf_printf(s, "\towner module: <%u>\n", client->owner->index);
67     }
68         
69     return pa_strbuf_tostring_free(s);
70 }
71
72
73 void pa_client_rename(struct pa_client *c, const char *name) {
74     assert(c);
75     free(c->name);
76     c->name = name ? strdup(name) : NULL;
77 }