1/* MiniDLNA project
2 *
3 * http://sourceforge.net/projects/minidlna/
4 *
5 * MiniDLNA media server
6 * Copyright (C) 2008-2009  Justin Maggard
7 *
8 * This file is part of MiniDLNA.
9 *
10 * MiniDLNA is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2 as
12 * published by the Free Software Foundation.
13 *
14 * MiniDLNA 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 MiniDLNA. If not, see <http://www.gnu.org/licenses/>.
21 *
22 * Portions of the code from the MiniUPnP project:
23 *
24 * Copyright (c) 2006-2007, Thomas Bernard
25 * All rights reserved.
26 *
27 * Redistribution and use in source and binary forms, with or without
28 * modification, are permitted provided that the following conditions are met:
29 *     * Redistributions of source code must retain the above copyright
30 *       notice, this list of conditions and the following disclaimer.
31 *     * Redistributions in binary form must reproduce the above copyright
32 *       notice, this list of conditions and the following disclaimer in the
33 *       documentation and/or other materials provided with the distribution.
34 *     * The name of the author may not be used to endorse or promote products
35 *       derived from this software without specific prior written permission.
36 *
37 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
38 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
39 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
40 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
41 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
42 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
43 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
44 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
45 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
47 * POSSIBILITY OF SUCH DAMAGE.
48 */
49#ifndef __UPNPGLOBALVARS_H__
50#define __UPNPGLOBALVARS_H__
51
52#include <time.h>
53
54#include "minidlnatypes.h"
55#include "config.h"
56
57#include <sqlite3.h>
58
59#define MINIDLNA_VERSION "1.0.25"
60
61#ifdef NETGEAR
62# define SERVER_NAME "ReadyDLNA"
63#else
64# define SERVER_NAME "MiniDLNA"
65#endif
66
67#define CLIENT_CACHE_SLOTS 20
68#define USE_FORK 1
69#define DB_VERSION 8
70
71#ifdef ENABLE_NLS
72#define _(string) gettext(string)
73#else
74#define _(string) (string)
75#endif
76
77#ifndef PNPX
78#define PNPX 0
79#endif
80
81#if 1
82#define RESOURCE_PROTOCOL_INFO_VALUES \
83	"http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN;DLNA.ORG_OP=01," \
84	"http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM;DLNA.ORG_OP=01," \
85	"http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED;DLNA.ORG_OP=01," \
86	"http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG;DLNA.ORG_OP=01," \
87	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC;DLNA.ORG_OP=01," \
88	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL;DLNA.ORG_OP=01," \
89	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_HD_NA_ISO;DLNA.ORG_OP=01," \
90	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_NA_ISO;DLNA.ORG_OP=01," \
91	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_NA;DLNA.ORG_OP=01," \
92	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVSPML_BASE;DLNA.ORG_OP=01," \
93	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_BASE;DLNA.ORG_OP=01," \
94	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_FULL;DLNA.ORG_OP=01," \
95	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_FULL;DLNA.ORG_OP=01," \
96	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_PRO;DLNA.ORG_OP=01," \
97	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_PRO;DLNA.ORG_OP=01," \
98	"http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01," \
99	"http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMABASE;DLNA.ORG_OP=01," \
100	"http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAFULL;DLNA.ORG_OP=01," \
101	"http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAPRO;DLNA.ORG_OP=01," \
102	"http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO_320;DLNA.ORG_OP=01," \
103	"http-get:*:audio/3gpp:DLNA.ORG_PN=AAC_ISO_320;DLNA.ORG_OP=01," \
104	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_NA_T;DLNA.ORG_OP=01," \
105	"http-get:*:audio/L16;rate=44100;channels=2:DLNA.ORG_PN=LPCM;DLNA.ORG_OP=01," \
106	"http-get:*:image/jpeg:*," \
107	"http-get:*:video/avi:*," \
108	"http-get:*:video/divx:*," \
109	"http-get:*:video/x-matroska:*," \
110	"http-get:*:video/mpeg:*," \
111	"http-get:*:video/mp4:*," \
112	"http-get:*:video/x-ms-wmv:*," \
113	"http-get:*:video/x-msvideo:*," \
114	"http-get:*:video/x-flv:*," \
115	"http-get:*:video/x-tivo-mpeg:*," \
116	"http-get:*:video/quicktime:*," \
117	"http-get:*:audio/mp4:*," \
118	"http-get:*:audio/x-wav:*," \
119	"http-get:*:audio/x-flac:*," \
120	"http-get:*:application/ogg:*"
121#else
122#define RESOURCE_PROTOCOL_INFO_VALUES \
123	"http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN," \
124	"http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM," \
125	"http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED," \
126	"http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG," \
127	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_HD_50_AC3_ISO," \
128	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_HD_60_AC3_ISO," \
129	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_HP_HD_AC3_ISO," \
130	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_HD_AAC_MULT5_ISO," \
131	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_HD_AC3_ISO," \
132	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_HD_MPEG1_L3_ISO," \
133	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_SD_AAC_MULT5_ISO," \
134	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_SD_AC3_ISO," \
135	"http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_SD_MPEG1_L3_ISO," \
136	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC," \
137	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL," \
138	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_HD_NA_ISO," \
139	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_NA_ISO," \
140	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_EU_ISO," \
141	"http-get:*:video/mpeg:DLNA.ORG_PN=MPEG1," \
142	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_AAC_MULT5," \
143	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_AC3," \
144	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF15_AAC_520," \
145	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF30_AAC_940," \
146	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L31_HD_AAC," \
147	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L32_HD_AAC," \
148	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L3L_SD_AAC," \
149	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_HP_HD_AAC," \
150	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_HD_1080i_AAC," \
151	"http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_HD_720p_AAC," \
152	"http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_ASP_AAC," \
153	"http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_SP_VGA_AAC," \
154	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_HD_50_AC3," \
155	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_HD_50_AC3_T," \
156	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_HD_60_AC3," \
157	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_HD_60_AC3_T," \
158	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_HP_HD_AC3_T," \
159	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_AAC_MULT5," \
160	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_AAC_MULT5_T," \
161	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_AC3," \
162	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_AC3_T," \
163	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_MPEG1_L3," \
164	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_MPEG1_L3_T," \
165	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_AAC_MULT5," \
166	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_AAC_MULT5_T," \
167	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_AC3," \
168	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_AC3_T," \
169	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_MPEG1_L3," \
170	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_MPEG1_L3_T," \
171	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_NA," \
172	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_NA_T," \
173	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_EU," \
174	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_EU_T," \
175	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA," \
176	"http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA_T," \
177	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVSPLL_BASE," \
178	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVSPML_BASE," \
179	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVSPML_MP3," \
180	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_BASE," \
181	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_FULL," \
182	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_PRO," \
183	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_FULL," \
184	"http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_PRO," \
185	"http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_P2_3GPP_SP_L0B_AAC," \
186	"http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_P2_3GPP_SP_L0B_AMR," \
187	"http-get:*:audio/mpeg:DLNA.ORG_PN=MP3," \
188	"http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMABASE," \
189	"http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAFULL," \
190	"http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAPRO," \
191	"http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMALSL," \
192	"http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMALSL_MULT5," \
193	"http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO_320," \
194	"http-get:*:audio/3gpp:DLNA.ORG_PN=AAC_ISO_320," \
195	"http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO," \
196	"http-get:*:audio/mp4:DLNA.ORG_PN=AAC_MULT5_ISO," \
197	"http-get:*:audio/L16;rate=44100;channels=2:DLNA.ORG_PN=LPCM," \
198	"http-get:*:image/jpeg:*," \
199	"http-get:*:video/avi:*," \
200	"http-get:*:video/divx:*," \
201	"http-get:*:video/x-matroska:*," \
202	"http-get:*:video/mpeg:*," \
203	"http-get:*:video/mp4:*," \
204	"http-get:*:video/x-ms-wmv:*," \
205	"http-get:*:video/x-msvideo:*," \
206	"http-get:*:video/x-flv:*," \
207	"http-get:*:video/x-tivo-mpeg:*," \
208	"http-get:*:video/quicktime:*," \
209	"http-get:*:audio/mp4:*," \
210	"http-get:*:audio/x-wav:*," \
211	"http-get:*:audio/x-flac:*," \
212	"http-get:*:application/ogg:*"
213#endif
214
215#define DLNA_FLAG_DLNA_V1_5      0x00100000
216#define DLNA_FLAG_HTTP_STALLING  0x00200000
217#define DLNA_FLAG_TM_B           0x00400000
218#define DLNA_FLAG_TM_I           0x00800000
219#define DLNA_FLAG_TM_S           0x01000000
220#define DLNA_FLAG_LOP_BYTES      0x20000000
221#define DLNA_FLAG_LOP_NPT        0x40000000
222
223/* startup time */
224extern time_t startup_time;
225
226extern struct runtime_vars_s runtime_vars;
227/* runtime boolean flags */
228extern uint32_t runtime_flags;
229#define INOTIFY_MASK          0x0001
230#define TIVO_MASK             0x0002
231#define DLNA_STRICT_MASK      0x0004
232#define NO_PLAYLIST_MASK      0x0008
233
234#define SETFLAG(mask)	runtime_flags |= mask
235#define GETFLAG(mask)	runtime_flags & mask
236#define CLEARFLAG(mask)	runtime_flags &= ~mask
237
238extern const char * pidfilename;
239
240extern char uuidvalue[];
241
242#define MODELNAME_MAX_LEN (64)
243extern char modelname[];
244
245#define MODELNUMBER_MAX_LEN (16)
246extern char modelnumber[];
247
248#define SERIALNUMBER_MAX_LEN (16)
249extern char serialnumber[];
250
251#define PRESENTATIONURL_MAX_LEN (64)
252extern char presentationurl[];
253
254#if PNPX
255extern char pnpx_hwid[];
256#endif
257
258/* lan addresses */
259/* MAX_LAN_ADDR : maximum number of interfaces
260 * to listen to SSDP traffic */
261#define MAX_LAN_ADDR (4)
262extern int n_lan_addr;
263extern struct lan_addr_s lan_addr[];
264
265extern const char * minissdpdsocketpath;
266
267/* UPnP-A/V [DLNA] */
268extern sqlite3 *db;
269#define FRIENDLYNAME_MAX_LEN (64)
270extern char friendly_name[];
271extern char db_path[];
272extern char log_path[];
273extern struct media_dir_s * media_dirs;
274extern struct album_art_name_s * album_art_names;
275extern struct client_cache_s clients[CLIENT_CACHE_SLOTS];
276extern short int scanning;
277extern volatile short int quitting;
278extern volatile uint32_t updateID;
279
280#endif
281