source: roaraudio/roard/include/client.h @ 5586:5b82b3417705

Last change on this file since 5586:5b82b3417705 was 5586:5b82b3417705, checked in by phi, 12 years ago

general cleanup for -Wextra

File size: 5.4 KB
RevLine 
[0]1//client.h:
2
[668]3/*
[5381]4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2012
[668]5 *
6 *  This file is part of roard a part of RoarAudio,
7 *  a cross-platform sound system for both, home and professional use.
8 *  See README for details.
9 *
10 *  This file is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 3
12 *  as published by the Free Software Foundation.
13 *
14 *  RoarAudio is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this software; see the file COPYING.  If not, write to
[3517]21 *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 *  Boston, MA 02110-1301, USA.
[668]23 *
24 */
25
[0]26#ifndef _CLIENT_H_
27#define _CLIENT_H_
28
29/*
30 Defined in <roaraudio/client.h>
31
32
33#define ROAR_BUFFER_NAME 80
34
35#define ROAR_CLIENTS_MAX 64
36#define ROAR_CLIENTS_MAX_STREAMS_PER_CLIENT 4
37
38struct roar_client {
39 int fh; /-* controll connection *-/
40// int last_stream; /-* id of the last stream created *-/
41 char name[ROAR_BUFFER_NAME];
42 int pid;
43 char host[ROAR_BUFFER_NAME];
44 int execed;
45 int streams[ROAR_CLIENTS_MAX_STREAMS_PER_CLIENT];
46} * g_clients[ROAR_CLIENTS_MAX];
47*/
48
[4467]49// access level:
50enum roard_client_acclev {
[5146]51 ACCLEV_ERROR    = -1, // used as erorr return value.
52 ACCLEV_NONE     =  0, // only very basic commands like NOOP and IDENTIFY
53 ACCLEV_IDENTED,       // same as NONE but INDENTIFY worked.
54 ACCLEV_CONCTL,        // only allowed to do basic connection things.
55 ACCLEV_GUEST,         // guest connection (read only)
56 ACCLEV_USER,          // normal user connect (read write)
57 ACCLEV_PWRUSER,       // power user, may access other user's clients
58 ACCLEV_ALL            // full (admin) access (read write ctl)
[4467]59};
60
[4343]61struct roar_client_nsubscribe {
62 struct roar_subscriber * sub;
63};
64
[5192]65extern struct roar_client_server {
[4326]66 struct roar_client _client;
[4343]67 size_t blockc;
68 struct roar_subscriber ** waits;
[4467]69 enum roard_client_acclev acclev;
[4684]70 // may be used by protocols working directly on big data blocks to buffer a bit:
71 struct roar_buffer * inbuf, * outbuf;
[5448]72 void * protoinst;
[4326]73} * g_clients[ROAR_CLIENTS_MAX];
[0]74
[4683]75struct roard_listen;
76
[4678]77struct roard_proto {
78 int proto;
[5275]79 int subsystems;
80 const char * description;
[5312]81 struct roar_dl_lhandle * lhandle;
[4683]82 int (*new_client)(int client, struct roar_vio_calls * vio, struct roard_listen * lsock);
[5448]83 int (*delete_client)(int client);
[4678]84 int (*check_client)(int client, struct roar_vio_calls * vio);
[4686]85 int (*flush_client)(int client, struct roar_vio_calls * vio);
86 int (*flushed_client)(int client, struct roar_vio_calls * vio);
[4678]87};
[0]88
[5567]89enum roard_proto_type {
90 ROARD_PROTO_TYPE_BUILDIN = 0,
91 ROARD_PROTO_TYPE_ROARDPROTO = 1,
92 ROARD_PROTO_TYPE_COMMON = 2
93};
94
95struct roard_proto_handle {
96 int proto;
97 struct roar_dl_lhandle * lhandle;
98 enum roard_proto_type type;
[5576]99 const struct roar_keyval * para;
100 ssize_t paralen;
[5567]101 union {
102  int buildin; // dummy
103  struct roard_proto roardproto;
104  // add common here when ready.
[5576]105  const struct roar_dl_proto * common;
[5567]106 } impl;
107};
108
[4683]109#define MAX_PROTOS 8
110
[0]111// basic functions
[3737]112int clients_init       (void);
113int clients_free       (void);
114int clients_new        (void);
115int clients_new_from_fh(int fh, int proto, int byteorder, int update_nnode);
[5571]116int clients_new_from_fh2(int fh, int proto, int byteorder,
117                         int update_nnode,
118                         struct roard_listen * lsock, struct sockaddr * sockaddr, socklen_t addrlen);
[3737]119int clients_delete     (int id);
[3927]120int clients_close      (int id, int nocheck_exec);
[3737]121int clients_set_fh     (int id, int    fh);
122int clients_set_pid    (int id, int    pid);
123int clients_set_uid    (int id, int    uid);
124int clients_set_gid    (int id, int    gid);
125int clients_set_name   (int id, char * name);
126int clients_set_proto  (int id, int    proto);
127int clients_get        (int id, struct roar_client ** client);
[4468]128int clients_get_server (int id, struct roar_client_server ** client);
[3737]129int clients_get_fh     (int id);
[0]130
[4343]131int clients_block      (int id, int unblock);
132
[0]133// network functions
134int clients_check_all  (void);
135int clients_check      (int id);
[4686]136int clients_flush      (int id);
[5586]137int clients_send_mon   (struct roar_audio_info * sa);
138int clients_send_filter(struct roar_audio_info * sa);
[0]139
[5301]140int clients_add_output (int id, struct roar_buffer ** buf);
[4686]141
[4679]142// proto support
[5567]143const struct roard_proto_handle * clients_get_protohandle(const int proto);
[5576]144int clients_register_proto_common(const struct roar_dl_proto * proto, struct roar_dl_lhandle * lhandle);
[5312]145int clients_register_proto  (struct roard_proto * proto, struct roar_dl_lhandle * lhandle);
[5275]146int clients_unregister_proto(int proto);
147void print_protolist        (enum output_format format);
[4679]148
[0]149// stream functions
150int client_stream_exec   (int client, int stream);
[78]151int client_stream_set_fh (int client, int stream, int fh);
[0]152int client_stream_add    (int client, int stream);
153int client_stream_delete (int client, int stream);
[767]154int client_stream_move   (int client, int stream);
[0]155
[4343]156// notify thingys
157int  clients_wait    (int client, struct roar_event * events, size_t num);
158void clients_ncb_wait(struct roar_notify_core * core, struct roar_event * event, void * userdata);
159
[4480]160// acclev:
161enum roard_client_acclev clients_str2acclev(const char * acclev);
162const char * clients_acclev2str(const enum roard_client_acclev acclev);
163
[0]164#endif
165
166//ll
Note: See TracBrowser for help on using the repository browser.