From 37807914a163fb7d23080c13d131a5ba0ce678b4 Mon Sep 17 00:00:00 2001 From: "F. Duncanh" Date: Sun, 2 Jun 2024 18:48:05 -0400 Subject: [PATCH] (cosmetic) rearrangements in GET /info plist creation --- lib/raop_handlers.h | 58 ++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/lib/raop_handlers.h b/lib/raop_handlers.h index c0d31dc..a6a86bb 100644 --- a/lib/raop_handlers.h +++ b/lib/raop_handlers.h @@ -36,33 +36,37 @@ raop_handler_info(raop_conn_t *conn, { assert(conn->raop->dnssd); - int airplay_txt_len = 0; - const char *airplay_txt = dnssd_get_airplay_txt(conn->raop->dnssd, &airplay_txt_len); - - int name_len = 0; - const char *name = dnssd_get_name(conn->raop->dnssd, &name_len); + plist_t res_node = plist_new_dict(); + /* deviceID is the physical hardware address, and will not change */ int hw_addr_raw_len = 0; const char *hw_addr_raw = dnssd_get_hw_addr(conn->raop->dnssd, &hw_addr_raw_len); - char *hw_addr = calloc(1, 3 * hw_addr_raw_len); //int hw_addr_len = utils_hwaddr_airplay(hw_addr, 3 * hw_addr_raw_len, hw_addr_raw, hw_addr_raw_len); + plist_t device_id_node = plist_new_string(hw_addr); + plist_dict_set_item(res_node, "deviceID", device_id_node); + /* Persistent Public Key */ int pk_len = 0; char *pk = utils_parse_hex(conn->raop->pk_str, strlen(conn->raop->pk_str), &pk_len); + plist_t pk_node = plist_new_data(pk, pk_len); + plist_dict_set_item(res_node, "pk", pk_node); - plist_t r_node = plist_new_dict(); - + /* airplay_txt is from the _airplay._tcp dnssd announuncement, may not be necessary */ + int airplay_txt_len = 0; + const char *airplay_txt = dnssd_get_airplay_txt(conn->raop->dnssd, &airplay_txt_len); plist_t txt_airplay_node = plist_new_data(airplay_txt, airplay_txt_len); - plist_dict_set_item(r_node, "txtAirPlay", txt_airplay_node); + plist_dict_set_item(res_node, "txtAirPlay", txt_airplay_node); uint64_t features = dnssd_get_airplay_features(conn->raop->dnssd); plist_t features_node = plist_new_uint(features); - plist_dict_set_item(r_node, "features", features_node); + plist_dict_set_item(res_node, "features", features_node); + int name_len = 0; + const char *name = dnssd_get_name(conn->raop->dnssd, &name_len); plist_t name_node = plist_new_string(name); - plist_dict_set_item(r_node, "name", name_node); + plist_dict_set_item(res_node, "name", name_node); plist_t audio_formats_node = plist_new_array(); plist_t audio_format_0_node = plist_new_dict(); @@ -81,31 +85,25 @@ raop_handler_info(raop_conn_t *conn, plist_dict_set_item(audio_format_1_node, "audioInputFormats", audio_format_1_audio_input_formats_node); plist_dict_set_item(audio_format_1_node, "audioOutputFormats", audio_format_1_audio_output_formats_node); plist_array_append_item(audio_formats_node, audio_format_1_node); - plist_dict_set_item(r_node, "audioFormats", audio_formats_node); + plist_dict_set_item(res_node, "audioFormats", audio_formats_node); plist_t pi_node = plist_new_string(AIRPLAY_PI); - plist_dict_set_item(r_node, "pi", pi_node); + plist_dict_set_item(res_node, "pi", pi_node); plist_t vv_node = plist_new_uint(strtol(AIRPLAY_VV, NULL, 10)); - plist_dict_set_item(r_node, "vv", vv_node); + plist_dict_set_item(res_node, "vv", vv_node); plist_t status_flags_node = plist_new_uint(68); - plist_dict_set_item(r_node, "statusFlags", status_flags_node); + plist_dict_set_item(res_node, "statusFlags", status_flags_node); plist_t keep_alive_low_power_node = plist_new_uint(1); - plist_dict_set_item(r_node, "keepAliveLowPower", keep_alive_low_power_node); + plist_dict_set_item(res_node, "keepAliveLowPower", keep_alive_low_power_node); plist_t source_version_node = plist_new_string(GLOBAL_VERSION); - plist_dict_set_item(r_node, "sourceVersion", source_version_node); - - plist_t pk_node = plist_new_data(pk, pk_len); - plist_dict_set_item(r_node, "pk", pk_node); + plist_dict_set_item(res_node, "sourceVersion", source_version_node); plist_t keep_alive_send_stats_as_body_node = plist_new_uint(1); - plist_dict_set_item(r_node, "keepAliveSendStatsAsBody", keep_alive_send_stats_as_body_node); - - plist_t device_id_node = plist_new_string(hw_addr); - plist_dict_set_item(r_node, "deviceID", device_id_node); + plist_dict_set_item(res_node, "keepAliveSendStatsAsBody", keep_alive_send_stats_as_body_node); plist_t audio_latencies_node = plist_new_array(); plist_t audio_latencies_0_node = plist_new_dict(); @@ -128,13 +126,13 @@ raop_handler_info(raop_conn_t *conn, plist_dict_set_item(audio_latencies_1_node, "audioType", audio_latencies_1_audio_type_node); plist_dict_set_item(audio_latencies_1_node, "inputLatencyMicros", audio_latencies_1_input_latency_micros_node); plist_array_append_item(audio_latencies_node, audio_latencies_1_node); - plist_dict_set_item(r_node, "audioLatencies", audio_latencies_node); + plist_dict_set_item(res_node, "audioLatencies", audio_latencies_node); plist_t model_node = plist_new_string(GLOBAL_MODEL); - plist_dict_set_item(r_node, "model", model_node); + plist_dict_set_item(res_node, "model", model_node); plist_t mac_address_node = plist_new_string(hw_addr); - plist_dict_set_item(r_node, "macAddress", mac_address_node); + plist_dict_set_item(res_node, "macAddress", mac_address_node); plist_t displays_node = plist_new_array(); plist_t displays_0_node = plist_new_dict(); @@ -164,10 +162,10 @@ raop_handler_info(raop_conn_t *conn, plist_dict_set_item(displays_0_node, "overscanned", displays_0_overscanned_node); plist_dict_set_item(displays_0_node, "features", displays_0_features); plist_array_append_item(displays_node, displays_0_node); - plist_dict_set_item(r_node, "displays", displays_node); + plist_dict_set_item(res_node, "displays", displays_node); - plist_to_bin(r_node, response_data, (uint32_t *) response_datalen); - plist_free(r_node); + plist_to_bin(res_node, response_data, (uint32_t *) response_datalen); + plist_free(res_node); http_response_add_header(response, "Content-Type", "application/x-apple-binary-plist"); free(pk); free(hw_addr);