source: roaraudio/include/libroar/vio_dstr.h @ 3312:f425c2ff782d

Last change on this file since 3312:f425c2ff782d was 3312:f425c2ff782d, checked in by phi, 14 years ago

more general internal API, support to register types

File size: 8.5 KB
Line 
1//vio_dstr.h:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2009-2010
5 *
6 *  This file is part of libroar 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 *  libroar 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, 675 Mass Ave, Cambridge, MA 02139, USA.
22 *
23 *  NOTE for everyone want's to change something and send patches:
24 *  read README and HACKING! There a addition information on
25 *  the license of this document you need to read before you send
26 *  any patches.
27 *
28 *  NOTE for uses of non-GPL (LGPL,...) software using libesd, libartsc
29 *  or libpulse*:
30 *  The libs libroaresd, libroararts and libroarpulse link this lib
31 *  and are therefore GPL. Because of this it may be illigal to use
32 *  them with any software that uses libesd, libartsc or libpulse*.
33 */
34
35#ifndef _LIBROARVIO_DSTR_H_
36#define _LIBROARVIO_DSTR_H_
37
38#include "libroar.h"
39
40#define ROAR_VIO_DEF_TYPE_EOL            -1
41#define ROAR_VIO_DEF_TYPE_NONE            0
42#define ROAR_VIO_DEF_TYPE_FILE            1
43#define ROAR_VIO_DEF_TYPE_SOCKET          2
44#define ROAR_VIO_DEF_TYPE_FH              3
45#define ROAR_VIO_DEF_TYPE_SOCKETFH        4
46
47#define ROAR_VIO_DSTR_OBJGT_INTERNAL      0x0000
48#define ROAR_VIO_DSTR_OBJGT_GEN           0x0100
49#define ROAR_VIO_DSTR_OBJGT_SOCKET        0x0200
50#define ROAR_VIO_DSTR_OBJGT_PROXY         0x0300
51#define ROAR_VIO_DSTR_OBJGT_COMP          0x0400 /* compression */
52#define ROAR_VIO_DSTR_OBJGT_CRYPT         0x0500
53#define ROAR_VIO_DSTR_OBJGT_PROTO         0x0600 /* protocolls like HTTP and Gopher */
54#define ROAR_VIO_DSTR_OBJGT_CONTENT       0x0700 /* things changeing the content of the data */
55#define ROAR_VIO_DSTR_OBJGT_MUX           0x0800 /* muxers and demuxers */
56#define ROAR_VIO_DSTR_OBJGT_SPECAL        0xff00
57
58#define ROAR_VIO_DSTR_OBJT_EOL           -1
59#define ROAR_VIO_DSTR_OBJT_NONE           0
60#define ROAR_VIO_DSTR_OBJT_INTERNAL       1
61
62#define ROAR_VIO_DSTR_OBJT_FILE           (0x01|ROAR_VIO_DSTR_OBJGT_GEN)
63#define ROAR_VIO_DSTR_OBJT_FH             (0x02|ROAR_VIO_DSTR_OBJGT_GEN)
64#define ROAR_VIO_DSTR_OBJT_FD             ROAR_VIO_DSTR_OBJT_FH
65#define ROAR_VIO_DSTR_OBJT_SOCKETFH       (0x03|ROAR_VIO_DSTR_OBJGT_GEN)
66/* some space to add memory FHs and the like */
67#define ROAR_VIO_DSTR_OBJT_PASS           (0x10|ROAR_VIO_DSTR_OBJGT_GEN)
68#define ROAR_VIO_DSTR_OBJT_RE             (0x11|ROAR_VIO_DSTR_OBJGT_GEN)
69#define ROAR_VIO_DSTR_OBJT_JUMBO          (0x12|ROAR_VIO_DSTR_OBJGT_GEN)
70#define ROAR_VIO_DSTR_OBJT_EXEC           (0x20|ROAR_VIO_DSTR_OBJGT_GEN)
71
72#define ROAR_VIO_DSTR_OBJT_SOCKET         (0x01|ROAR_VIO_DSTR_OBJGT_SOCKET)
73#define ROAR_VIO_DSTR_OBJT_UNIX           (0x02|ROAR_VIO_DSTR_OBJGT_SOCKET)
74#define ROAR_VIO_DSTR_OBJT_DECNET         (0x10|ROAR_VIO_DSTR_OBJGT_SOCKET)
75#define ROAR_VIO_DSTR_OBJT_TCP            (0x21|ROAR_VIO_DSTR_OBJGT_SOCKET)
76#define ROAR_VIO_DSTR_OBJT_UDP            (0x22|ROAR_VIO_DSTR_OBJGT_SOCKET)
77#define ROAR_VIO_DSTR_OBJT_TCP6           (0x31|ROAR_VIO_DSTR_OBJGT_SOCKET)
78#define ROAR_VIO_DSTR_OBJT_UDP6           (0x32|ROAR_VIO_DSTR_OBJGT_SOCKET)
79
80#define ROAR_VIO_DSTR_OBJT_SOCKS          (0x10|ROAR_VIO_DSTR_OBJGT_PROXY)
81#define ROAR_VIO_DSTR_OBJT_SOCKS4         (0x14|ROAR_VIO_DSTR_OBJGT_PROXY)
82#define ROAR_VIO_DSTR_OBJT_SOCKS4A        (0x1a|ROAR_VIO_DSTR_OBJGT_PROXY)
83#define ROAR_VIO_DSTR_OBJT_SOCKS4D        (0x1d|ROAR_VIO_DSTR_OBJGT_PROXY)
84#define ROAR_VIO_DSTR_OBJT_SOCKS5         (0x15|ROAR_VIO_DSTR_OBJGT_PROXY)
85#define ROAR_VIO_DSTR_OBJT_SSH            (0x21|ROAR_VIO_DSTR_OBJGT_PROXY)
86//#define ROAR_VIO_DSTR_OBJT_HTTP           (0x31|ROAR_VIO_DSTR_OBJGT_PROXY)
87
88//#define ROAR_VIO_DSTR_OBJT_HTTP           (0x10|ROAR_VIO_DSTR_OBJGT_PROTO)
89#define ROAR_VIO_DSTR_OBJT_HTTP09         (0x11|ROAR_VIO_DSTR_OBJGT_PROTO)
90#define ROAR_VIO_DSTR_OBJT_HTTP10         (0x12|ROAR_VIO_DSTR_OBJGT_PROTO)
91#define ROAR_VIO_DSTR_OBJT_HTTP11         (0x13|ROAR_VIO_DSTR_OBJGT_PROTO)
92#define ROAR_VIO_DSTR_OBJT_HTTP           ROAR_VIO_DSTR_OBJT_HTTP11
93#define ROAR_VIO_DSTR_OBJT_GOPHER         (0x21|ROAR_VIO_DSTR_OBJGT_PROTO)
94#define ROAR_VIO_DSTR_OBJT_GOPHER_PLUS    (0x22|ROAR_VIO_DSTR_OBJGT_PROTO)
95#define ROAR_VIO_DSTR_OBJT_ICY            (0x31|ROAR_VIO_DSTR_OBJGT_PROTO)
96#define ROAR_VIO_DSTR_OBJT_RTP2           (0x42|ROAR_VIO_DSTR_OBJGT_PROTO)
97#define ROAR_VIO_DSTR_OBJT_RTP            ROAR_VIO_DSTR_OBJT_RTP2
98
99/*
100#define ROAR_VIO_DSTR_OBJGT_CRYPT         0x0500
101*/
102
103#define ROAR_VIO_DSTR_OBJT_GZIP           (0x10|ROAR_VIO_DSTR_OBJGT_COMP)
104#define ROAR_VIO_DSTR_OBJT_BZIP2          (0x22|ROAR_VIO_DSTR_OBJGT_COMP)
105
106#define ROAR_VIO_DSTR_OBJT_PGP            (0x10|ROAR_VIO_DSTR_OBJGT_CRYPT)
107#define ROAR_VIO_DSTR_OBJT_PGP_ENC        (0x11|ROAR_VIO_DSTR_OBJGT_CRYPT)
108#define ROAR_VIO_DSTR_OBJT_PGP_STORE      (0x12|ROAR_VIO_DSTR_OBJGT_CRYPT)
109#define ROAR_VIO_DSTR_OBJT_SSL1           (0x21|ROAR_VIO_DSTR_OBJGT_CRYPT)
110#define ROAR_VIO_DSTR_OBJT_SSL2           (0x22|ROAR_VIO_DSTR_OBJGT_CRYPT)
111#define ROAR_VIO_DSTR_OBJT_SSL3           (0x23|ROAR_VIO_DSTR_OBJGT_CRYPT)
112#define ROAR_VIO_DSTR_OBJT_TLS            (0x2a|ROAR_VIO_DSTR_OBJGT_CRYPT)
113#define ROAR_VIO_DSTR_OBJT_SSLTLS         ROAR_VIO_DSTR_OBJT_TLS
114
115#define ROAR_VIO_DSTR_OBJT_TRANSCODE      (0x10|ROAR_VIO_DSTR_OBJGT_CONTENT)
116
117#define ROAR_VIO_DSTR_OBJT_RAUM           (0x11|ROAR_VIO_DSTR_OBJGT_MUX)
118#define ROAR_VIO_DSTR_OBJT_OGG            (0x12|ROAR_VIO_DSTR_OBJGT_MUX)
119#define ROAR_VIO_DSTR_OBJT_TAR            (0x13|ROAR_VIO_DSTR_OBJGT_MUX)
120
121#define ROAR_VIO_DSTR_OBJT_MAGIC          (0x01|ROAR_VIO_DSTR_OBJGT_SPECAL)
122#define ROAR_VIO_DSTR_OBJT_TANTALOS       (0x02|ROAR_VIO_DSTR_OBJGT_SPECAL)
123
124
125struct roar_vio_defaults {
126 int type;
127
128 mode_t o_mode;
129 int    o_flags;
130
131 union {
132  char *   file;
133  int      fh;
134  struct {
135          int               domain;
136          int               type;
137          char            * host;
138          union {
139                 struct sockaddr     sa;
140#ifdef ROAR_HAVE_IPV4
141                 struct sockaddr_in  in;
142#endif
143#ifdef ROAR_HAVE_UNIX
144                 struct sockaddr_un  un;
145#endif
146#ifdef ROAR_HAVE_LIBDNET
147                 struct sockaddr_dn  dn;
148#endif
149#ifdef ROAR_HAVE_IPV6
150                 struct sockaddr_in6 in6;
151#endif
152#ifdef ROAR_HAVE_IPX
153                 struct sockaddr_ipx ipx;
154#endif
155                } sa;
156          socklen_t         len;
157         } socket;
158 } d;
159};
160
161#define ROAR_VIO_DSTR_MAX_OBJ_PER_CHAIN 16
162
163struct roar_vio_dstr_chain {
164 int    type;
165 char * opts;
166 char * dst;
167 int    need_vio;
168 struct roar_vio_defaults * def;
169 struct roar_vio_calls    * vio;
170 struct roar_vio_defaults   store_def;
171};
172
173int     roar_vio_dstr_get_type(char * str);
174char *  roar_vio_dstr_get_name(int type);
175
176int     roar_vio_dstr_register_type(int   type,
177                                    char *name,
178                                    int (*setdef) (struct roar_vio_dstr_chain * cur,
179                                                   struct roar_vio_dstr_chain * next),
180                                    int (*openvio)(struct roar_vio_calls      * calls,
181                                                   struct roar_vio_calls      * dst,
182                                                   struct roar_vio_dstr_chain * cur));
183
184int     roar_vio_dstr_init_defaults (struct roar_vio_defaults * def, int type, int o_flags, mode_t o_mode);
185int     roar_vio_dstr_init_defaults_c (struct roar_vio_defaults * def, int type, struct roar_vio_defaults * odef, int o_flags);
186
187int     roar_vio_open_default (struct roar_vio_calls * calls, struct roar_vio_defaults * def, char * opts);
188
189int     roar_vio_open_dstr    (struct roar_vio_calls * calls, char * dstr, struct roar_vio_defaults * def, int dnum);
190int     roar_vio_open_dstr_vio(struct roar_vio_calls * calls, char * dstr, struct roar_vio_defaults * def, int dnum, struct roar_vio_calls * vio);
191
192int     roar_vio_dstr_parse_opts(struct roar_vio_dstr_chain * chain);
193int     roar_vio_dstr_set_defaults(struct roar_vio_dstr_chain * chain, int len, struct roar_vio_defaults * def, int dnum);
194int     roar_vio_dstr_build_chain(struct roar_vio_dstr_chain * chain, struct roar_vio_calls * calls, struct roar_vio_calls * vio);
195
196#endif
197
198//ll
Note: See TracBrowser for help on using the repository browser.