source: roaraudio/roard/include/client.h @ 4686:ebb913191f38

Last change on this file since 4686:ebb913191f38 was 4686:ebb913191f38, checked in by phi, 13 years ago

added some common code for client outbuf flushing

File size: 4.3 KB
Line 
1//client.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2010
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
21 *  the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22 *  Boston, MA 02110-1301, USA.
23 *
24 */
25
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
49// access level:
50enum roard_client_acclev {
51 ACCLEV_NONE     = 0, // only very basic commands like NOOP and IDENTIFY
52 ACCLEV_IDENTED,      // same as NONE but INDENTIFY worked.
53 ACCLEV_CONCTL,       // only allowed to do basic connection things.
54 ACCLEV_GUEST,        // guest connection (read only)
55 ACCLEV_USER,         // normal user connect (read write)
56 ACCLEV_PWRUSER,      // power user, may access other user's clients
57 ACCLEV_ALL           // full (admin) access (read write ctl)
58};
59
60struct roar_client_nsubscribe {
61 struct roar_subscriber * sub;
62};
63
64struct roar_client_server {
65 struct roar_client _client;
66 size_t blockc;
67 struct roar_subscriber ** waits;
68 enum roard_client_acclev acclev;
69 // may be used by protocols working directly on big data blocks to buffer a bit:
70 struct roar_buffer * inbuf, * outbuf;
71} * g_clients[ROAR_CLIENTS_MAX];
72
73struct roard_listen;
74
75struct roard_proto {
76 int proto;
77 int (*new_client)(int client, struct roar_vio_calls * vio, struct roard_listen * lsock);
78 int (*check_client)(int client, struct roar_vio_calls * vio);
79 int (*flush_client)(int client, struct roar_vio_calls * vio);
80 int (*flushed_client)(int client, struct roar_vio_calls * vio);
81};
82
83#define MAX_PROTOS 8
84struct roard_proto g_proto[MAX_PROTOS];
85
86// basic functions
87int clients_init       (void);
88int clients_free       (void);
89int clients_new        (void);
90int clients_new_from_fh(int fh, int proto, int byteorder, int update_nnode);
91int clients_delete     (int id);
92int clients_close      (int id, int nocheck_exec);
93int clients_set_fh     (int id, int    fh);
94int clients_set_pid    (int id, int    pid);
95int clients_set_uid    (int id, int    uid);
96int clients_set_gid    (int id, int    gid);
97int clients_set_name   (int id, char * name);
98int clients_set_proto  (int id, int    proto);
99int clients_get        (int id, struct roar_client ** client);
100int clients_get_server (int id, struct roar_client_server ** client);
101int clients_get_fh     (int id);
102
103int clients_block      (int id, int unblock);
104
105// network functions
106int clients_check_all  (void);
107int clients_check      (int id);
108int clients_flush      (int id);
109int clients_send_mon   (struct roar_audio_info * sa, uint32_t pos);
110int clients_send_filter(struct roar_audio_info * sa, uint32_t pos);
111
112int clients_add_output (int id, struct roar_buffer * buf);
113
114// proto support
115int clients_register_proto(struct roard_proto * proto);
116
117// stream functions
118int client_stream_exec   (int client, int stream);
119int client_stream_set_fh (int client, int stream, int fh);
120int client_stream_add    (int client, int stream);
121int client_stream_delete (int client, int stream);
122int client_stream_move   (int client, int stream);
123
124// notify thingys
125int  clients_wait    (int client, struct roar_event * events, size_t num);
126void clients_ncb_wait(struct roar_notify_core * core, struct roar_event * event, void * userdata);
127
128// acclev:
129enum roard_client_acclev clients_str2acclev(const char * acclev);
130const char * clients_acclev2str(const enum roard_client_acclev acclev);
131
132#endif
133
134//ll
Note: See TracBrowser for help on using the repository browser.