1/* @(#) option definitions and associated structures for udpxy
2 *
3 * Copyright 2008-2011 Pavel V. Cherenkov (pcherenkov@gmail.com)
4 *
5 *  This file is part of udpxy.
6 *
7 *  udpxy is free software: you can redistribute it and/or modify
8 *  it under the terms of the GNU General Public License as published by
9 *  the Free Software Foundation, either version 3 of the License, or
10 *  (at your option) any later version.
11 *
12 *  udpxy is distributed in the hope that it will be useful,
13 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *  GNU General Public License for more details.
16 *
17 *  You should have received a copy of the GNU General Public License
18 *  along with udpxy.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef UOPT_H_0215082300
22#define UOPT_H_0215082300
23
24#include <sys/types.h>
25#include <stdio.h>
26#include <time.h>
27#include <unistd.h>
28
29#include "udpxy.h"
30
31static const int MIN_CLIENT_COUNT       = 1;
32static const int MAX_CLIENT_COUNT       = 5000;
33static const int DEFAULT_CLIENT_COUNT   = 3;
34
35static const ssize_t MIN_MCACHE_LEN    = 4 * 1024;
36static const ssize_t MAX_MCACHE_LEN    = 2048 * 1024;
37static const ssize_t DEFAULT_CACHE_LEN = 2 * 1024;
38static const u_short DEFAULT_MCAST_REFRESH = 0;
39
40static const ssize_t MIN_SOCKBUF_LEN = (1024 * 64);
41
42
43/* udpxy options
44 */
45struct udpxy_opt {
46    flag_t  is_verbose;     /* verbose output on/off                */
47    flag_t  cl_tpstat;      /* client reports throughput stats      */
48    int     nice_incr;      /* value to increment nice by           */
49    ssize_t rbuf_len;       /* size of read buffer                  */
50    int     rbuf_msgs;      /* max msgs in read buffer (-1 = all)   */
51    int     max_clients;    /* max clients to accept                */
52    u_short mcast_refresh;  /* refresh rate (sec) for multicast
53                               subscription */
54
55    time_t  rcv_tmout;      /* receive (mcast) socket timeout           */
56    time_t  dhold_tmout;    /* timeout to hold buffered data (milisec)  */
57
58    time_t  sr_tmout,       /* server READ/RCV  timeout (sec)           */
59            sw_tmout;       /* server WRITE/SND timeout (sec)           */
60    long    ssel_tmout;     /* server select/poll timeout (sec)         */
61    int     lq_backlog;     /* accept queue length for listening socket */
62    int     rcv_lwmark;     /* receive low watermark on listening socket */
63
64    flag_t  nosync_sbuf,    /* do not alter source-socket's buffer size */
65            nosync_dbuf;    /* do not alter dest-socket's buffer size   */
66
67    char*   srcfile;         /* file to read (video stream) from        */
68    char*   dstfile;         /* file to save (video stream) to          */
69
70    char    h200_ftr[2048];  /* text to add to HTTP 200 response        */
71    flag_t  tcp_nodelay;     /* apply TCP_NODELAY option to
72                                newly-accepted sockets                  */
73    char    cnt_type[80];   /* custom HTTP 200 content type             */
74};
75
76
77#ifdef UDPXREC_MOD
78/* udpxrec options
79 */
80struct udpxrec_opt {
81    flag_t  is_verbose;     /* verbose output on/off                */
82    int     nice_incr;      /* value to increment nice by           */
83
84    time_t  bg_time;        /* time to start recording              */
85    time_t  end_time;       /* time to end recording                */
86    int64_t max_fsize;      /* max size of dest file (in bytes)     */
87    ssize_t bufsize;        /* size of receiving socket buffer      */
88    int     rbuf_msgs;      /* max number of messages to save
89                               in buffer (-1 = as many as would fit)    */
90
91                            /* address of the multicast interface       */
92    char    mcast_addr[ IPADDR_STR_SIZE ];
93    char    rec_channel[ IPADDR_STR_SIZE ];
94    int     rec_port;
95    int     waitupd_sec;    /* update every N seconds while waiting
96                               to start recording */
97
98    time_t  rcv_tmout;      /* receive (mcast) socket timeout           */
99    time_t  sr_tmout,       /* server READ/RCV  timeout (sec)           */
100            sw_tmout;       /* server WRITE/SND timeout (sec)           */
101
102    flag_t  nosync_sbuf,    /* do not alter source-socket's buffer size */
103            nosync_dbuf;    /* do not alter dest-socket's buffer size   */
104
105
106    char*   pidfile;        /* file to store app's PID                  */
107    char*   dstfile;        /* file to save (video stream) to           */
108};
109#endif /* UDPXREC_MOD */
110
111#ifdef __cplusplus
112    extern "C" {
113#endif
114
115/* populate udpxy options with default/initial values
116 */
117int
118init_uopt( struct udpxy_opt* uo );
119
120
121/* release udpxy resources allocated for udpxy options
122 */
123void
124free_uopt( struct udpxy_opt* uo );
125
126
127#ifdef UDPXREC_MOD
128/* populate udpxrec options with default/initial values
129 */
130int
131init_recopt( struct udpxrec_opt* ro );
132
133
134/* release resources allocated for udpxy options
135 */
136void
137free_recopt( struct udpxrec_opt* ro );
138
139/* print udpxrec options to stream
140 */
141void
142fprint_recopt( FILE* stream, struct udpxrec_opt* ro );
143
144#endif /* UDPXREC_MOD */
145
146/* set verbose output on
147 */
148void
149set_verbose( flag_t* verbose );
150
151
152#ifdef __cplusplus
153} /* extern "C" */
154#endif
155
156#endif /* UOPT_H_0215082300 */
157
158/* __EOF__ */
159
160