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