From 4697b437d5aecac503b04536ebb44e9c12c740aa Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Fri, 20 Jan 2023 12:24:45 -0500 Subject: [PATCH] MT#56447 implement GET for Janus protocol Change-Id: I40e4cc1c2617c49edc3e3dc626d979324da52236 --- daemon/janus.c | 32 ++++++++++++++++++++++++++++++++ daemon/websocket.c | 4 +++- include/janus.h | 1 + 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/daemon/janus.c b/daemon/janus.c index fde42c6d8..e7f4bb588 100644 --- a/daemon/janus.c +++ b/daemon/janus.c @@ -1646,6 +1646,38 @@ err: } +const char *websocket_janus_get(struct websocket_message *wm) { + str uri; + str_init(&uri, wm->uri); + + ilog(LOG_DEBUG, "Processing Janus GET: '%s'", wm->uri); + + JsonBuilder *builder = json_builder_new(); + json_builder_begin_object(builder); // { + + int retcode = 200; + const char *success = "success"; + const char *err = NULL; + + switch (__csh_lookup(&uri)) { + case CSH_LOOKUP("/admin/info"): + success = janus_server_info(builder); + break; + + default: + retcode = 457; + err = "Unhandled request method"; + break; + } + + janus_finish_response(builder, success, err, retcode); + + json_builder_end_object(builder); // } + + return janus_send_json_msg(wm, builder, 200, true); +} + + void janus_init(void) { mutex_init(&janus_lock); janus_tokens = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); diff --git a/daemon/websocket.c b/daemon/websocket.c index 052fe5b84..f67e49ddd 100644 --- a/daemon/websocket.c +++ b/daemon/websocket.c @@ -491,7 +491,7 @@ static int websocket_http_get(struct websocket_conn *wc) { const char *uri = wm->uri; websocket_message_func_t handler = NULL; - ilogs(http, LOG_INFO, "HTTP GET from %s: '%s'", endpoint_print_buf(&wc->endpoint), wm->uri); + ilogs(http, LOG_INFO, "HTTP GET from %s: '%s'", endpoint_print_buf(&wc->endpoint), uri); wm->method = M_GET; if (!strcmp(uri, "/ping")) @@ -500,6 +500,8 @@ static int websocket_http_get(struct websocket_conn *wc) { handler = websocket_http_cli; else if (!strcmp(uri, "/metrics")) handler = websocket_http_metrics; + else if (!strncmp(uri, "/admin/", 7)) + handler = websocket_janus_get; if (!handler) { ilogs(http, LOG_WARN, "Unhandled HTTP GET URI: '%s'", uri); diff --git a/include/janus.h b/include/janus.h index daa62567b..7b00eb062 100644 --- a/include/janus.h +++ b/include/janus.h @@ -11,6 +11,7 @@ void janus_init(void); void janus_free(void); const char *websocket_janus_process(struct websocket_message *wm); +const char *websocket_janus_get(struct websocket_message *wm); void janus_detach_websocket(struct janus_session *session, struct websocket_conn *wc); void janus_media_up(struct call_monologue *);