From 6f29ca2996dd95e96e34f80f51e272f6ef7b6f6c Mon Sep 17 00:00:00 2001 From: Philipp Schafft Date: Sat, 17 Sep 2022 09:28:57 +0000 Subject: [PATCH] Feature: Added source media type to events if known --- src/event.c | 6 ++++++ src/event.h | 3 ++- src/event_exec.c | 1 + src/event_log.c | 6 ++++-- src/event_url.c | 22 +++++++++++++--------- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/event.c b/src/event.c index 3009a382..6a77bc45 100644 --- a/src/event.c +++ b/src/event.c @@ -484,6 +484,12 @@ void event_emit_va(const char *trigger, ...) { } va_end(ap); + if (source) { + if (source->format && source->format->contenttype) { + extra_add(event, EVENT_EXTRA_KEY_SOURCE_MEDIA_TYPE, source->format->contenttype); + } + } + if (client) { event->connection_id = client->con->id; event->connection_time = client->con->con_time; diff --git a/src/event.h b/src/event.h index 293ebe69..b2ca9a0e 100644 --- a/src/event.h +++ b/src/event.h @@ -35,7 +35,8 @@ typedef enum { EVENT_EXTRA_KEY_CONNECTION_IP, EVENT_EXTRA_KEY_CLIENT_ROLE, EVENT_EXTRA_KEY_CLIENT_USERNAME, - EVENT_EXTRA_KEY_CLIENT_USERAGENT + EVENT_EXTRA_KEY_CLIENT_USERAGENT, + EVENT_EXTRA_KEY_SOURCE_MEDIA_TYPE, } event_extra_key_t; typedef struct { diff --git a/src/event_exec.c b/src/event_exec.c index 94f86323..5678c239 100644 --- a/src/event_exec.c +++ b/src/event_exec.c @@ -152,6 +152,7 @@ static inline void __setup_environ(ice_config_t *config, event_exec_t *self, eve __update_environ("EVENT_TRIGGER", event->trigger); /* new name */ __update_environ("SOURCE_ACTION", event->trigger); /* old name (deprecated) */ __update_environ_with_key(event, "EVENT_URI", EVENT_EXTRA_KEY_URI); + __update_environ_with_key(event, "SOURCE_MEDIA_TYPE", EVENT_EXTRA_KEY_SOURCE_MEDIA_TYPE); __update_environ_with_key(event, "CLIENT_IP", EVENT_EXTRA_KEY_CONNECTION_IP); __update_environ_with_key(event, "CLIENT_ROLE", EVENT_EXTRA_KEY_CLIENT_ROLE); __update_environ_with_key(event, "CLIENT_USERNAME", EVENT_EXTRA_KEY_CLIENT_USERNAME); diff --git a/src/event_log.c b/src/event_log.c index 5902f863..6b38db51 100644 --- a/src/event_log.c +++ b/src/event_log.c @@ -30,7 +30,7 @@ static int event_log_emit(void *state, event_t *event) { ICECAST_LOG(self->level, ICECAST_LOGFLAG_NONE, "%s%strigger=%# H uri=%#H " "connection_id=%lu connection_ip=%#H connection_time=%lli " - "client_role=%# H client_username=%#H client_useragent=%# H client_admin_command=%i", + "client_role=%# H client_username=%#H client_useragent=%# H client_admin_command=%i source_media_type=%#H", self->prefix ? self->prefix : "", self->prefix ? ": " : "", event->trigger, event_extra_get(event, EVENT_EXTRA_KEY_URI), @@ -38,7 +38,9 @@ static int event_log_emit(void *state, event_t *event) { event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_ROLE), event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_USERNAME), event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_USERAGENT), - event->client_admin_command); + event->client_admin_command, + event_extra_get(event, EVENT_EXTRA_KEY_SOURCE_MEDIA_TYPE) + ); return 0; } diff --git a/src/event_url.c b/src/event_url.c index 1efd13b9..33d9377b 100644 --- a/src/event_url.c +++ b/src/event_url.c @@ -43,16 +43,17 @@ static inline char *__escape(const char *src, const char *default_value) { static int event_url_emit(void *state, event_t *event) { event_url_t *self = state; ice_config_t *config; - char *action, *mount, *server, *role, *username, *ip, *agent; + char *action, *mount, *server, *role, *username, *ip, *agent, *media_type; time_t duration; char post[4096]; - action = util_url_escape(self->action ? self->action : event->trigger); - mount = __escape(event_extra_get(event, EVENT_EXTRA_KEY_URI), ""); - role = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_ROLE), ""); - username = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_USERNAME), ""); - ip = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CONNECTION_IP), ""); - agent = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_USERAGENT), "-"); + action = util_url_escape(self->action ? self->action : event->trigger); + mount = __escape(event_extra_get(event, EVENT_EXTRA_KEY_URI), ""); + role = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_ROLE), ""); + username = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_USERNAME), ""); + ip = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CONNECTION_IP), ""); + agent = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_USERAGENT), "-"); + media_type = __escape(event_extra_get(event, EVENT_EXTRA_KEY_CLIENT_USERAGENT), "-"); if (event->connection_time) { duration = time(NULL) - event->connection_time; @@ -64,9 +65,11 @@ static int event_url_emit(void *state, event_t *event) { server = __escape(config->hostname, ""); snprintf (post, sizeof (post), - "action=%s&mount=%s&server=%s&port=%d&client=%lu&role=%s&username=%s&ip=%s&agent=%s&duration=%lli&admin=%i", + "action=%s&mount=%s&server=%s&port=%d&client=%lu&role=%s&username=%s&ip=%s&agent=%s&duration=%lli&admin=%i&source-media-type=%s", action, mount, server, config->port, - event->connection_id, role, username, ip, agent, (long long int)duration, event->client_admin_command); + event->connection_id, role, username, ip, agent, (long long int)duration, event->client_admin_command, + media_type + ); config_release_config(); free(action); @@ -76,6 +79,7 @@ static int event_url_emit(void *state, event_t *event) { free(username); free(ip); free(agent); + free(media_type); if (strchr(self->url, '@') == NULL && self->userpwd) { curl_easy_setopt(self->handle, CURLOPT_USERPWD, self->userpwd);