source: roaraudio/roard/include/client.h @ 5192:4237437ca526

Last change on this file since 5192:4237437ca526 was 5192:4237437ca526, checked in by phi, 13 years ago

declare some stuff 'extern', this saves like 5.3KB of diskspace in plugin files and make them more resistant against changes in roard

File size: 4.4 KB
Line 
1//client.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008-2011
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_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)
59};
60
61struct roar_client_nsubscribe {
62 struct roar_subscriber * sub;
63};
64
65extern struct roar_client_server {
66 struct roar_client _client;
67 size_t blockc;
68 struct roar_subscriber ** waits;
69 enum roard_client_acclev acclev;
70 // may be used by protocols working directly on big data blocks to buffer a bit:
71 struct roar_buffer * inbuf, * outbuf;
72} * g_clients[ROAR_CLIENTS_MAX];
73
74struct roard_listen;
75
76struct roard_proto {
77 int proto;
78 int (*new_client)(int client, struct roar_vio_calls * vio, struct roard_listen * lsock);
79 int (*check_client)(int client, struct roar_vio_calls * vio);
80 int (*flush_client)(int client, struct roar_vio_calls * vio);
81 int (*flushed_client)(int client, struct roar_vio_calls * vio);
82};
83
84#define MAX_PROTOS 8
85extern struct roard_proto g_proto[MAX_PROTOS];
86
87// basic functions
88int clients_init       (void);
89int clients_free       (void);
90int clients_new        (void);
91int clients_new_from_fh(int fh, int proto, int byteorder, int update_nnode);
92int clients_delete     (int id);
93int clients_close      (int id, int nocheck_exec);
94int clients_set_fh     (int id, int    fh);
95int clients_set_pid    (int id, int    pid);
96int clients_set_uid    (int id, int    uid);
97int clients_set_gid    (int id, int    gid);
98int clients_set_name   (int id, char * name);
99int clients_set_proto  (int id, int    proto);
100int clients_get        (int id, struct roar_client ** client);
101int clients_get_server (int id, struct roar_client_server ** client);
102int clients_get_fh     (int id);
103
104int clients_block      (int id, int unblock);
105
106// network functions
107int clients_check_all  (void);
108int clients_check      (int id);
109int clients_flush      (int id);
110int clients_send_mon   (struct roar_audio_info * sa, uint32_t pos);
111int clients_send_filter(struct roar_audio_info * sa, uint32_t pos);
112
113int clients_add_output (int id, struct roar_buffer * buf);
114
115// proto support
116int clients_register_proto(struct roard_proto * proto);
117
118// stream functions
119int client_stream_exec   (int client, int stream);
120int client_stream_set_fh (int client, int stream, int fh);
121int client_stream_add    (int client, int stream);
122int client_stream_delete (int client, int stream);
123int client_stream_move   (int client, int stream);
124
125// notify thingys
126int  clients_wait    (int client, struct roar_event * events, size_t num);
127void clients_ncb_wait(struct roar_notify_core * core, struct roar_event * event, void * userdata);
128
129// acclev:
130enum roard_client_acclev clients_str2acclev(const char * acclev);
131const char * clients_acclev2str(const enum roard_client_acclev acclev);
132
133#endif
134
135//ll
Note: See TracBrowser for help on using the repository browser.