Skip to content
Snippets Groups Projects
Commit a3ccc26b authored by oljas.jarasbaev's avatar oljas.jarasbaev
Browse files

[*] refactor

parent e98fd2fa
No related branches found
No related tags found
2 merge requests!436Hotfixes 15 11,!413Feature 9526
Pipeline #46305 passed with stage
in 16 minutes and 36 seconds
......@@ -86,9 +86,9 @@ void dap_json_rpc_http_request_free(dap_json_rpc_http_request_t *a_http_request)
char* dap_json_rpc_request_to_http_str(dap_json_rpc_request_t *a_request, size_t*output_data_size);
char * dap_json_rpc_enc_request(dap_client_pvt_t* a_client_internal, char * a_request_data_str, size_t a_request_data_size,
char ** a_path, size_t * a_enc_request_size, char * a_custom_header);
char ** a_path, size_t * a_enc_request_size, char ** a_custom_header);
int dap_json_rpc_request_send(dap_client_pvt_t* a_client_internal, dap_json_rpc_request_t *a_request, char* a_response);
int dap_json_rpc_request_send(dap_client_pvt_t* a_client_internal, dap_json_rpc_request_t *a_request, char** a_response);
#ifdef __cplusplus
}
......
......@@ -113,18 +113,18 @@ static void s_exec_cmd_error_handler(int a_error_code, void *a_arg){
#endif
}
static int s_exec_cmd_request_get_response(struct exec_cmd_request *a_exec_cmd_request, char **a_response, size_t *a_response_size)
static int s_exec_cmd_request_get_response(struct exec_cmd_request *a_exec_cmd_request, char **a_response_out, size_t *a_response_out_size)
{
int ret = 0;
char *l_enc_response = NULL;
size_t l_enc_response_size = 0;
char *l_response = NULL;
size_t l_response_size = 0;
#ifdef DAP_OS_WINDOWS
EnterCriticalSection(&a_exec_cmd_request->wait_crit_sec);
if (a_exec_cmd_request->error_code != 0) {
ret = a_exec_cmd_request->error_code;
} else {
l_enc_response = dap_strdup(a_exec_cmd_request->response);
l_enc_response = a_exec_cmd_request->response;
l_enc_response_size = a_exec_cmd_request->response_size;
ret = 0;
}
......@@ -134,32 +134,31 @@ static int s_exec_cmd_request_get_response(struct exec_cmd_request *a_exec_cmd_r
if (a_exec_cmd_request->error_code != 0) {
ret = a_exec_cmd_request->error_code;
} else {
l_enc_response = dap_strdup(a_exec_cmd_request->response);
l_enc_response_size = a_exec_cmd_request->response_size;
l_response = a_exec_cmd_request->response;
l_response_size = a_exec_cmd_request->response_size;
ret = 0;
}
pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex);
#endif
if (a_exec_cmd_request->error_code) {
log_it(L_ERROR, "Response error code: %d", ret);
ret - 1;
} else if (l_enc_response) {
dap_client_pvt_t * l_client_pvt = a_exec_cmd_request->client_pvt;
l_client_pvt->http_client = NULL;
size_t l_response_dec_size_max = l_enc_response_size ? l_enc_response_size * 2 + 16 : 0;
*a_response = l_enc_response_size ? DAP_NEW_Z_SIZE(char, l_response_dec_size_max) : NULL;
*a_response_size = 0;
if(l_enc_response_size)
*a_response_size = dap_enc_decode(l_client_pvt->session_key,
l_enc_response, l_enc_response_size,
*a_response, l_response_dec_size_max,
DAP_ENC_DATA_TYPE_RAW);
if (l_enc_response) {
DAP_DEL_Z(l_enc_response);
}
ret = - 1;
} else if (l_response) {
dap_client_pvt_t * l_client_pvt = a_exec_cmd_request->client_pvt;
l_client_pvt->http_client = NULL;
size_t l_response_dec_size_max = l_response_size ? l_response_size * 2 + 16 : 0;
char * l_response_dec = l_response_size ? DAP_NEW_Z_SIZE(char, l_response_dec_size_max) : NULL;
size_t l_response_dec_size = 0;
if(l_response_size)
l_response_dec_size = dap_enc_decode(l_client_pvt->session_key,
l_response, l_response_size,
l_response_dec, l_response_dec_size_max,
DAP_ENC_DATA_TYPE_RAW);
*a_response_out = l_response_dec;
*a_response_out_size = l_response_dec_size;
} else {
log_it(L_ERROR, "Empty response in json-rpc");
ret -2;
ret = -2;
}
return ret;
......@@ -178,10 +177,8 @@ static int dap_chain_exec_cmd_list_wait(struct exec_cmd_request *a_exec_cmd_requ
return LeaveCriticalSection(&a_exec_cmd_request->wait_crit_sec), a_exec_cmd_request->response;
#else
pthread_mutex_lock(&a_exec_cmd_request->wait_mutex);
if(a_exec_cmd_request->response) {
pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex);
return EXEC_CMD_OK;
}
if(a_exec_cmd_request->response)
return pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex), EXEC_CMD_OK;
struct timespec l_cond_timeout;
#ifdef DAP_OS_DARWIN
l_cond_timeout = (struct timespec){ .tv_sec = a_timeout_ms / 1000 };
......@@ -199,17 +196,17 @@ static int dap_chain_exec_cmd_list_wait(struct exec_cmd_request *a_exec_cmd_requ
) {
case ETIMEDOUT:
a_exec_cmd_request->response = "ERR_WAIT_TIMEOUT";
return EXEC_CMD_ERR_WAIT_TIMEOUT;
default:
break;
}
}
pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex);
return EXEC_CMD_ERR_WAIT_TIMEOUT;
return pthread_mutex_unlock(&a_exec_cmd_request->wait_mutex), EXEC_CMD_OK;
#endif
}
char * dap_json_rpc_enc_request(dap_client_pvt_t* a_client_internal, char * a_request_data_str, size_t a_request_data_size,
char ** a_path, size_t * a_enc_request_size, char * a_custom_header) {
char ** a_path, size_t * a_enc_request_size, char ** a_custom_header) {
const char * l_sub_url = dap_strdup_printf("channels=%s,enc_type=%d,enc_key_size=%zu,enc_headers=%d",
a_client_internal->client->active_channels,
......@@ -276,11 +273,11 @@ char * dap_json_rpc_enc_request(dap_client_pvt_t* a_client_internal, char * a_re
}
size_t l_size_required = a_client_internal->session_key_id ? strlen(a_client_internal->session_key_id) + 40 : 40;
a_custom_header = DAP_NEW_Z_SIZE(char, l_size_required);
size_t l_off = snprintf(a_custom_header, l_size_required, "KeyID: %s\r\n",
*a_custom_header = DAP_NEW_Z_SIZE(char, l_size_required);
size_t l_off = snprintf(*a_custom_header, l_size_required, "KeyID: %s\r\n",
a_client_internal->session_key_id ? a_client_internal->session_key_id : "NULL");
if (a_client_internal->is_close_session)
snprintf(a_custom_header + l_off, l_size_required - l_off, "%s\r\n", "SessionCloseAfterRequest: true");
snprintf(*a_custom_header + l_off, l_size_required - l_off, "%s\r\n", "SessionCloseAfterRequest: true");
DAP_DEL_Z(l_sub_url_enc);
DAP_DEL_Z(l_query_enc);
......@@ -516,7 +513,7 @@ char* dap_json_rpc_request_to_http_str(dap_json_rpc_request_t *a_request, size_t
return l_http_str;
}
int dap_json_rpc_request_send(dap_client_pvt_t* a_client_internal, dap_json_rpc_request_t *a_request, char* a_response) {
int dap_json_rpc_request_send(dap_client_pvt_t* a_client_internal, dap_json_rpc_request_t *a_request, char** a_response) {
size_t l_request_data_size = 0, l_enc_request_size, l_response_size;
char* l_custom_header = NULL, *l_path = NULL;
......@@ -524,7 +521,7 @@ int dap_json_rpc_request_send(dap_client_pvt_t* a_client_internal, dap_json_rpc
if (!l_request_data_str) {
return -1;
}
char * l_enc_request = dap_json_rpc_enc_request(a_client_internal, l_request_data_str, l_request_data_size, &l_path, &l_enc_request_size, l_custom_header);
char * l_enc_request = dap_json_rpc_enc_request(a_client_internal, l_request_data_str, l_request_data_size, &l_path, &l_enc_request_size, &l_custom_header);
DAP_DEL_Z(l_request_data_str);
if (!l_enc_request || !l_path) {
DAP_DEL_Z(l_request_data_str);
......@@ -554,23 +551,21 @@ int dap_json_rpc_request_send(dap_client_pvt_t* a_client_internal, dap_json_rpc
int l_ret = dap_chain_exec_cmd_list_wait(l_exec_cmd_request, 10000);
switch (l_ret) {
case EXEC_CMD_OK :{
s_exec_cmd_request_get_response(l_exec_cmd_request, &a_response, &l_response_size);
s_exec_cmd_request_get_response(l_exec_cmd_request, a_response, &l_response_size);
log_it(L_DEBUG, "Get response from %s:%d, response size = %lu",
a_client_internal->client->link_info.uplink_addr, a_client_internal->client->link_info.uplink_port, l_response_size);
break;
}
case EXEC_CMD_ERR_WAIT_TIMEOUT: {
a_response = dap_strdup("Response time run out ");
*a_response = dap_strdup("Response time run out ");
log_it(L_ERROR, "Response time from %s:%d run out",
a_client_internal->client->link_info.uplink_addr, a_client_internal->client->link_info.uplink_port);
l_response_size = strlen(a_response);
break;
}
case EXEC_CMD_ERR_UNKNOWN : {
a_response = dap_strdup("Unknown error in json-rpc");
*a_response = dap_strdup("Unknown error in json-rpc");
log_it(L_ERROR, "Response from %s:%d has unknown error",
a_client_internal->client->link_info.uplink_addr, a_client_internal->client->link_info.uplink_port);
l_response_size = strlen(a_response);
break;
}
}
......
......@@ -65,14 +65,9 @@ char * dap_json_rpc_request_handler(const char * a_request, size_t a_request_si
dap_json_rpc_response_t* l_no_rights_res = dap_json_rpc_response_create("You have no rights", TYPE_RESPONSE_STRING, l_http_request->request->id);
char * l_no_rights_res_str = dap_json_rpc_response_to_string(l_no_rights_res);
dap_json_rpc_http_request_free(l_http_request);
return NULL;
return l_no_rights_res_str;
}
const char* l_response = dap_cli_cmd_exec(l_data_str);
// size_t res = dap_http_simple_reply(a_http_simple, (void*)l_response, strlen(l_response));
// if (!res)
// log_it(L_ERROR, "Error in json-rpc reply");
// log_it(L_INFO, "reply for exec_cmd");
char* l_response = dap_cli_cmd_exec(l_data_str);
dap_json_rpc_http_request_free(l_http_request);
// DAP_DEL_Z(l_response);
return l_response;
}
......@@ -92,10 +92,7 @@ void dap_json_rpc_http_proc(dap_http_simple_t *a_http_simple, void *a_arg)
{
log_it(L_DEBUG,"Proc enc http exec_cmd request");
http_status_code_t *return_code = (http_status_code_t *)a_arg;
// unsigned int proto_version;
dap_stream_session_t *l_stream_session = NULL;
// unsigned int action_cmd=0;
bool l_new_session = false;
enc_http_delegate_t *l_dg = enc_http_request_decode(a_http_simple);
......@@ -114,24 +111,18 @@ void dap_json_rpc_http_proc(dap_http_simple_t *a_http_simple, void *a_arg)
char *l_subtok_value = strchr(l_tok, '=');
if (l_subtok_value && l_subtok_value != l_subtok_name) {
*l_subtok_value++ = '\0';
//log_it(L_DEBUG, "tok = %s value =%s",l_subtok_name,l_subtok_value);
if (strcmp(l_subtok_name,"channels")==0 ){
strncpy(l_channels_str,l_subtok_value,sizeof (l_channels_str)-1);
//log_it(L_DEBUG,"Param: channels=%s",l_channels_str);
}else if(strcmp(l_subtok_name,"enc_type")==0){
l_enc_type = atoi(l_subtok_value);
//log_it(L_DEBUG,"Param: enc_type=%s",dap_enc_get_type_name(l_enc_type));
l_is_legacy = false;
}else if(strcmp(l_subtok_name,"enc_key_size")==0){
// TODO impliment enc_key_size influence
l_enc_key_size = (size_t) atoi(l_subtok_value);
if (l_enc_key_size > l_dg->request_size )
l_enc_key_size = 32;
//log_it(L_DEBUG,"Param: enc_key_size=%d", l_enc_key_size);
l_is_legacy = false;
}else if(strcmp(l_subtok_name,"enc_headers")==0){
l_enc_headers = atoi(l_subtok_value);
//log_it(L_DEBUG,"Param: enc_headers=%d",l_enc_headers);
}
}
l_tok = strtok_r(NULL, ",", &l_tok_tmp);
......@@ -152,54 +143,13 @@ void dap_json_rpc_http_proc(dap_http_simple_t *a_http_simple, void *a_arg)
if (l_res_str) {
enc_http_reply(l_dg, l_res_str, strlen(l_res_str));
} else {
enc_http_reply(l_dg, "Empty reply", strlen("Empty reply"));
enc_http_reply(l_dg, "Wrong request", strlen("Wrong request"));
}
// if(l_new_session){
// l_stream_session = dap_stream_session_pure_new();
// strncpy(l_stream_session->active_channels, l_channels_str, l_channels_str_size);
// char *l_key_str = DAP_NEW_Z_SIZE(char, KEX_KEY_STR_SIZE + 1);
// dap_random_string_fill(l_key_str, KEX_KEY_STR_SIZE);
// l_stream_session->key = dap_enc_key_new_generate( l_enc_type, l_key_str, KEX_KEY_STR_SIZE,
// NULL, 0, 32);
// dap_http_header_t *l_hdr_key_id = dap_http_header_find(a_http_simple->http_client->in_headers, "KeyID");
// if (l_hdr_key_id) {
// dap_enc_ks_key_t *l_ks_key = dap_enc_ks_find(l_hdr_key_id->value);
// if (!l_ks_key) {
// log_it(L_WARNING, "Key with ID %s not found", l_hdr_key_id->value);
// *return_code = Http_Status_BadRequest;
// return;
// }
// l_stream_session->acl = l_ks_key->acl_list;
// l_stream_session->node = l_ks_key->node_addr;
// }
// if (l_is_legacy)
// enc_http_reply_f(l_dg, "%u %s", l_stream_session->id, l_key_str);
// else
// enc_http_reply_f(l_dg, "%u %s %u %d %d", l_stream_session->id, l_key_str,
// DAP_PROTOCOL_VERSION, l_enc_type, l_enc_headers);
*return_code = Http_Status_OK;
// DAP_DELETE(l_key_str);
*return_code = Http_Status_OK;
enc_http_reply_encode(a_http_simple,l_dg);
// dap_enc_ks_delete(l_hdr_key_id->value);
enc_http_delegate_delete(l_dg);
}else{
log_it(L_ERROR,"Wrong request");
*return_code = Http_Status_BadRequest;
}
// log_it(L_INFO, "Proc exec_cmd request");
// http_status_code_t *l_return_code = (http_status_code_t*)a_arg;
// *l_return_code = Http_Status_OK;
// strcpy(a_http_simple->reply_mime, "application/json");
// *l_return_code = Http_Status_OK;
// if (!a_http_simple->request){
// *l_return_code = Http_Status_NoContent;
// dap_http_simple_reply_f(a_http_simple, "JSON-RPC request was not formed. "
// "JSON-RPC must represent a method containing objects from an object, "
// "this is a string the name of the method, id is a number and params "
// "is an array that can contain strings, numbers and boolean values.");
// }
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment