modularize debugging statements

This commit is contained in:
Ron Pedde 2004-11-13 07:14:26 +00:00
parent 45fe1b5c81
commit 31aa0d8575
19 changed files with 740 additions and 718 deletions

View File

@ -241,7 +241,7 @@ int config_read(char *file) {
err=0; err=0;
while((pce->config_element != -1)) { while((pce->config_element != -1)) {
if(pce->required && pce->config_element && !pce->changed) { if(pce->required && pce->config_element && !pce->changed) {
DPRINTF(ERR_LOG,"Required config entry '%s' not specified\n",pce->name); DPRINTF(E_LOG,L_CONF,"Required config entry '%s' not specified\n",pce->name);
err=-1; err=-1;
} }
@ -249,10 +249,10 @@ int config_read(char *file) {
if((pce->config_element) && (pce->changed)) { if((pce->config_element) && (pce->changed)) {
switch(pce->type) { switch(pce->type) {
case CONFIG_TYPE_STRING: case CONFIG_TYPE_STRING:
DPRINTF(ERR_INFO,"%s: %s\n",pce->name,*((char**)pce->var)); DPRINTF(E_INF,"%s: %s\n",pce->name,*((char**)pce->var));
break; break;
case CONFIG_TYPE_INT: case CONFIG_TYPE_INT:
DPRINTF(ERR_INFO,"%s: %d\n",pce->name,*((int*)pce->var)); DPRINTF(E_INF,"%s: %d\n",pce->name,*((int*)pce->var));
break; break;
} }
} }
@ -351,7 +351,7 @@ void config_subst_stream(WS_CONNINFO *pwsc, int fd_src) {
if((next == '@') && (strlen(argbuffer) > 0)) { if((next == '@') && (strlen(argbuffer) > 0)) {
in_arg=0; in_arg=0;
DPRINTF(ERR_DEBUG,"Got directive %s\n",argbuffer); DPRINTF(E_DBG,L_CONF,"Got directive %s\n",argbuffer);
/* see if there are args */ /* see if there are args */
first=last=argbuffer; first=last=argbuffer;
@ -401,7 +401,7 @@ void config_handler(WS_CONNINFO *pwsc) {
struct stat sb; struct stat sb;
char *pw; char *pw;
DPRINTF(ERR_DEBUG,"Entering config_handler\n"); DPRINTF(E_DBG,L_CONF|L_WS,"Entering config_handler\n");
config_set_status(pwsc,0,"Serving admin pages"); config_set_status(pwsc,0,"Serving admin pages");
@ -411,7 +411,7 @@ void config_handler(WS_CONNINFO *pwsc) {
snprintf(path,PATH_MAX,"%s/%s",config.web_root,pwsc->uri); snprintf(path,PATH_MAX,"%s/%s",config.web_root,pwsc->uri);
if(!realpath(path,resolved_path)) { if(!realpath(path,resolved_path)) {
pwsc->error=errno; pwsc->error=errno;
DPRINTF(ERR_WARN,"Cannot resolve %s\n",path); DPRINTF(E_WARN,L_CONF|L_WS,"Cannot resolve %s\n",path);
ws_returnerror(pwsc,404,"Not found"); ws_returnerror(pwsc,404,"Not found");
config_set_status(pwsc,0,NULL); config_set_status(pwsc,0,NULL);
return; return;
@ -422,13 +422,13 @@ void config_handler(WS_CONNINFO *pwsc) {
if(sb.st_mode & S_IFDIR) if(sb.st_mode & S_IFDIR)
strcat(resolved_path,"/index.html"); strcat(resolved_path,"/index.html");
DPRINTF(ERR_DEBUG,"Thread %d: Preparing to serve %s\n", DPRINTF(E_DBG,L_CONF|L_WS,"Thread %d: Preparing to serve %s\n",
pwsc->threadno, resolved_path); pwsc->threadno, resolved_path);
if(strncmp(resolved_path,config.web_root, if(strncmp(resolved_path,config.web_root,
strlen(config.web_root))) { strlen(config.web_root))) {
pwsc->error=EINVAL; pwsc->error=EINVAL;
DPRINTF(ERR_WARN,"Thread %d: Requested file %s out of root\n", DPRINTF(E_WARN,L_CONF|L_WS,"Thread %d: Requested file %s out of root\n",
pwsc->threadno,resolved_path); pwsc->threadno,resolved_path);
ws_returnerror(pwsc,403,"Forbidden"); ws_returnerror(pwsc,403,"Forbidden");
config_set_status(pwsc,0,NULL); config_set_status(pwsc,0,NULL);
@ -438,7 +438,7 @@ void config_handler(WS_CONNINFO *pwsc) {
file_fd=r_open2(resolved_path,O_RDONLY); file_fd=r_open2(resolved_path,O_RDONLY);
if(file_fd == -1) { if(file_fd == -1) {
pwsc->error=errno; pwsc->error=errno;
DPRINTF(ERR_WARN,"Thread %d: Error opening %s: %s\n", DPRINTF(E_WARN,L_CONF|L_WS,"Thread %d: Error opening %s: %s\n",
pwsc->threadno,resolved_path,strerror(errno)); pwsc->threadno,resolved_path,strerror(errno));
ws_returnerror(pwsc,404,"Not found"); ws_returnerror(pwsc,404,"Not found");
config_set_status(pwsc,0,NULL); config_set_status(pwsc,0,NULL);
@ -480,7 +480,7 @@ void config_handler(WS_CONNINFO *pwsc) {
} }
if(!config_file_is_readonly()) { if(!config_file_is_readonly()) {
DPRINTF(ERR_INFO,"Updating config file\n"); DPRINTF(E_INF,L_CONF|L_WS,"Updating config file\n");
config_write(pwsc); config_write(pwsc);
} }
} }
@ -496,7 +496,7 @@ void config_handler(WS_CONNINFO *pwsc) {
} }
r_close(file_fd); r_close(file_fd);
DPRINTF(ERR_DEBUG,"Thread %d: Served successfully\n",pwsc->threadno); DPRINTF(E_DBG,L_CONF|L_WS,"Thread %d: Served successfully\n",pwsc->threadno);
config_set_status(pwsc,0,NULL); config_set_status(pwsc,0,NULL);
return; return;
} }
@ -734,7 +734,7 @@ void config_emit_ispage(WS_CONNINFO *pwsc, void *value, char *arg) {
char *page, *true, *false; char *page, *true, *false;
DPRINTF(ERR_DEBUG,"Splitting arg %s\n",arg); DPRINTF(E_DBG,L_CONF|L_WS,"Splitting arg %s\n",arg);
first=last=arg; first=last=arg;
strsep(&last,":"); strsep(&last,":");
@ -761,7 +761,7 @@ void config_emit_ispage(WS_CONNINFO *pwsc, void *value, char *arg) {
} }
DPRINTF(ERR_DEBUG,"page: %s, uri: %s\n",page,pwsc->uri); DPRINTF(E_DBG,L_CONF|L_WS,"page: %s, uri: %s\n",page,pwsc->uri);
if((strlen(page) > strlen(pwsc->uri)) || if((strlen(page) > strlen(pwsc->uri)) ||
(strcasecmp(page,(char*)&pwsc->uri[strlen(pwsc->uri) - strlen(page)]) != 0)) { (strcasecmp(page,(char*)&pwsc->uri[strlen(pwsc->uri) - strlen(page)]) != 0)) {
@ -831,12 +831,12 @@ void config_emit_include(WS_CONNINFO *pwsc, void *value, char *arg) {
int file_fd; int file_fd;
struct stat sb; struct stat sb;
DPRINTF(ERR_DEBUG,"Preparing to include %s\n",arg); DPRINTF(E_DBG,L_CONF|L_WS,"Preparing to include %s\n",arg);
snprintf(path,PATH_MAX,"%s/%s",config.web_root,arg); snprintf(path,PATH_MAX,"%s/%s",config.web_root,arg);
if(!realpath(path,resolved_path)) { if(!realpath(path,resolved_path)) {
pwsc->error=errno; pwsc->error=errno;
DPRINTF(ERR_WARN,"Cannot resolve %s\n",path); DPRINTF(E_WARN,L_CONF|L_WS,"Cannot resolve %s\n",path);
ws_writefd(pwsc,"<hr><i>error: cannot find %s</i><hr>",arg); ws_writefd(pwsc,"<hr><i>error: cannot find %s</i><hr>",arg);
return; return;
} }
@ -849,13 +849,13 @@ void config_emit_include(WS_CONNINFO *pwsc, void *value, char *arg) {
} }
DPRINTF(ERR_DEBUG,"Thread %d: Preparing to serve %s\n", DPRINTF(E_DBG,L_CONF|L_WS,"Thread %d: Preparing to serve %s\n",
pwsc->threadno, resolved_path); pwsc->threadno, resolved_path);
if(strncmp(resolved_path,config.web_root, if(strncmp(resolved_path,config.web_root,
strlen(config.web_root))) { strlen(config.web_root))) {
pwsc->error=EINVAL; pwsc->error=EINVAL;
DPRINTF(ERR_WARN,"Thread %d: Requested file %s out of root\n", DPRINTF(E_LOG,L_CONF|L_WS,"Thread %d: Requested file %s out of root\n",
pwsc->threadno,resolved_path); pwsc->threadno,resolved_path);
ws_writefd(pwsc,"<hr><i>error: %s out of web root</i><hr>",arg); ws_writefd(pwsc,"<hr><i>error: %s out of web root</i><hr>",arg);
return; return;
@ -864,7 +864,7 @@ void config_emit_include(WS_CONNINFO *pwsc, void *value, char *arg) {
file_fd=r_open2(resolved_path,O_RDONLY); file_fd=r_open2(resolved_path,O_RDONLY);
if(file_fd == -1) { if(file_fd == -1) {
pwsc->error=errno; pwsc->error=errno;
DPRINTF(ERR_WARN,"Thread %d: Error opening %s: %s\n", DPRINTF(E_LOG,L_CONF|L_WS,"Thread %d: Error opening %s: %s\n",
pwsc->threadno,resolved_path,strerror(errno)); pwsc->threadno,resolved_path,strerror(errno));
ws_writefd(pwsc,"<hr><i>error: cannot open %s: %s</i><hr>",arg,strerror(errno)); ws_writefd(pwsc,"<hr><i>error: cannot open %s: %s</i><hr>",arg,strerror(errno));
return; return;
@ -873,7 +873,7 @@ void config_emit_include(WS_CONNINFO *pwsc, void *value, char *arg) {
config_subst_stream(pwsc, file_fd); config_subst_stream(pwsc, file_fd);
r_close(file_fd); r_close(file_fd);
DPRINTF(ERR_DEBUG,"Thread %d: included successfully\n",pwsc->threadno); DPRINTF(E_DBG,L_CONF|L_WS,"Thread %d: included successfully\n",pwsc->threadno);
return; return;
} }
@ -887,11 +887,11 @@ void config_set_status(WS_CONNINFO *pwsc, int session, char *fmt, ...) {
va_list ap; va_list ap;
SCAN_STATUS *pfirst, *plast; SCAN_STATUS *pfirst, *plast;
DPRINTF(ERR_DEBUG,"Entering config_set_status\n"); DPRINTF(E_DBG,L_CONF,"Entering config_set_status\n");
if(config_mutex_lock()) { if(config_mutex_lock()) {
/* we should really shutdown the app here... */ /* we should really shutdown the app here... */
DPRINTF(ERR_FATAL,"Error acquiring config mutex\n"); DPRINTF(E_FATAL,L_CONF,"Error acquiring config mutex\n");
} }
pfirst=plast=scan_status.next; pfirst=plast=scan_status.next;
@ -923,7 +923,7 @@ void config_set_status(WS_CONNINFO *pwsc, int session, char *fmt, ...) {
} else { } else {
if(!pfirst) { if(!pfirst) {
config_mutex_unlock(); config_mutex_unlock();
DPRINTF(ERR_DEBUG,"Exiting config_set_status\n"); DPRINTF(E_DBG,L_CONF,"Exiting config_set_status\n");
return; return;
} }
@ -941,7 +941,7 @@ void config_set_status(WS_CONNINFO *pwsc, int session, char *fmt, ...) {
} }
config_mutex_unlock(); config_mutex_unlock();
DPRINTF(ERR_DEBUG,"Exiting config_set_status\n"); DPRINTF(E_DBG,L_CONF,"Exiting config_set_status\n");
} }
/* /*
@ -1022,4 +1022,8 @@ void config_emit_flags(WS_CONNINFO *pwsc, void *value, char *arg) {
#ifdef WITH_HOWL #ifdef WITH_HOWL
ws_writefd(pwsc,"%s ","--enable-howl"); ws_writefd(pwsc,"%s ","--enable-howl");
#endif #endif
#ifdef NSLU2
ws_writefd(pwsc,"%s ","--enable-nslu2");
#endif
} }

View File

@ -47,7 +47,7 @@ DAAP_BLOCK *daap_get_new(void) {
pnew=(DAAP_BLOCK*)malloc(sizeof(DAAP_BLOCK)); pnew=(DAAP_BLOCK*)malloc(sizeof(DAAP_BLOCK));
if(!pnew) { if(!pnew) {
DPRINTF(ERR_WARN,"Error mallocing a daap block\n"); DPRINTF(E_WARN,L_DAAP,"Error mallocing a daap block\n");
return NULL; return NULL;
} }
@ -73,7 +73,7 @@ DAAP_BLOCK *daap_add_formatted(DAAP_BLOCK *parent, char *tag,
DAAP_BLOCK *current,*last; DAAP_BLOCK *current,*last;
DAAP_BLOCK *pnew; DAAP_BLOCK *pnew;
DPRINTF(ERR_DEBUG,"Adding daap tag %s\n",tag); DPRINTF(E_DBG,L_DAAP,"Adding daap tag %s\n",tag);
pnew = daap_get_new(); pnew = daap_get_new();
if(!pnew) if(!pnew)
return NULL; return NULL;
@ -322,7 +322,7 @@ void daap_free(DAAP_BLOCK *root) {
DAAP_BLOCK *pnext; DAAP_BLOCK *pnext;
while(root) { while(root) {
DPRINTF(ERR_DEBUG,"Freeing %c%c%c%c\n",root->tag[0],root->tag[1], DPRINTF(E_DBG,L_DAAP,"Freeing %c%c%c%c\n",root->tag[0],root->tag[1],
root->tag[2],root->tag[3]); root->tag[2],root->tag[3]);
if((root->size) && (root->free)) if((root->size) && (root->free))

View File

@ -198,7 +198,7 @@ DAAP_BLOCK *daap_response_content_codes(void) {
DAAP_ITEMS *current=taglist; DAAP_ITEMS *current=taglist;
int g=1; int g=1;
DPRINTF(ERR_DEBUG,"Preparing to get content codes\n"); DPRINTF(E_DBG,L_DAAP,"Preparing to get content codes\n");
root=daap_add_empty(NULL,"mccr"); root=daap_add_empty(NULL,"mccr");
if(root) { if(root) {
@ -231,7 +231,7 @@ DAAP_BLOCK *daap_response_login(char *hostname) {
int g=1; int g=1;
int session=0; int session=0;
DPRINTF(ERR_DEBUG,"Preparing to send login response\n"); DPRINTF(E_DBG,L_DAAP,"Preparing to send login response\n");
root=daap_add_empty(NULL,"mlog"); root=daap_add_empty(NULL,"mlog");
if(root) { if(root) {
@ -245,7 +245,7 @@ DAAP_BLOCK *daap_response_login(char *hostname) {
return NULL; return NULL;
} }
DPRINTF(ERR_LOG,"%s logging in as session %d\n",hostname,session); DPRINTF(E_LOG,L_DAAP,"%s logging in as session %d\n",hostname,session);
return root; return root;
} }
@ -385,10 +385,10 @@ MetaField_t encodeMetaRequest(char* meta, MetaDataMap* map)
if(m->tag) if(m->tag)
bits |= (((MetaField_t) 1) << m->bit); bits |= (((MetaField_t) 1) << m->bit);
else else
DPRINTF(ERR_WARN, "Unknown meta code: %.*s\n", len, start); DPRINTF(E_WARN,L_DAAP,"Unknown meta code: %.*s\n", len, start);
} }
DPRINTF(ERR_DEBUG, "meta codes: %llu\n", bits); DPRINTF(E_DBG, L_DAAP, "meta codes: %llu\n", bits);
return bits; return bits;
} }
@ -410,7 +410,7 @@ DAAP_BLOCK *daap_response_songlist(char* metaStr, char* query) {
query_node_t* filter = 0; query_node_t* filter = 0;
int songs = 0; int songs = 0;
DPRINTF(ERR_DEBUG,"enter daap_response_songlist\n"); DPRINTF(E_DBG,L_DAAP,"enter daap_response_songlist\n");
// if the meta tag is specified, encode it, if it's not specified // if the meta tag is specified, encode it, if it's not specified
// we're given the latitude to select our own subset, for // we're given the latitude to select our own subset, for
@ -422,16 +422,16 @@ DAAP_BLOCK *daap_response_songlist(char* metaStr, char* query) {
if(0 != query) { if(0 != query) {
filter = query_build(query, song_fields); filter = query_build(query, song_fields);
DPRINTF(ERR_INFO,"query: %s\n", query); DPRINTF(E_INF,L_DAAP|L_QRY,"query: %s\n", query);
if(err_debuglevel >= ERR_INFO) /* this is broken */ if(err_debuglevel >= E_INF) /* this is broken */
query_dump(stderr,filter, 0); query_dump(stderr,filter, 0);
} }
DPRINTF(ERR_DEBUG,"Preparing to send db items\n"); DPRINTF(E_DBG,L_DAAP|L_DB,"Preparing to send db items\n");
henum=db_enum_begin(); henum=db_enum_begin();
if((!henum) && (db_get_song_count())) { if((!henum) && (db_get_song_count())) {
DPRINTF(ERR_DEBUG,"Can't get enum handle - exiting daap_response_songlist\n"); DPRINTF(E_DBG,L_DAAP|L_DB,"Can't get enum handle - exiting daap_response_songlist\n");
return NULL; return NULL;
} }
@ -448,7 +448,7 @@ DAAP_BLOCK *daap_response_songlist(char* metaStr, char* query) {
while(g && (current=db_enum(&henum))) { while(g && (current=db_enum(&henum))) {
if(filter == 0 || query_test(filter, current)) if(filter == 0 || query_test(filter, current))
{ {
DPRINTF(ERR_DEBUG,"Got entry for %s\n",current->fname); DPRINTF(E_DBG,L_DAAP|L_DB,"Got entry for %s\n",current->fname);
// song entry generation extracted for usage with // song entry generation extracted for usage with
// playlists as well // playlists as well
g = 0 != daap_add_song_entry(mlcl, current, meta); g = 0 != daap_add_song_entry(mlcl, current, meta);
@ -464,17 +464,17 @@ DAAP_BLOCK *daap_response_songlist(char* metaStr, char* query) {
query_free(filter); query_free(filter);
if(!g) { if(!g) {
DPRINTF(ERR_DEBUG,"Error enumerating database - exiting daap_response_songlist\n"); DPRINTF(E_DBG,L_DAAP|L_DB,"Error enumerating db - exiting daap_response_songlist\n");
daap_free(root); daap_free(root);
return NULL; return NULL;
} }
DPRINTF(ERR_DEBUG,"Successfully enumerated database - %d items\n",songs); DPRINTF(E_DBG,L_DAAP|L_DB,"Successfully enumerated database - %d items\n",songs);
daap_set_int(root, "mtco", songs); daap_set_int(root, "mtco", songs);
daap_set_int(root, "mrco", songs); daap_set_int(root, "mrco", songs);
DPRINTF(ERR_DEBUG,"Exiting daap_response_songlist\n"); DPRINTF(E_DBG,L_DAAP,"Exiting daap_response_songlist\n");
return root; return root;
} }
@ -610,7 +610,7 @@ DAAP_BLOCK *daap_response_update(int fd, int clientver) {
struct timeval tv; struct timeval tv;
int result; int result;
DPRINTF(ERR_DEBUG,"Preparing to send update response\n"); DPRINTF(E_DBG,L_DAAP,"Preparing to send update response\n");
while(clientver == db_version()) { while(clientver == db_version()) {
FD_ZERO(&rset); FD_ZERO(&rset);
@ -622,7 +622,7 @@ DAAP_BLOCK *daap_response_update(int fd, int clientver) {
result=select(fd+1,&rset,NULL,NULL,&tv); result=select(fd+1,&rset,NULL,NULL,&tv);
if(FD_ISSET(fd,&rset)) { if(FD_ISSET(fd,&rset)) {
/* can't be ready for read, must be error */ /* can't be ready for read, must be error */
DPRINTF(ERR_DEBUG,"Socket closed?\n"); DPRINTF(E_DBG,L_DAAP,"Socket closed?\n");
return NULL; return NULL;
} }
@ -657,7 +657,7 @@ DAAP_BLOCK *daap_response_playlists(char *name) {
int playlistid; int playlistid;
ENUMHANDLE henum; ENUMHANDLE henum;
DPRINTF(ERR_DEBUG,"Preparing to send playlists\n"); DPRINTF(E_DBG,L_DAAP,"Preparing to send playlists\n");
root=daap_add_empty(NULL,"aply"); root=daap_add_empty(NULL,"aply");
if(root) { if(root) {
@ -681,10 +681,10 @@ DAAP_BLOCK *daap_response_playlists(char *name) {
henum=db_playlist_enum_begin(); henum=db_playlist_enum_begin();
while(henum) { while(henum) {
playlistid=db_playlist_enum(&henum); playlistid=db_playlist_enum(&henum);
DPRINTF(ERR_DEBUG,"Returning playlist %d\n",playlistid); DPRINTF(E_DBG,L_DAAP|L_PL,"Returning playlist %d\n",playlistid);
DPRINTF(ERR_DEBUG," -- Songs: %d\n", DPRINTF(E_DBG,L_DAAP|L_PL," -- Songs: %d\n",
db_get_playlist_entry_count(playlistid)); db_get_playlist_entry_count(playlistid));
DPRINTF(ERR_DEBUG," -- Smart: %s\n", DPRINTF(E_DBG,L_DAAP|L_PL," -- Smart: %s\n",
db_get_playlist_is_smart(playlistid) ? db_get_playlist_is_smart(playlistid) ?
"Yes" : "No"); "Yes" : "No");
mlit=daap_add_empty(mlcl,"mlit"); mlit=daap_add_empty(mlcl,"mlit");
@ -707,7 +707,7 @@ DAAP_BLOCK *daap_response_playlists(char *name) {
g = g && mlcl; g = g && mlcl;
if(!g) { if(!g) {
DPRINTF(ERR_INFO,"Memory problem. Bailing\n"); DPRINTF(E_INF,L_DAAP,"Memory problem. Bailing\n");
daap_free(root); daap_free(root);
return NULL; return NULL;
} }
@ -727,7 +727,7 @@ DAAP_BLOCK *daap_response_dbinfo(char *name) {
DAAP_BLOCK *mlit=NULL; DAAP_BLOCK *mlit=NULL;
int g=1; int g=1;
DPRINTF(ERR_DEBUG,"Preparing to send db info\n"); DPRINTF(E_DBG,L_DAAP|L_DB,"Preparing to send db info\n");
root=daap_add_empty(NULL,"avdb"); root=daap_add_empty(NULL,"avdb");
if(root) { if(root) {
@ -751,12 +751,12 @@ DAAP_BLOCK *daap_response_dbinfo(char *name) {
g = g && mlcl && mlit; g = g && mlcl && mlit;
if(!g) { if(!g) {
DPRINTF(ERR_INFO,"Memory problem. Bailing\n"); DPRINTF(E_INF,L_DAAP,"Memory problem. Bailing\n");
daap_free(root); daap_free(root);
return NULL; return NULL;
} }
DPRINTF(ERR_DEBUG,"Sent db info... %d songs, %d playlists\n",db_get_song_count(), DPRINTF(E_DBG,L_DAAP|L_DB,"Sent db info... %d songs, %d playlists\n",db_get_song_count(),
db_get_playlist_count()); db_get_playlist_count());
return root; return root;
@ -771,7 +771,7 @@ DAAP_BLOCK *daap_response_server_info(char *name, char *client_version) {
DAAP_BLOCK *root; DAAP_BLOCK *root;
int g=1; int g=1;
DPRINTF(ERR_DEBUG,"Preparing to send server info for client version %s\n",client_version); DPRINTF(E_DBG,L_DAAP,"Preparing to send server-info for client ver %s\n",client_version);
root=daap_add_empty(NULL,"msrv"); root=daap_add_empty(NULL,"msrv");
@ -867,12 +867,12 @@ DAAP_BLOCK *daap_response_playlist_items(unsigned int playlist, char* metaStr, c
if(0 != query) { if(0 != query) {
filter = query_build(query, song_fields); filter = query_build(query, song_fields);
DPRINTF(ERR_INFO,"query: %s\n",query); DPRINTF(E_INF,L_DAAP|L_QRY,"query: %s\n",query);
if(err_debuglevel >= ERR_INFO) /* this is broken */ if(err_debuglevel >= E_INF) /* this is broken */
query_dump(stderr,filter, 0); query_dump(stderr,filter, 0);
} }
DPRINTF(ERR_DEBUG,"Preparing to send playlist items for pl #%d\n",playlist); DPRINTF(E_DBG,L_DAAP|L_PL,"Preparing to send playlist items for pl #%d\n",playlist);
if(playlist == 1) { if(playlist == 1) {
henum=db_enum_begin(); henum=db_enum_begin();
@ -914,7 +914,7 @@ DAAP_BLOCK *daap_response_playlist_items(unsigned int playlist, char* metaStr, c
if(0 == filter || query_test(filter, current)) if(0 == filter || query_test(filter, current))
{ {
songs++; songs++;
DPRINTF(ERR_DEBUG,"Adding itemid %d\n",itemid); DPRINTF(E_DBG,L_DAAP|L_PL,"Adding itemid %d\n",itemid);
mlit=daap_add_song_entry(mlcl,current,meta); mlit=daap_add_song_entry(mlcl,current,meta);
if(0 != mlit) { if(0 != mlit) {
if(wantsMeta(meta, metaContainerItemId)) // current->id? if(wantsMeta(meta, metaContainerItemId)) // current->id?
@ -940,7 +940,7 @@ DAAP_BLOCK *daap_response_playlist_items(unsigned int playlist, char* metaStr, c
return NULL; return NULL;
} }
DPRINTF(ERR_DEBUG,"Sucessfully enumerated %d items\n",songs); DPRINTF(E_DBG,L_DAAP|L_PL,"Sucessfully enumerated %d items\n",songs);
daap_set_int(root, "mtco", songs); daap_set_int(root, "mtco", songs);
daap_set_int(root, "mrco", songs); daap_set_int(root, "mrco", songs);
@ -1046,13 +1046,13 @@ void daap_handle_index(DAAP_BLOCK* block, const char* index)
// should have already be created // should have already be created
daap_set_int(block, "mrco", count); daap_set_int(block, "mrco", count);
DPRINTF(ERR_INFO, "index:%s first:%d count:%d\n", index, first, count); DPRINTF(E_INF,L_DAAP|L_IND, "index:%s first:%d count:%d\n", index, first, count);
// remove the first first entries // remove the first first entries
for(back = &list->children ; *back && first ; ) for(back = &list->children ; *back && first ; )
if(!strncmp((**back).tag, "mlit", 4)) if(!strncmp((**back).tag, "mlit", 4))
{ {
DPRINTF(ERR_DEBUG, "first:%d removing\n", first); DPRINTF(E_DBG,L_DAAP|L_IND, "first:%d removing\n", first);
daap_remove(*back); daap_remove(*back);
first--; first--;
} }
@ -1063,7 +1063,7 @@ void daap_handle_index(DAAP_BLOCK* block, const char* index)
for( ; *back && count ; back = &(**back).next) for( ; *back && count ; back = &(**back).next)
if(!strncmp((**back).tag, "mlit", 4)) if(!strncmp((**back).tag, "mlit", 4))
{ {
DPRINTF(ERR_DEBUG, "count:%d keeping\n", count); DPRINTF(E_DBG,L_DAAP|L_IND,"count:%d keeping\n", count);
count--; count--;
} }
@ -1072,7 +1072,7 @@ void daap_handle_index(DAAP_BLOCK* block, const char* index)
{ {
if(!strncmp((**back).tag, "mlit", 4)) if(!strncmp((**back).tag, "mlit", 4))
{ {
DPRINTF(ERR_DEBUG, "removing spare\n"); DPRINTF(E_DBG,L_DAAP|L_IND,"removing spare\n");
daap_remove(*back); daap_remove(*back);
} }
else else
@ -1173,7 +1173,7 @@ DAAP_BLOCK* daap_response_browse(const char* name, const char* filter)
} }
else else
{ {
DPRINTF(ERR_WARN,"Invalid browse request: %s\n", name); DPRINTF(E_WARN,L_DAAP|L_BROW,"Invalid browse request: %s\n", name);
return NULL; return NULL;
} }
@ -1182,8 +1182,8 @@ DAAP_BLOCK* daap_response_browse(const char* name, const char* filter)
return NULL; return NULL;
if(query) { if(query) {
DPRINTF(ERR_INFO,"query: %s\n",filter); DPRINTF(E_INF,L_DAAP|L_BROW|L_QRY,"query: %s\n",filter);
if(err_debuglevel >= ERR_INFO) /* this is broken */ if(err_debuglevel >= E_INF) /* this is broken */
query_dump(stderr,query, 0); query_dump(stderr,query, 0);
} }

View File

@ -185,7 +185,7 @@ void db_readlock(void) {
int err; int err;
if((err=pthread_rwlock_rdlock(&db_rwlock))) { if((err=pthread_rwlock_rdlock(&db_rwlock))) {
DPRINTF(ERR_FATAL,"cannot lock rdlock: %s\n",strerror(err)); DPRINTF(E_FATAL,L_DB,"cannot lock rdlock: %s\n",strerror(err));
} }
} }
@ -198,7 +198,7 @@ void db_writelock(void) {
int err; int err;
if((err=pthread_rwlock_wrlock(&db_rwlock))) { if((err=pthread_rwlock_wrlock(&db_rwlock))) {
DPRINTF(ERR_FATAL,"cannot lock rwlock: %s\n",strerror(err)); DPRINTF(E_FATAL,L_DB,"cannot lock rwlock: %s\n",strerror(err));
} }
} }
@ -251,7 +251,7 @@ int db_open(char *parameters, int reload) {
db_songs=gdbm_open(db_path, 0, reload | GDBM_SYNC | GDBM_NOLOCK, db_songs=gdbm_open(db_path, 0, reload | GDBM_SYNC | GDBM_NOLOCK,
0600,NULL); 0600,NULL);
if(!db_songs) { if(!db_songs) {
DPRINTF(ERR_FATAL,"Could not open songs database (%s)\n", DPRINTF(E_FATAL,L_DB,"Could not open songs database (%s)\n",
db_path); db_path);
return -1; return -1;
} }
@ -275,7 +275,7 @@ int db_init(void) {
db_version_no=1; db_version_no=1;
db_song_count=0; db_song_count=0;
DPRINTF(ERR_DEBUG,"Building playlists\n"); DPRINTF(E_DBG,L_DB|L_PL,"Building playlists\n");
/* count the actual songs and build the playlists */ /* count the actual songs and build the playlists */
tmp_key=gdbm_firstkey(db_songs); tmp_key=gdbm_firstkey(db_songs);
@ -302,7 +302,7 @@ int db_init(void) {
db_song_count++; db_song_count++;
} }
DPRINTF(ERR_DEBUG,"Loaded database... found %d songs\n",db_song_count); DPRINTF(E_DBG,L_DB,"Loaded database... found %d songs\n",db_song_count);
/* and the playlists */ /* and the playlists */
return 0; return 0;
@ -410,13 +410,13 @@ int db_end_initial_update(void) {
db_update_mode=0; db_update_mode=0;
DPRINTF(ERR_DEBUG,"Initial update over. Removing stale items\n"); DPRINTF(E_DBG,L_DB|L_SCAN,"Initial update over. Removing stale items\n");
for(val=rblookup(RB_LUFIRST,NULL,db_removed); val != NULL; for(val=rblookup(RB_LUFIRST,NULL,db_removed); val != NULL;
val=rblookup(RB_LUNEXT,val,db_removed)) { val=rblookup(RB_LUNEXT,val,db_removed)) {
db_delete(*((int*)val)); db_delete(*((int*)val));
} }
DPRINTF(ERR_DEBUG,"Done removing stale items\n"); DPRINTF(E_DBG,L_DB|L_SCAN,"Done removing stale items\n");
rbdestroy(db_removed); rbdestroy(db_removed);
@ -465,14 +465,14 @@ int db_add_playlist(unsigned int playlistid, char *name, int is_smart) {
return -1; return -1;
} }
DPRINTF(ERR_DEBUG,"Adding new playlist %s\n",name); DPRINTF(E_DBG,L_DB|L_PL,"Adding new playlist %s\n",name);
pnew->next=db_playlists.next; pnew->next=db_playlists.next;
db_playlists.next=pnew; db_playlists.next=pnew;
db_version_no++; db_version_no++;
DPRINTF(ERR_DEBUG,"Added playlist\n"); DPRINTF(E_DBG,L_DB|L_PL,"Added playlist\n");
return 0; return 0;
} }
@ -496,14 +496,14 @@ int db_add_playlist_song(unsigned int playlistid, unsigned int itemid) {
pnew->id=itemid; pnew->id=itemid;
pnew->next=NULL; pnew->next=NULL;
DPRINTF(ERR_DEBUG,"Adding item %d to %d\n",itemid,playlistid); DPRINTF(E_DBG,L_DB|L_PL,"Adding item %d to %d\n",itemid,playlistid);
current=db_playlists.next; current=db_playlists.next;
while(current && (current->id != playlistid)) while(current && (current->id != playlistid))
current=current->next; current=current->next;
if(!current) { if(!current) {
DPRINTF(ERR_WARN,"Could not find playlist attempting to add to\n"); DPRINTF(E_WARN,L_DB|L_PL,"Could not find playlist attempting to add to\n");
if(!db_update_mode) if(!db_update_mode)
db_unlock(); db_unlock();
db_unlock(); db_unlock();
@ -515,13 +515,13 @@ int db_add_playlist_song(unsigned int playlistid, unsigned int itemid) {
db_playlist_count++; db_playlist_count++;
current->songs++; current->songs++;
DPRINTF(ERR_DEBUG,"Playlist now has %d entries\n",current->songs); DPRINTF(E_DBG,L_DB|L_PL,"Playlist now has %d entries\n",current->songs);
pnew->next = current->nodes; pnew->next = current->nodes;
current->nodes = pnew; current->nodes = pnew;
db_version_no++; db_version_no++;
DPRINTF(ERR_DEBUG,"Added playlist item\n"); DPRINTF(E_DBG,L_DB|L_PL,"Added playlist item\n");
return 0; return 0;
} }
@ -677,7 +677,7 @@ int db_unpackrecord(datum *pdatum, MP3FILE *pmp3) {
ppacked=(MP3PACKED*)pdatum->dptr; ppacked=(MP3PACKED*)pdatum->dptr;
if(ppacked->version != DB_VERSION) if(ppacked->version != DB_VERSION)
DPRINTF(ERR_FATAL,"ON-DISK DATABASE VERSION HAS CHANGED\n" DPRINTF(E_FATAL,L_DB,"ON-DISK DATABASE VERSION HAS CHANGED\n"
"Delete your songs.gdb and restart.\n"); "Delete your songs.gdb and restart.\n");
pmp3->bitrate=ppacked->bitrate; pmp3->bitrate=ppacked->bitrate;
@ -772,7 +772,7 @@ int db_add(MP3FILE *pmp3) {
MP3PACKED *ppacked; MP3PACKED *ppacked;
unsigned int id; unsigned int id;
DPRINTF(ERR_DEBUG,"Adding %s\n",pmp3->path); DPRINTF(E_DBG,L_DB,"Adding %s\n",pmp3->path);
if(!(pnew=db_packrecord(pmp3))) { if(!(pnew=db_packrecord(pmp3))) {
errno=ENOMEM; errno=ENOMEM;
@ -791,16 +791,16 @@ int db_add(MP3FILE *pmp3) {
ppacked->time_played=0; /* do we want to keep track of this? */ ppacked->time_played=0; /* do we want to keep track of this? */
if(gdbm_store(db_songs,dkey,*pnew,GDBM_REPLACE)) { if(gdbm_store(db_songs,dkey,*pnew,GDBM_REPLACE)) {
DPRINTF(ERR_FATAL,"Error inserting file %s in database\n",pmp3->fname); DPRINTF(E_FATAL,L_DB,"Error inserting file %s in database\n",pmp3->fname);
} }
DPRINTF(ERR_DEBUG,"Testing for %d\n",pmp3->id); DPRINTF(E_DBG,L_DB,"Testing for %d\n",pmp3->id);
id=pmp3->id; id=pmp3->id;
dkey.dptr=(void*)&id; dkey.dptr=(void*)&id;
dkey.dsize=sizeof(unsigned int); dkey.dsize=sizeof(unsigned int);
if(!gdbm_exists(db_songs,dkey)) { if(!gdbm_exists(db_songs,dkey)) {
DPRINTF(ERR_FATAL,"Error.. could not find just added file\n"); DPRINTF(E_FATAL,L_DB,"Error.. could not find just added file\n");
} }
free(pnew->dptr); free(pnew->dptr);
@ -810,7 +810,7 @@ int db_add(MP3FILE *pmp3) {
db_song_count++; db_song_count++;
DPRINTF(ERR_DEBUG,"Added file\n"); DPRINTF(E_DBG,L_DB,"Added file\n");
return 0; return 0;
} }
@ -903,10 +903,10 @@ ENUMHANDLE db_enum_begin(void) {
data = gdbm_fetch(db_songs, key); data = gdbm_fetch(db_songs, key);
if(!data.dptr) if(!data.dptr)
DPRINTF(ERR_FATAL, "Cannot find item... corrupt database?\n"); DPRINTF(E_FATAL,L_DB, "Cannot find item... corrupt database?\n");
if(db_unpackrecord(&data, &entry->mp3file)) if(db_unpackrecord(&data, &entry->mp3file))
DPRINTF(ERR_FATAL, "Cannot unpack item... corrupt database?\n"); DPRINTF(E_FATAL,L_DB, "Cannot unpack item... corrupt database?\n");
for(root = &helper->root ; *root ; root = &(**root).next) for(root = &helper->root ; *root ; root = &(**root).next)
{ {
@ -998,10 +998,10 @@ MP3FILE *db_enum(ENUMHANDLE *current) {
if(pkey->dptr) { if(pkey->dptr) {
data=gdbm_fetch(db_songs,*pkey); data=gdbm_fetch(db_songs,*pkey);
if(!data.dptr) if(!data.dptr)
DPRINTF(ERR_FATAL, "Cannot find item.... corrupt database?\n"); DPRINTF(E_FATAL,L_DB, "Cannot find item.... corrupt database?\n");
if(db_unpackrecord(&data,&mp3)) if(db_unpackrecord(&data,&mp3))
DPRINTF(ERR_FATAL,"Cannot unpack item... corrupt database?\n"); DPRINTF(E_FATAL,L_DB,"Cannot unpack item... corrupt database?\n");
free(data.dptr); free(data.dptr);
@ -1274,14 +1274,14 @@ int db_exists(int id) {
MP3FILE *pmp3; MP3FILE *pmp3;
datum key,content; datum key,content;
DPRINTF(ERR_DEBUG,"Checking if node %d in db\n",id); DPRINTF(E_DBG,L_DB,"Checking if node %d in db\n",id);
key.dptr=(char*)&id; key.dptr=(char*)&id;
key.dsize=sizeof(int); key.dsize=sizeof(int);
content=gdbm_fetch(db_songs,key); content=gdbm_fetch(db_songs,key);
MEMNOTIFY(content.dptr); MEMNOTIFY(content.dptr);
if(!content.dptr) { if(!content.dptr) {
DPRINTF(ERR_DEBUG,"Nope! Not in DB\n"); DPRINTF(E_DBG,L_DB,"Nope! Not in DB\n");
return 0; return 0;
} }
@ -1289,13 +1289,13 @@ int db_exists(int id) {
/* knock it off the maybe list */ /* knock it off the maybe list */
node = (int*)rbdelete((void*)&id,db_removed); node = (int*)rbdelete((void*)&id,db_removed);
if(node) { if(node) {
DPRINTF(ERR_DEBUG,"Knocked node %d from the list\n",*node); DPRINTF(E_DBG,L_DB,"Knocked node %d from the list\n",*node);
free(node); free(node);
} }
} }
free(content.dptr); free(content.dptr);
DPRINTF(ERR_DEBUG,"Yup, in database\n"); DPRINTF(E_DBG,L_DB,"Yup, in database\n");
return 1; return 1;
} }
@ -1337,7 +1337,7 @@ int db_delete(int id) {
DB_PLAYLIST *pcurrent; DB_PLAYLIST *pcurrent;
DB_PLAYLISTENTRY *phead, *ptail; DB_PLAYLISTENTRY *phead, *ptail;
DPRINTF(ERR_DEBUG,"Removing item %d\n",id); DPRINTF(E_DBG,L_DB,"Removing item %d\n",id);
if(db_exists(id)) { if(db_exists(id)) {
key.dptr=(void*)&id; key.dptr=(void*)&id;
@ -1356,7 +1356,7 @@ int db_delete(int id) {
} }
if(phead) { /* found it */ if(phead) { /* found it */
DPRINTF(ERR_DEBUG,"Removing from playlist %d\n", DPRINTF(E_DBG,L_DB|L_PL,"Removing from playlist %d\n",
pcurrent->id); pcurrent->id);
if(phead == pcurrent->nodes) { if(phead == pcurrent->nodes) {
pcurrent->nodes=phead->next; pcurrent->nodes=phead->next;
@ -1366,7 +1366,7 @@ int db_delete(int id) {
free(phead); free(phead);
if(pcurrent->nodes == NULL) { if(pcurrent->nodes == NULL) {
DPRINTF(ERR_DEBUG,"Empty Playlist!\n"); DPRINTF(E_DBG,L_DB|L_PL,"Empty Playlist!\n");
db_playlist_count--; db_playlist_count--;
} }
} }

View File

@ -252,10 +252,10 @@ int db_add_playlist(unsigned int playlistid, char *name, int is_smart) {
return -1; return -1;
} }
DPRINTF(ERR_DEBUG,"Adding new playlist %s\n",name); DPRINTF(E_DBG,L_DB,"Adding new playlist %s\n",name);
if((err=pthread_rwlock_wrlock(&db_rwlock))) { if((err=pthread_rwlock_wrlock(&db_rwlock))) {
DPRINTF(ERR_WARN,"cannot lock wrlock in db_add\n"); DPRINTF(E_WARN,L_DB,"cannot lock wrlock in db_add\n");
free(pnew->name); free(pnew->name);
free(pnew); free(pnew);
errno=err; errno=err;
@ -272,7 +272,7 @@ int db_add_playlist(unsigned int playlistid, char *name, int is_smart) {
} }
pthread_rwlock_unlock(&db_rwlock); pthread_rwlock_unlock(&db_rwlock);
DPRINTF(ERR_DEBUG,"Added playlist\n"); DPRINTF(E_DBG,L_DB,"Added playlist\n");
return 0; return 0;
} }
@ -293,10 +293,10 @@ int db_add_playlist_song(unsigned int playlistid, unsigned int itemid) {
pnew->id=itemid; pnew->id=itemid;
pnew->next=NULL; pnew->next=NULL;
DPRINTF(ERR_DEBUG,"Adding new playlist item\n"); DPRINTF(E_DBG,L_DB,"Adding new playlist item\n");
if((err=pthread_rwlock_wrlock(&db_rwlock))) { if((err=pthread_rwlock_wrlock(&db_rwlock))) {
DPRINTF(ERR_WARN,"cannot lock wrlock in db_add\n"); DPRINTF(E_WARN,L_DB,"cannot lock wrlock in db_add\n");
free(pnew); free(pnew);
errno=err; errno=err;
return -1; return -1;
@ -307,7 +307,7 @@ int db_add_playlist_song(unsigned int playlistid, unsigned int itemid) {
current=current->next; current=current->next;
if(!current) { if(!current) {
DPRINTF(ERR_WARN,"Could not find playlist attempting to add to\n"); DPRINTF(E_WARN,L_DB,"Could not find playlist attempting to add to\n");
pthread_rwlock_unlock(&db_rwlock); pthread_rwlock_unlock(&db_rwlock);
free(pnew); free(pnew);
return -1; return -1;
@ -325,7 +325,7 @@ int db_add_playlist_song(unsigned int playlistid, unsigned int itemid) {
} }
pthread_rwlock_unlock(&db_rwlock); pthread_rwlock_unlock(&db_rwlock);
DPRINTF(ERR_DEBUG,"Added playlist item\n"); DPRINTF(E_DBG,L_DB,"Added playlist item\n");
return 0; return 0;
} }
@ -340,7 +340,7 @@ int db_add(MP3FILE *mp3file) {
int g; int g;
MP3RECORD *pnew; MP3RECORD *pnew;
DPRINTF(ERR_DEBUG,"Adding %s\n",mp3file->path); DPRINTF(E_DBG,L_DB,"Adding %s\n",mp3file->path);
if((pnew=(MP3RECORD*)malloc(sizeof(MP3RECORD))) == NULL) { if((pnew=(MP3RECORD*)malloc(sizeof(MP3RECORD))) == NULL) {
free(pnew); free(pnew);
@ -386,14 +386,14 @@ int db_add(MP3FILE *mp3file) {
g = g && (pnew->mp3file.grouping=strdup(mp3file->grouping)); g = g && (pnew->mp3file.grouping=strdup(mp3file->grouping));
if(!g) { if(!g) {
DPRINTF(ERR_WARN,"Malloc error in db_add\n"); DPRINTF(E_WARN,L_DB,"Malloc error in db_add\n");
db_freerecord(pnew); db_freerecord(pnew);
errno=ENOMEM; errno=ENOMEM;
return -1; return -1;
} }
if((err=pthread_rwlock_wrlock(&db_rwlock))) { if((err=pthread_rwlock_wrlock(&db_rwlock))) {
DPRINTF(ERR_WARN,"cannot lock wrlock in db_add\n"); DPRINTF(E_WARN,L_DB,"cannot lock wrlock in db_add\n");
db_freerecord(pnew); db_freerecord(pnew);
errno=err; errno=err;
return -1; return -1;
@ -411,7 +411,7 @@ int db_add(MP3FILE *mp3file) {
db_song_count++; db_song_count++;
pthread_rwlock_unlock(&db_rwlock); pthread_rwlock_unlock(&db_rwlock);
DPRINTF(ERR_DEBUG,"Added file\n"); DPRINTF(E_DBG,L_DB,"Added file\n");
return 0; return 0;
} }
@ -450,7 +450,7 @@ MP3RECORD *db_enum_begin(void) {
int err; int err;
if((err=pthread_rwlock_rdlock(&db_rwlock))) { if((err=pthread_rwlock_rdlock(&db_rwlock))) {
DPRINTF(ERR_FATAL,"Cannot lock rwlock\n"); DPRINTF(E_FATAL,L_DB,"Cannot lock rwlock\n");
errno=err; errno=err;
return NULL; return NULL;
} }
@ -468,7 +468,7 @@ DB_PLAYLIST *db_playlist_enum_begin(void) {
DB_PLAYLIST *current; DB_PLAYLIST *current;
if((err=pthread_rwlock_rdlock(&db_rwlock))) { if((err=pthread_rwlock_rdlock(&db_rwlock))) {
DPRINTF(ERR_FATAL,"Cannot lock rwlock\n"); DPRINTF(E_FATAL,L_DB,"Cannot lock rwlock\n");
errno=err; errno=err;
return NULL; return NULL;
} }
@ -491,7 +491,7 @@ DB_PLAYLISTENTRY *db_playlist_items_enum_begin(int playlistid) {
int err; int err;
if((err=pthread_rwlock_rdlock(&db_rwlock))) { if((err=pthread_rwlock_rdlock(&db_rwlock))) {
DPRINTF(ERR_FATAL,"Cannot lock rwlock\n"); DPRINTF(E_FATAL,L_DB,"Cannot lock rwlock\n");
errno=err; errno=err;
return NULL; return NULL;
} }
@ -636,7 +636,7 @@ int db_get_playlist_is_smart(int playlistid) {
int result; int result;
if((err=pthread_rwlock_rdlock(&db_rwlock))) { if((err=pthread_rwlock_rdlock(&db_rwlock))) {
DPRINTF(ERR_FATAL,"Cannot lock rwlock\n"); DPRINTF(E_FATAL,L_DB,"Cannot lock rwlock\n");
errno=err; errno=err;
return -1; return -1;
} }
@ -667,7 +667,7 @@ int db_get_playlist_entry_count(int playlistid) {
int err; int err;
if((err=pthread_rwlock_rdlock(&db_rwlock))) { if((err=pthread_rwlock_rdlock(&db_rwlock))) {
DPRINTF(ERR_FATAL,"Cannot lock rwlock\n"); DPRINTF(E_FATAL,L_DB,"Cannot lock rwlock\n");
errno=err; errno=err;
return -1; return -1;
} }
@ -699,7 +699,7 @@ char *db_get_playlist_name(int playlistid) {
int err; int err;
if((err=pthread_rwlock_rdlock(&db_rwlock))) { if((err=pthread_rwlock_rdlock(&db_rwlock))) {
DPRINTF(ERR_FATAL,"Cannot lock rwlock\n"); DPRINTF(E_FATAL,L_DB,"Cannot lock rwlock\n");
errno=err; errno=err;
return NULL; return NULL;
} }

View File

@ -86,7 +86,7 @@ int da_get_image_fd(char *filename) {
strcpy(path_end+1,config.artfilename); strcpy(path_end+1,config.artfilename);
fd = open(buffer,O_RDONLY); fd = open(buffer,O_RDONLY);
if(fd != -1) if(fd != -1)
DPRINTF(ERR_INFO,"Found image file %s (fd %d)\n",buffer,fd); DPRINTF(E_INF,L_ART,"Found image file %s (fd %d)\n",buffer,fd);
return fd; return fd;
} }
@ -137,7 +137,7 @@ int da_attach_image(int img_fd, int out_fd, int mp3_fd, int offset)
fstat(img_fd,&sb); fstat(img_fd,&sb);
img_size=sb.st_size; img_size=sb.st_size;
DPRINTF(ERR_INFO,"Image appears to be %ld bytes\n",img_size); DPRINTF(E_INF,L_ART,"Image appears to be %ld bytes\n",img_size);
if(img_size < 1) { if(img_size < 1) {
r_close(img_fd); r_close(img_fd);
return 0; return 0;
@ -152,7 +152,7 @@ int da_attach_image(int img_fd, int out_fd, int mp3_fd, int offset)
tag_info = da_get_current_tag_info(mp3_fd); tag_info = da_get_current_tag_info(mp3_fd);
tag_size = tag_info[1]; tag_size = tag_info[1];
DPRINTF(ERR_INFO,"Current tag size is %d bytes\n",tag_size); DPRINTF(E_INF,L_ART,"Current tag size is %d bytes\n",tag_size);
if (tag_info[0] == 3) { if (tag_info[0] == 3) {
r_write(out_fd,"ID3\x03\0\0",6); r_write(out_fd,"ID3\x03\0\0",6);
@ -187,7 +187,7 @@ int da_attach_image(int img_fd, int out_fd, int mp3_fd, int offset)
} }
lseek(img_fd,0,SEEK_SET); lseek(img_fd,0,SEEK_SET);
copyfile(img_fd,out_fd); copyfile(img_fd,out_fd);
DPRINTF(ERR_INFO,"Done copying IMG %ld\n",img_size); DPRINTF(E_INF,L_ART,"Done copying IMG %ld\n",img_size);
r_close(img_fd); r_close(img_fd);
free(tag_info); free(tag_info);
return 0; return 0;
@ -202,63 +202,63 @@ int da_attach_image(int img_fd, int out_fd, int mp3_fd, int offset)
off_t da_aac_rewrite_stco_atom(off_t extra_size, int out_fd, FILE *aac_fp, off_t da_aac_rewrite_stco_atom(off_t extra_size, int out_fd, FILE *aac_fp,
off_t last_pos) off_t last_pos)
{ {
int aac_fd; int aac_fd;
struct stat sb; struct stat sb;
unsigned char buffer[4]; unsigned char buffer[4];
off_t file_size; off_t file_size;
int atom_offset; int atom_offset;
int atom_length; int atom_length;
off_t cur_pos; off_t cur_pos;
off_t old_pos; off_t old_pos;
int i; int i;
unsigned int num_entries; unsigned int num_entries;
unsigned int offset_entry; unsigned int offset_entry;
aac_fd = fileno(aac_fp); aac_fd = fileno(aac_fp);
fstat(aac_fd, &sb); fstat(aac_fd, &sb);
file_size = sb.st_size; file_size = sb.st_size;
/* Drill down to the 'stco' atom which contains offsets to chunks in /* Drill down to the 'stco' atom which contains offsets to chunks in
the 'mdat' section. These offsets need to be readjusted. */ the 'mdat' section. These offsets need to be readjusted. */
atom_offset = aac_drilltoatom(aac_fp, "moov:trak:mdia:minf:stbl:stco", atom_offset = aac_drilltoatom(aac_fp, "moov:trak:mdia:minf:stbl:stco",
&atom_length); &atom_length);
if (atom_offset != -1) { if (atom_offset != -1) {
/* Skip flags */ /* Skip flags */
fseek(aac_fp, 4, SEEK_CUR); fseek(aac_fp, 4, SEEK_CUR);
old_pos = last_pos; old_pos = last_pos;
cur_pos = ftell(aac_fp); cur_pos = ftell(aac_fp);
/* Copy from last point to this point. */ /* Copy from last point to this point. */
fseek(aac_fp, old_pos, SEEK_SET); fseek(aac_fp, old_pos, SEEK_SET);
fcopyblock(aac_fp, out_fd, cur_pos - old_pos); fcopyblock(aac_fp, out_fd, cur_pos - old_pos);
/* Read number of entries */ /* Read number of entries */
fread(buffer, 1, 4, aac_fp); fread(buffer, 1, 4, aac_fp);
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
num_entries = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; num_entries = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
DPRINTF(ERR_DEBUG, "Readjusting %d 'stco' table offsets.\n", num_entries); DPRINTF(E_DBG, L_ART,"Readjusting %d 'stco' table offsets.\n", num_entries);
/* PENDING: Error check on num_entries? */ /* PENDING: Error check on num_entries? */
for (i = 0; i < num_entries; i++) { for (i = 0; i < num_entries; i++) {
fread(buffer, 1, 4, aac_fp); fread(buffer, 1, 4, aac_fp);
offset_entry = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; offset_entry = (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3];
/* Adjust chunk offset. */ /* Adjust chunk offset. */
offset_entry += extra_size; offset_entry += extra_size;
buffer[3] = offset_entry & 0xFF; buffer[3] = offset_entry & 0xFF;
buffer[2] = (offset_entry >> 8) & 0xFF; buffer[2] = (offset_entry >> 8) & 0xFF;
buffer[1] = (offset_entry >> 16) & 0xFF; buffer[1] = (offset_entry >> 16) & 0xFF;
buffer[0] = (offset_entry >> 24) & 0xFF; buffer[0] = (offset_entry >> 24) & 0xFF;
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
offset_entry = 0; offset_entry = 0;
}
return ftell(aac_fp);
} else {
DPRINTF(E_LOG, L_ART,"No 'stco' atom found.\n");
} }
return ftell(aac_fp); return last_pos;
} else {
DPRINTF(ERR_LOG, "No 'stco' atom found.\n");
}
return last_pos;
} }
/** /**
@ -268,159 +268,159 @@ off_t da_aac_rewrite_stco_atom(off_t extra_size, int out_fd, FILE *aac_fp,
off_t da_aac_insert_covr_atom(off_t extra_size, int out_fd, FILE *aac_fp, off_t da_aac_insert_covr_atom(off_t extra_size, int out_fd, FILE *aac_fp,
off_t last_pos, off_t file_size, int img_fd) off_t last_pos, off_t file_size, int img_fd)
{ {
int aac_fd; int aac_fd;
struct stat sb; struct stat sb;
off_t old_pos; off_t old_pos;
unsigned char buffer[4]; unsigned char buffer[4];
int atom_offset; int atom_offset;
int atom_length; int atom_length;
off_t cur_pos; off_t cur_pos;
char *cp; char *cp;
unsigned char img_type_flag = 0; unsigned char img_type_flag = 0;
/* Figure out image file type since this needs to be encoded in the atom. */ /* Figure out image file type since this needs to be encoded in the atom. */
cp = strrchr(config.artfilename, '.'); cp = strrchr(config.artfilename, '.');
if (cp) { if (cp) {
if (!strcasecmp(cp, ".jpeg") || !strcasecmp(cp, ".jpg")) { if (!strcasecmp(cp, ".jpeg") || !strcasecmp(cp, ".jpg")) {
img_type_flag = 0x0d; img_type_flag = 0x0d;
} }
else if (!strcasecmp(cp, ".png")) { else if (!strcasecmp(cp, ".png")) {
img_type_flag = 0x0e; img_type_flag = 0x0e;
} else {
DPRINTF(E_LOG,L_ART, "Image type '%s' not supported.\n", cp);
return 0;
}
} else { } else {
DPRINTF(ERR_LOG, "Image type '%s' not supported.\n", cp); DPRINTF(E_LOG, L_ART, "No file extension for image file.\n");
return 0;
} }
} else {
DPRINTF(ERR_LOG, "No file extension for image file.\n");
}
aac_fd = fileno(aac_fp); aac_fd = fileno(aac_fp);
fstat(aac_fd, &sb); fstat(aac_fd, &sb);
file_size = sb.st_size; file_size = sb.st_size;
rewind(aac_fp); rewind(aac_fp);
atom_offset = scan_aac_findatom(aac_fp, file_size, "moov", &atom_length); atom_offset = scan_aac_findatom(aac_fp, file_size, "moov", &atom_length);
if (atom_offset != -1) {
atom_offset = scan_aac_findatom(aac_fp, atom_length - 8, "udta", &atom_length);
if (atom_offset != -1) { if (atom_offset != -1) {
old_pos = last_pos; atom_offset = scan_aac_findatom(aac_fp, atom_length - 8, "udta", &atom_length);
cur_pos = ftell(aac_fp) - 8; if (atom_offset != -1) {
DPRINTF(ERR_INFO,"Found udta atom at %ld.\n", cur_pos); old_pos = last_pos;
fseek(aac_fp, old_pos, SEEK_SET); cur_pos = ftell(aac_fp) - 8;
fcopyblock(aac_fp, out_fd, cur_pos - old_pos); DPRINTF(E_INF,L_ART,"Found udta atom at %ld.\n", cur_pos);
fseek(aac_fp, old_pos, SEEK_SET);
fcopyblock(aac_fp, out_fd, cur_pos - old_pos);
/* Write out new length */ /* Write out new length */
atom_length += extra_size; atom_length += extra_size;
buffer[3] = atom_length & 0xFF; buffer[3] = atom_length & 0xFF;
buffer[2] = ( atom_length >> 8 ) & 0xFF; buffer[2] = ( atom_length >> 8 ) & 0xFF;
buffer[1] = ( atom_length >> 16 ) & 0xFF; buffer[1] = ( atom_length >> 16 ) & 0xFF;
buffer[0] = ( atom_length >> 24 ) & 0xFF; buffer[0] = ( atom_length >> 24 ) & 0xFF;
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
cur_pos += 4; cur_pos += 4;
fseek(aac_fp, 8, SEEK_CUR); fseek(aac_fp, 8, SEEK_CUR);
atom_offset = scan_aac_findatom(aac_fp, atom_length - 8, "meta", &atom_length); atom_offset = scan_aac_findatom(aac_fp, atom_length - 8, "meta", &atom_length);
if (atom_offset != -1) { if (atom_offset != -1) {
old_pos = cur_pos; old_pos = cur_pos;
cur_pos = ftell(aac_fp) - 8; cur_pos = ftell(aac_fp) - 8;
DPRINTF(ERR_INFO,"Found meta atom at %ld.\n", cur_pos); DPRINTF(E_INF,L_ART,"Found meta atom at %ld.\n", cur_pos);
fseek(aac_fp, old_pos, SEEK_SET); fseek(aac_fp, old_pos, SEEK_SET);
fcopyblock(aac_fp, out_fd, cur_pos - old_pos); fcopyblock(aac_fp, out_fd, cur_pos - old_pos);
/* Write out new length */ /* Write out new length */
atom_length += extra_size; atom_length += extra_size;
buffer[3] = atom_length & 0xFF; buffer[3] = atom_length & 0xFF;
buffer[2] = ( atom_length >> 8 ) & 0xFF; buffer[2] = ( atom_length >> 8 ) & 0xFF;
buffer[1] = ( atom_length >> 16 ) & 0xFF; buffer[1] = ( atom_length >> 16 ) & 0xFF;
buffer[0] = ( atom_length >> 24 ) & 0xFF; buffer[0] = ( atom_length >> 24 ) & 0xFF;
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
cur_pos += 4; cur_pos += 4;
fseek(aac_fp, 12, SEEK_CUR); /* "meta" atom hack. */ fseek(aac_fp, 12, SEEK_CUR); /* "meta" atom hack. */
atom_offset = scan_aac_findatom(aac_fp, atom_length - 8, "ilst", &atom_length); atom_offset = scan_aac_findatom(aac_fp, atom_length - 8, "ilst", &atom_length);
if (atom_offset != -1) { if (atom_offset != -1) {
old_pos = cur_pos; old_pos = cur_pos;
cur_pos = ftell(aac_fp) - 8; cur_pos = ftell(aac_fp) - 8;
DPRINTF(ERR_INFO,"Found ilst atom at %ld.\n", cur_pos); DPRINTF(E_INF,L_ART,"Found ilst atom at %ld.\n", cur_pos);
fseek(aac_fp, old_pos, SEEK_SET); fseek(aac_fp, old_pos, SEEK_SET);
fcopyblock(aac_fp, out_fd, cur_pos - old_pos); fcopyblock(aac_fp, out_fd, cur_pos - old_pos);
old_pos = cur_pos + 4; old_pos = cur_pos + 4;
cur_pos += atom_length; cur_pos += atom_length;
/* Write out new length */ /* Write out new length */
atom_length += extra_size; atom_length += extra_size;
buffer[3] = atom_length & 0xFF; buffer[3] = atom_length & 0xFF;
buffer[2] = ( atom_length >> 8 ) & 0xFF; buffer[2] = ( atom_length >> 8 ) & 0xFF;
buffer[1] = ( atom_length >> 16 ) & 0xFF; buffer[1] = ( atom_length >> 16 ) & 0xFF;
buffer[0] = ( atom_length >> 24 ) & 0xFF; buffer[0] = ( atom_length >> 24 ) & 0xFF;
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
/* Copy all 'ilst' children (all the MP4 'tags'). We will append /* Copy all 'ilst' children (all the MP4 'tags'). We will append
at the end. */ at the end. */
fseek(aac_fp, old_pos, SEEK_SET); fseek(aac_fp, old_pos, SEEK_SET);
fcopyblock(aac_fp, out_fd, cur_pos - old_pos); fcopyblock(aac_fp, out_fd, cur_pos - old_pos);
cur_pos = ftell(aac_fp); cur_pos = ftell(aac_fp);
/* Write out 'covr' atom */ /* Write out 'covr' atom */
atom_length = extra_size; atom_length = extra_size;
buffer[3] = atom_length & 0xFF; buffer[3] = atom_length & 0xFF;
buffer[2] = ( atom_length >> 8 ) & 0xFF; buffer[2] = ( atom_length >> 8 ) & 0xFF;
buffer[1] = ( atom_length >> 16 ) & 0xFF; buffer[1] = ( atom_length >> 16 ) & 0xFF;
buffer[0] = ( atom_length >> 24 ) & 0xFF; buffer[0] = ( atom_length >> 24 ) & 0xFF;
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
r_write(out_fd, "covr", 4); r_write(out_fd, "covr", 4);
/* Write out 'data' atom */ /* Write out 'data' atom */
atom_length = extra_size - 8; atom_length = extra_size - 8;
buffer[3] = atom_length & 0xFF; buffer[3] = atom_length & 0xFF;
buffer[2] = ( atom_length >> 8 ) & 0xFF; buffer[2] = ( atom_length >> 8 ) & 0xFF;
buffer[1] = ( atom_length >> 16 ) & 0xFF; buffer[1] = ( atom_length >> 16 ) & 0xFF;
buffer[0] = ( atom_length >> 24 ) & 0xFF; buffer[0] = ( atom_length >> 24 ) & 0xFF;
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
r_write(out_fd, "data", 4); r_write(out_fd, "data", 4);
/* Write out 'data' flags */ /* Write out 'data' flags */
buffer[3] = img_type_flag; buffer[3] = img_type_flag;
buffer[2] = 0; buffer[2] = 0;
buffer[1] = 0; buffer[1] = 0;
buffer[0] = 0; buffer[0] = 0;
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
/* Reserved? Zero in any case. */ /* Reserved? Zero in any case. */
buffer[3] = 0; buffer[3] = 0;
buffer[2] = 0; buffer[2] = 0;
buffer[1] = 0; buffer[1] = 0;
buffer[0] = 0; buffer[0] = 0;
r_write(out_fd, buffer, 4); r_write(out_fd, buffer, 4);
/* Now ready for the image stream. Copy it over. */ /* Now ready for the image stream. Copy it over. */
lseek(img_fd,0,SEEK_SET); lseek(img_fd,0,SEEK_SET);
copyfile(img_fd,out_fd); copyfile(img_fd,out_fd);
last_pos = cur_pos; last_pos = cur_pos;
} else { } else {
DPRINTF(ERR_LOG, "No 'ilst' atom found.\n"); DPRINTF(E_LOG, L_ART,"No 'ilst' atom found.\n");
} }
} else { } else {
DPRINTF(ERR_LOG, "No 'meta' atom found.\n"); DPRINTF(E_LOG,L_ART, "No 'meta' atom found.\n");
} }
} else {
DPRINTF(E_LOG,L_ART, "No 'udta' atom found.\n");
}
} else { } else {
DPRINTF(ERR_LOG, "No 'udta' atom found.\n"); DPRINTF(E_LOG,L_ART, "No 'moov' atom found.\n");
} }
} else {
DPRINTF(ERR_LOG, "No 'moov' atom found.\n");
}
/* Seek to position right after 'udta' atom. Let main() stream out the /* Seek to position right after 'udta' atom. Let main() stream out the
rest. */ rest. */
lseek(aac_fd, last_pos, SEEK_SET); lseek(aac_fd, last_pos, SEEK_SET);
return last_pos; return last_pos;
} }
/* /*
@ -433,147 +433,147 @@ off_t da_aac_insert_covr_atom(off_t extra_size, int out_fd, FILE *aac_fp,
*/ */
off_t da_aac_attach_image(int img_fd, int out_fd, int aac_fd, int offset) off_t da_aac_attach_image(int img_fd, int out_fd, int aac_fd, int offset)
{ {
off_t img_size; off_t img_size;
int atom_length; int atom_length;
unsigned int extra_size; unsigned int extra_size;
off_t file_size; off_t file_size;
unsigned char buffer[4]; unsigned char buffer[4];
struct stat sb; struct stat sb;
FILE *aac_fp; FILE *aac_fp;
off_t stco_atom_pos; off_t stco_atom_pos;
off_t ilst_atom_pos; off_t ilst_atom_pos;
off_t last_pos; off_t last_pos;
fstat(img_fd, &sb); fstat(img_fd, &sb);
img_size = sb.st_size; img_size = sb.st_size;
DPRINTF(ERR_INFO,"Image size (in bytes): %ld.\n", img_size); DPRINTF(E_INF,L_ART,"Image size (in bytes): %ld.\n", img_size);
/* PENDING: We can be stricter here by checking the shortest header between /* PENDING: We can be stricter here by checking the shortest header between
PNG and JPG and using that length. */ PNG and JPG and using that length. */
if (img_size < 1) { if (img_size < 1) {
r_close(img_fd); r_close(img_fd);
return 0; return 0;
}
/* Include extra bytes for 'covr' atom length (4) and type (4) and its
'data' item length (4) and type (4) plus 4 bytes for the 'data' atom's
flags and 4 reserved(?) bytes. */
extra_size = img_size + 24;
fstat(aac_fd, &sb);
file_size = sb.st_size;
aac_fp = fdopen(dup(aac_fd), "r");
stco_atom_pos = aac_drilltoatom(aac_fp, "moov:trak:mdia:minf:stbl:stco",
&atom_length);
ilst_atom_pos = aac_drilltoatom(aac_fp, "moov:udta:meta:ilst",
&atom_length);
last_pos = aac_drilltoatom(aac_fp, "mdat", &atom_length);
if (last_pos != -1) {
if (offset >= last_pos) {
/* Offset is in the actual music data so don't bother processing
meta data. */
return 0;
} }
} else {
DPRINTF(ERR_LOG, "No 'mdat' atom.\n");
return 0;
}
rewind(aac_fp); /* Include extra bytes for 'covr' atom length (4) and type (4) and its
'data' item length (4) and type (4) plus 4 bytes for the 'data' atom's
flags and 4 reserved(?) bytes. */
extra_size = img_size + 24;
fstat(aac_fd, &sb);
file_size = sb.st_size;
aac_fp = fdopen(dup(aac_fd), "r");
stco_atom_pos = aac_drilltoatom(aac_fp, "moov:trak:mdia:minf:stbl:stco",
&atom_length);
ilst_atom_pos = aac_drilltoatom(aac_fp, "moov:udta:meta:ilst",
&atom_length);
last_pos = aac_drilltoatom(aac_fp, "mdat", &atom_length);
if (last_pos != -1) {
if (offset >= last_pos) {
/* Offset is in the actual music data so don't bother processing
meta data. */
return 0;
}
} else {
DPRINTF(E_LOG,L_ART, "No 'mdat' atom.\n");
return 0;
}
/* Re-adjust length of 'moov' atom. */
last_pos = scan_aac_findatom(aac_fp, file_size, "moov", &atom_length);
if (last_pos != -1) {
/* Copy everything from up to this atom */
rewind(aac_fp); rewind(aac_fp);
fcopyblock(aac_fp, out_fd, last_pos);
/* Write out new length. */ /* Re-adjust length of 'moov' atom. */
atom_length += extra_size; last_pos = scan_aac_findatom(aac_fp, file_size, "moov", &atom_length);
buffer[3] = atom_length & 0xFF; if (last_pos != -1) {
buffer[2] = ( atom_length >> 8 ) & 0xFF; /* Copy everything from up to this atom */
buffer[1] = ( atom_length >> 16 ) & 0xFF; rewind(aac_fp);
buffer[0] = ( atom_length >> 24 ) & 0xFF; fcopyblock(aac_fp, out_fd, last_pos);
r_write(out_fd, buffer, 4);
last_pos += 4; /* Write out new length. */
} else { atom_length += extra_size;
DPRINTF(ERR_LOG, "Could not find 'moov' atom.\n"); buffer[3] = atom_length & 0xFF;
return 0; buffer[2] = ( atom_length >> 8 ) & 0xFF;
} buffer[1] = ( atom_length >> 16 ) & 0xFF;
buffer[0] = ( atom_length >> 24 ) & 0xFF;
r_write(out_fd, buffer, 4);
if (stco_atom_pos < ilst_atom_pos) { last_pos += 4;
last_pos = da_aac_rewrite_stco_atom(extra_size, out_fd, aac_fp, last_pos); } else {
last_pos = da_aac_insert_covr_atom(extra_size, out_fd, aac_fp, last_pos, DPRINTF(E_LOG,L_ART, "Could not find 'moov' atom.\n");
file_size, img_fd); return 0;
} else { }
last_pos = da_aac_insert_covr_atom(extra_size, out_fd, aac_fp, last_pos,
file_size, img_fd);
last_pos = da_aac_rewrite_stco_atom(extra_size, out_fd, aac_fp, last_pos);
}
/* Seek to position right after last atom. Let main() stream out the rest. */ if (stco_atom_pos < ilst_atom_pos) {
lseek(aac_fd, last_pos, SEEK_SET); last_pos = da_aac_rewrite_stco_atom(extra_size, out_fd, aac_fp, last_pos);
last_pos = da_aac_insert_covr_atom(extra_size, out_fd, aac_fp, last_pos,
file_size, img_fd);
} else {
last_pos = da_aac_insert_covr_atom(extra_size, out_fd, aac_fp, last_pos,
file_size, img_fd);
last_pos = da_aac_rewrite_stco_atom(extra_size, out_fd, aac_fp, last_pos);
}
r_close(img_fd); /* Seek to position right after last atom. Let main() stream out the rest. */
fclose(aac_fp); lseek(aac_fd, last_pos, SEEK_SET);
return last_pos; r_close(img_fd);
fclose(aac_fp);
return last_pos;
} }
int copyblock(int fromfd, int tofd, size_t size) { int copyblock(int fromfd, int tofd, size_t size) {
char buf[BLKSIZE]; char buf[BLKSIZE];
int bytesread; int bytesread;
int totalbytes = 0; int totalbytes = 0;
int blocksize = BLKSIZE; int blocksize = BLKSIZE;
int bytesleft; int bytesleft;
while (totalbytes < size) { while (totalbytes < size) {
bytesleft = size - totalbytes; bytesleft = size - totalbytes;
if (bytesleft < BLKSIZE) { if (bytesleft < BLKSIZE) {
blocksize = bytesleft; blocksize = bytesleft;
} else { } else {
blocksize = BLKSIZE; blocksize = BLKSIZE;
}
if ((bytesread = r_read(fromfd, buf, blocksize)) < 0)
return -1;
if (bytesread == 0)
return totalbytes;
if (r_write(tofd, buf, bytesread) < 0)
return -1;
totalbytes += bytesread;
} }
if ((bytesread = r_read(fromfd, buf, blocksize)) < 0) return totalbytes;
return -1;
if (bytesread == 0)
return totalbytes;
if (r_write(tofd, buf, bytesread) < 0)
return -1;
totalbytes += bytesread;
}
return totalbytes;
} }
int fcopyblock(FILE *fromfp, int tofd, size_t size) { int fcopyblock(FILE *fromfp, int tofd, size_t size) {
char buf[BLKSIZE]; char buf[BLKSIZE];
int bytesread; int bytesread;
int totalbytes = 0; int totalbytes = 0;
int blocksize = BLKSIZE; int blocksize = BLKSIZE;
int bytesleft; int bytesleft;
while (totalbytes < size) { while (totalbytes < size) {
bytesleft = size - totalbytes; bytesleft = size - totalbytes;
if (bytesleft < BLKSIZE) { if (bytesleft < BLKSIZE) {
blocksize = bytesleft; blocksize = bytesleft;
} else { } else {
blocksize = BLKSIZE; blocksize = BLKSIZE;
} }
if ((bytesread = fread(buf, 1, blocksize, fromfp)) < blocksize) { if ((bytesread = fread(buf, 1, blocksize, fromfp)) < blocksize) {
if (ferror(fromfp)) if (ferror(fromfp))
return -1; return -1;
} }
if (r_write(tofd, buf, bytesread) < 0) if (r_write(tofd, buf, bytesread) < 0)
return -1; return -1;
if (feof(fromfp)) if (feof(fromfp))
return 0; return 0;
totalbytes += bytesread; totalbytes += bytesread;
} }
return totalbytes; return totalbytes;
} }

View File

@ -54,12 +54,12 @@ int err_debuglevel=0; /**< current debuglevel, set from command line with -d */
static int err_logdestination=LOGDEST_STDERR; /**< current log destination */ static int err_logdestination=LOGDEST_STDERR; /**< current log destination */
static FILE *err_file=NULL; /**< if logging to file, the handle of that file */ static FILE *err_file=NULL; /**< if logging to file, the handle of that file */
static pthread_mutex_t err_mutex=PTHREAD_MUTEX_INITIALIZER; /**< for serializing log messages */ static pthread_mutex_t err_mutex=PTHREAD_MUTEX_INITIALIZER; /**< for serializing log messages */
static unsigned int err_debugmask=0xFFFF; /**< what modules to debug, see \ref log_categories */
#ifdef DEBUG_MEMORY #ifdef DEBUG_MEMORY
/** /**
* Nodes for a linked list of in-use memory. Any malloc/strdup/etc * Nodes for a linked list of in-use memory. Any malloc/strdup/etc
* calls get a new node of this type added to the ::err_leak list. * calls get a new node of this type added to the #err_leak list.
*/ */
typedef struct tag_err_leak { typedef struct tag_err_leak {
void *ptr; void *ptr;
@ -89,7 +89,7 @@ static int err_unlock_mutex(void);
* \param level Level at which to log \ref log_levels * \param level Level at which to log \ref log_levels
* \param fmt printf-style * \param fmt printf-style
*/ */
void log_err(int level, char *fmt, ...) void log_err(int level, unsigned int cat, char *fmt, ...)
{ {
va_list ap; va_list ap;
char timebuf[256]; char timebuf[256];
@ -97,8 +97,13 @@ void log_err(int level, char *fmt, ...)
struct tm tm_now; struct tm tm_now;
time_t tt_now; time_t tt_now;
if(level > err_debuglevel) if(level) {
return; if(level > err_debuglevel)
return;
if(!(cat && err_debugmask))
return;
} /* we'll *always* process a log level 0 */
va_start(ap, fmt); va_start(ap, fmt);
vsnprintf(errbuf, sizeof(errbuf), fmt, ap); vsnprintf(errbuf, sizeof(errbuf), fmt, ap);
@ -222,10 +227,10 @@ void err_notify(char *file, int line, void *ptr) {
pnew=(ERR_LEAK*)malloc(sizeof(ERR_LEAK)); pnew=(ERR_LEAK*)malloc(sizeof(ERR_LEAK));
if(!pnew) if(!pnew)
log_err(1,"Error: cannot allocate leak struct\n"); DPRINTF(E_FATAL,L_MISC,"Error: cannot allocate leak struct\n");
if(err_lock_mutex()) if(err_lock_mutex())
log_err(1,"Error: cannot lock error mutex\n"); DPRINTF(E_FATAL,L_MISC,"Error: cannot lock error mutex\n");
pnew->file=file; pnew->file=file;
pnew->line=line; pnew->line=line;
@ -251,10 +256,10 @@ void *err_malloc(char *file, int line, size_t size) {
pnew=(ERR_LEAK*)malloc(sizeof(ERR_LEAK)); pnew=(ERR_LEAK*)malloc(sizeof(ERR_LEAK));
if(!pnew) if(!pnew)
log_err(1,"Error: cannot allocate leak struct\n"); DPRINTF(E_FATAL,L_MISC,"Error: cannot allocate leak struct\n");
if(err_lock_mutex()) if(err_lock_mutex())
log_err(1,"Error: cannot lock error mutex\n"); DPRINTF(E_FATAL,L_MISC,"Error: cannot lock error mutex\n");
pnew->file=file; pnew->file=file;
pnew->line=line; pnew->line=line;
@ -283,7 +288,7 @@ char *err_strdup(char *file, int line, const char *str) {
pnew=err_malloc(file,line,strlen(str) + 1); pnew=err_malloc(file,line,strlen(str) + 1);
if(!pnew) if(!pnew)
log_err(1,"Cannot malloc enough space for strdup\n"); DPRINTF(E_FATAL,L_MISC,"Cannot malloc enough space for strdup\n");
memcpy(pnew,str,strlen(str)+1); memcpy(pnew,str,strlen(str)+1);
return pnew; return pnew;
@ -301,7 +306,7 @@ void err_free(char *file, int line, void *ptr) {
ERR_LEAK *current,*last; ERR_LEAK *current,*last;
if(err_lock_mutex()) if(err_lock_mutex())
log_err(1,"Error: cannot lock error mutex\n"); DPRINTF(E_FATAL,L_MISC,"Error: cannot lock error mutex\n");
last=&err_leak; last=&err_leak;
current=last->next; current=last->next;
@ -312,7 +317,7 @@ void err_free(char *file, int line, void *ptr) {
} }
if(!current) { if(!current) {
log_err(1,"Attempt to free unallocated memory: %s, %d\n",file,line); DPRINTF(E_FATAL,L_MISC,"Attempt to free unallocated memory: %s, %d\n",file,line);
} else { } else {
free(current->ptr); free(current->ptr);
last->next=current->next; last->next=current->next;
@ -331,7 +336,7 @@ void err_leakcheck(void) {
ERR_LEAK *current; ERR_LEAK *current;
if(err_lock_mutex()) if(err_lock_mutex())
log_err(1,"Error: cannot lock error mutex\n"); DPRINTF(E_FATAL,L_MISC,"Error: cannot lock error mutex\n");
current=err_leak.next; current=err_leak.next;
while(current) { while(current) {

View File

@ -34,38 +34,43 @@
#define LOGDEST_LOGFILE 2 /**< Log to logfile */ #define LOGDEST_LOGFILE 2 /**< Log to logfile */
/** @anchor log_levels */ /** @anchor log_levels */
#define ERR_EXCESSIVE 10 /**< Logorrhea! */ #define E_SPAM 10 /**< Logorrhea! */
#define ERR_DEBUG 9 /**< Way too verbose */ #define E_DBG 9 /**< Way too verbose */
#define ERR_INFO 5 /**< Good info, not too much spam */ #define E_INF 5 /**< Good info, not too much spam */
#define ERR_WARN 2 /**< Reasonably important, but not enough to log */ #define E_WARN 2 /**< Reasonably important, but not enough to log */
#define ERR_LOG 1 /**< Something that should go in a log file */ #define E_LOG 1 /**< Something that should go in a log file */
#define ERR_FATAL 0 /**< Log and force an exit */ #define E_FATAL 0 /**< Log and force an exit */
/** @anchor log_categories */ /** @anchor log_categories */
#define LOG_CONFIG 0x0001 /**< configfile.c */ #define L_CONF 0x00000001 /**< configuration - configfile.c */
#define LOG_WEBSERVER 0x0002 /**< webserver.c */ #define L_WS 0x00000002 /**< webserver - webserver.c */
#define LOG_DATABASE 0x0004 /**< db-* */ #define L_DB 0x00000004 /**< database - db-gdbm.c, db-memory.c */
#define LOG_SCAN 0x0008 /**< mp3-scanner.c */ #define L_SCAN 0x00000008 /**< scanner - mp3-scanner.c */
#define LOG_QUERY 0x0010 /**< query.c */ #define L_QRY 0x00000010 /**< query - query.c */
#define LOG_INDEX 0x0020 /**< daap.c */ #define L_IND 0x00000020 /**< index - daap.c */
#define LOG_BROWSE 0x0040 /**< daap.c, query.c */ #define L_BROW 0x00000040 /**< browse - daap.c, query.c */
#define LOG_PLAYLIST 0x0080 /**< playlist.c, lexer.l, parser.y */ #define L_PL 0x00000080 /**< playlists - playlist.c, lexer.l, parser.y */
#define L_ART 0x00000100 /**< cover art - dynamic-art.c */
#define L_DAAP 0x00000200 /**< Generally daap related - main.c, daap.c, query.c */
#define L_MAIN 0x00000400 /**< setup, teardown, signals - main.c */
#define L_REND 0x00000800 /**< rendezvous -- rend-unix.c, rend-posix.c, etc */
#define L_MISC 0x80000000 /**< anything else */
extern int err_debuglevel; extern int err_debuglevel;
extern void log_err(int quit, char *fmt, ...); extern void log_err(int level, unsigned int cat, char *fmt, ...);
extern void log_setdest(char *app, int destination); extern void log_setdest(char *app, int destination);
/** /**
* Print a debugging or log message * Print a debugging or log message
*/ */
#ifdef DEBUG #ifdef DEBUG
# define DPRINTF(level, fmt, arg...) \ # define DPRINTF(level, cat, fmt, arg...) \
{ log_err(level,"%s, %d: ",__FILE__,__LINE__); log_err(level,fmt,##arg); } { log_err(level,cat,"%s, %d: ",__FILE__,__LINE__); log_err(level,cat,fmt,##arg); }
#else #else
# define DPRINTF(level, fmt, arg...) \ # define DPRINTF(level, cat, fmt, arg...) \
{ log_err(level,fmt,##arg); } { log_err(level,cat,fmt,##arg); }
#endif #endif
#ifdef DEBUG_MEMORY #ifdef DEBUG_MEMORY

View File

@ -120,7 +120,7 @@ time_t l_convertyyyymmdd(char *date) {
strncpy(month,date+5,2); strncpy(month,date+5,2);
strncpy(day,date+8,2); strncpy(day,date+8,2);
DPRINTF(ERR_INFO,"Converting %d-%d-%d\n",atoi(year),atoi(month),atoi(day)); DPRINTF(E_INF,L_PL,"Converting %d-%d-%d\n",atoi(year),atoi(month),atoi(day));
return l_converttime(atoi(day), atoi(month), atoi(year)); return l_converttime(atoi(day), atoi(month), atoi(year));
} }
@ -141,7 +141,7 @@ int yywrap(void) {
void yyerror(char *msg) { void yyerror(char *msg) {
pl_error=1; pl_error=1;
DPRINTF(ERR_LOG,"Playlist error, line %d: %s\n",yylineno, msg); DPRINTF(E_LOG,L_PL,"Playlist error, line %d: %s\n",yylineno, msg);
} }

View File

@ -36,6 +36,9 @@
Change History (most recent first): Change History (most recent first):
$Log$ $Log$
Revision 1.3 2004/11/13 07:14:26 rpedde
modularize debugging statements
Revision 1.2 2004/10/25 04:51:54 rpedde Revision 1.2 2004/10/25 04:51:54 rpedde
tune down some of the logging tune down some of the logging
@ -189,7 +192,7 @@ mDNSexport void debugf_(const char *format, ...)
buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0; buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0;
va_end(ptr); va_end(ptr);
DPRINTF(ERR_DEBUG-1,"%s\n",buffer); DPRINTF(E_INF,L_REND,"%s\n",buffer);
} }
mDNSexport void verbosedebugf_(const char *format, ...) mDNSexport void verbosedebugf_(const char *format, ...)
@ -199,7 +202,7 @@ mDNSexport void verbosedebugf_(const char *format, ...)
va_start(ptr,format); va_start(ptr,format);
buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0; buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0;
va_end(ptr); va_end(ptr);
DPRINTF(ERR_DEBUG,"%s\n",buffer); DPRINTF(E_DBG,L_REND,"%s\n",buffer);
} }
mDNSexport void LogMsg(const char *format, ...) mDNSexport void LogMsg(const char *format, ...)
@ -209,7 +212,7 @@ mDNSexport void LogMsg(const char *format, ...)
va_start(ptr,format); va_start(ptr,format);
buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0; buffer[mDNS_vsnprintf((char *)buffer, sizeof(buffer), format, ptr)] = 0;
va_end(ptr); va_end(ptr);
DPRINTF(ERR_WARN,"%s\n",buffer); DPRINTF(E_WARN,L_REND,"%s\n",buffer);
} }
#define PosixErrorToStatus(errNum) ((errNum) == 0 ? mStatus_NoError : mStatus_UnknownErr) #define PosixErrorToStatus(errNum) ((errNum) == 0 ? mStatus_NoError : mStatus_UnknownErr)
@ -379,7 +382,7 @@ static void SocketDataReady(mDNS *const m, PosixNetworkInterface *intf, int skt)
num_pkts_rejected++; num_pkts_rejected++;
if (num_pkts_rejected > (num_pkts_accepted + 1) * (num_registered_interfaces + 1) * 2) if (num_pkts_rejected > (num_pkts_accepted + 1) * (num_registered_interfaces + 1) * 2)
{ {
DPRINTF(ERR_LOG, DPRINTF(E_LOG,L_REND,
"*** WARNING: Received %d packets; Accepted %d packets; Rejected %d packets because of interface mismatch\n", "*** WARNING: Received %d packets; Accepted %d packets; Rejected %d packets because of interface mismatch\n",
num_pkts_accepted + num_pkts_rejected, num_pkts_accepted, num_pkts_rejected); num_pkts_accepted + num_pkts_rejected, num_pkts_accepted, num_pkts_rejected);
num_pkts_accepted = 0; num_pkts_accepted = 0;
@ -462,7 +465,7 @@ static void ClearInterfaceList(mDNS *const m)
{ {
PosixNetworkInterface *intf = (PosixNetworkInterface*)(m->HostInterfaces); PosixNetworkInterface *intf = (PosixNetworkInterface*)(m->HostInterfaces);
mDNS_DeregisterInterface(m, &intf->coreIntf); mDNS_DeregisterInterface(m, &intf->coreIntf);
if (gMDNSPlatformPosixVerboseLevel > 0) DPRINTF(ERR_LOG, "Deregistered interface %s\n", intf->intfName); if (gMDNSPlatformPosixVerboseLevel > 0) DPRINTF(E_LOG,L_REND, "Deregistered interface %s\n", intf->intfName);
FreePosixNetworkInterface(intf); FreePosixNetworkInterface(intf);
} }
num_registered_interfaces = 0; num_registered_interfaces = 0;
@ -575,7 +578,7 @@ static int SetupSocket(struct sockaddr *intfAddr, mDNSIPPort port, int interface
err = bind(*sktPtr, (struct sockaddr *) &bindAddr, sizeof(bindAddr)); err = bind(*sktPtr, (struct sockaddr *) &bindAddr, sizeof(bindAddr));
if (err < 0) { if (err < 0) {
err = errno; err = errno;
DPRINTF(ERR_LOG,"bind: %s\n",strerror(errno)); DPRINTF(E_LOG,L_REND,"bind: %s\n",strerror(errno));
} }
} }
} // endif (intfAddr->sa_family == AF_INET) } // endif (intfAddr->sa_family == AF_INET)
@ -739,7 +742,7 @@ static int SetupOneInterface(mDNS *const m, struct sockaddr *intfAddr, const cha
num_registered_interfaces++; num_registered_interfaces++;
debugf("SetupOneInterface: %s %#a Registered", intf->intfName, &intf->coreIntf.ip); debugf("SetupOneInterface: %s %#a Registered", intf->intfName, &intf->coreIntf.ip);
if (gMDNSPlatformPosixVerboseLevel > 0) if (gMDNSPlatformPosixVerboseLevel > 0)
DPRINTF(ERR_LOG, "Registered interface %s\n", intf->intfName); DPRINTF(E_LOG,L_REND, "Registered interface %s\n", intf->intfName);
} }
else else
{ {

View File

@ -216,7 +216,7 @@ void daap_handler(WS_CONNINFO *pwsc) {
} }
root=daap_response_update(pwsc->fd,clientrev); root=daap_response_update(pwsc->fd,clientrev);
if((ws_getvar(pwsc,"delta")) && (root==NULL)) { if((ws_getvar(pwsc,"delta")) && (root==NULL)) {
DPRINTF(ERR_LOG,"Client %s disconnected\n",pwsc->hostname); DPRINTF(E_LOG,L_WS,"Client %s disconnected\n",pwsc->hostname);
config_set_status(pwsc,session_id,NULL); config_set_status(pwsc,session_id,NULL);
pwsc->close=1; pwsc->close=1;
return; return;
@ -312,7 +312,7 @@ void daap_handler(WS_CONNINFO *pwsc) {
} }
if((!root)&&(!streaming)) { if((!root)&&(!streaming)) {
DPRINTF(ERR_DEBUG,"Bad request -- root=%x, streaming=%d\n",root,streaming); DPRINTF(E_DBG,L_WS|L_DAAP,"Bad request -- root=%x, streaming=%d\n",root,streaming);
ws_returnerror(pwsc,400,"Invalid Request"); ws_returnerror(pwsc,400,"Invalid Request");
config_set_status(pwsc,session_id,NULL); config_set_status(pwsc,session_id,NULL);
return; return;
@ -321,11 +321,11 @@ void daap_handler(WS_CONNINFO *pwsc) {
pwsc->close=close; pwsc->close=close;
if(!streaming) { if(!streaming) {
DPRINTF(ERR_DEBUG,"Satisfying request\n"); DPRINTF(E_DBG,L_WS,"Satisfying request\n");
ws_addresponseheader(pwsc,"Content-Length","%d",root->reported_size + 8); ws_addresponseheader(pwsc,"Content-Length","%d",root->reported_size + 8);
ws_writefd(pwsc,"HTTP/1.1 200 OK\r\n"); ws_writefd(pwsc,"HTTP/1.1 200 OK\r\n");
DPRINTF(ERR_DEBUG,"Emitting headers\n"); DPRINTF(E_DBG,L_WS,"Emitting headers\n");
ws_emitheaders(pwsc); ws_emitheaders(pwsc);
/* /*
@ -335,9 +335,9 @@ void daap_handler(WS_CONNINFO *pwsc) {
} }
*/ */
DPRINTF(ERR_DEBUG,"Serializing\n"); DPRINTF(E_DBG,L_WS|L_DAAP,"Serializing\n");
daap_serialize(root,pwsc->fd,0); daap_serialize(root,pwsc->fd,0);
DPRINTF(ERR_DEBUG,"Done, freeing\n"); DPRINTF(E_DBG,L_WS|L_DAAP,"Done, freeing\n");
daap_free(root); daap_free(root);
} else { } else {
/* stream out the song */ /* stream out the song */
@ -355,7 +355,7 @@ void daap_handler(WS_CONNINFO *pwsc) {
file_fd=r_open2(pmp3->path,O_RDONLY); file_fd=r_open2(pmp3->path,O_RDONLY);
if(file_fd == -1) { if(file_fd == -1) {
pwsc->error=errno; pwsc->error=errno;
DPRINTF(ERR_WARN,"Thread %d: Error opening %s: %s\n", DPRINTF(E_WARN,L_WS,"Thread %d: Error opening %s: %s\n",
pwsc->threadno,pmp3->path,strerror(errno)); pwsc->threadno,pmp3->path,strerror(errno));
ws_returnerror(pwsc,404,"Not found"); ws_returnerror(pwsc,404,"Not found");
config_set_status(pwsc,session_id,NULL); config_set_status(pwsc,session_id,NULL);
@ -383,7 +383,7 @@ void daap_handler(WS_CONNINFO *pwsc) {
file_len = real_len - offset; file_len = real_len - offset;
DPRINTF(ERR_DEBUG,"Thread %d: Length of file (remaining) is %ld\n", DPRINTF(E_DBG,L_WS,"Thread %d: Length of file (remaining) is %ld\n",
pwsc->threadno,(long)file_len); pwsc->threadno,(long)file_len);
// DWB: fix content-type to correctly reflect data // DWB: fix content-type to correctly reflect data
@ -408,7 +408,7 @@ void daap_handler(WS_CONNINFO *pwsc) {
ws_emitheaders(pwsc); ws_emitheaders(pwsc);
config_set_status(pwsc,session_id,"Streaming file '%s'",pmp3->fname); config_set_status(pwsc,session_id,"Streaming file '%s'",pmp3->fname);
DPRINTF(ERR_LOG,"Session %d: Streaming file '%s' to %s (offset %d)\n", DPRINTF(E_LOG,L_WS,"Session %d: Streaming file '%s' to %s (offset %d)\n",
session_id,pmp3->fname, pwsc->hostname,(long)offset); session_id,pmp3->fname, pwsc->hostname,(long)offset);
if(!offset) if(!offset)
@ -417,21 +417,22 @@ void daap_handler(WS_CONNINFO *pwsc) {
if((config.artfilename) && if((config.artfilename) &&
(!offset) && (!offset) &&
((img_fd=da_get_image_fd(pmp3->path)) != -1)) { ((img_fd=da_get_image_fd(pmp3->path)) != -1)) {
if (strncasecmp(pmp3->type,"mp3",4) ==0) { if (strncasecmp(pmp3->type,"mp3",4) ==0) {
DPRINTF(ERR_INFO,"Dynamically attaching artwork to %s (fd %d)\n", DPRINTF(E_INF,L_WS|L_ART,"Dynamic add artwork to %s (fd %d)\n",
pmp3->fname, img_fd); pmp3->fname, img_fd);
da_attach_image(img_fd, pwsc->fd, file_fd, offset); da_attach_image(img_fd, pwsc->fd, file_fd, offset);
} else if (strncasecmp(pmp3->type, "m4a", 4) == 0) { } else if (strncasecmp(pmp3->type, "m4a", 4) == 0) {
DPRINTF(ERR_INFO,"Dynamically attaching artwork to %s (fd %d)\n", pmp3->fname, img_fd); DPRINTF(E_INF,L_WS|L_ART,"Dynamic add artwork to %s (fd %d)\n",
da_aac_attach_image(img_fd, pwsc->fd, file_fd, offset); pmp3->fname, img_fd);
} da_aac_attach_image(img_fd, pwsc->fd, file_fd, offset);
}
} else if(offset) { } else if(offset) {
DPRINTF(ERR_INFO,"Seeking to offset %ld\n",(long)offset); DPRINTF(E_INF,L_WS,"Seeking to offset %ld\n",(long)offset);
lseek(file_fd,offset,SEEK_SET); lseek(file_fd,offset,SEEK_SET);
} }
if(copyfile(file_fd,pwsc->fd)) { if(copyfile(file_fd,pwsc->fd)) {
DPRINTF(ERR_INFO,"Error copying file to remote... %s\n", DPRINTF(E_INF,L_WS,"Error copying file to remote... %s\n",
strerror(errno)); strerror(errno));
} }
config_set_status(pwsc,session_id,NULL); config_set_status(pwsc,session_id,NULL);
@ -440,7 +441,7 @@ void daap_handler(WS_CONNINFO *pwsc) {
} }
} }
DPRINTF(ERR_DEBUG,"Finished serving DAAP response\n"); DPRINTF(E_DBG,L_WS|L_DAAP,"Finished serving DAAP response\n");
return; return;
} }
@ -571,7 +572,7 @@ void *signal_handler(void *arg) {
config.stop=0; config.stop=0;
config.reload=0; config.reload=0;
DPRINTF(ERR_WARN,"Signal handler started\n"); DPRINTF(E_WARN,L_MAIN,"Signal handler started\n");
while(!config.stop) { while(!config.stop) {
if((sigemptyset(&intmask) == -1) || if((sigemptyset(&intmask) == -1) ||
@ -579,26 +580,26 @@ void *signal_handler(void *arg) {
(sigaddset(&intmask, SIGINT) == -1) || (sigaddset(&intmask, SIGINT) == -1) ||
(sigaddset(&intmask, SIGHUP) == -1) || (sigaddset(&intmask, SIGHUP) == -1) ||
(sigwait(&intmask, &sig) == -1)) { (sigwait(&intmask, &sig) == -1)) {
DPRINTF(ERR_FATAL,"Error waiting for signals. Aborting\n"); DPRINTF(E_FATAL,L_MAIN,"Error waiting for signals. Aborting\n");
} else { } else {
/* process the signal */ /* process the signal */
switch(sig) { switch(sig) {
case SIGCLD: case SIGCLD:
DPRINTF(ERR_LOG,"Got CLD signal. Reaping\n"); DPRINTF(E_LOG,L_MAIN,"Got CLD signal. Reaping\n");
while (wait(&status)) { while (wait(&status)) {
}; };
break; break;
case SIGINT: case SIGINT:
DPRINTF(ERR_LOG,"Got INT signal. Notifying daap server.\n"); DPRINTF(E_LOG,L_MAIN,"Got INT signal. Notifying daap server.\n");
config.stop=1; config.stop=1;
return NULL; return NULL;
break; break;
case SIGHUP: case SIGHUP:
DPRINTF(ERR_LOG,"Got HUP signal. Notifying daap server.\n"); DPRINTF(E_LOG,L_MAIN,"Got HUP signal. Notifying daap server.\n");
config.reload=1; config.reload=1;
break; break;
default: default:
DPRINTF(ERR_LOG,"What am I doing here?\n"); DPRINTF(E_LOG,L_MAIN,"What am I doing here?\n");
break; break;
} }
} }
@ -624,13 +625,13 @@ int start_signal_handler(void) {
(sigaddset(&set,SIGHUP) == -1) || (sigaddset(&set,SIGHUP) == -1) ||
(sigaddset(&set,SIGCLD) == -1) || (sigaddset(&set,SIGCLD) == -1) ||
(sigprocmask(SIG_BLOCK, &set, NULL) == -1)) { (sigprocmask(SIG_BLOCK, &set, NULL) == -1)) {
DPRINTF(ERR_LOG,"Error setting signal set\n"); DPRINTF(E_LOG,L_MAIN,"Error setting signal set\n");
return -1; return -1;
} }
if(error=pthread_create(&handler_tid, NULL, signal_handler, NULL)) { if(error=pthread_create(&handler_tid, NULL, signal_handler, NULL)) {
errno=error; errno=error;
DPRINTF(ERR_LOG,"Error creating signal_handler thread\n"); DPRINTF(E_LOG,L_MAIN,"Error creating signal_handler thread\n");
return -1; return -1;
} }
@ -726,9 +727,9 @@ int main(int argc, char *argv[]) {
#ifndef WITHOUT_MDNS #ifndef WITHOUT_MDNS
if((config.use_mdns) && (!parseonly)) { if((config.use_mdns) && (!parseonly)) {
DPRINTF(ERR_LOG,"Starting rendezvous daemon\n"); DPRINTF(E_LOG,L_MAIN,"Starting rendezvous daemon\n");
if(rend_init(config.runas)) { if(rend_init(config.runas)) {
DPRINTF(ERR_FATAL,"Error in rend_init: %s\n",strerror(errno)); DPRINTF(E_FATAL,L_MAIN|L_REND,"Error in rend_init: %s\n",strerror(errno));
} }
} }
#endif #endif
@ -745,21 +746,21 @@ int main(int argc, char *argv[]) {
/* DWB: shouldn't this be done after dropping privs? */ /* DWB: shouldn't this be done after dropping privs? */
if(db_open(config.dbdir, reload)) { if(db_open(config.dbdir, reload)) {
DPRINTF(ERR_FATAL,"Error in db_open: %s\n",strerror(errno)); DPRINTF(E_FATAL,L_MAIN|L_DB,"Error in db_open: %s\n",strerror(errno));
} }
// Drop privs here // Drop privs here
if(drop_privs(config.runas)) { if(drop_privs(config.runas)) {
DPRINTF(ERR_FATAL,"Error in drop_privs: %s\n",strerror(errno)); DPRINTF(E_FATAL,L_MAIN,"Error in drop_privs: %s\n",strerror(errno));
} }
/* block signals and set up the signal handling thread */ /* block signals and set up the signal handling thread */
DPRINTF(ERR_LOG,"Starting signal handler\n"); DPRINTF(E_LOG,L_MAIN,"Starting signal handler\n");
if(start_signal_handler()) { if(start_signal_handler()) {
DPRINTF(ERR_FATAL,"Error starting signal handler %s\n",strerror(errno)); DPRINTF(E_FATAL,L_MAIN,"Error starting signal handler %s\n",strerror(errno));
} }
DPRINTF(ERR_LOG,"Loading playlists\n"); DPRINTF(E_LOG,L_MAIN|L_PL,"Loading playlists\n");
if(config.playlist) if(config.playlist)
pl_load(config.playlist); pl_load(config.playlist);
@ -773,26 +774,26 @@ int main(int argc, char *argv[]) {
} }
/* Initialize the database before starting */ /* Initialize the database before starting */
DPRINTF(ERR_LOG,"Initializing database\n"); DPRINTF(E_LOG,L_MAIN|L_DB,"Initializing database\n");
if(db_init()) { if(db_init()) {
DPRINTF(ERR_FATAL,"Error in db_init: %s\n",strerror(errno)); DPRINTF(E_FATAL,L_MAIN|L_DB,"Error in db_init: %s\n",strerror(errno));
} }
DPRINTF(ERR_LOG,"Starting mp3 scan\n"); DPRINTF(E_LOG,L_MAIN|L_SCAN,"Starting mp3 scan\n");
if(scan_init(config.mp3dir)) { if(scan_init(config.mp3dir)) {
DPRINTF(ERR_FATAL,"Error scanning MP3 files: %s\n",strerror(errno)); DPRINTF(E_FATAL,L_MAIN|L_SCAN,"Error scanning MP3 files: %s\n",strerror(errno));
} }
/* start up the web server */ /* start up the web server */
ws_config.web_root=config.web_root; ws_config.web_root=config.web_root;
ws_config.port=config.port; ws_config.port=config.port;
DPRINTF(ERR_LOG,"Starting web server from %s on port %d\n", DPRINTF(E_LOG,L_MAIN|L_WS,"Starting web server from %s on port %d\n",
config.web_root, config.port); config.web_root, config.port);
server=ws_start(&ws_config); server=ws_start(&ws_config);
if(!server) { if(!server) {
DPRINTF(ERR_FATAL,"Error staring web server: %s\n",strerror(errno)); DPRINTF(E_FATAL,L_MAIN|L_WS,"Error staring web server: %s\n",strerror(errno));
} }
ws_registerhandler(server, "^.*$",config_handler,config_auth,1); ws_registerhandler(server, "^.*$",config_handler,config_auth,1);
@ -806,7 +807,7 @@ int main(int argc, char *argv[]) {
#ifndef WITHOUT_MDNS #ifndef WITHOUT_MDNS
if(config.use_mdns) { /* register services */ if(config.use_mdns) { /* register services */
DPRINTF(ERR_LOG,"Registering rendezvous names\n"); DPRINTF(E_LOG,L_MAIN|L_REND,"Registering rendezvous names\n");
rend_register(config.servername,"_daap._tcp",config.port); rend_register(config.servername,"_daap._tcp",config.port);
rend_register(config.servername,"_http._tcp",config.port); rend_register(config.servername,"_http._tcp",config.port);
} }
@ -814,7 +815,7 @@ int main(int argc, char *argv[]) {
end_time=time(NULL); end_time=time(NULL);
DPRINTF(ERR_LOG,"Scanned %d songs in %d seconds\n",db_get_song_count(), DPRINTF(E_LOG,L_MAIN,"Scanned %d songs in %d seconds\n",db_get_song_count(),
end_time-start_time); end_time-start_time);
config.stop=0; config.stop=0;
@ -824,7 +825,7 @@ int main(int argc, char *argv[]) {
if((config.always_scan) || (config_get_session_count())) { if((config.always_scan) || (config_get_session_count())) {
config.reload=1; config.reload=1;
} else { } else {
DPRINTF(ERR_DEBUG,"Skipping background scan... no connected users\n"); DPRINTF(E_DBG,L_MAIN|L_SCAN|L_DB,"Skipped bground scan... no users\n");
} }
rescan_counter=0; rescan_counter=0;
} }
@ -833,34 +834,35 @@ int main(int argc, char *argv[]) {
old_song_count = db_get_song_count(); old_song_count = db_get_song_count();
start_time=time(NULL); start_time=time(NULL);
DPRINTF(ERR_LOG,"Rescanning database\n"); DPRINTF(E_LOG,L_MAIN|L_DB|L_SCAN,"Rescanning database\n");
if(scan_init(config.mp3dir)) { if(scan_init(config.mp3dir)) {
DPRINTF(ERR_LOG,"Error rescanning... exiting\n"); DPRINTF(E_LOG,L_MAIN|L_DB|L_SCAN,"Error rescanning... exiting\n");
config.stop=1; config.stop=1;
} }
config.reload=0; config.reload=0;
DPRINTF(ERR_INFO,"Background scanned %d songs (previously %d) in %d seconds\n",db_get_song_count(),old_song_count,time(NULL)-start_time); DPRINTF(E_INF,L_MAIN|L_DB|L_SCAN,"Scanned %d songs (was %d) in %d seconds\n",
db_get_song_count(),old_song_count,time(NULL)-start_time);
} }
sleep(MAIN_SLEEP_INTERVAL); sleep(MAIN_SLEEP_INTERVAL);
rescan_counter += MAIN_SLEEP_INTERVAL; rescan_counter += MAIN_SLEEP_INTERVAL;
} }
DPRINTF(ERR_LOG,"Stopping gracefully\n"); DPRINTF(E_LOG,L_MAIN,"Stopping gracefully\n");
#ifndef WITHOUT_MDNS #ifndef WITHOUT_MDNS
if(config.use_mdns) { if(config.use_mdns) {
DPRINTF(ERR_LOG,"Stopping rendezvous daemon\n"); DPRINTF(E_LOG,L_MAIN|L_REND,"Stopping rendezvous daemon\n");
rend_stop(); rend_stop();
} }
#endif #endif
DPRINTF(ERR_LOG,"Stopping web server\n"); DPRINTF(E_LOG,L_MAIN|L_WS,"Stopping web server\n");
ws_stop(server); ws_stop(server);
config_close(); config_close();
DPRINTF(ERR_LOG,"Closing database\n"); DPRINTF(E_LOG,L_MAIN|L_DB,"Closing database\n");
db_deinit(); db_deinit();
#ifdef DEBUG_MEMORY #ifdef DEBUG_MEMORY
@ -868,7 +870,7 @@ int main(int argc, char *argv[]) {
err_leakcheck(); err_leakcheck();
#endif #endif
DPRINTF(ERR_LOG,"Done!\n"); DPRINTF(E_LOG,L_MAIN,"Done!\n");
log_setdest(NULL,LOGDEST_STDERR); log_setdest(NULL,LOGDEST_STDERR);

View File

@ -305,7 +305,7 @@ int scan_init(char *path) {
if(db_start_initial_update()) if(db_start_initial_update())
return -1; return -1;
DPRINTF(ERR_DEBUG,"%s scanning for MP3s in %s\n", DPRINTF(E_DBG,L_SCAN,"%s scanning for MP3s in %s\n",
scan_mode_foreground ? "Foreground" : "Background", scan_mode_foreground ? "Foreground" : "Background",
path); path);
@ -339,7 +339,7 @@ int scan_path(char *path) {
while(1) { while(1) {
if(config.stop) { if(config.stop) {
DPRINTF(ERR_WARN,"Stop detected. Aborting scan of %s.\n",path); DPRINTF(E_WARN,L_SCAN,"Stop detected. Aborting scan of %s.\n",path);
return 0; return 0;
} }
@ -347,7 +347,7 @@ int scan_path(char *path) {
err=readdir_r(current_dir,(struct dirent *)de,&pde); err=readdir_r(current_dir,(struct dirent *)de,&pde);
if(err == -1) { if(err == -1) {
DPRINTF(ERR_DEBUG,"Error on readdir_r: %s\n",strerror(errno)); DPRINTF(E_DBG,L_SCAN,"Error on readdir_r: %s\n",strerror(errno));
err=errno; err=errno;
closedir(current_dir); closedir(current_dir);
errno=err; errno=err;
@ -361,12 +361,12 @@ int scan_path(char *path) {
continue; continue;
snprintf(mp3_path,PATH_MAX,"%s/%s",path,pde->d_name); snprintf(mp3_path,PATH_MAX,"%s/%s",path,pde->d_name);
DPRINTF(ERR_DEBUG,"Found %s\n",mp3_path); DPRINTF(E_DBG,L_SCAN,"Found %s\n",mp3_path);
if(stat(mp3_path,&sb)) { if(stat(mp3_path,&sb)) {
DPRINTF(ERR_WARN,"Error statting: %s\n",strerror(errno)); DPRINTF(E_WARN,L_SCAN,"Error statting: %s\n",strerror(errno));
} else { } else {
if(sb.st_mode & S_IFDIR) { /* dir -- recurse */ if(sb.st_mode & S_IFDIR) { /* dir -- recurse */
DPRINTF(ERR_DEBUG,"Found dir %s... recursing\n",pde->d_name); DPRINTF(E_DBG,L_SCAN,"Found dir %s... recursing\n",pde->d_name);
scan_path(mp3_path); scan_path(mp3_path);
} else { } else {
/* process the file */ /* process the file */
@ -380,14 +380,14 @@ int scan_path(char *path) {
/* only scan if it's been changed, or empty db */ /* only scan if it's been changed, or empty db */
modified_time=sb.st_mtime; modified_time=sb.st_mtime;
DPRINTF(ERR_DEBUG,"FS Modified time: %d\n",modified_time); DPRINTF(E_DBG,L_SCAN,"FS Mod time: %d\n",modified_time);
DPRINTF(ERR_DEBUG,"DB Modified time: %d\n",db_last_modified(sb.st_ino)); DPRINTF(E_DBG,L_SCAN,"DB Mod time: %d\n",db_last_modified(sb.st_ino));
if((scan_mode_foreground) || if((scan_mode_foreground) ||
!db_exists(sb.st_ino) || !db_exists(sb.st_ino) ||
db_last_modified(sb.st_ino) < modified_time) { db_last_modified(sb.st_ino) < modified_time) {
scan_music_file(path,pde,&sb); scan_music_file(path,pde,&sb);
} else { } else {
DPRINTF(ERR_DEBUG,"Skipping file... not modified\n"); DPRINTF(E_DBG,L_SCAN,"Skipping file... not modified\n");
} }
} }
} }
@ -412,7 +412,7 @@ void scan_static_playlist(char *path, struct dirent *pde, struct stat *psb) {
int playlistid; int playlistid;
struct stat sb; struct stat sb;
DPRINTF(ERR_WARN,"Processing static playlist: %s\n",pde->d_name); DPRINTF(E_WARN,L_SCAN|L_PL,"Processing static playlist: %s\n",pde->d_name);
strcpy(m3u_path,pde->d_name); strcpy(m3u_path,pde->d_name);
snprintf(playlist_path,sizeof(playlist_path),"%s/%s",path,pde->d_name); snprintf(playlist_path,sizeof(playlist_path),"%s/%s",path,pde->d_name);
m3u_path[strlen(pde->d_name) - 4] = '\0'; m3u_path[strlen(pde->d_name) - 4] = '\0';
@ -420,7 +420,7 @@ void scan_static_playlist(char *path, struct dirent *pde, struct stat *psb) {
fd=open(playlist_path,O_RDONLY); fd=open(playlist_path,O_RDONLY);
if(fd != -1) { if(fd != -1) {
db_add_playlist(playlistid,m3u_path,0); db_add_playlist(playlistid,m3u_path,0);
DPRINTF(ERR_INFO,"Added playlist as id %d\n",playlistid); DPRINTF(E_INF,L_SCAN|L_PL,"Added playlist as id %d\n",playlistid);
memset(linebuffer,0x00,sizeof(linebuffer)); memset(linebuffer,0x00,sizeof(linebuffer));
while(readline(fd,linebuffer,sizeof(linebuffer)) > 0) { while(readline(fd,linebuffer,sizeof(linebuffer)) > 0) {
@ -440,21 +440,21 @@ void scan_static_playlist(char *path, struct dirent *pde, struct stat *psb) {
snprintf(m3u_path,sizeof(m3u_path),"%s/%s",path,linebuffer); snprintf(m3u_path,sizeof(m3u_path),"%s/%s",path,linebuffer);
} }
DPRINTF(ERR_DEBUG,"Checking %s\n",m3u_path); DPRINTF(E_DBG,L_SCAN|L_PL,"Checking %s\n",m3u_path);
/* might be valid, might not... */ /* might be valid, might not... */
if(!stat(m3u_path,&sb)) { if(!stat(m3u_path,&sb)) {
/* FIXME: check to see if valid inode! */ /* FIXME: check to see if valid inode! */
db_add_playlist_song(playlistid,sb.st_ino); db_add_playlist_song(playlistid,sb.st_ino);
} else { } else {
DPRINTF(ERR_WARN,"Playlist entry %s bad: %s\n", DPRINTF(E_WARN,L_SCAN|L_PL,"Playlist entry %s bad: %s\n",
m3u_path,strerror(errno)); m3u_path,strerror(errno));
} }
} }
close(fd); close(fd);
} }
DPRINTF(ERR_WARN,"Done processing playlist\n"); DPRINTF(E_WARN,L_SCAN|L_PL,"Done processing playlist\n");
} }
/* /*
@ -469,7 +469,7 @@ void scan_music_file(char *path, struct dirent *pde, struct stat *psb) {
snprintf(mp3_path,sizeof(mp3_path),"%s/%s",path,pde->d_name); snprintf(mp3_path,sizeof(mp3_path),"%s/%s",path,pde->d_name);
/* we found an mp3 file */ /* we found an mp3 file */
DPRINTF(ERR_INFO,"Found music file: %s\n",pde->d_name); DPRINTF(E_INF,L_SCAN,"Found music file: %s\n",pde->d_name);
memset((void*)&mp3file,0,sizeof(mp3file)); memset((void*)&mp3file,0,sizeof(mp3file));
mp3file.path=mp3_path; mp3file.path=mp3_path;
@ -496,12 +496,12 @@ void scan_music_file(char *path, struct dirent *pde, struct stat *psb) {
mp3file.time_added=psb->st_ctime; mp3file.time_added=psb->st_ctime;
mp3file.time_modified=time(NULL); mp3file.time_modified=time(NULL);
DPRINTF(ERR_DEBUG," Date Added: %d\n",mp3file.time_added); DPRINTF(E_DBG,L_SCAN," Date Added: %d\n",mp3file.time_added);
db_add(&mp3file); db_add(&mp3file);
pl_eval(&mp3file); /* FIXME: move to db_add? */ pl_eval(&mp3file); /* FIXME: move to db_add? */
} else { } else {
DPRINTF(ERR_WARN,"Skipping %s - scan_gettags failed\n",pde->d_name); DPRINTF(E_WARN,L_SCAN,"Skipping %s - scan_gettags failed\n",pde->d_name);
} }
scan_freetags(&mp3file); scan_freetags(&mp3file);
@ -560,7 +560,7 @@ int scan_get_aactags(char *file, MP3FILE *pmp3) {
int len; int len;
if(!(fin=fopen(file,"rb"))) { if(!(fin=fopen(file,"rb"))) {
DPRINTF(ERR_INFO,"Cannot open file %s for reading\n",file); DPRINTF(E_INF,L_SCAN,"Cannot open file %s for reading\n",file);
return -1; return -1;
} }
@ -700,7 +700,7 @@ int scan_get_mp3tags(char *file, MP3FILE *pmp3) {
pid3file=id3_file_open(file,ID3_FILE_MODE_READONLY); pid3file=id3_file_open(file,ID3_FILE_MODE_READONLY);
if(!pid3file) { if(!pid3file) {
DPRINTF(ERR_WARN,"Cannot open %s\n",file); DPRINTF(E_WARN,L_SCAN,"Cannot open %s\n",file);
return -1; return -1;
} }
@ -710,7 +710,7 @@ int scan_get_mp3tags(char *file, MP3FILE *pmp3) {
err=errno; err=errno;
id3_file_close(pid3file); id3_file_close(pid3file);
errno=err; errno=err;
DPRINTF(ERR_WARN,"Cannot get ID3 tag for %s\n",file); DPRINTF(E_WARN,L_SCAN,"Cannot get ID3 tag for %s\n",file);
return -1; return -1;
} }
@ -724,7 +724,7 @@ int scan_get_mp3tags(char *file, MP3FILE *pmp3) {
if(!strcmp(pid3frame->id,"YTCP")) { /* for id3v2.2 */ if(!strcmp(pid3frame->id,"YTCP")) { /* for id3v2.2 */
pmp3->compilation = 1; pmp3->compilation = 1;
DPRINTF(ERR_DEBUG, "Compilation: %d\n", pmp3->compilation); DPRINTF(E_DBG,L_SCAN,"Compilation: %d\n", pmp3->compilation);
} }
if(((pid3frame->id[0] == 'T')||(strcmp(pid3frame->id,"COMM")==0)) && if(((pid3frame->id[0] == 'T')||(strcmp(pid3frame->id,"COMM")==0)) &&
@ -742,36 +742,36 @@ int scan_get_mp3tags(char *file, MP3FILE *pmp3) {
if(!strcmp(pid3frame->id,"TIT2")) { /* Title */ if(!strcmp(pid3frame->id,"TIT2")) { /* Title */
used=1; used=1;
pmp3->title = utf8_text; pmp3->title = utf8_text;
DPRINTF(ERR_DEBUG," Title: %s\n",utf8_text); DPRINTF(E_DBG,L_SCAN," Title: %s\n",utf8_text);
} else if(!strcmp(pid3frame->id,"TPE1")) { } else if(!strcmp(pid3frame->id,"TPE1")) {
used=1; used=1;
pmp3->artist = utf8_text; pmp3->artist = utf8_text;
DPRINTF(ERR_DEBUG," Artist: %s\n",utf8_text); DPRINTF(E_DBG,L_SCAN," Artist: %s\n",utf8_text);
} else if(!strcmp(pid3frame->id,"TALB")) { } else if(!strcmp(pid3frame->id,"TALB")) {
used=1; used=1;
pmp3->album = utf8_text; pmp3->album = utf8_text;
DPRINTF(ERR_DEBUG," Album: %s\n",utf8_text); DPRINTF(E_DBG,L_SCAN," Album: %s\n",utf8_text);
} else if(!strcmp(pid3frame->id,"TCOM")) { } else if(!strcmp(pid3frame->id,"TCOM")) {
used=1; used=1;
pmp3->composer = utf8_text; pmp3->composer = utf8_text;
DPRINTF(ERR_DEBUG," Composer: %s\n",utf8_text); DPRINTF(E_DBG,L_SCAN," Composer: %s\n",utf8_text);
} else if(!strcmp(pid3frame->id,"TIT1")) { } else if(!strcmp(pid3frame->id,"TIT1")) {
used=1; used=1;
pmp3->grouping = utf8_text; pmp3->grouping = utf8_text;
DPRINTF(ERR_DEBUG," Grouping: %s\n",utf8_text); DPRINTF(E_DBG,L_SCAN," Grouping: %s\n",utf8_text);
} else if(!strcmp(pid3frame->id,"TPE2")) { } else if(!strcmp(pid3frame->id,"TPE2")) {
used=1; used=1;
pmp3->orchestra = utf8_text; pmp3->orchestra = utf8_text;
DPRINTF(ERR_DEBUG," Orchestra: %s\n",utf8_text); DPRINTF(E_DBG,L_SCAN," Orchestra: %s\n",utf8_text);
} else if(!strcmp(pid3frame->id,"TPE3")) { } else if(!strcmp(pid3frame->id,"TPE3")) {
used=1; used=1;
pmp3->conductor = utf8_text; pmp3->conductor = utf8_text;
DPRINTF(ERR_DEBUG," Conductor: %s\n",utf8_text); DPRINTF(E_DBG,L_SCAN," Conductor: %s\n",utf8_text);
} else if(!strcmp(pid3frame->id,"TCON")) { } else if(!strcmp(pid3frame->id,"TCON")) {
used=1; used=1;
pmp3->genre = utf8_text; pmp3->genre = utf8_text;
got_numeric_genre=0; got_numeric_genre=0;
DPRINTF(ERR_DEBUG," Genre: %s\n",utf8_text); DPRINTF(E_DBG,L_SCAN," Genre: %s\n",utf8_text);
if(pmp3->genre) { if(pmp3->genre) {
if(!strlen(pmp3->genre)) { if(!strlen(pmp3->genre)) {
genre=WINAMP_GENRE_UNKNOWN; genre=WINAMP_GENRE_UNKNOWN;
@ -794,7 +794,7 @@ int scan_get_mp3tags(char *file, MP3FILE *pmp3) {
} else if(!strcmp(pid3frame->id,"COMM")) { } else if(!strcmp(pid3frame->id,"COMM")) {
used=1; used=1;
pmp3->comment = utf8_text; pmp3->comment = utf8_text;
DPRINTF(ERR_DEBUG," Comment: %s\n",pmp3->comment); DPRINTF(E_DBG,L_SCAN," Comment: %s\n",pmp3->comment);
} else if(!strcmp(pid3frame->id,"TPOS")) { } else if(!strcmp(pid3frame->id,"TPOS")) {
tmp=(char*)utf8_text; tmp=(char*)utf8_text;
strsep(&tmp,"/"); strsep(&tmp,"/");
@ -802,7 +802,7 @@ int scan_get_mp3tags(char *file, MP3FILE *pmp3) {
pmp3->total_discs=atoi(tmp); pmp3->total_discs=atoi(tmp);
} }
pmp3->disc=atoi((char*)utf8_text); pmp3->disc=atoi((char*)utf8_text);
DPRINTF(ERR_DEBUG," Disc %d of %d\n",pmp3->disc,pmp3->total_discs); DPRINTF(E_DBG,L_SCAN," Disc %d of %d\n",pmp3->disc,pmp3->total_discs);
} else if(!strcmp(pid3frame->id,"TRCK")) { } else if(!strcmp(pid3frame->id,"TRCK")) {
tmp=(char*)utf8_text; tmp=(char*)utf8_text;
strsep(&tmp,"/"); strsep(&tmp,"/");
@ -810,19 +810,19 @@ int scan_get_mp3tags(char *file, MP3FILE *pmp3) {
pmp3->total_tracks=atoi(tmp); pmp3->total_tracks=atoi(tmp);
} }
pmp3->track=atoi((char*)utf8_text); pmp3->track=atoi((char*)utf8_text);
DPRINTF(ERR_DEBUG," Track %d of %d\n",pmp3->track,pmp3->total_tracks); DPRINTF(E_DBG,L_SCAN," Track %d of %d\n",pmp3->track,pmp3->total_tracks);
} else if(!strcmp(pid3frame->id,"TDRC")) { } else if(!strcmp(pid3frame->id,"TDRC")) {
pmp3->year = atoi(utf8_text); pmp3->year = atoi(utf8_text);
DPRINTF(ERR_DEBUG," Year: %d\n",pmp3->year); DPRINTF(E_DBG,L_SCAN," Year: %d\n",pmp3->year);
} else if(!strcmp(pid3frame->id,"TLEN")) { } else if(!strcmp(pid3frame->id,"TLEN")) {
pmp3->song_length = atoi(utf8_text) / 1000; pmp3->song_length = atoi(utf8_text) / 1000;
DPRINTF(ERR_DEBUG, " Length: %d\n", pmp3->song_length); DPRINTF(E_DBG,L_SCAN," Length: %d\n", pmp3->song_length);
} else if(!strcmp(pid3frame->id,"TBPM")) { } else if(!strcmp(pid3frame->id,"TBPM")) {
pmp3->bpm = atoi(utf8_text); pmp3->bpm = atoi(utf8_text);
DPRINTF(ERR_DEBUG, "BPM: %d\n", pmp3->bpm); DPRINTF(E_DBG,L_SCAN,"BPM: %d\n", pmp3->bpm);
} else if(!strcmp(pid3frame->id,"TCMP")) { /* for id3v2.3 */ } else if(!strcmp(pid3frame->id,"TCMP")) { /* for id3v2.3 */
pmp3->compilation = (char)atoi(utf8_text); pmp3->compilation = (char)atoi(utf8_text);
DPRINTF(ERR_DEBUG, "Compilation: %d\n", pmp3->compilation); DPRINTF(E_DBG,L_SCAN,"Compilation: %d\n", pmp3->compilation);
} }
} }
} }
@ -835,7 +835,7 @@ int scan_get_mp3tags(char *file, MP3FILE *pmp3) {
} }
id3_file_close(pid3file); id3_file_close(pid3file);
DPRINTF(ERR_DEBUG,"Got id3 tag successfully\n"); DPRINTF(E_DBG,L_SCAN,"Got id3 tag successfully\n");
return 0; return 0;
} }
@ -882,7 +882,7 @@ int scan_get_fileinfo(char *file, MP3FILE *pmp3) {
/* a file we don't know anything about... ogg or aiff maybe */ /* a file we don't know anything about... ogg or aiff maybe */
if(!(infile=fopen(file,"rb"))) { if(!(infile=fopen(file,"rb"))) {
DPRINTF(ERR_WARN,"Could not open %s for reading\n",file); DPRINTF(E_WARN,L_SCAN,"Could not open %s for reading\n",file);
return -1; return -1;
} }
@ -936,7 +936,7 @@ off_t aac_drilltoatom(FILE *aac_fp, char *atom_path, unsigned int *atom_length)
{ {
return -1; return -1;
} }
DPRINTF(ERR_DEBUG, "Found %s atom at offset %ld.\n", atom_name, ftell(aac_fp) - 8); DPRINTF(E_DBG,L_SCAN,"Found %s atom at off %ld.\n", atom_name, ftell(aac_fp) - 8);
cur_p = strchr(cur_p, ':'); cur_p = strchr(cur_p, ':');
if (cur_p != NULL) if (cur_p != NULL)
{ {
@ -968,10 +968,10 @@ int scan_get_urlfileinfo(char *file, MP3FILE *pmp3) {
char *head, *tail; char *head, *tail;
char linebuffer[256]; char linebuffer[256];
DPRINTF(ERR_DEBUG,"Getting URL file info\n"); DPRINTF(E_DBG,L_SCAN,"Getting URL file info\n");
if(!(infile=fopen(file,"rb"))) { if(!(infile=fopen(file,"rb"))) {
DPRINTF(ERR_WARN,"Could not open %s for reading\n",file); DPRINTF(E_WARN,L_SCAN,"Could not open %s for reading\n",file);
return -1; return -1;
} }
@ -984,7 +984,7 @@ int scan_get_urlfileinfo(char *file, MP3FILE *pmp3) {
head=linebuffer; head=linebuffer;
tail=strchr(head,','); tail=strchr(head,',');
if(!tail) { if(!tail) {
DPRINTF(ERR_LOG,"Badly formatted .url file - must be bitrate,descr,url\n"); DPRINTF(E_LOG,L_SCAN,"Badly formatted .url file - must be bitrate,descr,url\n");
fclose(infile); fclose(infile);
return -1; return -1;
} }
@ -993,7 +993,7 @@ int scan_get_urlfileinfo(char *file, MP3FILE *pmp3) {
head=++tail; head=++tail;
tail=strchr(head,','); tail=strchr(head,',');
if(!tail) { if(!tail) {
DPRINTF(ERR_LOG,"Badly formatted .url file - must be bitrate,descr,url\n"); DPRINTF(E_LOG,L_SCAN,"Badly formatted .url file - must be bitrate,descr,url\n");
fclose(infile); fclose(infile);
return -1; return -1;
} }
@ -1004,9 +1004,9 @@ int scan_get_urlfileinfo(char *file, MP3FILE *pmp3) {
pmp3->url=strdup(tail); pmp3->url=strdup(tail);
fclose(infile); fclose(infile);
DPRINTF(ERR_DEBUG," Title: %s\n",pmp3->title); DPRINTF(E_DBG,L_SCAN," Title: %s\n",pmp3->title);
DPRINTF(ERR_DEBUG," Bitrate: %d\n",pmp3->bitrate); DPRINTF(E_DBG,L_SCAN," Bitrate: %d\n",pmp3->bitrate);
DPRINTF(ERR_DEBUG," URL: %s\n",pmp3->url); DPRINTF(E_DBG,L_SCAN," URL: %s\n",pmp3->url);
return 0; return 0;
} }
@ -1027,10 +1027,10 @@ int scan_get_aacfileinfo(char *file, MP3FILE *pmp3) {
int ms; int ms;
unsigned char buffer[2]; unsigned char buffer[2];
DPRINTF(ERR_DEBUG,"Getting AAC file info\n"); DPRINTF(E_DBG,L_SCAN,"Getting AAC file info\n");
if(!(infile=fopen(file,"rb"))) { if(!(infile=fopen(file,"rb"))) {
DPRINTF(ERR_WARN,"Could not open %s for reading\n",file); DPRINTF(E_WARN,L_SCAN,"Could not open %s for reading\n",file);
return -1; return -1;
} }
@ -1060,7 +1060,7 @@ int scan_get_aacfileinfo(char *file, MP3FILE *pmp3) {
/* DWB: use ms time instead of sec */ /* DWB: use ms time instead of sec */
pmp3->song_length=(int)((samples * ms) / sample_size); pmp3->song_length=(int)((samples * ms) / sample_size);
DPRINTF(ERR_DEBUG,"Song length: %d seconds\n", pmp3->song_length / 1000); DPRINTF(E_DBG,L_SCAN,"Song length: %d seconds\n", pmp3->song_length / 1000);
} }
pmp3->bitrate = 0; pmp3->bitrate = 0;
@ -1093,17 +1093,17 @@ int scan_get_aacfileinfo(char *file, MP3FILE *pmp3) {
pmp3->bitrate = ntohl(bit_rate) / 1000; pmp3->bitrate = ntohl(bit_rate) / 1000;
} else { } else {
DPRINTF(ERR_DEBUG, "Could not find 'esds' atom to determine bit rate.\n"); DPRINTF(E_DBG,L_SCAN, "Could not find 'esds' atom to determine bit rate.\n");
} }
} else { } else {
DPRINTF(ERR_DEBUG, "Could not find 'mp4a' atom to determine sample rate.\n"); DPRINTF(E_DBG,L_SCAN, "Could not find 'mp4a' atom to determine sample rate.\n");
} }
/* Fallback if we can't find the info in the atoms. */ /* Fallback if we can't find the info in the atoms. */
if (pmp3->bitrate == 0) { if (pmp3->bitrate == 0) {
/* calculate bitrate from song length... Kinda cheesy */ /* calculate bitrate from song length... Kinda cheesy */
DPRINTF(ERR_DEBUG, "Could not find 'esds' atom. Calculating bit rate.\n"); DPRINTF(E_DBG,L_SCAN, "Could not find 'esds' atom. Calculating bit rate.\n");
atom_offset=aac_drilltoatom(infile,"mdat",&atom_length); atom_offset=aac_drilltoatom(infile,"mdat",&atom_length);
@ -1141,7 +1141,7 @@ int scan_get_mp3fileinfo(char *file, MP3FILE *pmp3) {
int stereo=0; int stereo=0;
if(!(infile=fopen(file,"rb"))) { if(!(infile=fopen(file,"rb"))) {
DPRINTF(ERR_WARN,"Could not open %s for reading\n",file); DPRINTF(E_WARN,L_SCAN,"Could not open %s for reading\n",file);
return -1; return -1;
} }
@ -1153,9 +1153,9 @@ int scan_get_mp3fileinfo(char *file, MP3FILE *pmp3) {
if(fread(buffer,1,sizeof(buffer),infile) != sizeof(buffer)) { if(fread(buffer,1,sizeof(buffer),infile) != sizeof(buffer)) {
if(ferror(infile)) { if(ferror(infile)) {
DPRINTF(ERR_LOG,"Error reading: %s\n",strerror(errno)); DPRINTF(E_LOG,L_SCAN,"Error reading: %s\n",strerror(errno));
} else { } else {
DPRINTF(ERR_LOG,"Short file: %s\n",file); DPRINTF(E_LOG,L_SCAN,"Short file: %s\n",file);
} }
return -1; return -1;
} }
@ -1164,18 +1164,18 @@ int scan_get_mp3fileinfo(char *file, MP3FILE *pmp3) {
if(strncmp(pid3->id,"ID3",3)==0) { if(strncmp(pid3->id,"ID3",3)==0) {
/* found an ID3 header... */ /* found an ID3 header... */
DPRINTF(ERR_DEBUG,"Found ID3 header\n"); DPRINTF(E_DBG,L_SCAN,"Found ID3 header\n");
size = (pid3->size[0] << 21 | pid3->size[1] << 14 | size = (pid3->size[0] << 21 | pid3->size[1] << 14 |
pid3->size[2] << 7 | pid3->size[3]); pid3->size[2] << 7 | pid3->size[3]);
fp_size=size + sizeof(SCAN_ID3HEADER); fp_size=size + sizeof(SCAN_ID3HEADER);
DPRINTF(ERR_DEBUG,"Header length: %d\n",size); DPRINTF(E_DBG,L_SCAN,"Header length: %d\n",size);
} }
file_size -= fp_size; file_size -= fp_size;
fseek(infile,fp_size,SEEK_SET); fseek(infile,fp_size,SEEK_SET);
if(fread(buffer,1,sizeof(buffer),infile) < sizeof(buffer)) { if(fread(buffer,1,sizeof(buffer),infile) < sizeof(buffer)) {
DPRINTF(ERR_LOG,"Short file: %s\n",file); DPRINTF(E_LOG,L_SCAN,"Short file: %s\n",file);
return -1; return -1;
} }
@ -1186,7 +1186,7 @@ int scan_get_mp3fileinfo(char *file, MP3FILE *pmp3) {
} }
if(index) { if(index) {
DPRINTF(ERR_DEBUG,"Scanned forward %d bytes to find frame header\n",index); DPRINTF(E_DBG,L_SCAN,"Scanned forward %d bytes to find frame header\n",index);
} }
if((buffer[index] == 0xFF)&&(buffer[index+1] >= 224)) { if((buffer[index] == 0xFF)&&(buffer[index+1] >= 224)) {
@ -1223,12 +1223,12 @@ int scan_get_mp3fileinfo(char *file, MP3FILE *pmp3) {
} }
if((layer_index < 0) || (layer_index > 4)) { if((layer_index < 0) || (layer_index > 4)) {
DPRINTF(ERR_LOG,"Bad mp3 header in %s: bad layer_index\n",file); DPRINTF(E_LOG,L_SCAN,"Bad mp3 header in %s: bad layer_index\n",file);
return -1; return -1;
} }
if((sample_index < 0) || (sample_index > 2)) { if((sample_index < 0) || (sample_index > 2)) {
DPRINTF(ERR_LOG,"Bad mp3 header in %s: bad sample_index\n",file); DPRINTF(E_LOG,L_SCAN,"Bad mp3 header in %s: bad sample_index\n",file);
return -1; return -1;
} }
@ -1243,10 +1243,10 @@ int scan_get_mp3fileinfo(char *file, MP3FILE *pmp3) {
stereo=0; stereo=0;
else else
stereo=1; stereo=1;
DPRINTF(ERR_DEBUG," MPEG Version: %s\n",ver == 3 ? "1" : (ver == 2 ? "2" : "2.5")); DPRINTF(E_DBG,L_SCAN," MPEG Version: %s\n",ver == 3 ? "1" : (ver == 2 ? "2" : "2.5"));
DPRINTF(ERR_DEBUG," Layer: %d\n",4-layer); DPRINTF(E_DBG,L_SCAN," Layer: %d\n",4-layer);
DPRINTF(ERR_DEBUG," Sample Rate: %d\n",samplerate); DPRINTF(E_DBG,L_SCAN," Sample Rate: %d\n",samplerate);
DPRINTF(ERR_DEBUG," Bit Rate: %d\n",bitrate); DPRINTF(E_DBG,L_SCAN," Bit Rate: %d\n",bitrate);
/* guesstimate the file length */ /* guesstimate the file length */
if(!pmp3->song_length) /* could have gotten it from the tag */ if(!pmp3->song_length) /* could have gotten it from the tag */
@ -1263,7 +1263,7 @@ int scan_get_mp3fileinfo(char *file, MP3FILE *pmp3) {
} else { } else {
/* FIXME: should really scan forward to next sync frame */ /* FIXME: should really scan forward to next sync frame */
fclose(infile); fclose(infile);
DPRINTF(ERR_DEBUG,"Could not find sync frame\n"); DPRINTF(E_DBG,L_SCAN,"Could not find sync frame\n");
return 0; return 0;
} }

View File

@ -226,10 +226,10 @@ void pl_register(void) {
SMART_PLAYLIST *pcurrent; SMART_PLAYLIST *pcurrent;
/* register the playlists */ /* register the playlists */
DPRINTF(ERR_INFO,"Finished loading smart playlists\n"); DPRINTF(E_INF,L_PL,"Finished loading smart playlists\n");
pcurrent=pl_smart.next; pcurrent=pl_smart.next;
while(pcurrent) { while(pcurrent) {
DPRINTF(ERR_INFO,"Adding smart playlist %s as %d\n",pcurrent->name,pcurrent->id) DPRINTF(E_INF,L_PL,"Adding smart playlist %s as %d\n",pcurrent->name,pcurrent->id)
db_add_playlist(pcurrent->id, pcurrent->name,1); db_add_playlist(pcurrent->id, pcurrent->name,1);
pcurrent=pcurrent->next; pcurrent=pcurrent->next;
} }
@ -246,7 +246,7 @@ void pl_eval(MP3FILE *pmp3) {
pcurrent=pl_smart.next; pcurrent=pl_smart.next;
while(pcurrent) { while(pcurrent) {
if(pl_eval_node(pmp3,pcurrent->root)) { if(pl_eval_node(pmp3,pcurrent->root)) {
DPRINTF(ERR_DEBUG,"Matched song to playlist %s (%d)\n",pcurrent->name,pcurrent->id); DPRINTF(E_DBG,L_PL,"Match song to playlist %s (%d)\n",pcurrent->name,pcurrent->id);
db_add_playlist_song(pcurrent->id, pmp3->id); db_add_playlist_song(pcurrent->id, pmp3->id);
} }
@ -326,7 +326,7 @@ int pl_eval_node(MP3FILE *pmp3, PL_NODE *pnode) {
ival=pmp3->time_added; ival=pmp3->time_added;
break; break;
default: default:
DPRINTF(ERR_FATAL,"Unknown token in playlist. This can't happen!\n\n"); DPRINTF(E_FATAL,L_PL,"Unknown token in playlist. This can't happen!\n\n");
break; break;
} }
@ -338,7 +338,7 @@ int pl_eval_node(MP3FILE *pmp3, PL_NODE *pnode) {
if(!cval) if(!cval)
cval = ""; cval = "";
DPRINTF(ERR_DEBUG,"Matching %s to %s\n",cval,pnode->arg2.cval); DPRINTF(E_DBG,L_PL,"Matching %s to %s\n",cval,pnode->arg2.cval);
switch(boolarg) { switch(boolarg) {
case IS: case IS:
@ -353,7 +353,7 @@ int pl_eval_node(MP3FILE *pmp3, PL_NODE *pnode) {
} }
if(pnode->type==T_DATE) { if(pnode->type==T_DATE) {
DPRINTF(ERR_DEBUG,"Comparing (datewise) %d to %d\n",ival,pnode->arg2.ival); DPRINTF(E_DBG,L_PL,"Comparing (datewise) %d to %d\n",ival,pnode->arg2.ival);
switch(boolarg) { switch(boolarg) {
case BEFORE: case BEFORE:
r_arg=(ival < pnode->arg2.ival); r_arg=(ival < pnode->arg2.ival);
@ -366,7 +366,7 @@ int pl_eval_node(MP3FILE *pmp3, PL_NODE *pnode) {
} }
if(pnode->type==T_INT) { if(pnode->type==T_INT) {
DPRINTF(ERR_DEBUG,"Comparing %d to %d\n",ival,pnode->arg2.ival); DPRINTF(E_DBG,L_PL,"Comparing %d to %d\n",ival,pnode->arg2.ival);
switch(boolarg) { switch(boolarg) {
case EQUALS: case EQUALS:
@ -388,7 +388,7 @@ int pl_eval_node(MP3FILE *pmp3, PL_NODE *pnode) {
retval = not? !r_arg : r_arg; retval = not? !r_arg : r_arg;
} }
DPRINTF(ERR_DEBUG,"Returning %d\n",retval); DPRINTF(E_DBG,L_PL,"Returning %d\n",retval);
return retval; return retval;
} }

View File

@ -62,7 +62,7 @@ query_node_t* query_build(const char* query, const query_field_t* fields)
case ' ': join = qot_and; break; case ' ': join = qot_and; break;
case ',': join = qot_or; break; case ',': join = qot_or; break;
default: default:
DPRINTF(ERR_LOG, "Illegal character '%c' (0%o) at index %d: %s\n", DPRINTF(E_LOG,L_QRY, "Illegal character '%c' (0%o) at index %d: %s\n",
*cursor, *cursor, cursor - raw, raw); *cursor, *cursor, cursor - raw, raw);
goto error; goto error;
} }
@ -104,7 +104,7 @@ static query_node_t* match_specifier(const char* query,
case '(': return group_match(query, cursor, fields); case '(': return group_match(query, cursor, fields);
} }
DPRINTF(ERR_LOG, "Illegal character '%c' (0%o) at index %d: %s\n", DPRINTF(E_LOG,L_QRY,"Illegal character '%c' (0%o) at index %d: %s\n",
**cursor, **cursor, *cursor - query, query); **cursor, **cursor, *cursor - query, query);
return NULL; return NULL;
} }
@ -137,7 +137,7 @@ static query_node_t* group_match(const char* query,
break; break;
default: default:
DPRINTF(ERR_LOG, "Illegal character '%c' (0%o) at index %d: %s\n", DPRINTF(E_LOG,L_QRY,"Illegal character '%c' (0%o) at index %d: %s\n",
*cursor, *cursor, cursor - query, query); *cursor, *cursor, cursor - query, query);
goto error; goto error;
} }
@ -147,7 +147,7 @@ static query_node_t* group_match(const char* query,
if(*cursor != ')') if(*cursor != ')')
{ {
DPRINTF(ERR_LOG, "Illegal character '%c' (0%o) at index %d: %s\n", DPRINTF(E_LOG,L_QRY,"Illegal character '%c' (0%o) at index %d: %s\n",
*cursor, *cursor, cursor - query, query); *cursor, *cursor, cursor - query, query);
goto error; goto error;
} }
@ -200,14 +200,14 @@ static query_node_t* single_match(const char* query,
} }
else else
{ {
DPRINTF(ERR_LOG, "Illegal Operator: %c (0%o) at index %d: %s\n", DPRINTF(E_LOG,L_QRY,"Illegal Operator: %c (0%o) at index %d: %s\n",
**pcursor, **pcursor, *pcursor - query, query); **pcursor, **pcursor, *pcursor - query, query);
return NULL; return NULL;
} }
if(0 == (field = find_field(fname, fields))) if(0 == (field = find_field(fname, fields)))
{ {
DPRINTF(ERR_LOG, "Unknown field: %s\n", fname); DPRINTF(E_LOG,L_QRY,"Unknown field: %s\n", fname);
return NULL; return NULL;
} }
@ -223,13 +223,13 @@ static query_node_t* single_match(const char* query,
break; break;
default: default:
DPRINTF(ERR_LOG, "Invalid field type: %d\n", field->type); DPRINTF(E_LOG,L_QRY,"Invalid field type: %d\n", field->type);
break; break;
} }
if(**pcursor != '\'') if(**pcursor != '\'')
{ {
DPRINTF(ERR_LOG, "Illegal Character: %c (0%o) index %d: %s\n", DPRINTF(E_LOG,L_QRY,"Illegal Character: %c (0%o) index %d: %s\n",
**pcursor, **pcursor, *pcursor - query, query); **pcursor, **pcursor, *pcursor - query, query);
query_free(node); query_free(node);
node = 0; node = 0;
@ -254,7 +254,7 @@ static int get_field_name(const char** pcursor,
{ {
if(--len <= 0) if(--len <= 0)
{ {
DPRINTF(ERR_LOG, "token length exceeded at offset %d: %s\n", DPRINTF(E_LOG,L_QRY,"token length exceeded at offset %d: %s\n",
cursor - query, query); cursor - query, query);
return 0; return 0;
} }
@ -304,7 +304,7 @@ static query_node_t* match_number(const query_field_t* field,
if(**pcursor != '\'') if(**pcursor != '\'')
{ {
DPRINTF(ERR_LOG, "Illegal char in number '%c' (0%o) at index %d: %s\n", DPRINTF(E_LOG,L_QRY,"Illegal char in number '%c' (0%o) at index %d: %s\n",
**pcursor, **pcursor, *pcursor - query, query); **pcursor, **pcursor, *pcursor - query, query);
free(node); free(node);
return 0; return 0;
@ -327,7 +327,7 @@ static query_node_t* match_string(const query_field_t* field,
if(opcode != ':') if(opcode != ':')
{ {
DPRINTF(ERR_LOG, "Illegal operation on string: %c at index %d: %s\n", DPRINTF(E_LOG,L_QRY,"Illegal operation on string: %c at index %d: %s\n",
opcode, cursor - query - 1); opcode, cursor - query - 1);
return NULL; return NULL;
} }
@ -342,7 +342,7 @@ static query_node_t* match_string(const query_field_t* field,
{ {
if(--left == 0) if(--left == 0)
{ {
DPRINTF(ERR_LOG, "string too long at index %d: %s\n", DPRINTF(E_LOG,L_QRY,"string too long at index %d: %s\n",
cursor - query, query); cursor - query, query);
return NULL; return NULL;
} }
@ -357,7 +357,7 @@ static query_node_t* match_string(const query_field_t* field,
*dst++ = *cursor++; *dst++ = *cursor++;
break; break;
default: default:
DPRINTF(ERR_LOG, "Illegal escape: %c (0%o) at index %d: %s\n", DPRINTF(E_LOG,L_QRY,"Illegal escape: %c (0%o) at index %d: %s\n",
*cursor, *cursor, cursor - query, query); *cursor, *cursor, cursor - query, query);
return NULL; return NULL;
} }
@ -464,7 +464,7 @@ void query_free(query_node_t* query)
break; break;
default: default:
DPRINTF(ERR_LOG, "Illegal query type: %d\n", query->type); DPRINTF(E_LOG,L_QRY,"Illegal query type: %d\n", query->type);
break; break;
} }
@ -479,7 +479,7 @@ static const query_field_t* find_field(const char* name, const query_field_t* fi
if(fields->name == 0) if(fields->name == 0)
{ {
DPRINTF(ERR_LOG, "Illegal query field: %s\n", name); DPRINTF(E_LOG,L_QRY,"Illegal query field: %s\n", name);
return NULL; return NULL;
} }
@ -507,7 +507,7 @@ static int arith_query(query_node_t* query, void* target)
case qot_ge: return tv >= 0; case qot_ge: return tv >= 0;
case qot_gt: return tv > 0; case qot_gt: return tv > 0;
default: default:
DPRINTF(ERR_LOG, "illegal query type: %d\n", query->type); DPRINTF(E_LOG,L_QRY,"illegal query type: %d\n", query->type);
break; break;
} }
} }
@ -528,14 +528,14 @@ static int arith_query(query_node_t* query, void* target)
case qot_ge: return tv >= 0; case qot_ge: return tv >= 0;
case qot_gt: return tv > 0; case qot_gt: return tv > 0;
default: default:
DPRINTF(ERR_LOG, "illegal query type: %d\n", query->type); DPRINTF(E_LOG,L_QRY,"illegal query type: %d\n", query->type);
break; break;
} }
} }
break; break;
default: default:
DPRINTF(ERR_LOG, "illegal field type: %d\n", field->type); DPRINTF(E_LOG,L_QRY,"illegal field type: %d\n", field->type);
break; break;
} }
@ -549,7 +549,7 @@ static int string_query(query_node_t* query, void* target)
if(field->type != qft_string) if(field->type != qft_string)
{ {
DPRINTF(ERR_LOG, "illegal field type: %d\n", field->type); DPRINTF(E_LOG,L_QRY,"illegal field type: %d\n", field->type);
return 0; return 0;
} }
@ -580,7 +580,7 @@ static int string_query(query_node_t* query, void* target)
return (int) strcasestr(ts, query->right.str); /* returns null if not found */ return (int) strcasestr(ts, query->right.str); /* returns null if not found */
default: default:
DPRINTF(ERR_LOG, "Illegal query type: %d\n", query->type); DPRINTF(E_LOG,L_QRY,"Illegal query type: %d\n", query->type);
break; break;
} }

View File

@ -60,7 +60,7 @@ static sw_result rend_howl_reply(sw_rendezvous_publish_handler handler,
"invalid" "invalid"
}; };
DPRINTF(ERR_DEBUG,"Publish reply: %s\n",status_text[status]); DPRINTF(E_DBG,L_REND,"Publish reply: %s\n",status_text[status]);
return SW_OKAY; return SW_OKAY;
} }
@ -73,11 +73,11 @@ static sw_result rend_howl_reply(sw_rendezvous_publish_handler handler,
int rend_private_init(char *user) { int rend_private_init(char *user) {
sw_result result; sw_result result;
DPRINTF(ERR_DEBUG,"Starting rendezvous services\n"); DPRINTF(E_DBG,L_REND,"Starting rendezvous services\n");
signal(SIGHUP, SIG_IGN); // SIGHUP might happen from a request to reload the daap server signal(SIGHUP, SIG_IGN); // SIGHUP might happen from a request to reload the daap server
if(sw_rendezvous_init(&rend_handle) != SW_OKAY) { if(sw_rendezvous_init(&rend_handle) != SW_OKAY) {
DPRINTF(ERR_WARN,"Error initializing rendezvous\n"); DPRINTF(E_WARN,L_REND,"Error initializing rendezvous\n");
errno=EINVAL; errno=EINVAL;
return -1; return -1;
} }
@ -85,19 +85,19 @@ int rend_private_init(char *user) {
if(drop_privs(user)) if(drop_privs(user))
return -1; return -1;
DPRINTF(ERR_DEBUG,"Starting polling thread\n"); DPRINTF(E_DBG,L_REND,"Starting polling thread\n");
if(pthread_create(&rend_tid,NULL,rend_pipe_monitor,NULL)) { if(pthread_create(&rend_tid,NULL,rend_pipe_monitor,NULL)) {
DPRINTF(ERR_FATAL,"Could not start thread. Terminating\n"); DPRINTF(E_FATAL,L_REND,"Could not start thread. Terminating\n");
/* should kill parent, too */ /* should kill parent, too */
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
DPRINTF(ERR_DEBUG,"Entering runloop\n"); DPRINTF(E_DBG,L_REND,"Entering runloop\n");
sw_rendezvous_run(rend_handle); sw_rendezvous_run(rend_handle);
DPRINTF(ERR_DEBUG,"Exiting runloop\n"); DPRINTF(E_DBG,L_REND,"Exiting runloop\n");
return 0; return 0;
} }
@ -111,7 +111,7 @@ void *rend_pipe_monitor(void* arg) {
int result; int result;
while(1) { while(1) {
DPRINTF(ERR_DEBUG,"Waiting for data\n"); DPRINTF(E_DBG,L_REND,"Waiting for data\n");
FD_ZERO(&rset); FD_ZERO(&rset);
FD_SET(rend_pipe_to[RD_SIDE],&rset); FD_SET(rend_pipe_to[RD_SIDE],&rset);
@ -119,12 +119,12 @@ void *rend_pipe_monitor(void* arg) {
while(((result=select(rend_pipe_to[RD_SIDE] + 1,&rset,NULL,NULL,NULL)) != -1) && while(((result=select(rend_pipe_to[RD_SIDE] + 1,&rset,NULL,NULL,NULL)) != -1) &&
errno != EINTR) { errno != EINTR) {
if(FD_ISSET(rend_pipe_to[RD_SIDE],&rset)) { if(FD_ISSET(rend_pipe_to[RD_SIDE],&rset)) {
DPRINTF(ERR_DEBUG,"Received a message from daap server\n"); DPRINTF(E_DBG,L_REND,"Received a message from daap server\n");
rend_callback(); rend_callback();
} }
} }
DPRINTF(ERR_DEBUG,"Select error!\n"); DPRINTF(E_DBG,L_REND,"Select error!\n");
/* should really bail here */ /* should really bail here */
} }
} }
@ -144,33 +144,33 @@ void rend_callback(void) {
/* here, we've seen the message, now we have to process it */ /* here, we've seen the message, now we have to process it */
if(rend_read_message(&msg) != sizeof(msg)) { if(rend_read_message(&msg) != sizeof(msg)) {
DPRINTF(ERR_FATAL,"Error reading rendezvous message\n"); DPRINTF(E_FATAL,L_REND,"Error reading rendezvous message\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
switch(msg.cmd) { switch(msg.cmd) {
case REND_MSG_TYPE_REGISTER: case REND_MSG_TYPE_REGISTER:
DPRINTF(ERR_DEBUG,"Registering %s.%s (%d)\n",msg.type,msg.name,msg.port); DPRINTF(E_DBG,L_REND,"Registering %s.%s (%d)\n",msg.type,msg.name,msg.port);
if((result=sw_rendezvous_publish(rend_handle,msg.name,msg.type,NULL,NULL,msg.port,NULL,0, if((result=sw_rendezvous_publish(rend_handle,msg.name,msg.type,NULL,NULL,msg.port,NULL,0,
NULL,rend_howl_reply,NULL,&rend_id)) != SW_OKAY) { NULL,rend_howl_reply,NULL,&rend_id)) != SW_OKAY) {
DPRINTF(ERR_WARN,"Error registering name\n"); DPRINTF(E_WARN,L_REND,"Error registering name\n");
rend_send_response(-1); rend_send_response(-1);
} else { } else {
rend_send_response(0); /* success */ rend_send_response(0); /* success */
} }
break; break;
case REND_MSG_TYPE_UNREGISTER: case REND_MSG_TYPE_UNREGISTER:
DPRINTF(ERR_WARN,"Unsupported function: UNREGISTER\n"); DPRINTF(E_WARN,L_REND,"Unsupported function: UNREGISTER\n");
rend_send_response(-1); /* error */ rend_send_response(-1); /* error */
break; break;
case REND_MSG_TYPE_STOP: case REND_MSG_TYPE_STOP:
DPRINTF(ERR_DEBUG,"Stopping mDNS\n"); DPRINTF(E_DBG,L_REND,"Stopping mDNS\n");
rend_send_response(0); rend_send_response(0);
//sw_rendezvous_stop_publish(rend_handle); //sw_rendezvous_stop_publish(rend_handle);
sw_rendezvous_fina(rend_handle); sw_rendezvous_fina(rend_handle);
break; break;
case REND_MSG_TYPE_STATUS: case REND_MSG_TYPE_STATUS:
DPRINTF(ERR_DEBUG,"Status inquiry -- returning 0\n"); DPRINTF(E_DBG,L_REND,"Status inquiry -- returning 0\n");
rend_send_response(0); /* success */ rend_send_response(0); /* success */
break; break;
default: default:

View File

@ -55,7 +55,7 @@ static void rend_stoprunloop(void) {
* rend_sigint * rend_sigint
*/ */
static void rend_sigint(int sigraised) { static void rend_sigint(int sigraised) {
DPRINTF(ERR_INFO,"SIGINT\n"); DPRINTF(E_INF,L_REND,"SIGINT\n");
rend_stoprunloop(); rend_stoprunloop();
} }
@ -95,13 +95,13 @@ static int rend_addtorunloop(dns_service_discovery_ref client) {
static void rend_reply(DNSServiceRegistrationReplyErrorType errorCode, void *context) { static void rend_reply(DNSServiceRegistrationReplyErrorType errorCode, void *context) {
switch(errorCode) { switch(errorCode) {
case kDNSServiceDiscoveryNoError: case kDNSServiceDiscoveryNoError:
DPRINTF(ERR_DEBUG,"Registered successfully\n"); DPRINTF(E_DBG,L_REND,"Registered successfully\n");
break; break;
case kDNSServiceDiscoveryNameConflict: case kDNSServiceDiscoveryNameConflict:
DPRINTF(ERR_WARN,"Error - name in use\n"); DPRINTF(E_WARN,L_REND,"Error - name in use\n");
break; break;
default: default:
DPRINTF(ERR_WARN,"Error %d\n",errorCode); DPRINTF(E_WARN,L_REND,"Error %d\n",errorCode);
break; break;
} }
} }
@ -115,7 +115,7 @@ void *rend_pipe_monitor(void* arg) {
while(1) { while(1) {
DPRINTF(ERR_DEBUG,"Waiting for data\n"); DPRINTF(E_DBG,L_REND,"Waiting for data\n");
FD_ZERO(&rset); FD_ZERO(&rset);
FD_SET(rend_pipe_to[RD_SIDE],&rset); FD_SET(rend_pipe_to[RD_SIDE],&rset);
@ -123,14 +123,14 @@ void *rend_pipe_monitor(void* arg) {
while(((result=select(rend_pipe_to[RD_SIDE] + 1,&rset,NULL,NULL,NULL)) != -1) && while(((result=select(rend_pipe_to[RD_SIDE] + 1,&rset,NULL,NULL,NULL)) != -1) &&
errno != EINTR) { errno != EINTR) {
if(FD_ISSET(rend_pipe_to[RD_SIDE],&rset)) { if(FD_ISSET(rend_pipe_to[RD_SIDE],&rset)) {
DPRINTF(ERR_DEBUG,"Received a message from daap server\n"); DPRINTF(E_DBG,L_REND,"Received a message from daap server\n");
CFRunLoopSourceSignal(rend_rls); CFRunLoopSourceSignal(rend_rls);
CFRunLoopWakeUp(rend_runloop); CFRunLoopWakeUp(rend_runloop);
sleep(1); /* force a reschedule, hopefully */ sleep(1); /* force a reschedule, hopefully */
} }
} }
DPRINTF(ERR_DEBUG,"Select error!\n"); DPRINTF(E_DBG,L_REND,"Select error!\n");
/* should really bail here */ /* should really bail here */
} }
} }
@ -150,33 +150,33 @@ void rend_callback(void *info) {
/* here, we've seen the message, now we have to process it */ /* here, we've seen the message, now we have to process it */
if(rend_read_message(&msg) != sizeof(msg)) { if(rend_read_message(&msg) != sizeof(msg)) {
DPRINTF(ERR_FATAL,"Error reading rendezvous message\n"); DPRINTF(E_FATAL,L_REND,"Error reading rendezvous message\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
switch(msg.cmd) { switch(msg.cmd) {
case REND_MSG_TYPE_REGISTER: case REND_MSG_TYPE_REGISTER:
DPRINTF(ERR_DEBUG,"Registering %s.%s (%d)\n",msg.type,msg.name,msg.port); DPRINTF(E_DBG,L_REND,"Registering %s.%s (%d)\n",msg.type,msg.name,msg.port);
usPort=msg.port; usPort=msg.port;
dns_ref=DNSServiceRegistrationCreate(msg.name,msg.type,"",usPort,"",rend_reply,nil); dns_ref=DNSServiceRegistrationCreate(msg.name,msg.type,"",usPort,"",rend_reply,nil);
if(rend_addtorunloop(dns_ref)) { if(rend_addtorunloop(dns_ref)) {
DPRINTF(ERR_WARN,"Add to runloop failed\n"); DPRINTF(E_WARN,L_REND,"Add to runloop failed\n");
rend_send_response(-1); rend_send_response(-1);
} else { } else {
rend_send_response(0); /* success */ rend_send_response(0); /* success */
} }
break; break;
case REND_MSG_TYPE_UNREGISTER: case REND_MSG_TYPE_UNREGISTER:
DPRINTF(ERR_WARN,"Unsupported function: UNREGISTER\n"); DPRINTF(E_WARN,L_REND,"Unsupported function: UNREGISTER\n");
rend_send_response(-1); /* error */ rend_send_response(-1); /* error */
break; break;
case REND_MSG_TYPE_STOP: case REND_MSG_TYPE_STOP:
DPRINTF(ERR_DEBUG,"Stopping mDNS\n"); DPRINTF(E_DBG,L_REND,"Stopping mDNS\n");
rend_send_response(0); rend_send_response(0);
rend_stoprunloop(); rend_stoprunloop();
break; break;
case REND_MSG_TYPE_STATUS: case REND_MSG_TYPE_STATUS:
DPRINTF(ERR_DEBUG,"Status inquiry -- returning 0\n"); DPRINTF(E_DBG,L_REND,"Status inquiry -- returning 0\n");
rend_send_response(0); /* success */ rend_send_response(0); /* success */
break; break;
default: default:
@ -196,7 +196,7 @@ int rend_private_init(char *user) {
return -1; return -1;
/* need a sigint handler */ /* need a sigint handler */
DPRINTF(ERR_DEBUG,"Starting rendezvous services\n"); DPRINTF(E_DBG,L_REND,"Starting rendezvous services\n");
memset((void*)&context,0,sizeof(context)); memset((void*)&context,0,sizeof(context));
context.perform = rend_callback; context.perform = rend_callback;
@ -205,19 +205,19 @@ int rend_private_init(char *user) {
rend_rls = CFRunLoopSourceCreate(NULL,0,&context); rend_rls = CFRunLoopSourceCreate(NULL,0,&context);
CFRunLoopAddSource(CFRunLoopGetCurrent(),rend_rls,kCFRunLoopDefaultMode); CFRunLoopAddSource(CFRunLoopGetCurrent(),rend_rls,kCFRunLoopDefaultMode);
DPRINTF(ERR_DEBUG,"Starting polling thread\n"); DPRINTF(E_DBG,L_REND,"Starting polling thread\n");
if(pthread_create(&rend_tid,NULL,rend_pipe_monitor,NULL)) { if(pthread_create(&rend_tid,NULL,rend_pipe_monitor,NULL)) {
DPRINTF(ERR_FATAL,"Could not start thread. Terminating\n"); DPRINTF(E_FATAL,L_REND,"Could not start thread. Terminating\n");
/* should kill parent, too */ /* should kill parent, too */
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
DPRINTF(ERR_DEBUG,"Starting runloop\n"); DPRINTF(E_DBG,L_REND,"Starting runloop\n");
CFRunLoopRun(); CFRunLoopRun();
DPRINTF(ERR_DEBUG,"Exiting runloop\n"); DPRINTF(E_DBG,L_REND,"Exiting runloop\n");
CFRelease(rend_rls); CFRelease(rend_rls);
pthread_cancel(rend_tid); pthread_cancel(rend_tid);

View File

@ -89,6 +89,9 @@
Change History (most recent first): Change History (most recent first):
$Log$ $Log$
Revision 1.19 2004/11/13 07:14:26 rpedde
modularize debugging statements
Revision 1.18 2004/04/19 06:19:46 rpedde Revision 1.18 2004/04/19 06:19:46 rpedde
Starting to fix signal stuff Starting to fix signal stuff
@ -203,7 +206,7 @@ static void HandleSigInt(int sigraised)
{ {
assert(sigraised == SIGINT); assert(sigraised == SIGINT);
DPRINTF(ERR_INFO,"SIGINT\n"); DPRINTF(E_INF,L_REND,"SIGINT\n");
gStopNow = mDNStrue; gStopNow = mDNStrue;
} }
@ -216,7 +219,7 @@ static void HandleSigQuit(int sigraised)
{ {
assert(sigraised == SIGQUIT); assert(sigraised == SIGQUIT);
DPRINTF(ERR_INFO,"SIGQUIT\n"); DPRINTF(E_INF,L_REND,"SIGQUIT\n");
mDNS_Close(&mDNSStorage); mDNS_Close(&mDNSStorage);
exit(0); exit(0);
@ -249,13 +252,13 @@ static void RegistrationCallback(mDNS *const m, ServiceRecordSet *const thisRegi
switch (status) { switch (status) {
case mStatus_NoError: case mStatus_NoError:
DPRINTF(ERR_DEBUG,"Callback: Name Registered\n"); DPRINTF(E_DBG,L_REND,"Callback: Name Registered\n");
// Do nothing; our name was successfully registered. We may // Do nothing; our name was successfully registered. We may
// get more call backs in the future. // get more call backs in the future.
break; break;
case mStatus_NameConflict: case mStatus_NameConflict:
DPRINTF(ERR_WARN,"Callback: Name Conflict\n"); DPRINTF(E_WARN,L_REND,"Callback: Name Conflict\n");
// In the event of a conflict, this sample RegistrationCallback // In the event of a conflict, this sample RegistrationCallback
// just calls mDNS_RenameAndReregisterService to automatically // just calls mDNS_RenameAndReregisterService to automatically
@ -273,7 +276,7 @@ static void RegistrationCallback(mDNS *const m, ServiceRecordSet *const thisRegi
break; break;
case mStatus_MemFree: case mStatus_MemFree:
DPRINTF(ERR_WARN,"Callback: Memory Free\n"); DPRINTF(E_WARN,L_REND,"Callback: Memory Free\n");
// When debugging is enabled, make sure that thisRegistration // When debugging is enabled, make sure that thisRegistration
// is not on our gServiceList. // is not on our gServiceList.
@ -293,7 +296,7 @@ static void RegistrationCallback(mDNS *const m, ServiceRecordSet *const thisRegi
break; break;
default: default:
DPRINTF(ERR_WARN,"Callback: Unknown Status %d\n",status); DPRINTF(E_WARN,L_REND,"Callback: Unknown Status %d\n",status);
break; break;
} }
} }
@ -342,7 +345,7 @@ static mStatus RegisterOneService(const char * richTextHostName,
thisServ->next = gServiceList; thisServ->next = gServiceList;
gServiceList = thisServ; gServiceList = thisServ;
DPRINTF(ERR_DEBUG, DPRINTF(E_DBG,L_REND,
"Registered service %d, name '%s', type '%s', domain '%s', port %ld\n", "Registered service %d, name '%s', type '%s', domain '%s', port %ld\n",
thisServ->serviceID, thisServ->serviceID,
richTextHostName, richTextHostName,
@ -370,7 +373,7 @@ static void DeregisterOurServices(void)
mDNS_DeregisterService(&mDNSStorage, &thisServ->coreServ); mDNS_DeregisterService(&mDNSStorage, &thisServ->coreServ);
DPRINTF(ERR_DEBUG,"Deregistered service %d\n", DPRINTF(E_DBG,L_REND,"Deregistered service %d\n",
thisServ->serviceID); thisServ->serviceID);
} }
} }
@ -385,21 +388,21 @@ void rend_callback(void) {
int result; int result;
int err; int err;
DPRINTF(ERR_DEBUG,"Processing rendezvous message\n"); DPRINTF(E_DBG,L_REND,"Processing rendezvous message\n");
/* here, we've seen the message, now we have to process it */ /* here, we've seen the message, now we have to process it */
if((result=rend_read_message(&msg)) != sizeof(msg)) { if((result=rend_read_message(&msg)) != sizeof(msg)) {
err=errno; err=errno;
DPRINTF(ERR_DEBUG,"Expected %d, got %d\n",sizeof(msg),result); DPRINTF(E_DBG,L_REND,"Expected %d, got %d\n",sizeof(msg),result);
DPRINTF(ERR_FATAL,"Rendezvous pipe closed... Exiting\n"); DPRINTF(E_FATAL,L_REND,"Rendezvous pipe closed... Exiting\n");
gStopNow=mDNStrue; gStopNow=mDNStrue;
return; return;
} }
switch(msg.cmd) { switch(msg.cmd) {
case REND_MSG_TYPE_REGISTER: case REND_MSG_TYPE_REGISTER:
DPRINTF(ERR_DEBUG,"Registering %s.%s (%d)\n",msg.name,msg.type,msg.port); DPRINTF(E_DBG,L_REND,"Registering %s.%s (%d)\n",msg.name,msg.type,msg.port);
RegisterOneService(msg.name,msg.type,"local.",NULL,0,msg.port); RegisterOneService(msg.name,msg.type,"local.",NULL,0,msg.port);
rend_send_response(0); /* success */ rend_send_response(0); /* success */
break; break;
@ -407,7 +410,7 @@ void rend_callback(void) {
rend_send_response(1); /* error */ rend_send_response(1); /* error */
break; break;
case REND_MSG_TYPE_STOP: case REND_MSG_TYPE_STOP:
DPRINTF(ERR_INFO,"Stopping mDNS\n"); DPRINTF(E_INF,L_REND,"Stopping mDNS\n");
gStopNow = mDNStrue; gStopNow = mDNStrue;
rend_send_response(0); rend_send_response(0);
break; break;
@ -431,7 +434,7 @@ int rend_private_init(char *user) {
mDNS_Init_NoInitCallback, mDNS_Init_NoInitCallbackContext); mDNS_Init_NoInitCallback, mDNS_Init_NoInitCallbackContext);
if (status != mStatus_NoError) { if (status != mStatus_NoError) {
DPRINTF(ERR_FATAL,"mDNS Error %d\n",status); DPRINTF(E_FATAL,L_REND,"mDNS Error %d\n",status);
return(-1); return(-1);
} }
@ -464,13 +467,13 @@ int rend_private_init(char *user) {
mDNSPosixGetFDSet(&mDNSStorage, &nfds, &readfds, &timeout); mDNSPosixGetFDSet(&mDNSStorage, &nfds, &readfds, &timeout);
// 4. Call select as normal // 4. Call select as normal
DPRINTF(ERR_DEBUG,"select(%d, %d.%06d)\n", nfds, DPRINTF(E_DBG,L_REND,"select(%d, %d.%06d)\n", nfds,
timeout.tv_sec, timeout.tv_usec); timeout.tv_sec, timeout.tv_usec);
result = select(nfds, &readfds, NULL, NULL, &timeout); result = select(nfds, &readfds, NULL, NULL, &timeout);
if (result < 0) { if (result < 0) {
DPRINTF(ERR_WARN,"select() returned %d errno %d\n", result, errno); DPRINTF(E_WARN,L_REND,"select() returned %d errno %d\n", result, errno);
if (errno != EINTR) gStopNow = mDNStrue; if (errno != EINTR) gStopNow = mDNStrue;
} else { } else {
// 5. Call mDNSPosixProcessFDSet to let the mDNSPosix layer do its work // 5. Call mDNSPosixProcessFDSet to let the mDNSPosix layer do its work
@ -485,7 +488,7 @@ int rend_private_init(char *user) {
} }
} }
DPRINTF(ERR_DEBUG,"Exiting\n"); DPRINTF(E_DBG,L_REND,"Exiting\n");
DeregisterOurServices(); DeregisterOurServices();
mDNS_Close(&mDNSStorage); mDNS_Close(&mDNSStorage);
@ -495,7 +498,7 @@ int rend_private_init(char *user) {
} else { } else {
result = 2; result = 2;
} }
DPRINTF(ERR_DEBUG, "Finished with status %ld, result %d\n", DPRINTF(E_DBG,L_REND, "Finished with status %ld, result %d\n",
status, result); status, result);
exit(result); exit(result);

View File

@ -97,11 +97,11 @@ int rend_running(void) {
REND_MESSAGE msg; REND_MESSAGE msg;
int result; int result;
DPRINTF(ERR_DEBUG,"Status inquiry\n"); DPRINTF(E_DBG,L_REND,"Status inquiry\n");
memset((void*)&msg,0x00,sizeof(msg)); memset((void*)&msg,0x00,sizeof(msg));
msg.cmd=REND_MSG_TYPE_STATUS; msg.cmd=REND_MSG_TYPE_STATUS;
result=rend_send_message(&msg); result=rend_send_message(&msg);
DPRINTF(ERR_DEBUG,"Returning status %d\n",result); DPRINTF(E_DBG,L_REND,"Returning status %d\n",result);
return result; return result;
} }
@ -126,7 +126,7 @@ int rend_register(char *name, char *type, int port) {
REND_MESSAGE msg; REND_MESSAGE msg;
if((strlen(name)+1 > MAX_NAME_LEN) || (strlen(type)+1 > MAX_NAME_LEN)) { if((strlen(name)+1 > MAX_NAME_LEN) || (strlen(type)+1 > MAX_NAME_LEN)) {
DPRINTF(ERR_FATAL,"Registration failed: name or type too long\n"); DPRINTF(E_FATAL,L_REND,"Registration failed: name or type too long\n");
return -1; return -1;
} }

View File

@ -200,18 +200,18 @@ WSHANDLE ws_start(WSCONFIG *config) {
return NULL; return NULL;
} }
DPRINTF(ERR_INFO,"Preparing to listen on port %d\n",pwsp->wsconfig.port); DPRINTF(E_INF,L_WS,"Preparing to listen on port %d\n",pwsp->wsconfig.port);
if((pwsp->server_fd = u_open(pwsp->wsconfig.port)) == -1) { if((pwsp->server_fd = u_open(pwsp->wsconfig.port)) == -1) {
err=errno; err=errno;
DPRINTF(ERR_WARN,"Could not open port: %s\n",strerror(errno)); DPRINTF(E_WARN,L_WS,"Could not open port: %s\n",strerror(errno));
errno=err; errno=err;
return NULL; return NULL;
} }
DPRINTF(ERR_INFO,"Starting server thread\n"); DPRINTF(E_INF,L_WS,"Starting server thread\n");
if((err=pthread_create(&pwsp->server_tid,NULL,ws_mainthread,(void*)pwsp))) { if((err=pthread_create(&pwsp->server_tid,NULL,ws_mainthread,(void*)pwsp))) {
DPRINTF(ERR_WARN,"Could not spawn thread: %s\n",strerror(err)); DPRINTF(E_WARN,L_WS,"Could not spawn thread: %s\n",strerror(err));
r_close(pwsp->server_fd); r_close(pwsp->server_fd);
errno=err; errno=err;
return NULL; return NULL;
@ -233,7 +233,7 @@ void ws_remove_dispatch_thread(WS_PRIVATE *pwsp, WS_CONNINFO *pwsc) {
WS_CONNLIST *pHead, *pTail; WS_CONNLIST *pHead, *pTail;
if(pthread_mutex_lock(&pwsp->exit_mutex)) if(pthread_mutex_lock(&pwsp->exit_mutex))
DPRINTF(ERR_FATAL,"Cannot lock condition mutex\n"); DPRINTF(E_FATAL,L_WS,"Cannot lock condition mutex\n");
pTail=&(pwsp->connlist); pTail=&(pwsp->connlist);
pHead=pwsp->connlist.next; pHead=pwsp->connlist.next;
@ -245,7 +245,7 @@ void ws_remove_dispatch_thread(WS_PRIVATE *pwsp, WS_CONNINFO *pwsc) {
if(pHead) { if(pHead) {
pwsp->dispatch_threads--; pwsp->dispatch_threads--;
DPRINTF(ERR_DEBUG,"With thread %d exiting, %d are still running\n", DPRINTF(E_DBG,L_WS,"With thread %d exiting, %d are still running\n",
pwsc->threadno,pwsp->dispatch_threads); pwsc->threadno,pwsp->dispatch_threads);
pTail->next = pHead->next; pTail->next = pHead->next;
@ -276,10 +276,10 @@ void ws_add_dispatch_thread(WS_PRIVATE *pwsp, WS_CONNINFO *pwsc) {
pNew->status=strdup("Initializing"); pNew->status=strdup("Initializing");
if(!pNew) if(!pNew)
DPRINTF(ERR_FATAL,"Malloc: %s\n",strerror(errno)); DPRINTF(E_FATAL,L_WS,"Malloc: %s\n",strerror(errno));
if(pthread_mutex_lock(&pwsp->exit_mutex)) if(pthread_mutex_lock(&pwsp->exit_mutex))
DPRINTF(ERR_FATAL,"Cannot lock condition mutex\n"); DPRINTF(E_FATAL,L_WS,"Cannot lock condition mutex\n");
/* list is locked... */ /* list is locked... */
pwsp->dispatch_threads++; pwsp->dispatch_threads++;
@ -300,7 +300,7 @@ extern int ws_stop(WSHANDLE ws) {
WS_CONNLIST *pcl; WS_CONNLIST *pcl;
void *result; void *result;
DPRINTF(ERR_DEBUG,"ws_stop: %d threads\n",pwsp->dispatch_threads); DPRINTF(E_DBG,L_WS,"ws_stop: %d threads\n",pwsp->dispatch_threads);
/* free the ws_handlers */ /* free the ws_handlers */
while(pwsp->handlers.next) { while(pwsp->handlers.next) {
@ -313,7 +313,7 @@ extern int ws_stop(WSHANDLE ws) {
pwsp->stop=1; pwsp->stop=1;
pwsp->running=0; pwsp->running=0;
DPRINTF(ERR_DEBUG,"ws_stop: closing the server fd\n"); DPRINTF(E_DBG,L_WS,"ws_stop: closing the server fd\n");
shutdown(pwsp->server_fd,SHUT_RDWR); shutdown(pwsp->server_fd,SHUT_RDWR);
r_close(pwsp->server_fd); /* this should tick off the listener */ r_close(pwsp->server_fd); /* this should tick off the listener */
@ -322,7 +322,7 @@ extern int ws_stop(WSHANDLE ws) {
/* Give the threads an extra push */ /* Give the threads an extra push */
if(pthread_mutex_lock(&pwsp->exit_mutex)) if(pthread_mutex_lock(&pwsp->exit_mutex))
DPRINTF(ERR_FATAL,"Cannot lock condition mutex\n"); DPRINTF(E_FATAL,L_WS,"Cannot lock condition mutex\n");
pcl=pwsp->connlist.next; pcl=pwsp->connlist.next;
@ -339,7 +339,7 @@ extern int ws_stop(WSHANDLE ws) {
/* wait for the threads to be done */ /* wait for the threads to be done */
while(pwsp->dispatch_threads) { while(pwsp->dispatch_threads) {
DPRINTF(ERR_DEBUG,"ws_stop: I still see %d threads\n",pwsp->dispatch_threads); DPRINTF(E_DBG,L_WS,"ws_stop: I still see %d threads\n",pwsp->dispatch_threads);
pthread_cond_wait(&pwsp->exit_cond, &pwsp->exit_mutex); pthread_cond_wait(&pwsp->exit_cond, &pwsp->exit_mutex);
} }
@ -374,7 +374,7 @@ void *ws_mainthread(void *arg) {
pwsc=(WS_CONNINFO*)malloc(sizeof(WS_CONNINFO)); pwsc=(WS_CONNINFO*)malloc(sizeof(WS_CONNINFO));
if(!pwsc) { if(!pwsc) {
/* can't very well service any more threads! */ /* can't very well service any more threads! */
DPRINTF(ERR_FATAL,"Error: %s\n",strerror(errno)); DPRINTF(E_FATAL,L_WS,"Error: %s\n",strerror(errno));
pwsp->running=0; pwsp->running=0;
return NULL; return NULL;
} }
@ -382,13 +382,13 @@ void *ws_mainthread(void *arg) {
memset(pwsc,0,sizeof(WS_CONNINFO)); memset(pwsc,0,sizeof(WS_CONNINFO));
if((fd=u_accept(pwsp->server_fd,hostname,MAX_HOSTNAME)) == -1) { if((fd=u_accept(pwsp->server_fd,hostname,MAX_HOSTNAME)) == -1) {
DPRINTF(ERR_DEBUG,"Dispatcher: accept failed: %s\n",strerror(errno)); DPRINTF(E_DBG,L_WS,"Dispatcher: accept failed: %s\n",strerror(errno));
shutdown(pwsp->server_fd,SHUT_RDWR); shutdown(pwsp->server_fd,SHUT_RDWR);
r_close(pwsp->server_fd); r_close(pwsp->server_fd);
pwsp->running=0; pwsp->running=0;
free(pwsc); free(pwsc);
DPRINTF(ERR_DEBUG,"Dispatcher: Aborting\n"); DPRINTF(E_DBG,L_WS,"Dispatcher: Aborting\n");
return NULL; return NULL;
} }
@ -409,7 +409,7 @@ void *ws_mainthread(void *arg) {
/* now, throw off a dispatch thread */ /* now, throw off a dispatch thread */
if((err=pthread_create(&tid,NULL,ws_dispatcher,(void*)pwsc))) { if((err=pthread_create(&tid,NULL,ws_dispatcher,(void*)pwsc))) {
pwsc->error=err; pwsc->error=err;
DPRINTF(ERR_WARN,"Could not spawn thread: %s\n",strerror(err)); DPRINTF(E_WARN,L_WS,"Could not spawn thread: %s\n",strerror(err));
ws_close(pwsc); ws_close(pwsc);
} else { } else {
ws_add_dispatch_thread(pwsp,pwsc); ws_add_dispatch_thread(pwsp,pwsc);
@ -437,12 +437,12 @@ void ws_close(WS_CONNINFO *pwsc) {
relevant entries */ relevant entries */
config_set_status(pwsc, 0, NULL); config_set_status(pwsc, 0, NULL);
DPRINTF(ERR_DEBUG,"Thread %d: Terminating\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: Terminating\n",pwsc->threadno);
DPRINTF(ERR_DEBUG,"Thread %d: Freeing request headers\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: Freeing request headers\n",pwsc->threadno);
ws_freearglist(&pwsc->request_headers); ws_freearglist(&pwsc->request_headers);
DPRINTF(ERR_DEBUG,"Thread %d: Freeing response headers\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: Freeing response headers\n",pwsc->threadno);
ws_freearglist(&pwsc->response_headers); ws_freearglist(&pwsc->response_headers);
DPRINTF(ERR_DEBUG,"Thread %d: Freeing request vars\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: Freeing request vars\n",pwsc->threadno);
ws_freearglist(&pwsc->request_vars); ws_freearglist(&pwsc->request_vars);
if(pwsc->uri) { if(pwsc->uri) {
free(pwsc->uri); free(pwsc->uri);
@ -450,7 +450,7 @@ void ws_close(WS_CONNINFO *pwsc) {
} }
if((pwsc->close)||(pwsc->error)) { if((pwsc->close)||(pwsc->error)) {
DPRINTF(ERR_DEBUG,"Thread %d: Closing fd\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: Closing fd\n",pwsc->threadno);
shutdown(pwsc->fd,SHUT_RDWR); shutdown(pwsc->fd,SHUT_RDWR);
r_close(pwsc->fd); r_close(pwsc->fd);
free(pwsc->hostname); free(pwsc->hostname);
@ -485,7 +485,7 @@ void ws_emitheaders(WS_CONNINFO *pwsc) {
ARGLIST *pcurrent=pwsc->response_headers.next; ARGLIST *pcurrent=pwsc->response_headers.next;
while(pcurrent) { while(pcurrent) {
DPRINTF(ERR_DEBUG,"Emitting reponse header %s: %s\n",pcurrent->key, DPRINTF(E_DBG,L_WS,"Emitting reponse header %s: %s\n",pcurrent->key,
pcurrent->value); pcurrent->value);
ws_writefd(pwsc,"%s: %s\r\n",pcurrent->key,pcurrent->value); ws_writefd(pwsc,"%s: %s\r\n",pcurrent->key,pcurrent->value);
pcurrent=pcurrent->next; pcurrent=pcurrent->next;
@ -513,14 +513,14 @@ int ws_getpostvars(WS_CONNINFO *pwsc) {
} }
length=atoi(content_length); length=atoi(content_length);
DPRINTF(ERR_DEBUG,"Thread %d: Post var length: %d\n", DPRINTF(E_DBG,L_WS,"Thread %d: Post var length: %d\n",
pwsc->threadno,length); pwsc->threadno,length);
buffer=(char*)malloc(length+1); buffer=(char*)malloc(length+1);
if(!buffer) { if(!buffer) {
pwsc->error = errno; pwsc->error = errno;
DPRINTF(ERR_INFO,"Thread %d: Could not malloc %d bytes\n", DPRINTF(E_INF,L_WS,"Thread %d: Could not malloc %d bytes\n",
pwsc->threadno, length); pwsc->threadno, length);
return -1; return -1;
} }
@ -528,13 +528,13 @@ int ws_getpostvars(WS_CONNINFO *pwsc) {
// make the read time out 30 minutes like we said in the // make the read time out 30 minutes like we said in the
// /server-info response // /server-info response
if((readtimed(pwsc->fd, buffer, length, 1800.0)) == -1) { if((readtimed(pwsc->fd, buffer, length, 1800.0)) == -1) {
DPRINTF(ERR_INFO,"Thread %d: Timeout reading post vars\n", DPRINTF(E_INF,L_WS,"Thread %d: Timeout reading post vars\n",
pwsc->threadno); pwsc->threadno);
pwsc->error=errno; pwsc->error=errno;
return -1; return -1;
} }
DPRINTF(ERR_DEBUG,"Thread %d: Read post vars: %s\n",pwsc->threadno,buffer); DPRINTF(E_DBG,L_WS,"Thread %d: Read post vars: %s\n",pwsc->threadno,buffer);
pwsc->error=ws_getgetvars(pwsc,buffer); pwsc->error=ws_getgetvars(pwsc,buffer);
@ -559,11 +559,11 @@ int ws_getheaders(WS_CONNINFO *pwsc) {
while(!done) { while(!done) {
if(readline(pwsc->fd,buffer,sizeof(buffer)) == -1) { if(readline(pwsc->fd,buffer,sizeof(buffer)) == -1) {
pwsc->error=errno; pwsc->error=errno;
DPRINTF(ERR_INFO,"Thread %d: Unexpected close\n",pwsc->threadno); DPRINTF(E_INF,L_WS,"Thread %d: Unexpected close\n",pwsc->threadno);
return -1; return -1;
} }
DPRINTF(ERR_DEBUG,"Thread %d: Read: %s",pwsc->threadno,buffer); DPRINTF(E_DBG,L_WS,"Thread %d: Read: %s",pwsc->threadno,buffer);
first=buffer; first=buffer;
if(buffer[0] == '\r') if(buffer[0] == '\r')
@ -574,7 +574,7 @@ int ws_getheaders(WS_CONNINFO *pwsc) {
first[strlen(first)-1] = '\0'; first[strlen(first)-1] = '\0';
if(strlen(first) == 0) { if(strlen(first) == 0) {
DPRINTF(ERR_DEBUG,"Thread %d: Headers parsed!\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: Headers parsed!\n",pwsc->threadno);
done=1; done=1;
} else { } else {
/* we have a header! */ /* we have a header! */
@ -582,7 +582,7 @@ int ws_getheaders(WS_CONNINFO *pwsc) {
strsep(&last,":"); strsep(&last,":");
if(last==first) { if(last==first) {
DPRINTF(ERR_WARN,"Thread %d: Invalid header: %s\n", DPRINTF(E_WARN,L_WS,"Thread %d: Invalid header: %s\n",
pwsc->threadno,first); pwsc->threadno,first);
} else { } else {
while(*last==' ') while(*last==' ')
@ -591,11 +591,11 @@ int ws_getheaders(WS_CONNINFO *pwsc) {
while(last[strlen(last)-1] == '\r') while(last[strlen(last)-1] == '\r')
last[strlen(last)-1] = '\0'; last[strlen(last)-1] = '\0';
DPRINTF(ERR_DEBUG,"Thread %d: Adding header *%s=%s*\n", DPRINTF(E_DBG,L_WS,"Thread %d: Adding header *%s=%s*\n",
pwsc->threadno,first,last); pwsc->threadno,first,last);
if(ws_addarg(&pwsc->request_headers,first,"%s",last)) { if(ws_addarg(&pwsc->request_headers,first,"%s",last)) {
DPRINTF(ERR_FATAL,"Thread %d: Out of memory\n", DPRINTF(E_FATAL,L_WS,"Thread %d: Out of memory\n",
pwsc->threadno); pwsc->threadno);
pwsc->error=ENOMEM; pwsc->error=ENOMEM;
return -1; return -1;
@ -619,10 +619,10 @@ int ws_getgetvars(WS_CONNINFO *pwsc, char *string) {
char *key, *value; char *key, *value;
int done; int done;
DPRINTF(ERR_DEBUG,"Thread %d: Original string: %s\n", DPRINTF(E_DBG,L_WS,"Thread %d: Original string: %s\n",
pwsc->threadno,string); pwsc->threadno,string);
DPRINTF(ERR_DEBUG,"Thread %d: Processing GET/POSTs from %s\n", DPRINTF(E_DBG,L_WS,"Thread %d: Processing GET/POSTs from %s\n",
pwsc->threadno,string); pwsc->threadno,string);
done=0; done=0;
@ -635,13 +635,13 @@ int ws_getgetvars(WS_CONNINFO *pwsc, char *string) {
strsep(&middle,"="); strsep(&middle,"=");
if(!middle) { if(!middle) {
DPRINTF(ERR_WARN,"Thread %d: Bad arg: %s\n", DPRINTF(E_WARN,L_WS,"Thread %d: Bad arg: %s\n",
pwsc->threadno,first); pwsc->threadno,first);
} else { } else {
key=ws_urldecode(first); key=ws_urldecode(first);
value=ws_urldecode(middle); value=ws_urldecode(middle);
DPRINTF(ERR_DEBUG,"Thread %d: Adding arg %s = %s\n", DPRINTF(E_DBG,L_WS,"Thread %d: Adding arg %s = %s\n",
pwsc->threadno,key,value); pwsc->threadno,key,value);
ws_addarg(&pwsc->request_vars,key,"%s",value); ws_addarg(&pwsc->request_vars,key,"%s",value);
@ -650,7 +650,7 @@ int ws_getgetvars(WS_CONNINFO *pwsc, char *string) {
} }
if(!last) { if(!last) {
DPRINTF(ERR_DEBUG,"Thread %d: Done parsing GET/POST args!\n", DPRINTF(E_DBG,L_WS,"Thread %d: Done parsing GET/POST args!\n",
pwsc->threadno); pwsc->threadno);
done=1; done=1;
} else { } else {
@ -683,7 +683,7 @@ void *ws_dispatcher(void *arg) {
void (*req_handler)(WS_CONNINFO*); void (*req_handler)(WS_CONNINFO*);
int(*auth_handler)(char *, char *); int(*auth_handler)(char *, char *);
DPRINTF(ERR_DEBUG,"Thread %d: Connection from %s\n",pwsc->threadno, DPRINTF(E_DBG,L_WS,"Thread %d: Connection from %s\n",pwsc->threadno,
pwsc->hostname); pwsc->hostname);
while(!connection_done) { while(!connection_done) {
@ -696,14 +696,14 @@ void *ws_dispatcher(void *arg) {
if((readlinetimed(pwsc->fd,buffer,sizeof(buffer),1800.0)) < 1) { if((readlinetimed(pwsc->fd,buffer,sizeof(buffer),1800.0)) < 1) {
pwsc->error=errno; pwsc->error=errno;
pwsc->close=1; pwsc->close=1;
DPRINTF(ERR_WARN,"Thread %d: could not read: %s\n", DPRINTF(E_WARN,L_WS,"Thread %d: could not read: %s\n",
pwsc->threadno,strerror(errno)); pwsc->threadno,strerror(errno));
ws_close(pwsc); ws_close(pwsc);
return NULL; return NULL;
} }
DPRINTF(ERR_DEBUG,"Thread %d: got request\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: got request\n",pwsc->threadno);
DPRINTF(ERR_DEBUG - 1, "Request: %s", buffer); DPRINTF(E_DBG - 1,L_WS, "Request: %s", buffer);
first=last=buffer; first=last=buffer;
strsep(&last," "); strsep(&last," ");
@ -734,7 +734,7 @@ void *ws_dispatcher(void *arg) {
/* Get headers */ /* Get headers */
if((ws_getheaders(pwsc)) || (!last)) { /* didn't provide a HTTP/1.x */ if((ws_getheaders(pwsc)) || (!last)) { /* didn't provide a HTTP/1.x */
/* error already set */ /* error already set */
DPRINTF(ERR_FATAL,"Thread %d: Couldn't parse headers - aborting\n", DPRINTF(E_FATAL,L_WS,"Thread %d: Couldn't parse headers - aborting\n",
pwsc->threadno); pwsc->threadno);
pwsc->close=1; pwsc->close=1;
ws_close(pwsc); ws_close(pwsc);
@ -750,7 +750,7 @@ void *ws_dispatcher(void *arg) {
} else { /* default to persistant for HTTP/1.1 and above */ } else { /* default to persistant for HTTP/1.1 and above */
pwsc->close=ws_testarg(&pwsc->request_headers,"connection","close"); pwsc->close=ws_testarg(&pwsc->request_headers,"connection","close");
} }
DPRINTF(ERR_DEBUG,"Thread %d: Connection type %s: Connection: %s\n", DPRINTF(E_DBG,L_WS,"Thread %d: Connection type %s: Connection: %s\n",
pwsc->threadno, last, pwsc->close ? "non-persist" : "persist"); pwsc->threadno, last, pwsc->close ? "non-persist" : "persist");
if(!pwsc->uri) { if(!pwsc->uri) {
@ -758,7 +758,7 @@ void *ws_dispatcher(void *arg) {
* as well bail */ * as well bail */
pwsc->error=ENOMEM; pwsc->error=ENOMEM;
pwsc->close=1; /* force a full close */ pwsc->close=1; /* force a full close */
DPRINTF(ERR_FATAL,"Thread %d: Error allocation URI\n", DPRINTF(E_FATAL,L_WS,"Thread %d: Error allocation URI\n",
pwsc->threadno); pwsc->threadno);
ws_returnerror(pwsc,500,"Internal server error"); ws_returnerror(pwsc,500,"Internal server error");
ws_close(pwsc); ws_close(pwsc);
@ -770,13 +770,13 @@ void *ws_dispatcher(void *arg) {
strsep(&first,"?"); strsep(&first,"?");
if(first) { /* got some GET args */ if(first) { /* got some GET args */
DPRINTF(ERR_DEBUG,"Thread %d: parsing GET args\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: parsing GET args\n",pwsc->threadno);
ws_getgetvars(pwsc,first); ws_getgetvars(pwsc,first);
} }
/* fix the URI by un urldecoding it */ /* fix the URI by un urldecoding it */
DPRINTF(ERR_DEBUG,"Thread %d: Original URI: %s\n", DPRINTF(E_DBG,L_WS,"Thread %d: Original URI: %s\n",
pwsc->threadno,pwsc->uri); pwsc->threadno,pwsc->uri);
first=ws_urldecode(pwsc->uri); first=ws_urldecode(pwsc->uri);
@ -796,7 +796,7 @@ void *ws_dispatcher(void *arg) {
} }
DPRINTF(ERR_DEBUG,"Thread %d: Translated URI: %s\n",pwsc->threadno, DPRINTF(E_DBG,L_WS,"Thread %d: Translated URI: %s\n",pwsc->threadno,
pwsc->uri); pwsc->uri);
/* now, parse POST args */ /* now, parse POST args */
@ -808,10 +808,10 @@ void *ws_dispatcher(void *arg) {
handler=ws_findhandler(pwsp,pwsc,&req_handler,&auth_handler,&hdrs); handler=ws_findhandler(pwsp,pwsc,&req_handler,&auth_handler,&hdrs);
time(&now); time(&now);
DPRINTF(ERR_DEBUG,"Thread %d: Time is %d seconds after epoch\n", DPRINTF(E_DBG,L_WS,"Thread %d: Time is %d seconds after epoch\n",
pwsc->threadno,now); pwsc->threadno,now);
gmtime_r(&now,&now_tm); gmtime_r(&now,&now_tm);
DPRINTF(ERR_DEBUG,"Thread %d: Setting time header\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: Setting time header\n",pwsc->threadno);
ws_addarg(&pwsc->response_headers,"Date", ws_addarg(&pwsc->response_headers,"Date",
"%s, %d %s %d %02d:%02d:%02d GMT", "%s, %d %s %d %02d:%02d:%02d GMT",
ws_dow[now_tm.tm_wday],now_tm.tm_mday, ws_dow[now_tm.tm_wday],now_tm.tm_mday,
@ -831,11 +831,11 @@ void *ws_dispatcher(void *arg) {
/* Find the appropriate handler and dispatch it */ /* Find the appropriate handler and dispatch it */
if(handler == -1) { if(handler == -1) {
DPRINTF(ERR_DEBUG,"Thread %d: Using default handler.\n", DPRINTF(E_DBG,L_WS,"Thread %d: Using default handler.\n",
pwsc->threadno); pwsc->threadno);
ws_defaulthandler(pwsp,pwsc); ws_defaulthandler(pwsp,pwsc);
} else { } else {
DPRINTF(ERR_DEBUG,"Thread %d: Using non-default handler\n", DPRINTF(E_DBG,L_WS,"Thread %d: Using non-default handler\n",
pwsc->threadno); pwsc->threadno);
can_dispatch=0; can_dispatch=0;
@ -914,7 +914,7 @@ int ws_writefd(WS_CONNINFO *pwsc, char *fmt, ...) {
int ws_returnerror(WS_CONNINFO *pwsc,int error, char *description) { int ws_returnerror(WS_CONNINFO *pwsc,int error, char *description) {
char *useragent; char *useragent;
DPRINTF(ERR_WARN,"Thread %d: Pushing a %d: %s\n", DPRINTF(E_WARN,L_WS,"Thread %d: Pushing a %d: %s\n",
pwsc->threadno,error,description); pwsc->threadno,error,description);
ws_writefd(pwsc,"HTTP/1.1 %d %s\r\n",error,description); ws_writefd(pwsc,"HTTP/1.1 %d %s\r\n",error,description);
@ -956,19 +956,19 @@ void ws_defaulthandler(WS_PRIVATE *pwsp, WS_CONNINFO *pwsc) {
snprintf(path,MAXPATHLEN,"%s/%s",pwsp->wsconfig.web_root,pwsc->uri); snprintf(path,MAXPATHLEN,"%s/%s",pwsp->wsconfig.web_root,pwsc->uri);
if(!realpath(path,resolved_path)) { if(!realpath(path,resolved_path)) {
pwsc->error=errno; pwsc->error=errno;
DPRINTF(ERR_WARN,"Cannot resolve %s\n",path); DPRINTF(E_WARN,L_WS,"Cannot resolve %s\n",path);
ws_returnerror(pwsc,404,"Not found"); ws_returnerror(pwsc,404,"Not found");
ws_close(pwsc); ws_close(pwsc);
return; return;
} }
DPRINTF(ERR_DEBUG,"Thread %d: Preparing to serve %s\n", DPRINTF(E_DBG,L_WS,"Thread %d: Preparing to serve %s\n",
pwsc->threadno, resolved_path); pwsc->threadno, resolved_path);
if(strncmp(resolved_path,pwsp->wsconfig.web_root, if(strncmp(resolved_path,pwsp->wsconfig.web_root,
strlen(pwsp->wsconfig.web_root))) { strlen(pwsp->wsconfig.web_root))) {
pwsc->error=EINVAL; pwsc->error=EINVAL;
DPRINTF(ERR_WARN,"Thread %d: Requested file %s out of root\n", DPRINTF(E_WARN,L_WS,"Thread %d: Requested file %s out of root\n",
pwsc->threadno,resolved_path); pwsc->threadno,resolved_path);
ws_returnerror(pwsc,403,"Forbidden"); ws_returnerror(pwsc,403,"Forbidden");
ws_close(pwsc); ws_close(pwsc);
@ -978,7 +978,7 @@ void ws_defaulthandler(WS_PRIVATE *pwsp, WS_CONNINFO *pwsc) {
file_fd=open(resolved_path,O_RDONLY); file_fd=open(resolved_path,O_RDONLY);
if(file_fd == -1) { if(file_fd == -1) {
pwsc->error=errno; pwsc->error=errno;
DPRINTF(ERR_WARN,"Thread %d: Error opening %s: %s\n", DPRINTF(E_WARN,L_WS,"Thread %d: Error opening %s: %s\n",
pwsc->threadno,resolved_path,strerror(errno)); pwsc->threadno,resolved_path,strerror(errno));
ws_returnerror(pwsc,404,"Not found"); ws_returnerror(pwsc,404,"Not found");
ws_close(pwsc); ws_close(pwsc);
@ -991,7 +991,7 @@ void ws_defaulthandler(WS_PRIVATE *pwsp, WS_CONNINFO *pwsc) {
/* FIXME: assumes off_t == long */ /* FIXME: assumes off_t == long */
if(len != -1) { if(len != -1) {
/* we have a real length */ /* we have a real length */
DPRINTF(ERR_DEBUG,"Length of file is %ld\n",(long)len); DPRINTF(E_DBG,L_WS,"Length of file is %ld\n",(long)len);
ws_addarg(&pwsc->response_headers,"Content-Length","%ld",(long)len); ws_addarg(&pwsc->response_headers,"Content-Length","%ld",(long)len);
lseek(file_fd,0,SEEK_SET); lseek(file_fd,0,SEEK_SET);
} }
@ -1004,7 +1004,7 @@ void ws_defaulthandler(WS_PRIVATE *pwsp, WS_CONNINFO *pwsc) {
copyfile(file_fd,pwsc->fd); copyfile(file_fd,pwsc->fd);
r_close(file_fd); r_close(file_fd);
DPRINTF(ERR_DEBUG,"Thread %d: Served successfully\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: Served successfully\n",pwsc->threadno);
return; return;
} }
@ -1034,7 +1034,7 @@ int ws_testrequestheader(WS_CONNINFO *pwsc, char *header, char *value) {
int ws_testarg(ARGLIST *root, char *key, char *value) { int ws_testarg(ARGLIST *root, char *key, char *value) {
char *retval; char *retval;
DPRINTF(ERR_DEBUG,"Checking to see if %s matches %s\n",key,value); DPRINTF(E_DBG,L_WS,"Checking to see if %s matches %s\n",key,value);
retval=ws_getarg(root,key); retval=ws_getarg(root,key);
if(!retval) if(!retval)
@ -1113,7 +1113,7 @@ int ws_addarg(ARGLIST *root, char *key, char *fmt, ...) {
while(current) { while(current) {
if(!strcmp(current->key,key)) { if(!strcmp(current->key,key)) {
/* got a match! */ /* got a match! */
DPRINTF(ERR_DEBUG,"Updating %s from %s to %s\n", DPRINTF(E_DBG,L_WS,"Updating %s from %s to %s\n",
key,current->value,value); key,current->value,value);
free(current->value); free(current->value);
current->value = newvalue; current->value = newvalue;
@ -1126,7 +1126,7 @@ int ws_addarg(ARGLIST *root, char *key, char *fmt, ...) {
pnew->next=root->next; pnew->next=root->next;
DPRINTF(ERR_DEBUG,"Added *%s=%s*\n",newkey,newvalue); DPRINTF(E_DBG,L_WS,"Added *%s=%s*\n",newkey,newvalue);
root->next=pnew; root->next=pnew;
return 0; return 0;
@ -1252,13 +1252,13 @@ int ws_findhandler(WS_PRIVATE *pwsp, WS_CONNINFO *pwsc,
*preq=NULL; *preq=NULL;
DPRINTF(ERR_DEBUG,"Thread %d: Preparing to find handler\n", DPRINTF(E_DBG,L_WS,"Thread %d: Preparing to find handler\n",
pwsc->threadno); pwsc->threadno);
while(phandler) { while(phandler) {
if(!regexec(&phandler->regex,pwsc->uri,0,NULL,0)) { if(!regexec(&phandler->regex,pwsc->uri,0,NULL,0)) {
/* that's a match */ /* that's a match */
DPRINTF(ERR_DEBUG,"Thread %d: URI Match!\n",pwsc->threadno); DPRINTF(E_DBG,L_WS,"Thread %d: URI Match!\n",pwsc->threadno);
*preq=phandler->req_handler; *preq=phandler->req_handler;
*pauth=phandler->auth_handler; *pauth=phandler->auth_handler;
*addheaders=phandler->addheaders; *addheaders=phandler->addheaders;
@ -1324,7 +1324,7 @@ int ws_decodepassword(char *header, char **username, char **password) {
if(!decodebuffer) if(!decodebuffer)
return -1; return -1;
DPRINTF(ERR_DEBUG,"Preparing to decode %s\n",header); DPRINTF(E_DBG,L_WS,"Preparing to decode %s\n",header);
memset(decodebuffer,0,strlen(header)); memset(decodebuffer,0,strlen(header));
len=0; len=0;
@ -1336,7 +1336,7 @@ int ws_decodepassword(char *header, char **username, char **password) {
if(pin[rack] != '=') { if(pin[rack] != '=') {
lookup=ws_xlat[pin[rack]]; lookup=ws_xlat[pin[rack]];
if(lookup == 0xFF) { if(lookup == 0xFF) {
DPRINTF(ERR_WARN,"Got garbage Authenticate header\n"); DPRINTF(E_WARN,L_WS,"Got garbage Authenticate header\n");
return -1; return -1;
} }
@ -1374,14 +1374,14 @@ int ws_decodepassword(char *header, char **username, char **password) {
} }
/* we now have the decoded string */ /* we now have the decoded string */
DPRINTF(ERR_DEBUG,"Decoded %s\n",decodebuffer); DPRINTF(E_DBG,L_WS,"Decoded %s\n",decodebuffer);
*username = decodebuffer; *username = decodebuffer;
*password = *username; *password = *username;
strsep(password,":"); strsep(password,":");
DPRINTF(ERR_DEBUG,"Decoded user=%s, pw=%s\n",*username,*password); DPRINTF(E_DBG,L_WS,"Decoded user=%s, pw=%s\n",*username,*password);
return 0; return 0;
} }