47 #ifdef HAVE_SYS_TYPES_H
48 #include <sys/types.h>
66 {
"MP3",
"audio/x-mp3" },
67 {
"Vorbis",
"audio/x-ogg" },
68 {
"FLAC",
"audio/flac" },
69 {
"MP4/AAC",
"audio/mp4" }
84 const char *
const filename)
101 const char *
const filename)
133 #ifdef ENABLE_CODEC_MP3
136 #ifdef ENABLE_CODEC_MP4
139 #ifdef ENABLE_CODEC_FLAC
142 #ifdef ENABLE_CODEC_VORBIS
173 const mu_ent_names *
const names,
unsigned long soptions)
185 if (dir->
dir == NULL) {
208 struct dirent *dstruct = NULL;
210 dstruct = readdir((DIR *)(dir->
dir));
215 return dstruct->d_name;
237 closedir((DIR *)(dir->
dir));
312 register unsigned short i;
316 uri = r->parsed_uri.path + strlen(r->parsed_uri.path);
318 while (*(--uri) !=
'/')
324 if (access(r->filename, R_OK) != 0)
329 mi_rerror(
"DBG: MAX_STRING overflow on %s and/or %s - file ignored",
330 r->filename, r->parsed_uri.path);
334 strcpy(names->
filename, r->filename);
335 strcpy(names->
uri, r->parsed_uri.path);
343 int local_options = 0;
345 uri = names->
uri + strlen(names->
uri) - 1;
359 if (subreq != NULL) {
362 ap_destroy_sub_req(subreq);
374 const char * restrict filename;
384 if (subreq != NULL) {
386 ap_destroy_sub_req(subreq);
401 if (NULL == dir_handler.
dir)
413 uri_max -= strlen(names->
uri);
420 if ((filename[0] ==
'.') || (strlen(filename) >= fn_max) || (strlen(filename) >= uri_max))
422 strcpy(fn, filename);
423 strcpy(uri, filename);
436 FILE *in = fopen(names->
filename,
"r");
468 p->
filename += strlen(r->parsed_uri.path);
476 p->
file += strlen(r->parsed_uri.path);
486 #ifdef NO_TITLE_STRIP
495 for (i=0; stitle[i]; i++)
496 if (stitle[i] ==
'_')
500 if (stitle[--i] ==
'/')
523 const char *
const file = names->
uri + strlen(r->parsed_uri.path);
524 if ((ap_strcasestr(file, conf->
search)) ||
562 mu_ent *mobile_ent = NULL, *custom = NULL, *result = NULL;
563 char *p, *decodeduri = NULL;
572 if (strncmp(args,
"playlist=", 9) == 0)
574 else if (strncmp(args,
"file=", 5) == 0)
577 while ((*args !=
'\0') && (*args !=
';')) {
579 p = ap_getword(r->pool, &args,
'&');
580 if (direct && (!strncmp(p,
"file=", 5))) {
594 p = ap_escape_uri(r->pool, decodeduri);
602 strcpy(names.
uri, subreq->parsed_uri.path);
603 strcpy(names.
filename, subreq->filename);
607 ap_destroy_sub_req(subreq);
617 for (result = NULL; custom; custom = mobile_ent) {
619 custom->
next = result;
622 pack->
fhead = result;