1
0
mirror of https://github.com/SuperBFG7/ympd synced 2024-06-22 21:03:13 +00:00

Fix: various cleanups

This commit is contained in:
jcorporation 2019-01-05 21:28:18 +00:00
parent 33f252734b
commit 4c086da611
6 changed files with 229 additions and 250 deletions

View File

@ -38,12 +38,12 @@ include_directories(${OPENSSL_INCLUDE_DIR})
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS NS_ENABLE_SSL)
set(SOURCES
src/mympd.c
src/main.c
src/global.c
src/mpd_client.c
src/web_server.c
src/list.c
src/tiny_queue.c
src/global.c
dist/src/mongoose/mongoose.c
dist/src/frozen/frozen.c
dist/src/inih/ini.c

View File

@ -51,6 +51,17 @@
#define LOG_VERBOSE() if (config.loglevel >= 2)
#define LOG_DEBUG() if (config.loglevel == 3)
//check and return buffer size
#define CHECK_RETURN_LEN() do { \
if (len > MAX_SIZE) \
printf("Buffer truncated: %d, %d\n", len, MAX_SIZE); \
return len; \
} while (0)
//enumeration helpers
#define GEN_ENUM(X) X,
#define GEN_STR(X) #X,
//signal handler
sig_atomic_t s_signal_received;
@ -87,6 +98,7 @@ typedef struct {
t_config config;
//global functions
void sanitize_string(const char *data);
int copy_string(char * const dest, char const * const src, size_t const dst_len, size_t const src_len);
#endif

View File

@ -165,7 +165,7 @@ void read_statefiles() {
char value[400];
LOG_INFO() printf("Reading states\n");
if (mympd_state_get("notificationWeb", value)) {
if (mpd_client_state_get("notificationWeb", value)) {
if (strcmp(value, "true") == 0)
mympd_state.notificationWeb = true;
else
@ -173,10 +173,10 @@ void read_statefiles() {
}
else {
mympd_state.notificationWeb = false;
mympd_state_set("notificationWeb", "false");
mpd_client_state_set("notificationWeb", "false");
}
if (mympd_state_get("notificationPage", value)) {
if (mpd_client_state_get("notificationPage", value)) {
if (strcmp(value, "true") == 0)
mympd_state.notificationPage = true;
else
@ -184,77 +184,77 @@ void read_statefiles() {
}
else {
mympd_state.notificationPage = true;
mympd_state_set("notificationPage", "true");
mpd_client_state_set("notificationPage", "true");
}
if (mympd_state_get("jukeboxMode", value))
if (mpd_client_state_get("jukeboxMode", value))
mympd_state.jukeboxMode = strtol(value, &crap, 10);
else {
mympd_state.jukeboxMode = 0;
mympd_state_set("jukeboxMode", "0");
mpd_client_state_set("jukeboxMode", "0");
}
if (mympd_state_get("jukeboxPlaylist", value))
if (mpd_client_state_get("jukeboxPlaylist", value))
mympd_state.jukeboxPlaylist = strdup(value);
else {
mympd_state.jukeboxPlaylist = strdup("Database");
mympd_state_set("jukeboxPlaylist", "Database");
mpd_client_state_set("jukeboxPlaylist", "Database");
}
if (mympd_state_get("jukeboxQueueLength", value))
if (mpd_client_state_get("jukeboxQueueLength", value))
mympd_state.jukeboxQueueLength = strtol(value, &crap, 10);
else {
mympd_state.jukeboxQueueLength = 1;
mympd_state_set("jukeboxQueueLength", "1");
mpd_client_state_set("jukeboxQueueLength", "1");
}
if (mympd_state_get("colsQueueCurrent", value))
if (mpd_client_state_get("colsQueueCurrent", value))
mympd_state.colsQueueCurrent = strdup(value);
else {
mympd_state.colsQueueCurrent = strdup("[\"Pos\",\"Title\",\"Artist\",\"Album\",\"Duration\"]");
mympd_state_set("colsQueueCurrent", mympd_state.colsQueueCurrent);
mpd_client_state_set("colsQueueCurrent", mympd_state.colsQueueCurrent);
}
if (mympd_state_get("colsSearch", value))
if (mpd_client_state_get("colsSearch", value))
mympd_state.colsSearch = strdup(value);
else {
mympd_state.colsSearch = strdup("[\"Title\",\"Artist\",\"Album\",\"Duration\"]");
mympd_state_set("colsSearch", mympd_state.colsSearch);
mpd_client_state_set("colsSearch", mympd_state.colsSearch);
}
if (mympd_state_get("colsBrowseDatabase", value))
if (mpd_client_state_get("colsBrowseDatabase", value))
mympd_state.colsBrowseDatabase = strdup(value);
else {
mympd_state.colsBrowseDatabase = strdup("[\"Track\",\"Title\",\"Duration\"]");
mympd_state_set("colsBrowseDatabase", mympd_state.colsBrowseDatabase);
mpd_client_state_set("colsBrowseDatabase", mympd_state.colsBrowseDatabase);
}
if (mympd_state_get("colsBrowsePlaylistsDetail", value))
if (mpd_client_state_get("colsBrowsePlaylistsDetail", value))
mympd_state.colsBrowsePlaylistsDetail = strdup(value);
else {
mympd_state.colsBrowsePlaylistsDetail = strdup("[\"Pos\",\"Title\",\"Artist\",\"Album\",\"Duration\"]");
mympd_state_set("colsBrowsePlaylistsDetail", mympd_state.colsBrowsePlaylistsDetail);
mpd_client_state_set("colsBrowsePlaylistsDetail", mympd_state.colsBrowsePlaylistsDetail);
}
if (mympd_state_get("colsBrowseFilesystem", value))
if (mpd_client_state_get("colsBrowseFilesystem", value))
mympd_state.colsBrowseFilesystem = strdup(value);
else {
mympd_state.colsBrowseFilesystem = strdup("[\"Type\",\"Title\",\"Artist\",\"Album\",\"Duration\"]");
mympd_state_set("colsBrowseFilesystem", mympd_state.colsBrowseFilesystem);
mpd_client_state_set("colsBrowseFilesystem", mympd_state.colsBrowseFilesystem);
}
if (mympd_state_get("colsPlayback", value))
if (mpd_client_state_get("colsPlayback", value))
mympd_state.colsPlayback = strdup(value);
else {
mympd_state.colsPlayback = strdup("[\"Artist\",\"Album\",\"Genre\"]");
mympd_state_set("colsPlayback", mympd_state.colsPlayback);
mpd_client_state_set("colsPlayback", mympd_state.colsPlayback);
}
if (mympd_state_get("colsQueueLastPlayed", value))
if (mpd_client_state_get("colsQueueLastPlayed", value))
mympd_state.colsQueueLastPlayed = strdup(value);
else {
mympd_state.colsQueueLastPlayed = strdup("[\"Pos\",\"Title\",\"Artist\",\"Album\",\"LastPlayed\"]");
mympd_state_set("colsQueueLastPlayed", mympd_state.colsQueueLastPlayed);
mpd_client_state_set("colsQueueLastPlayed", mympd_state.colsQueueLastPlayed);
}
}
@ -262,6 +262,7 @@ int read_last_played() {
char cfgfile[400];
char *line;
char *data;
char *crap;
size_t n = 0;
ssize_t read;
long value;
@ -276,7 +277,7 @@ int read_last_played() {
value = strtol(line, &data, 10);
if (strlen(data) > 2)
data = data + 2;
strtok(data, "\n");
strtok_r(data, "\n", &crap);
list_push(&last_played, data, value);
}
fclose(fp);
@ -298,9 +299,9 @@ bool testdir(char *name, char *dirname) {
void *mpd_client_thread() {
while (s_signal_received == 0) {
mympd_idle(100);
mpd_client_idle(100);
}
mympd_disconnect();
mpd_client_disconnect();
return NULL;
}
@ -309,6 +310,7 @@ int main(int argc, char **argv) {
char testdirname[400];
mpd_client_queue = tiny_queue_create();
web_server_queue = tiny_queue_create();
//mympd_queue = tiny_queue_create();
//defaults
config.mpdhost = "127.0.0.1";
@ -470,5 +472,6 @@ int main(int argc, char **argv) {
list_free(&mympd_tags);
tiny_queue_free(web_server_queue);
tiny_queue_free(mpd_client_queue);
//tiny_queue_free(mympd_queue);
return EXIT_SUCCESS;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* myMPD
(c) 2018 Juergen Mang <mail@jcgames.de>
(c) 2018-2019 Juergen Mang <mail@jcgames.de>
This project's homepage is: https://github.com/jcorporation/mympd
myMPD ist fork of:
@ -44,32 +44,25 @@
mpd.conn_state = MPD_FAILURE; \
} while (0)
#define CHECK_RETURN_LEN() do { \
if (len > MAX_SIZE) \
printf("Buffer truncated: %d, %d\n", len, MAX_SIZE); \
return len; \
} while (0)
#define PUT_SONG_TAGS() do { \
struct node *current = mympd_tags.list; \
int tagnr = 0; \
while (current != NULL) { \
if (tagnr ++) \
len += json_printf(&out, ","); \
len += json_printf(&out, "%Q: %Q", current->data, mympd_get_tag(song, mpd_tag_name_parse(current->data))); \
len += json_printf(&out, "%Q: %Q", current->data, mpd_client_get_tag(song, mpd_tag_name_parse(current->data))); \
current = current->next; \
} \
len += json_printf(&out, ", Duration: %d, uri: %Q", mpd_song_get_duration(song), mpd_song_get_uri(song)); \
} while (0)
#define PUT_MIN_SONG_TAGS() do { \
len += json_printf(&out, "Title: %Q, Duration: %d, uri: %Q", mympd_get_tag(song, MPD_TAG_TITLE), mpd_song_get_duration(song), mpd_song_get_uri(song)); \
len += json_printf(&out, "Title: %Q, Duration: %d, uri: %Q", mpd_client_get_tag(song, MPD_TAG_TITLE), mpd_song_get_duration(song), mpd_song_get_uri(song)); \
} while (0)
#define GEN_ENUM(X) X,
#define GEN_STR(X) #X,
#define MPD_CMDS(X) \
X(MPD_API_UNKNOWN) \
X(MPD_API_QUEUE_CLEAR) \
X(MPD_API_QUEUE_CROP) \
X(MPD_API_QUEUE_SAVE) \
@ -122,11 +115,9 @@
X(MPD_API_PLAYER_STATE) \
X(MPD_API_SETTINGS_GET) \
X(MPD_API_SETTINGS_SET) \
X(MPD_API_WELCOME) \
X(MPD_API_LIKE) \
X(MPD_API_SYSCMD) \
X(MPD_API_COLS_SAVE) \
X(MPD_API_UNKNOWN)
X(MPD_API_SYSCMD)
enum mpd_cmd_ids {
MPD_CMDS(GEN_ENUM)
@ -201,47 +192,47 @@ t_mympd_state mympd_state;
tiny_queue_t *mpd_client_queue;
int randrange(int n);
void mympd_idle(int timeout);
void mympd_parse_idle(int idle_bitmask);
void mympd_api(struct work_request_t *request);
void mympd_notify(size_t n);
bool mympd_count_song_id(int song_id, char *name, int value);
bool mympd_count_song_uri(const char *uri, char *name, int value);
bool mympd_like_song_uri(const char *uri, int value);
bool mympd_last_played_song_uri(const char *uri);
bool mympd_last_played_song_id(int song_id);
bool mympd_get_sticker(const char *uri, t_sticker *sticker);
bool mympd_last_played_list(int song_id);
bool mympd_jukebox();
bool mympd_state_get(char *name, char *value);
bool mympd_state_set(const char *name, const char *value);
int mympd_syscmd(char *buffer, char *cmd, int order);
int mympd_smartpls_save(char *smartpltype, char *playlist, char *tag, char *searchstr, int maxentries, int timerange);
int mympd_smartpls_put(char *buffer, char *playlist);
int mympd_smartpls_update_all();
int mympd_smartpls_clear(char *playlist);
int mympd_smartpls_update_sticker(char *playlist, char *sticker, int maxentries);
int mympd_smartpls_update_newest(char *playlist, int timerange);
int mympd_smartpls_update_search(char *playlist, char *tag, char *searchstr);
int mympd_get_updatedb_state(char *buffer);
int mympd_put_state(char *buffer, int *current_song_id, int *next_song_id, int *last_song_id, unsigned *queue_version, unsigned *queue_length);
int mympd_put_outputs(char *buffer);
int mympd_put_current_song(char *buffer);
int mympd_put_queue(char *buffer, unsigned int offset, unsigned *queue_version, unsigned *queue_length);
int mympd_put_browse(char *buffer, char *path, unsigned int offset, char *filter);
int mympd_search(char *buffer, char *searchstr, char *filter, char *plist, unsigned int offset);
int mympd_search_adv(char *buffer, char *expression, char *sort, bool sortdesc, char *grouptag, char *plist, unsigned int offset);
int mympd_search_queue(char *buffer, char *mpdtagtype, unsigned int offset, char *searchstr);
int mympd_put_welcome(char *buffer);
int mympd_put_volume(char *buffer);
int mympd_put_stats(char *buffer);
int mympd_put_settings(char *buffer);
int mympd_put_db_tag(char *buffer, unsigned int offset, char *mpdtagtype, char *mpdsearchtagtype, char *searchstr, char *filter);
int mympd_put_songs_in_album(char *buffer, char *album, char *search, char *tag);
int mympd_put_playlists(char *buffer, unsigned int offset, char *filter);
int mympd_put_playlist_list(char *buffer, char *uri, unsigned int offset, char *filter);
int mympd_put_songdetails(char *buffer, char *uri);
int mympd_put_last_played_songs(char *buffer, unsigned int offset);
int mympd_queue_crop(char *buffer);
void mympd_disconnect();
void mpd_client_idle(int timeout);
void mpd_client_parse_idle(int idle_bitmask);
void mpd_client_api(struct work_request_t *request);
void mpd_client_notify(size_t n);
bool mpd_client_count_song_id(int song_id, char *name, int value);
bool mpd_client_count_song_uri(const char *uri, char *name, int value);
bool mpd_client_like_song_uri(const char *uri, int value);
bool mpd_client_last_played_song_uri(const char *uri);
bool mpd_client_last_played_song_id(int song_id);
bool mpd_client_get_sticker(const char *uri, t_sticker *sticker);
bool mpd_client_last_played_list(int song_id);
bool mpd_client_jukebox();
bool mpd_client_state_get(char *name, char *value);
bool mpd_client_state_set(const char *name, const char *value);
int mpd_client_syscmd(char *buffer, char *cmd, int order);
int mpd_client_smartpls_save(char *smartpltype, char *playlist, char *tag, char *searchstr, int maxentries, int timerange);
int mpd_client_smartpls_put(char *buffer, char *playlist);
int mpd_client_smartpls_update_all();
int mpd_client_smartpls_clear(char *playlist);
int mpd_client_smartpls_update_sticker(char *playlist, char *sticker, int maxentries);
int mpd_client_smartpls_update_newest(char *playlist, int timerange);
int mpd_client_smartpls_update_search(char *playlist, char *tag, char *searchstr);
int mpd_client_get_updatedb_state(char *buffer);
int mpd_client_put_state(char *buffer, int *current_song_id, int *next_song_id, int *last_song_id, unsigned *queue_version, unsigned *queue_length);
int mpd_client_put_outputs(char *buffer);
int mpd_client_put_current_song(char *buffer);
int mpd_client_put_queue(char *buffer, unsigned int offset, unsigned *queue_version, unsigned *queue_length);
int mpd_client_put_browse(char *buffer, char *path, unsigned int offset, char *filter);
int mpd_client_search(char *buffer, char *searchstr, char *filter, char *plist, unsigned int offset);
int mpd_client_search_adv(char *buffer, char *expression, char *sort, bool sortdesc, char *grouptag, char *plist, unsigned int offset);
int mpd_client_search_queue(char *buffer, char *mpdtagtype, unsigned int offset, char *searchstr);
int mpd_client_put_welcome(char *buffer);
int mpd_client_put_volume(char *buffer);
int mpd_client_put_stats(char *buffer);
int mpd_client_put_settings(char *buffer);
int mpd_client_put_db_tag(char *buffer, unsigned int offset, char *mpdtagtype, char *mpdsearchtagtype, char *searchstr, char *filter);
int mpd_client_put_songs_in_album(char *buffer, char *album, char *search, char *tag);
int mpd_client_put_playlists(char *buffer, unsigned int offset, char *filter);
int mpd_client_put_playlist_list(char *buffer, char *uri, unsigned int offset, char *filter);
int mpd_client_put_songdetails(char *buffer, char *uri);
int mpd_client_put_last_played_songs(char *buffer, unsigned int offset);
int mpd_client_queue_crop(char *buffer);
void mpd_client_disconnect();
#endif

View File

@ -200,13 +200,14 @@ static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
static void ev_handler_redirect(struct mg_connection *nc_http, int ev, void *ev_data) {
char *host;
char *crap;
char host_header[1024];
switch(ev) {
case MG_EV_HTTP_REQUEST: {
struct http_message *hm = (struct http_message *) ev_data;
struct mg_str *host_hdr = mg_get_http_header(hm, "Host");
snprintf(host_header, 1024, "%.*s", host_hdr->len, host_hdr->p);
host = strtok(host_header, ":");
host = strtok_r(host_header, ":", &crap);
char s_redirect[250];
if (strcmp(config.sslport, "443") == 0)
snprintf(s_redirect, 250, "https://%s/", host);