mirror of
https://github.com/SuperBFG7/ympd
synced 2024-09-28 06:18:13 +00:00
Fix: various cleanups
This commit is contained in:
parent
33f252734b
commit
4c086da611
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
298
src/mpd_client.c
298
src/mpd_client.c
File diff suppressed because it is too large
Load Diff
105
src/mpd_client.h
105
src/mpd_client.h
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user