00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00031 #ifndef __COMMON_H__
00032 #define __COMMON_H__
00033
00034 #include <errno.h>
00035
00036 #include "memory.h"
00037 #include "logger.h"
00038 #include "zmmf/zmmf.h"
00039 #include "exceptions.h"
00040
00041 #define CONFIG_XML_VERSION_0_11_0 1
00042 #define CONFIG_XML_VERSION 2
00043
00044
00046 #define UPNP_E_ACTION_FAILED 501
00047 #define UPNP_E_SUBSCRIPTION_FAILED 503
00049 #define UPNP_E_NO_SUCH_ID 701
00050 #define UPNP_E_NOT_EXIST 706
00051
00052
00053 #define UPNP_DEFAULT_CLASS_CONTAINER "object.container"
00054 #define UPNP_DEFAULT_CLASS_ITEM "object.item"
00055 #define UPNP_DEFAULT_CLASS_VIDEO_ITEM "object.item.videoItem"
00056 #define UPNP_DEFAULT_CLASS_IMAGE_ITEM "object.item.imageItem"
00057 #define UPNP_DEFAULT_CLASS_ACTIVE_ITEM "object.item.activeItem"
00058 #define UPNP_DEFAULT_CLASS_MUSIC_ALBUM "object.container.album.musicAlbum"
00059 #define UPNP_DEFAULT_CLASS_MUSIC_TRACK "object.item.audioItem.musicTrack"
00060 #define UPNP_DEFAULT_CLASS_MUSIC_GENRE "object.container.genre.musicGenre"
00061 #define UPNP_DEFAULT_CLASS_MUSIC_ARTIST "object.container.person.musicArtist"
00062 #define UPNP_DEFAULT_CLASS_PLAYLIST_CONTAINER "object.container.playlistContainer"
00063 #define UPNP_DEFAULT_CLASS_VIDEO_BROADCAST "object.item.videoItem.videoBroadcast"
00064
00065 #ifdef EXTEND_PROTOCOLINFO
00066 #define D_HTTP_TRANSFER_MODE_HEADER "transferMode.dlna.org: "
00067 #define D_HTTP_TRANSFER_MODE_STREAMING "Streaming"
00068 #define D_HTTP_TRANSFER_MODE_INTERACTIVE "Interactive"
00069
00070 #define D_PROFILE "DLNA.ORG_PN"
00071 #define D_CONVERSION_INDICATOR "DLNA.ORG_CI"
00072 #define D_OP "DLNA.ORG_OP"
00073 #define D_FLAGS "DLNA.ORG_FLAGS"
00074 #define D_NO_CONVERSION "0"
00075 #define D_CONVERSION "1"
00076 #define D_TR_FLAGS_AV "012000000000000000000000000000000"
00077 #define D_TR_FLAGS_IMAGE "008000000000000000000000000000000"
00078 #define D_MP3 "MP3"
00079 #define D_LPCM "LPCM"
00080 #define D_JPEG_SM "JPEG_SM"
00081 #define D_JPEG_MED "JPEG_MED"
00082 #define D_JPEG_LRG "JPEG_LRG"
00083 #define D_JPEG_TN "JPEG_TN"
00084 #define D_JPEG_SM_ICO "JPEG_SM_ICO"
00085 #define D_JPEG_LRG_ICO "JPEG_LRG_ICO"
00086 #endif
00087
00088 #define CDS_ID_BLACKHOLE -1
00089 #define CDS_ID_ROOT 0
00090 #define CDS_ID_FS_ROOT 1
00091 #define IS_FORBIDDEN_CDS_ID(id) (id <= CDS_ID_FS_ROOT)
00092
00093
00094 #define SET_LAST_MODIFIED "last_modified"
00095
00096 #define YES "yes"
00097 #define NO "no"
00098
00099 #define TRUE "1"
00100 #define FALSE "0"
00101
00102
00103 #define URL_OBJECT_ID "object_id"
00104 #define URL_REQUEST_TYPE "req_type"
00105 #define URL_RESOURCE_ID "res_id"
00106 #define URL_FILE_EXTENSION "ext"
00107 #define URL_PARAM_SEPARATOR '/'
00108 #define _URL_PARAM_SEPARATOR "/"
00109 #define URL_UI_PARAM_SEPARATOR '?'
00110 #define URL_ARG_SEPARATOR '&'
00111 #define _URL_ARG_SEPARATOR "&"
00112 #define SERVER_VIRTUAL_DIR "content"
00113 #define CONTENT_MEDIA_HANDLER "media"
00114 #define CONTENT_SERVE_HANDLER "serve"
00115 #define CONTENT_ONLINE_HANDLER "online"
00116 #define CONTENT_UI_HANDLER "interface"
00117 #define CONTENT_DVD_IMAGE_HANDLER "dvd"
00118
00119 #define REQ_TYPE_BROWSE "browse"
00120 #define REQ_TYPE_LOGIN "login"
00121
00122
00123 #define DIR_SEPARATOR '/'
00124 #define _DIR_SEPARATOR "/"
00125 #define VIRTUAL_CONTAINER_SEPARATOR '/'
00126 #define VIRTUAL_CONTAINER_ESCAPE '\\'
00127
00128 #define MIMETYPE_XML "text/xml"
00129 #define MIMETYPE_HTML "text/html"
00130 #define MIMETYPE_TEXT "text/plain"
00131 #define MIMETYPE_JSON "application/json" // RFC 4627
00132
00133 #define MIMETYPE_DEFAULT "application/octet-stream"
00134
00135
00136 #define MIMETYPE_REGEXP "^([a-z0-9_-]+/[a-z0-9_-]+)"
00137
00138
00139 #define PROTOCOL "http-get"
00140
00141
00142 #define DESC_DEVICE_NAMESPACE "urn:schemas-upnp-org:device-1-0"
00143 #define DESC_DEVICE_TYPE "urn:schemas-upnp-org:device:MediaServer:1"
00144 #define DESC_SPEC_VERSION_MAJOR "1"
00145 #define DESC_SPEC_VERSION_MINOR "0"
00146 #define DESC_FRIENDLY_NAME PACKAGE_NAME
00147 #define DESC_MANUFACTURER "(c) 2005-2008 Gena Batyan <bgeradz@mediatomb.cc>, Sergey Bostandzhyan <jin@mediatomb.cc>, Leonhard Wimmer <leo@mediatomb.cc>"
00148 #define DESC_MANUFACTURER_URL "http://mediatomb.cc/"
00149 #define DESC_MODEL_DESCRIPTION "Free UPnP AV MediaServer, GNU GPL"
00150 #define DESC_MODEL_NAME PACKAGE_NAME
00151 #define DESC_MODEL_NUMBER VERSION
00152 #define DESC_SERIAL_NUMBER "1"
00153
00154
00155
00156 #define DESC_CM_SERVICE_TYPE "urn:schemas-upnp-org:service:ConnectionManager:1"
00157 #define DESC_CM_SERVICE_ID "urn:upnp-org:serviceId:ConnectionManager"
00158 #define DESC_CM_SCPD_URL "cm.xml"
00159 #define DESC_CM_CONTROL_URL "/upnp/control/cm"
00160 #define DESC_CM_EVENT_URL "/upnp/event/cm"
00161
00162
00163 #define DESC_CDS_SERVICE_TYPE "urn:schemas-upnp-org:service:ContentDirectory:1"
00164 #define DESC_CDS_SERVICE_ID "urn:upnp-org:serviceId:ContentDirectory"
00165 #define DESC_CDS_SCPD_URL "cds.xml"
00166 #define DESC_CDS_CONTROL_URL "/upnp/control/cds"
00167 #define DESC_CDS_EVENT_URL "/upnp/event/cds"
00168
00169 #define DESC_ICON_PNG_MIMETYPE "image/png"
00170 #define DESC_ICON_BMP_MIMETYPE "image/x-ms-bmp"
00171 #define DESC_ICON_JPG_MIMETYPE "image/jpeg"
00172 #define DESC_ICON32_PNG "/icons/mt-icon32.png"
00173 #define DESC_ICON32_BMP "/icons/mt-icon32.bmp"
00174 #define DESC_ICON32_JPG "/icons/mt-icon32.jpg"
00175 #define DESC_ICON48_PNG "/icons/mt-icon48.png"
00176 #define DESC_ICON48_BMP "/icons/mt-icon48.bmp"
00177 #define DESC_ICON48_JPG "/icons/mt-icon48.jpg"
00178 #define DESC_ICON120_JPG "/icons/mt-icon120.jpg"
00179 #define DESC_ICON120_PNG "/icons/mt-icon120.png"
00180 #define DESC_ICON120_BMP "/icons/mt-icon120.bmp"
00181
00182
00183 #if defined(ENABLE_MRREG)
00184
00185 #define DESC_MRREG_SERVICE_TYPE "urn:microsoft.com:service:X_MS_MediaReceiverRegistrar:1"
00186 #define DESC_MRREG_SERVICE_ID "urn:microsoft.com:serviceId:X_MS_MediaReceiverRegistrar"
00187 #define DESC_MRREG_SCPD_URL "mr_reg.xml"
00188 #define DESC_MRREG_CONTROL_URL "/upnp/control/mr_reg"
00189 #define DESC_MRREG_EVENT_URL "/upnp/event/mr_reg"
00190 #endif
00191
00192
00193 #define XML_NAMESPACE_ATTR "xmlns"
00194 #define XML_DIDL_LITE_NAMESPACE "urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/"
00195 #define XML_DC_NAMESPACE_ATTR "xmlns:dc"
00196 #define XML_DC_NAMESPACE "http://purl.org/dc/elements/1.1/"
00197 #define XML_UPNP_NAMESPACE_ATTR "xmlns:upnp"
00198 #define XML_UPNP_NAMESPACE "urn:schemas-upnp-org:metadata-1-0/upnp/"
00199
00200
00201 #define DEFAULT_INTERNAL_CHARSET "UTF-8"
00202 #define DEFAULT_FILESYSTEM_CHARSET "ISO-8859-1"
00203 #define DEFAULT_METADATA_CHARSET "ISO-8859-1"
00204 #define DEFAULT_FALLBACK_CHARSET "US-ASCII"
00205 #define DEFAULT_JS_CHARSET "UTF-8"
00206
00207 #if defined(__CYGWIN__)
00208 #define DEFAULT_CONFIG_HOME "MediaTomb"
00209 #else
00210 #define DEFAULT_CONFIG_HOME ".mediatomb"
00211 #endif
00212 #define DEFAULT_SYSTEM_HOME "mediatomb"
00213 #define DEFAULT_ETC "etc"
00214 #define DEFAULT_TMPDIR "/tmp/"
00215 #define DEFAULT_CONFIG_NAME "config.xml"
00216 #define DEFAULT_UI_EN_VALUE YES
00217 #define DEFAULT_UI_SHOW_TOOLTIPS_VALUE YES
00218 #define DEFAULT_POLL_WHEN_IDLE_VALUE NO
00219 #define DEFAULT_POLL_INTERVAL 2
00220 #define DEFAULT_ACCOUNTS_EN_VALUE NO
00221 #define DEFAULT_ACCOUNT_USER "mediatomb"
00222 #define DEFAULT_ACCOUNT_PASSWORD "mediatomb"
00223 #define DEFAULT_ALIVE_INTERVAL 1800 // seconds
00224 #define DEFAULT_BOOKMARK_FILE "mediatomb.html"
00225 #define DEFAULT_IGNORE_UNKNOWN_EXTENSIONS NO
00226 #define DEFAULT_CASE_SENSITIVE_EXTENSION_MAPPINGS NO
00227 #define DEFAULT_IMPORT_SCRIPT "import.js"
00228 #define DEFAULT_DVD_SCRIPT "import-dvd.js"
00229 #define DEFAULT_PLAYLISTS_SCRIPT "playlists.js"
00230 #define DEFAULT_PLAYLIST_CREATE_LINK YES
00231 #define DEFAULT_COMMON_SCRIPT "common.js"
00232 #define DEFAULT_WEB_DIR "web"
00233 #define DEFAULT_JS_DIR "js"
00234 #define DEFAULT_HIDDEN_FILES_VALUE NO
00235 #define DEFAULT_UPNP_STRING_LIMIT (-1)
00236 #define DEFAULT_SESSION_TIMEOUT 30
00237 #define SESSION_TIMEOUT_CHECK_INTERVAL (5 * 60)
00238 #define DEFAULT_PRES_URL_APPENDTO_ATTR "none"
00239 #define DEFAULT_ITEMS_PER_PAGE_1 10
00240 #define DEFAULT_ITEMS_PER_PAGE_2 25
00241 #define DEFAULT_ITEMS_PER_PAGE_3 50
00242 #define DEFAULT_ITEMS_PER_PAGE_4 100
00243 #define DEFAULT_LAYOUT_TYPE "builtin"
00244 #define DEFAULT_EXTEND_PROTOCOLINFO NO
00245
00246 #define DEFAULT_HIDE_PC_DIRECTORY NO
00247 #ifdef YOUTUBE
00248 #define YOUTUBE_PAGESIZE 106496
00249 #define DEFAULT_YOUTUBE_ENABLED NO
00250 #define DEFAULT_YOUTUBE_UPDATE_AT_START NO
00251 #define DEFAULT_YOUTUBE_REFRESH 28800
00252 #define DEFAULT_YOUTUBE_PURGE_AFTER 604800
00253 #define DEFAULT_YOUTUBE_PLAYLIST_START_INDEX 1
00254 #define DEFAULT_YOUTUBE_PLAYLIST_AMOUNT "all"
00255
00256 #define DEFAULT_YOUTUBE_CNT_CATEGORY "music"
00257 #define DEFAULT_YOUTUBE_CNT_TAG "Six Feet Under"
00258 #define DEFAULT_YOUTUBE_CNT_START_PAGE 1
00259 #define DEFAULT_YOUTUBE_CNT_AMOUNT 10
00260
00261 #define DEFAULT_YOUTUBE_TAG "Военное Дело"
00262 #define DEFAULT_YOUTUBE_TAG_START_PAGE 1
00263 #define DEFAULT_YOUTUBE_TAG_AMOUNT "all"
00264 #define DEFAULT_YOUTUBE_RACY_CONTENT "exclude"
00265 #define DEFAULT_YOUTUBE_FORMAT "mp4"
00266 #define DEFAULT_YOUTUBE_HD "no"
00267
00268 #define UI_ACTION_REFRESH_YOUTUBE "refresh_yt"
00269 #endif
00270 #ifdef SOPCAST
00271 #define DEFAULT_SOPCAST_ENABLED NO
00272 #define DEFAULT_SOPCAST_UPDATE_AT_START NO
00273 #endif
00274 #ifdef WEBORAMA
00275 #define DEFAULT_WEBORAMA_ENABLED NO
00276 #define DEFAULT_WEBORAMA_UPDATE_AT_START NO
00277 #define DEFAULT_WEBORAMA_REFRESH 28800
00278 #endif
00279 #ifdef ATRAILERS
00280 #define DEFAULT_ATRAILERS_ENABLED NO
00281 #define DEFAULT_ATRAILERS_UPDATE_AT_START NO
00282 #define DEFAULT_ATRAILERS_REFRESH 43200
00283 #define DEFAULT_ATRAILERS_RESOLUTION 640
00284 #endif
00285 #ifdef ONLINE_SERVICES
00286 #define CFG_DEFAULT_UPDATE_AT_START 10 // seconds
00287 #endif
00288 #ifdef EXTERNAL_TRANSCODING
00289 #define DEFAULT_TRANSCODING_ENABLED NO
00290 #define DEFAULT_AUDIO_BUFFER_SIZE 1048576
00291 #define DEFAULT_AUDIO_CHUNK_SIZE 131072
00292 #define DEFAULT_AUDIO_FILL_SIZE 262144
00293
00294 #define DEFAULT_VIDEO_BUFFER_SIZE 14400000
00295 #define DEFAULT_VIDEO_CHUNK_SIZE 512000
00296 #define DEFAULT_VIDEO_FILL_SIZE 120000
00297
00298 #define URL_PARAM_TRANSCODE_PROFILE_NAME "pr_name"
00299 #define URL_PARAM_TRANSCODE "tr"
00300 #define URL_PARAM_TRANSCODE_TARGET_MIMETYPE "tmt"
00301 #define URL_VALUE_TRANSCODE_NO_RES_ID "none"
00302
00303 #define URL_VALUE_TRANSCODE "1"
00304 #endif
00305 #define DEFAULT_STORAGE_CACHING_ENABLED YES
00306 #ifdef HAVE_SQLITE3
00307 #define MT_SQLITE_SYNC_FULL 2
00308 #define MT_SQLITE_SYNC_NORMAL 1
00309 #define MT_SQLITE_SYNC_OFF 0
00310 #define DEFAULT_SQLITE_SYNC "off"
00311 #define DEFAULT_SQLITE_RESTORE "restore"
00312 #define DEFAULT_SQLITE_BACKUP_ENABLED NO
00313 #define DEFAULT_SQLITE_BACKUP_INTERVAL 600
00314 #define DEFAULT_SQLITE_ENABLED YES
00315 #define DEFAULT_STORAGE_DRIVER "sqlite3"
00316 #else
00317 #define DEFAULT_STORAGE_DRIVER "mysql"
00318 #define DEFAULT_SQLITE_ENABLED NO
00319 #endif
00320
00321 #ifdef HAVE_MYSQL
00322 #define DEFAULT_MYSQL_HOST "localhost"
00323 #define DEFAULT_MYSQL_DB "mediatomb"
00324 #define DEFAULT_MYSQL_USER "mediatomb"
00325 #ifdef HAVE_SQLITE3
00326 #define DEFAULT_MYSQL_ENABLED NO
00327 #else
00328 #define DEFAULT_MYSQL_ENABLED YES
00329 #endif//HAVE_SQLITE3
00330
00331 #else//HAVE_MYSQL
00332 #define DEFAULT_MYSQL_ENABLED NO
00333 #endif
00334
00335 #define DEFAULT_SQLITE3_DB_FILENAME "mediatomb.db"
00336
00337 #define CONFIG_MAPPINGS_TEMPLATE "mappings.xml"
00338
00339 #define INVALID_OBJECT_ID (-333)
00340 #define INVALID_OBJECT_ID_2 (-666)
00341 #define CHECK_SOCKET (-666)
00342
00343
00344 #define LOC_DIR_PREFIX 'D'
00345 #define LOC_FILE_PREFIX 'F'
00346 #define LOC_VIRT_PREFIX 'V'
00347 #define LOC_ILLEGAL_PREFIX 'X'
00348
00349
00350 #ifndef DEFAULT_JS_RUNTIME_MEM
00351 #define DEFAULT_JS_RUNTIME_MEM (1L * 1024L * 1024L)
00352 #endif
00353
00354 #define XML_HEADER "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
00355 #define XML_XMLNS_XSI "http://www.w3.org/2001/XMLSchema-instance"
00356 #define XML_XMLNS "http://mediatomb.cc/config/"
00357
00358 #ifdef HAVE_CURL
00359 #define DEFAULT_CURL_BUFFER_SIZE 262144
00360 #define DEFAULT_CURL_INITIAL_FILL_SIZE 0
00361 #endif
00362
00363 #if defined(HAVE_FFMPEG) && defined(HAVE_FFMPEGTHUMBNAILER)
00364 #define DEFAULT_FFMPEGTHUMBNAILER_ENABLED NO
00365 #define DEFAULT_FFMPEGTHUMBNAILER_THUMBSIZE 128
00366 #define DEFAULT_FFMPEGTHUMBNAILER_SEEK_PERCENTAGE 5
00367 #define DEFAULT_FFMPEGTHUMBNAILER_FILMSTRIP_OVERLAY YES
00368 #define DEFAULT_FFMPEGTHUMBNAILER_WORKAROUND_BUGS NO
00369 #define DEFAULT_FFMPEGTHUMBNAILER_IMAGE_QUALITY 8
00370 #endif
00371
00372 #if defined(HAVE_LASTFMLIB)
00373 #define DEFAULT_LASTFM_ENABLED NO
00374 #define DEFAULT_LASTFM_USERNAME "lastfmuser"
00375 #define DEFAULT_LASTFM_PASSWORD "lastfmpass"
00376 #endif
00377
00378 #define DEFAULT_MARK_PLAYED_ITEMS_ENABLED NO
00379 #define DEFAULT_MARK_PLAYED_ITEMS_SUPPRESS_CDS_UPDATES YES
00380 #define DEFAULT_MARK_PLAYED_ITEMS_STRING_MODE "prepend"
00381 #define DEFAULT_MARK_PLAYED_ITEMS_STRING "* "
00382 #define DEFAULT_MARK_PLAYED_CONTENT_AUDIO "audio"
00383 #define DEFAULT_MARK_PLAYED_CONTENT_VIDEO "video"
00384 #define DEFAULT_MARK_PLAYED_CONTENT_IMAGE "image"
00385
00386 #define LINK_FILE_REQUEST_HANDLER "/" SERVER_VIRTUAL_DIR "/" \
00387 CONTENT_MEDIA_HANDLER "/"
00388 #define LINK_WEB_REQUEST_HANDLER "/" SERVER_VIRTUAL_DIR "/" \
00389 CONTENT_UI_HANDLER "/"
00390 #define LINK_SERVE_REQUEST_HANDLER "/" SERVER_VIRTUAL_DIR "/" \
00391 CONTENT_SERVE_HANDLER "/"
00392 #define LINK_URL_REQUEST_HANDLER "/" SERVER_VIRTUAL_DIR "/" \
00393 CONTENT_ONLINE_HANDLER "/"
00394 #define LINK_DVD_REQUEST_HANDLER "/" SERVER_VIRTUAL_DIR "/" \
00395 CONTENT_DVD_IMAGE_HANDLER "/"
00396 #endif // __COMMON_H__