From 1e702d96b34ba508e5c0cacc6739eb6fe387044c Mon Sep 17 00:00:00 2001 From: jcorporation Date: Wed, 28 Nov 2018 14:23:29 +0000 Subject: [PATCH] Feat: more loglevels Fix: mympd_search_adv now uses window parameter, increases speed of search noticeable --- contrib/mympd.conf.dist | 2 + src/mpd_client.c | 177 ++++++++++++++++++++++------------------ src/mpd_client.h | 4 +- src/mympd.c | 51 +++++++----- 4 files changed, 132 insertions(+), 102 deletions(-) diff --git a/contrib/mympd.conf.dist b/contrib/mympd.conf.dist index 20ddd17..f0cc9d6 100644 --- a/contrib/mympd.conf.dist +++ b/contrib/mympd.conf.dist @@ -1,8 +1,10 @@ #myMPD config file #Loglevel +#0 = quiet #1 = default #2 = verbose +#3 = debug loglevel = 1 #Connection to mpd diff --git a/src/mpd_client.c b/src/mpd_client.c index 5db1776..5b8717d 100644 --- a/src/mpd_client.c +++ b/src/mpd_client.c @@ -63,8 +63,11 @@ void callback_mympd(struct mg_connection *nc, const struct mg_str msg) { enum mpd_cmd_ids cmd_id; struct pollfd fds[1]; int pollrc; + #ifdef DEBUG + struct timespec start, end; + #endif - printf("API request: %s\n", msg.p); + LOG_VERBOSE() printf("API request: %s\n", msg.p); je = json_scanf(msg.p, msg.len, "{cmd: %Q}", &cmd); if (je == 1) @@ -83,10 +86,13 @@ void callback_mympd(struct mg_connection *nc, const struct mg_str msg) { if (pollrc > 0) { idle_bitmask_save = mpd_recv_idle(mpd.conn, false); if (idle_bitmask_save > 0) - VERBOSELOG() fprintf(stderr, "IDLE EVENT BEFORE REQUEST: %d\n", idle_bitmask_save); + LOG_DEBUG() fprintf(stderr, "DEBUG: Idle event before request: %d\n", idle_bitmask_save); } mpd_response_finish(mpd.conn); //handle request + #ifdef DEBUG + clock_gettime(CLOCK_MONOTONIC_RAW, &start); + #endif switch(cmd_id) { case MPD_API_UNKNOWN: n = snprintf(mpd.buf, MAX_SIZE, "{\"type\": \"error\", \"data\": \"Unknown request\"}"); @@ -647,20 +653,26 @@ void callback_mympd(struct mg_connection *nc, const struct mg_str msg) { mpd.conn_state = MPD_FAILURE; } - mpd_send_idle(mpd.conn); - + #ifdef DEBUG + clock_gettime(CLOCK_MONOTONIC_RAW, &end); + uint64_t delta_us = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_nsec - start.tv_nsec) / 1000; + fprintf(stderr, "DEBUG: Time used: %llu\n", delta_us); + #endif + if (n == 0) n = snprintf(mpd.buf, MAX_SIZE, "{\"type\": \"error\", \"data\": \"No response for cmd %s\"}", cmd); if (is_websocket(nc)) { - VERBOSELOG() fprintf(stderr, "Send websocket response:\n %s\n", mpd.buf); + LOG_DEBUG() fprintf(stderr, "DEBUG: Send websocket response:\n %s\n", mpd.buf); mg_send_websocket_frame(nc, WEBSOCKET_OP_TEXT, mpd.buf, n); } else { - VERBOSELOG() fprintf(stderr, "Send http response (first 800 chars):\n%*.*s\n", 0, 800, mpd.buf); + LOG_DEBUG() fprintf(stderr, "DEBUG: Send http response (first 800 chars):\n%*.*s\n", 0, 800, mpd.buf); mg_send_http_chunk(nc, mpd.buf, n); } - free(cmd); + free(cmd); + + mpd_send_idle(mpd.conn); } void mympd_notify(struct mg_mgr *s) { @@ -669,7 +681,7 @@ void mympd_notify(struct mg_mgr *s) { continue; mg_send_websocket_frame(c, WEBSOCKET_OP_TEXT, mpd.buf, strlen(mpd.buf)); } - VERBOSELOG() fprintf(stderr, "NOTIFY: %s\n", mpd.buf); + LOG_DEBUG() fprintf(stderr, "DEBUG: Websocket notify: %s\n", mpd.buf); } void mympd_parse_idle(struct mg_mgr *s, int idle_bitmask) { @@ -680,7 +692,7 @@ void mympd_parse_idle(struct mg_mgr *s, int idle_bitmask) { if (idle_name == NULL) break; if (idle_bitmask & idle_event) { - VERBOSELOG() fprintf(stderr, "IDLE: %s\n", idle_name); + LOG_VERBOSE() printf("MPD idle event: %s\n", idle_name); switch(idle_event) { case MPD_IDLE_DATABASE: len = snprintf(mpd.buf, MAX_SIZE, "{\"type\": \"update_database\"}"); @@ -761,64 +773,64 @@ void mympd_mpd_features() { mpd_return_pair(mpd.conn, pair); } mpd_response_finish(mpd.conn); - printf("MPD protocoll version: %i.%i.%i\n", mpd.protocol[0], mpd.protocol[1], mpd.protocol[2]); + LOG_INFO() printf("MPD protocoll version: %i.%i.%i\n", mpd.protocol[0], mpd.protocol[1], mpd.protocol[2]); if (mpd.feat_sticker == false && config.stickers == true) { - printf("MPD don't support stickers, disabling myMPD feature\n"); + LOG_INFO() printf("MPD don't support stickers, disabling myMPD feature\n"); config.stickers = false; } if (config.stickers == false && config.smartpls == true) { - printf("Stickers are disabled, disabling smartplaylists\n"); + LOG_INFO() printf("Stickers are disabled, disabling smartplaylists\n"); config.smartpls = false; } if (mpd.feat_playlists == false && config.smartpls == true) { - printf("Playlists are disabled, disabling smartplaylists\n"); + LOG_INFO() printf("Playlists are disabled, disabling smartplaylists\n"); config.smartpls = false; } - printf("MPD supported tags: "); + LOG_INFO() printf("MPD supported tags: "); list_free(&mpd_tags); mpd_send_list_tag_types(mpd.conn); while ((pair = mpd_recv_tag_type_pair(mpd.conn)) != NULL) { - printf("%s ", pair->value); + LOG_INFO() printf("%s ", pair->value); list_push(&mpd_tags, pair->value, 1); mpd_return_pair(mpd.conn, pair); } mpd_response_finish(mpd.conn); list_free(&mympd_tags); if (mpd_tags.length == 0) { - printf("none\nTags are disabled\n"); + LOG_INFO() printf("none\nTags are disabled\n"); mpd.feat_tags = false; } else { mpd.feat_tags = true; - printf("\nmyMPD enabled tags: "); + LOG_INFO() printf("\nmyMPD enabled tags: "); token = strtok(taglist, s); while (token != NULL) { if (list_get_value(&mpd_tags, token) == 1) { list_push(&mympd_tags, token, 1); - printf("%s ", token); + LOG_INFO() printf("%s ", token); } token = strtok(NULL, s); } - printf("\nmyMPD enabled searchtags: "); + LOG_INFO() printf("\nmyMPD enabled searchtags: "); token = strtok(searchtaglist, s); while (token != NULL) { if (list_get_value(&mympd_tags, token) == 1) { list_push(&mympd_searchtags, token, 1); - printf("%s ", token); + LOG_INFO() printf("%s ", token); } token = strtok(NULL, s); } - printf("\nmyMPD enabled browsetags: "); + LOG_INFO() printf("\nmyMPD enabled browsetags: "); token = strtok(browsetaglist, s); while (token != NULL) { if (list_get_value(&mympd_tags, token) == 1) { list_push(&mympd_browsetags, token, 1); - printf("%s ", token); + LOG_INFO() printf("%s ", token); } token = strtok(NULL, s); } - printf("\n"); + LOG_INFO() printf("\n"); } free(taglist); free(searchtaglist); @@ -826,10 +838,10 @@ void mympd_mpd_features() { if (LIBMPDCLIENT_CHECK_VERSION(2, 17, 0) && mpd_connection_cmp_server_version(mpd.conn, 0, 21, 0) >= 0) { mpd.feat_advsearch = true; - printf("Enabling advanced search\n"); + LOG_INFO() printf("Enabling advanced search\n"); } else - printf("Disabling advanced search, depends on mpd >= 0.21.0 and libmpdclient >= 2.17.0\n"); + LOG_INFO() printf("Disabling advanced search, depends on mpd >= 0.21.0 and libmpdclient >= 2.17.0\n"); } void mympd_idle(struct mg_mgr *s, int timeout) { @@ -839,7 +851,7 @@ void mympd_idle(struct mg_mgr *s, int timeout) { switch (mpd.conn_state) { case MPD_DISCONNECTED: /* Try to connect */ - printf("MPD Connecting to %s:%ld\n", config.mpdhost, config.mpdport); + LOG_INFO() printf("MPD Connecting to %s:%ld\n", config.mpdhost, config.mpdport); mpd.conn = mpd_connection_new(config.mpdhost, config.mpdport, mpd.timeout); if (mpd.conn == NULL) { printf("MPD connection failed."); @@ -865,7 +877,7 @@ void mympd_idle(struct mg_mgr *s, int timeout) { return; } - printf("MPD connected.\n"); + LOG_INFO() printf("MPD connected.\n"); mpd_connection_set_timeout(mpd.conn, mpd.timeout); mpd.conn_state = MPD_CONNECTED; mympd_mpd_features(); @@ -904,7 +916,7 @@ void mympd_idle(struct mg_mgr *s, int timeout) { } if (idle_bitmask_save > 0) { //Handle idle event saved in mympd_callback - VERBOSELOG() fprintf(stderr, "HANDLE SAVED IDLE EVENT\n"); + LOG_DEBUG() fprintf(stderr, "DEBUG: Handle saved idle event\n"); mympd_parse_idle(s, idle_bitmask_save); idle_bitmask_save = 0; } @@ -923,7 +935,7 @@ int mympd_get_updatedb_state(char *buffer) { if (!status) RETURN_ERROR_AND_RECOVER("mpd_run_status"); update_id = mpd_status_get_update_id(status); - printf("Update database ID: %d\n", update_id); + LOG_INFO() printf("Update database ID: %d\n", update_id); if ( update_id > 0) len = json_printf(&out, "{type: update_started, data: {jobid: %d}}", update_id); else @@ -994,7 +1006,7 @@ void mympd_count_song_uri(const char *uri, char *name, int value) { else if (old_value < 0) old_value = 0; snprintf(v, 4, "%d", old_value); - VERBOSELOG() fprintf(stderr, "STICKER_COUNT_SONG: \"%s\" -> %s: %s\n", uri, name, v); + LOG_VERBOSE() printf("Setting sticker: \"%s\" -> %s: %s\n", uri, name, v); if (!mpd_run_sticker_set(mpd.conn, "song", uri, name, v)) LOG_ERROR_AND_RECOVER("mpd_send_sticker_set"); } @@ -1008,16 +1020,17 @@ void mympd_like_song_uri(const char *uri, int value) { else if (value < 0) value = 0; snprintf(v, 2, "%d", value); + LOG_VERBOSE() printf("Setting sticker: \"%s\" -> like: %s\n", uri, v); if (!mpd_run_sticker_set(mpd.conn, "song", uri, "like", v)) LOG_ERROR_AND_RECOVER("mpd_send_sticker_set"); } void mympd_last_played_list(int song_id) { struct mpd_song *song; - char tmpfile[400]; - char cfgfile[400]; - snprintf(cfgfile, 400, "%s/state/last_played", config.varlibdir); - snprintf(tmpfile, 400, "%s/tmp/last_played", config.varlibdir); + char tmp_file[400]; + char cfg_file[400]; + snprintf(cfg_file, 400, "%s/state/last_played", config.varlibdir); + snprintf(tmp_file, 400, "%s/tmp/last_played", config.varlibdir); if (song_id > -1) { song = mpd_run_get_queue_song_id(mpd.conn, song_id); @@ -1028,9 +1041,9 @@ void mympd_last_played_list(int song_id) { if (last_played.length > config.last_played_count) { list_shift(&last_played, last_played.length -1); } - FILE *fp = fopen(tmpfile, "w"); + FILE *fp = fopen(tmp_file, "w"); if (fp == NULL) { - printf("Error opening %s\n", tmpfile); + printf("Error opening %s\n", tmp_file); return; } struct node *current = last_played.list; @@ -1039,7 +1052,7 @@ void mympd_last_played_list(int song_id) { current = current->next; } fclose(fp); - rename(tmpfile, cfgfile); + rename(tmp_file, cfg_file); } } } @@ -1108,7 +1121,7 @@ void mympd_jukebox() { return; if (mpd.feat_playlists == false && strcmp(mympd_state.jukeboxPlaylist, "Database") != 0) { - printf("Jukebox: Playlists are disabled\n"); + LOG_INFO() printf("Jukebox: Playlists are disabled\n"); return; } @@ -1204,14 +1217,14 @@ void mympd_jukebox() { struct node *current = add_list.list; while (current != NULL) { if (mympd_state.jukeboxMode == 1) { - printf("Jukebox adding song: %s\n", current->data); + LOG_INFO() printf("Jukebox adding song: %s\n", current->data); if (!mpd_run_add(mpd.conn, current->data)) LOG_ERROR_AND_RECOVER("mpd_run_add"); else nkeep++; } else { - printf("Jukebox adding album: %s\n", current->data); + LOG_INFO() printf("Jukebox adding album: %s\n", current->data); if (!mpd_send_command(mpd.conn, "searchadd", "Album", current->data, NULL)) { LOG_ERROR_AND_RECOVER("mpd_send_command"); return; @@ -1329,21 +1342,21 @@ int mympd_put_welcome(char *buffer) { } bool mympd_state_get(char *name, char *value) { - char cfgfile[400]; + char cfg_file[400]; char *line; size_t n = 0; ssize_t read; sanitize_string(name); - snprintf(cfgfile, 400, "%s/state/%s", config.varlibdir, name); - FILE *fp = fopen(cfgfile, "r"); + snprintf(cfg_file, 400, "%s/state/%s", config.varlibdir, name); + FILE *fp = fopen(cfg_file, "r"); if (fp == NULL) { - printf("Error opening %s\n", cfgfile); + printf("Error opening %s\n", cfg_file); return false; } read = getline(&line, &n, fp); snprintf(value, 400, "%s", line); - VERBOSELOG() fprintf(stderr, "State %s: %s\n", name, value); + LOG_DEBUG() fprintf(stderr, "DEBUG: State %s: %s\n", name, value); fclose(fp); if (read > 0) return true; @@ -1352,21 +1365,21 @@ bool mympd_state_get(char *name, char *value) { } bool mympd_state_set(const char *name, const char *value) { - char tmpfile[400]; - char cfgfile[400]; + char tmp_file[400]; + char cfg_file[400]; sanitize_string(name); - snprintf(cfgfile, 400, "%s/state/%s", config.varlibdir, name); - snprintf(tmpfile, 400, "%s/tmp/%s", config.varlibdir, name); + snprintf(cfg_file, 400, "%s/state/%s", config.varlibdir, name); + snprintf(tmp_file, 400, "%s/tmp/%s", config.varlibdir, name); - FILE *fp = fopen(tmpfile, "w"); + FILE *fp = fopen(tmp_file, "w"); if (fp == NULL) { - printf("Error opening %s\n", tmpfile); + printf("Error opening %s\n", tmp_file); return false; } fprintf(fp, value); fclose(fp); - rename(tmpfile, cfgfile); + rename(tmp_file, cfg_file); return true; } @@ -1382,6 +1395,7 @@ int mympd_syscmd(char *buffer, char *cmd, int order) { FILE *fp = fopen(filename, "r"); if (fp == NULL) { len = snprintf(buffer, MAX_SIZE, "{\"type\": \"error\", \"data\": \"Can't execute cmd %s\"}", cmd); + printf("Can't execute syscmd %s\n", cmd); return len; } read = getline(&line, &n, fp); @@ -1390,8 +1404,10 @@ int mympd_syscmd(char *buffer, char *cmd, int order) { strtok(line, "\n"); system(line); len = snprintf(buffer, MAX_SIZE, "{\"type\": \"result\", \"data\": \"Executed cmd %s\"}", line); + LOG_VERBOSE() printf("Executed syscmd %s\n", line); } else { len = snprintf(buffer, MAX_SIZE, "{\"type\": \"error\", \"data\": \"Can't execute cmd %s\"}", cmd); + printf("Can't execute syscmd %s\n", cmd); } CHECK_RETURN_LEN(); return len; @@ -1960,7 +1976,7 @@ int mympd_put_songs_in_album(char *buffer, char *album, char *search, char *tag) unsigned long entities_returned = 0; int len; char cover[500]; - char *albumartist; + char *albumartist = NULL; struct json_out out = JSON_OUT_BUF(buffer, MAX_SIZE); if (mpd_search_db_songs(mpd.conn, true) == false) @@ -2000,10 +2016,11 @@ int mympd_put_songs_in_album(char *buffer, char *album, char *search, char *tag) search, tag, cover, - albumartist + (albumartist != NULL ? albumartist : "") ); } - free(albumartist); + if (albumartist != NULL) + free(albumartist); CHECK_RETURN_LEN(); return len; @@ -2177,7 +2194,7 @@ int mympd_search(char *buffer, char *searchstr, char *filter, char *plist, unsig int mympd_search_adv(char *buffer, char *expression, char *sort, bool sortdesc, char *grouptag, char *plist, unsigned int offset) { struct mpd_song *song; - unsigned long entity_count = 0; + unsigned long entity_count = -1; unsigned long entities_returned = 0; int len = 0; struct json_out out = JSON_OUT_BUF(buffer, MAX_SIZE); @@ -2198,15 +2215,18 @@ int mympd_search_adv(char *buffer, char *expression, char *sort, bool sortdesc, if (mpd_search_add_expression(mpd.conn, expression) == false) RETURN_ERROR_AND_RECOVER("mpd_search_add_expression"); - - if (sort != NULL && strcmp(sort, "") != 0 && strcmp(plist, "") == 0) { - if (mpd_search_add_sort_name(mpd.conn, sort, sortdesc) == false) - RETURN_ERROR_AND_RECOVER("mpd_search_add_sort_name"); - } - - if (grouptag != NULL && strcmp(grouptag, "") != 0 && strcmp(plist, "") == 0) { - if (mpd_search_add_group_tag(mpd.conn, mpd_tag_name_parse(grouptag)) == false) - RETURN_ERROR_AND_RECOVER("mpd_search_add_group_tag"); + + if (strcmp(plist, "") == 0) { + if (sort != NULL && strcmp(sort, "") != 0) { + if (mpd_search_add_sort_name(mpd.conn, sort, sortdesc) == false) + RETURN_ERROR_AND_RECOVER("mpd_search_add_sort_name"); + } + if (grouptag != NULL && strcmp(grouptag, "") != 0) { + if (mpd_search_add_group_tag(mpd.conn, mpd_tag_name_parse(grouptag)) == false) + RETURN_ERROR_AND_RECOVER("mpd_search_add_group_tag"); + } + if (mpd_search_add_window(mpd.conn, offset, offset + config.max_elements_per_page) == false) + RETURN_ERROR_AND_RECOVER("mpd_search_add_window"); } if (mpd_search_commit(mpd.conn) == false) @@ -2214,17 +2234,14 @@ int mympd_search_adv(char *buffer, char *expression, char *sort, bool sortdesc, if (strcmp(plist, "") == 0) { while ((song = mpd_recv_song(mpd.conn)) != NULL) { - entity_count++; - if (entity_count > offset && entity_count <= offset + config.max_elements_per_page) { - if (entities_returned++) - len += json_printf(&out, ", "); - len += json_printf(&out, "{Type: song, "); - if (mpd.feat_tags == true) - PUT_SONG_TAGS(); - else - PUT_MIN_SONG_TAGS(); - len += json_printf(&out, "}"); - } + if (entities_returned++) + len += json_printf(&out, ", "); + len += json_printf(&out, "{Type: song, "); + if (mpd.feat_tags == true) + PUT_SONG_TAGS(); + else + PUT_MIN_SONG_TAGS(); + len += json_printf(&out, "}"); mpd_song_free(song); } } @@ -2259,6 +2276,7 @@ int mympd_queue_crop(char *buffer) { if (length < 0) { len = json_printf(&out, "{type: error, data: %Q}", "A playlist longer than 1 song in length is required to crop."); + printf("A playlist longer than 1 song in length is required to crop.\n"); } else if (mpd_status_get_state(status) == MPD_STATE_PLAY || mpd_status_get_state(status) == MPD_STATE_PAUSE) { playing_song_pos++; @@ -2270,6 +2288,7 @@ int mympd_queue_crop(char *buffer) { len = json_printf(&out, "{type: result, data: ok}"); } else { len = json_printf(&out, "{type: error, data: %Q}", "You need to be playing to crop the playlist"); + printf("You need to be playing to crop the playlist\n"); } mpd_status_free(status); @@ -2538,7 +2557,7 @@ int mympd_smartpls_update_search(char *playlist, char *tag, char *searchstr) { mympd_search_adv(mpd.buf, searchstr, NULL, true, NULL, playlist, 0); else mympd_search(mpd.buf, searchstr, tag, playlist, 0); - printf("Updated %s\n", playlist); + LOG_INFO() printf("Updated %s\n", playlist); return 0; } @@ -2601,7 +2620,7 @@ int mympd_smartpls_update(char *playlist, char *sticker, int maxentries) { current = current->next; } list_free(&add_list); - printf("Updated %s with %ld songs, minValue: %ld\n", playlist, i, value_max); + LOG_INFO() printf("Updated %s with %ld songs, minValue: %ld\n", playlist, i, value_max); return 0; } @@ -2630,7 +2649,7 @@ int mympd_smartpls_update_newest(char *playlist, int timerange) { snprintf(searchstr, 20, "%lu", value_max); mympd_search(mpd.buf, searchstr, "modified-since", playlist, 0); } - printf("Updated %s\n", playlist); + LOG_INFO() printf("Updated %s\n", playlist); } return 0; } diff --git a/src/mpd_client.h b/src/mpd_client.h index 5ac3a96..47bbc6d 100644 --- a/src/mpd_client.h +++ b/src/mpd_client.h @@ -65,7 +65,9 @@ } while (0) -#define VERBOSELOG() if (config.loglevel == 2) +#define LOG_INFO() if (config.loglevel >= 1) +#define LOG_VERBOSE() if (config.loglevel >= 2) +#define LOG_DEBUG() if (config.loglevel == 3) #define MAX_SIZE 2048 * 400 #define MAX_ELEMENTS_PER_PAGE 400 diff --git a/src/mympd.c b/src/mympd.c index 0da5d20..498474c 100644 --- a/src/mympd.c +++ b/src/mympd.c @@ -65,23 +65,23 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { switch(ev) { case MG_EV_WEBSOCKET_HANDSHAKE_REQUEST: { struct http_message *hm = (struct http_message *) ev_data; - VERBOSELOG() fprintf(stderr, "New websocket request: %.*s\n", hm->uri.len, hm->uri.p); + LOG_VERBOSE() printf("New websocket request: %.*s\n", hm->uri.len, hm->uri.p); if (mg_vcmp(&hm->uri, "/ws") != 0) { - printf("Websocket request not to /ws, closing connection\n"); + printf("ERROR: Websocket request not to /ws, closing connection\n"); mg_printf(nc, "%s", "HTTP/1.1 403 FORBIDDEN\r\n\r\n"); nc->flags |= MG_F_SEND_AND_CLOSE; } break; } case MG_EV_WEBSOCKET_HANDSHAKE_DONE: { - VERBOSELOG() fprintf(stderr, "New Websocket connection established\n"); - struct mg_str d = mg_mk_str("{\"cmd\": \"MPD_API_WELCOME\"}"); + LOG_VERBOSE() printf("New Websocket connection established\n"); + struct mg_str d = mg_mk_str("{\"cmd\":\"MPD_API_WELCOME\"}"); callback_mympd(nc, d); break; } case MG_EV_HTTP_REQUEST: { struct http_message *hm = (struct http_message *) ev_data; - VERBOSELOG() fprintf(stderr, "HTTP request: %.*s\n", hm->uri.len, hm->uri.p); + LOG_VERBOSE() printf("HTTP request: %.*s\n", hm->uri.len, hm->uri.p); if (mg_vcmp(&hm->uri, "/api") == 0) handle_api(nc, hm); else @@ -90,10 +90,10 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { } case MG_EV_CLOSE: { if (is_websocket(nc)) { - VERBOSELOG() fprintf(stderr, "Websocket connection closed\n"); + LOG_VERBOSE() printf("Websocket connection closed\n"); } else { - VERBOSELOG() fprintf(stderr,"HTTP connection closed\n"); + LOG_VERBOSE() printf("HTTP connection closed\n"); } break; } @@ -107,7 +107,7 @@ static void ev_handler_http(struct mg_connection *nc_http, int ev, void *ev_data struct mg_str *host_hdr = mg_get_http_header(hm, "Host"); char s_redirect[250]; snprintf(s_redirect, 250, "https://%.*s:%s/", host_hdr->len, host_hdr->p, config.sslport); - printf("Redirecting to %s\n", s_redirect); + LOG_VERBOSE() printf("Redirecting to %s\n", s_redirect); mg_http_send_redirect(nc_http, 301, mg_mk_str(s_redirect), mg_mk_str(NULL)); break; } @@ -133,6 +133,8 @@ static int inihandler(void* user, const char* section, const char* name, const c p_config->ssl = true; else p_config->ssl = false; + else if (MATCH("sslport")) + p_config->sslport = strdup(value); else if (MATCH("sslcert")) p_config->sslcert = strdup(value); else if (MATCH("sslkey")) @@ -210,7 +212,7 @@ void read_syscmds() { long order; if (config.syscmds == true) { snprintf(dirname, 400, "%s/syscmds", config.etcdir); - printf("Reading syscmds: %s\n", dirname); + LOG_INFO() printf("Reading syscmds: %s\n", dirname); if ((dir = opendir (dirname)) != NULL) { while ((ent = readdir(dir)) != NULL) { if (strncmp(ent->d_name, ".", 1) == 0) @@ -223,14 +225,14 @@ void read_syscmds() { } } else - printf("Syscmds are disabled\n"); + LOG_INFO() printf("Syscmds are disabled\n"); } void read_statefiles() { char *crap; char value[400]; - printf("Reading states\n"); + LOG_INFO() printf("Reading states\n"); if (mympd_state_get("notificationWeb", value)) { if (strcmp(value, "true") == 0) mympd_state.notificationWeb = true; @@ -353,7 +355,7 @@ bool testdir(char *name, char *dirname) { DIR* dir = opendir(dirname); if (dir) { closedir(dir); - printf("%s: \"%s\"\n", name, dirname); + LOG_INFO() printf("%s: \"%s\"\n", name, dirname); return true; } else { @@ -406,9 +408,9 @@ int main(int argc, char **argv) { mpd.feat_library = false; if (argc == 2) { - printf("Starting myMPD %s\n", MYMPD_VERSION); - printf("libmpdclient %i.%i.%i\n", LIBMPDCLIENT_MAJOR_VERSION, LIBMPDCLIENT_MINOR_VERSION, LIBMPDCLIENT_PATCH_VERSION); - printf("Parsing config file: %s\n", argv[1]); + LOG_INFO() printf("Starting myMPD %s\n", MYMPD_VERSION); + LOG_INFO() printf("Libmpdclient %i.%i.%i\n", LIBMPDCLIENT_MAJOR_VERSION, LIBMPDCLIENT_MINOR_VERSION, LIBMPDCLIENT_PATCH_VERSION); + LOG_INFO() printf("Parsing config file: %s\n", argv[1]); if (ini_parse(argv[1], inihandler, &config) < 0) { printf("Can't load config file \"%s\"\n", argv[1]); return EXIT_FAILURE; @@ -425,6 +427,11 @@ int main(int argc, char **argv) { ); return EXIT_FAILURE; } + + #ifdef DEBUG + printf("Debug flag enabled, setting loglevel to debug\n"); + config.loglevel = 3; + #endif signal(SIGTERM, signal_handler); signal(SIGINT, signal_handler); @@ -461,10 +468,10 @@ int main(int argc, char **argv) { } if (config.user != NULL) { - printf("Droping privileges to %s\n", config.user); + LOG_INFO() printf("Droping privileges to %s\n", config.user); struct passwd *pw; if ((pw = getpwnam(config.user)) == NULL) { - printf("Unknown user\n"); + printf("getpwnam() failed, unknown user\n"); mg_mgr_free(&mgr); return EXIT_FAILURE; } else if (setgroups(0, NULL) != 0) { @@ -494,10 +501,10 @@ int main(int argc, char **argv) { snprintf(testdirname, 400, "%s/library", SRC_PATH); if (testdir("Link to mpd music_directory", testdirname)) { mpd.feat_library = true; - printf("Enabling coverimage support\n"); + LOG_INFO() printf("Enabling coverimage support\n"); } else { - printf("Disabling coverimage support\n"); + LOG_INFO() printf("Disabling coverimage support\n"); config.coverimage = false; } @@ -522,7 +529,7 @@ int main(int argc, char **argv) { list_init(&mpd_tags); list_init(&mympd_tags); list_init(&last_played); - printf("Reading last played songs: %d\n", read_last_played()); + LOG_INFO() printf("Reading last played songs: %d\n", read_last_played()); if (config.ssl == true) mg_set_protocol_http_websocket(nc_http); @@ -531,9 +538,9 @@ int main(int argc, char **argv) { s_http_server_opts.document_root = SRC_PATH; s_http_server_opts.enable_directory_listing = "no"; - printf("Listening on http port %s\n", config.webport); + LOG_INFO() printf("Listening on http port %s\n", config.webport); if (config.ssl == true) - printf("Listening on ssl port %s\n", config.sslport); + LOG_INFO() printf("Listening on ssl port %s\n", config.sslport); while (s_signal_received == 0) { mg_mgr_poll(&mgr, 100);