diff --git a/.travis.yml b/.travis.yml index b4f3da7506c3694890d26fa57a9401d8846e3666..87cdc684f359aeb8c7416f0ca055bec25872ca81 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ sudo: required -language: cpp +language: c compiler: gcc dist: xenial notifications: @@ -7,10 +7,9 @@ notifications: before_install: - git submodule init - - git submodule update --recursive + - git submodule update script: - - export CC=gcc-5 - mkdir build - cd build - cmake -DBUILD_LIB_DAP_CLIENT_TESTS=ON ../ @@ -22,7 +21,7 @@ addons: sources: - ubuntu-toolchain-r-test packages: - - gcc-5 + - libjson-c-dev - libev-dev - libmagic-dev diff --git a/dap_client_pvt.c b/dap_client_pvt.c index b500e1e4fae0b1abcf604a34bb6e70253be705dd..6d721aea1228fa33701bf2aca135c57cdd0d3a45 100644 --- a/dap_client_pvt.c +++ b/dap_client_pvt.c @@ -27,6 +27,7 @@ #include <stdio.h> #include <string.h> #include <assert.h> +#include <json-c/json.h> #include "dap_enc_key.h" #include "dap_enc_base64.h" @@ -455,10 +456,36 @@ void m_request_response(void * a_response,size_t a_response_size,void * a_obj) void m_enc_init_response(dap_client_t * a_client, void * a_response,size_t a_response_size) { dap_client_pvt_t * l_client_pvt = DAP_CLIENT_PVT(a_client); - if( a_response_size > 10) {// && a_response_size < 50){ - char l_session_id_b64 [DAP_ENC_BASE64_ENCODE_SIZE(DAP_ENC_KS_KEY_ID_SIZE)+1]={0}; - char *l_bob_message_b64 = DAP_NEW_Z_SIZE(char,a_response_size- sizeof(l_session_id_b64)+1 ); - if (sscanf (a_response,"%s %s",l_session_id_b64, l_bob_message_b64) == 2 ){ + if(a_response_size > 10) { // && a_response_size < 50){ + + char *l_session_id_b64 = NULL; + char *l_bob_message_b64 = NULL; + int json_parse_count = 0; + struct json_object *jobj = json_tokener_parse((const char *) a_response); + if(jobj) { + // parse encrypt_id & encrypt_msg + json_object_object_foreach(jobj, key, val) + { + if(json_object_get_type(val) == json_type_string) { + char *str = (char *) json_object_get_string(val); + if(!strcmp(key, "encrypt_id")) { + l_session_id_b64 = DAP_NEW_Z_SIZE(char, strlen(str) + 1); + strcpy(l_session_id_b64, str); + json_parse_count++; + } + if(!strcmp(key, "encrypt_msg")) { + l_bob_message_b64 = DAP_NEW_Z_SIZE(char, strlen(str) + 1); + strcpy(l_bob_message_b64, str); + json_parse_count++; + } + } + } + // free jobj + json_object_put(jobj); + } + //char l_session_id_b64[DAP_ENC_BASE64_ENCODE_SIZE(DAP_ENC_KS_KEY_ID_SIZE) + 1] = { 0 }; + //char *l_bob_message_b64 = DAP_NEW_Z_SIZE(char, a_response_size - sizeof(l_session_id_b64) + 1); + if(json_parse_count == 2) { //if (sscanf (a_response,"%s %s",l_session_id_b64, l_bob_message_b64) == 2 ){ l_client_pvt->session_key_id = DAP_NEW_Z_SIZE(char,strlen(l_session_id_b64)+1); dap_enc_base64_decode(l_session_id_b64,strlen(l_session_id_b64), l_client_pvt->session_key_id, DAP_ENC_DATA_TYPE_B64); @@ -490,6 +517,7 @@ void m_enc_init_response(dap_client_t * a_client, void * a_response,size_t a_res l_client_pvt->stage_status = STAGE_STATUS_ERROR; s_stage_status_after(l_client_pvt); } + DAP_DELETE(l_session_id_b64); DAP_DELETE(l_bob_message_b64); }else if( a_response_size>1){ log_it(L_ERROR, "ENC: Wrong response (size %u data '%s')",a_response_size,(char*) a_response); diff --git a/libdap b/libdap index b43597115d5eed7bf24e45635bc35c1889e2fd6f..600ed913252c001580ad0549d27e563c2f68be10 160000 --- a/libdap +++ b/libdap @@ -1 +1 @@ -Subproject commit b43597115d5eed7bf24e45635bc35c1889e2fd6f +Subproject commit 600ed913252c001580ad0549d27e563c2f68be10 diff --git a/libdap-server-core b/libdap-server-core index 1351d1c1987d6703b8cfd20eb9e053beec0bc625..edf554c77e05146aee6a90a6a15fab28ba38b626 160000 --- a/libdap-server-core +++ b/libdap-server-core @@ -1 +1 @@ -Subproject commit 1351d1c1987d6703b8cfd20eb9e053beec0bc625 +Subproject commit edf554c77e05146aee6a90a6a15fab28ba38b626 diff --git a/libdap-stream b/libdap-stream index 6a13c6314787a04bbb5dd4bec02378d3ff31edb5..9b68cf5b9375e19e2db11a21f7ed0fd9b2b71c7f 160000 --- a/libdap-stream +++ b/libdap-stream @@ -1 +1 @@ -Subproject commit 6a13c6314787a04bbb5dd4bec02378d3ff31edb5 +Subproject commit 9b68cf5b9375e19e2db11a21f7ed0fd9b2b71c7f diff --git a/libdap-stream-ch b/libdap-stream-ch index e12cd24dfca8b778cf63d1c957d04f7d2471f75c..f5ba302012357d175ff532d11125699bcc8bcc96 160000 --- a/libdap-stream-ch +++ b/libdap-stream-ch @@ -1 +1 @@ -Subproject commit e12cd24dfca8b778cf63d1c957d04f7d2471f75c +Subproject commit f5ba302012357d175ff532d11125699bcc8bcc96