diff --git a/src/rfc/ctrlm_rfc_attr.cpp b/src/rfc/ctrlm_rfc_attr.cpp index f9e996bb..0e52ee19 100644 --- a/src/rfc/ctrlm_rfc_attr.cpp +++ b/src/rfc/ctrlm_rfc_attr.cpp @@ -70,7 +70,9 @@ void ctrlm_rfc_attr_t::set_rfc_value(const std::string &value) { // Convert to JSON json_t *temp = this->value_json; json_error_t json_error; - this->value_json = json_loads((const char *)decoded_buf, JSON_REJECT_DUPLICATES, &json_error); + this->value_json = json_loadb((const char *)decoded_buf, decoded_buf_len, JSON_REJECT_DUPLICATES, &json_error); + free(decoded_buf); + decoded_buf = NULL; if(this->value_json) { XLOGD_INFO("successfully got JSON from encoded string, alert the listeners"); json_decref(temp); @@ -80,8 +82,6 @@ void ctrlm_rfc_attr_t::set_rfc_value(const std::string &value) { this->value_json = temp; return; // return here, we don't want to call listeners on invalid data } - free(decoded_buf); - decoded_buf = NULL; } else { XLOGD_ERROR("failed to decode base64"); return; // return here, we don't want to call listeners on invalid data diff --git a/src/voice/ctrlm_voice_obj.cpp b/src/voice/ctrlm_voice_obj.cpp index 808c0f87..2bc56102 100644 --- a/src/voice/ctrlm_voice_obj.cpp +++ b/src/voice/ctrlm_voice_obj.cpp @@ -3870,8 +3870,6 @@ xrsr_power_mode_t voice_xrsr_power_map(ctrlm_power_state_t ctrlm_power_state) { } void ctrlm_voice_t::voice_rfc_retrieved_handler(const ctrlm_rfc_attr_t& attr) { - bool enabled = true; - XLOGD_INFO("processing RFC values"); attr.get_rfc_value(JSON_INT_NAME_VOICE_VREX_REQUEST_TIMEOUT, this->prefs.timeout_vrex_connect,0); @@ -3992,6 +3990,7 @@ void ctrlm_voice_t::voice_rfc_retrieved_handler(const ctrlm_rfc_attr_t& attr) { } if(attr.get_rfc_value(JSON_BOOL_NAME_VOICE_FORCE_VOICE_SETTINGS, this->prefs.force_voice_settings) && this->prefs.force_voice_settings) { + bool enabled = true; attr.get_rfc_value(JSON_BOOL_NAME_VOICE_ENABLE, enabled); attr.get_rfc_value(JSON_STR_NAME_VOICE_URL_SRC_PTT, this->prefs.server_url_src_ptt); attr.get_rfc_value(JSON_STR_NAME_VOICE_URL_SRC_FF, this->prefs.server_url_src_ff); @@ -4013,6 +4012,7 @@ void ctrlm_voice_t::voice_rfc_retrieved_handler(const ctrlm_rfc_attr_t& attr) { } void ctrlm_voice_t::vsdk_rfc_retrieved_handler(const ctrlm_rfc_attr_t& attr) { + XLOGD_INFO("processing RFC values"); json_t *obj_vsdk = NULL; if(attr.get_rfc_json_value(&obj_vsdk) && obj_vsdk) { XLOGD_INFO("VSDK values from XCONF, reopening xrsr.."); @@ -4021,7 +4021,12 @@ void ctrlm_voice_t::vsdk_rfc_retrieved_handler(const ctrlm_rfc_attr_t& attr) { } // This is temporary until the VSDK supports receiving a config on the fly this->voice_sdk_close(); - this->voice_sdk_open(obj_vsdk); + if(this->vsdk_config) { + json_decref(this->vsdk_config); + this->vsdk_config = NULL; + } + this->vsdk_config = obj_vsdk; // Transfer ownership + this->voice_sdk_open(this->vsdk_config); this->voice_sdk_update_routes(); // Set init message if read from shared memory @@ -4038,7 +4043,6 @@ void ctrlm_voice_t::vsdk_rfc_retrieved_handler(const ctrlm_rfc_attr_t& attr) { } else { this->voice_init_set(init.c_str(), false); } - json_decref(obj_vsdk); } }