mirror of
https://github.com/owntone/owntone-server.git
synced 2025-04-14 00:10:10 -04:00
Add Timo's metacharacter escaping code and codectype passed to scripts
This commit is contained in:
parent
d284223749
commit
3ac71ba469
@ -645,7 +645,8 @@ void dispatch_stream(WS_CONNINFO *pwsc, DBQUERYINFO *pqi) {
|
|||||||
pwsc->threadno,pmp3->path);
|
pwsc->threadno,pmp3->path);
|
||||||
file_ptr = server_side_convert_open(pmp3->path,
|
file_ptr = server_side_convert_open(pmp3->path,
|
||||||
offset,
|
offset,
|
||||||
pmp3->song_length);
|
pmp3->song_length,
|
||||||
|
pmp3->codectype);
|
||||||
if (file_ptr) {
|
if (file_ptr) {
|
||||||
file_fd = fileno(file_ptr);
|
file_fd = fileno(file_ptr);
|
||||||
} else {
|
} else {
|
||||||
|
23
src/ssc.c
23
src/ssc.c
@ -80,18 +80,18 @@ int server_side_convert(char *codectype) {
|
|||||||
* @param path char * to the real filename.
|
* @param path char * to the real filename.
|
||||||
* @param offset off_t to the point in file where the streaming starts.
|
* @param offset off_t to the point in file where the streaming starts.
|
||||||
*/
|
*/
|
||||||
FILE *server_side_convert_open(char *path, off_t offset, unsigned long len_ms) {
|
FILE *server_side_convert_open(char *path, off_t offset, unsigned long len_ms, char *codectype) {
|
||||||
char *cmd;
|
char *cmd;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char *newpath;
|
char *newpath;
|
||||||
char *metachars = "\"$`\\"; /* More?? */
|
char *metachars = "\"\\!(){}#*?&<>`"; /* More?? */
|
||||||
char metacount = 0;
|
char metacount = 0;
|
||||||
char *src,*dst;
|
char *src,*dst;
|
||||||
|
|
||||||
src=path;
|
src=path;
|
||||||
while(*src) {
|
while(*src) {
|
||||||
if(strchr(metachars,*src))
|
if(strchr(metachars,*src))
|
||||||
metacount++;
|
metacount+=5;
|
||||||
src++;
|
src++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,9 +104,15 @@ FILE *server_side_convert_open(char *path, off_t offset, unsigned long len_ms) {
|
|||||||
dst=newpath;
|
dst=newpath;
|
||||||
|
|
||||||
while(*src) {
|
while(*src) {
|
||||||
if(strchr(metachars,*src))
|
if(strchr(metachars,*src)) {
|
||||||
*dst++='\\';
|
*dst++='"';
|
||||||
*dst++=*src++;
|
*dst++='\'';
|
||||||
|
*dst++=*src++;
|
||||||
|
*dst++='\'';
|
||||||
|
*dst++='"';
|
||||||
|
} else {
|
||||||
|
*dst++=*src++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*dst='\0';
|
*dst='\0';
|
||||||
} else {
|
} else {
|
||||||
@ -117,8 +123,9 @@ FILE *server_side_convert_open(char *path, off_t offset, unsigned long len_ms) {
|
|||||||
cmd=(char *)malloc(strlen(config.ssc_prog) +
|
cmd=(char *)malloc(strlen(config.ssc_prog) +
|
||||||
strlen(path) +
|
strlen(path) +
|
||||||
64);
|
64);
|
||||||
sprintf(cmd, "%s \"%s\" %ld %lu.%03lu",
|
sprintf(cmd, "%s \"%s\" %ld %lu.%03lu \"%s\"",
|
||||||
config.ssc_prog, newpath, (long)offset, len_ms / 1000, len_ms % 1000);
|
config.ssc_prog, newpath, (long)offset, len_ms / 1000,
|
||||||
|
len_ms % 1000, (codectype && *codectype) ? codectype : "*");
|
||||||
DPRINTF(E_INF,L_SCAN,"Executing %s\n",cmd);
|
DPRINTF(E_INF,L_SCAN,"Executing %s\n",cmd);
|
||||||
f = popen(cmd, "r");
|
f = popen(cmd, "r");
|
||||||
free(newpath);
|
free(newpath);
|
||||||
|
@ -26,11 +26,11 @@
|
|||||||
#define SERVER_SIDE_CONVERT_DESCR " (converted to WAV)"
|
#define SERVER_SIDE_CONVERT_DESCR " (converted to WAV)"
|
||||||
|
|
||||||
extern int server_side_convert(char *codectype);
|
extern int server_side_convert(char *codectype);
|
||||||
extern int server_side_convert_set(MP3FILE *pmp3);
|
|
||||||
extern char *server_side_convert_path(char *path);
|
extern char *server_side_convert_path(char *path);
|
||||||
extern FILE *server_side_convert_open(char *path,
|
extern FILE *server_side_convert_open(char *path,
|
||||||
off_t offset,
|
off_t offset,
|
||||||
unsigned long len_ms);
|
unsigned long len_ms,
|
||||||
|
char *codectype);
|
||||||
extern void server_side_convert_close(FILE *f);
|
extern void server_side_convert_close(FILE *f);
|
||||||
|
|
||||||
#endif /* _SCC_H_ */
|
#endif /* _SCC_H_ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user