diff --git a/dongle_apn.c b/dongle_apn.c index ae6327dbe9eda24fd0f2781f84c2940530fbe708..b9e2d00d1ee207284ca3936c5bf996ce46519a94 100644 --- a/dongle_apn.c +++ b/dongle_apn.c @@ -30,10 +30,23 @@ int list_apn_profiles(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { char *response = mobile_get_apn_profiles(); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *apn_profiles = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(apn_profiles, ctx, req); + json_object_put(apn_profiles); +free_response: + free(response); +fail: return 0; } @@ -48,11 +61,23 @@ int delete_apn_profile(struct ubus_context *ctx, struct ubus_object *obj, strncpy(name, (char *)blobmsg_data(tb[APN]), 1023); char *response = mobile_delete_apn(name); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: free(response); +fail: return 0; } @@ -67,11 +92,23 @@ int set_apn_profile(struct ubus_context *ctx, struct ubus_object *obj, strncpy(name, (char *)blobmsg_data(tb[APN]), 1023); char *response = mobile_set_apn_profile(name); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: free(response); +fail: return 0; } @@ -86,12 +123,23 @@ int create_apn_profile(struct ubus_context *ctx, struct ubus_object *obj, strncpy(name, (char *)blobmsg_data(tb[APN]), 1023); char *response = mobile_create_apn_profile(name); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: free(response); - +fail: return 0; } @@ -100,12 +148,24 @@ int show_current_apn(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { //char *wan_apn = mobile_get_request("wan_apn"); - char *wan_apn = mobile_get_wan_apn(); + char *response = mobile_get_wan_apn(); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(wan_apn); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); - free(wan_apn); +free_response: + free(response); +fail: return 0; } diff --git a/dongle_network.c b/dongle_network.c index fb1ce47cc399faf9b3ea0c49b8a116e7913b310f..c51ca86eab913c71ca48e28e8ad987dc065d638a 100644 --- a/dongle_network.c +++ b/dongle_network.c @@ -22,11 +22,23 @@ int get_signal_strength(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { char *response = mobile_get_request("rssi"); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: free(response); +fail: return 0; } int connect_network(struct ubus_context *ctx, struct ubus_object *obj, @@ -34,10 +46,23 @@ int connect_network(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { char *response = mobile_connect_network(); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: + free(response); +fail: return 0; } @@ -46,10 +71,23 @@ int disconnect(struct ubus_context *ctx, struct ubus_object *obj, struct blob_attr *msg) { char *response = mobile_disconnect_network(); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: + free(response); +fail: return 0; } @@ -57,12 +95,24 @@ int modem_state(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - //char *response = mobile_get_request("&sms_received_flag_flag=0&sts_received_flag_flag=0&cmd=modem_main_state%2Cpin_status%2Cloginfo%2Cnew_version_state%2Ccurrent_upgrade_state%2Cis_mandatory%2Csms_received_flag%2Csts_received_flag%2Csignalbar%2Cnetwork_type%2Cnetwork_provider%2Cppp_status%2CEX_SSID1%2Cex_wifi_status%2CEX_wifi_profile%2Cm_ssid_enable%2Csms_unread_num%2CRadioOff%2Csimcard_roam%2Clan_ipaddr%2Cstation_mac%2Cbattery_charging%2Cbattery_vol_percent%2Cbattery_pers%2Cspn_display_flag%2Cplmn_display_flag%2Cspn_name_data%2Cspn_b1_flag%2Cspn_b2_flag%2Crealtime_tx_bytes%2Crealtime_rx_bytes%2Crealtime_time%2Crealtime_tx_thrpt%2Crealtime_rx_thrpt%2Cmonthly_rx_bytes%2Cmonthly_tx_bytes%2Cmonthly_time%2Cdate_month%2Cdata_volume_limit_switch%2Cdata_volume_limit_size%2Cdata_volume_alert_percent%2Cdata_volume_limit_unit%2Croam_setting_option%2Cupg_roam_switch%2Chplmn"); char *response = mobile_get_modem_state(); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: + free(response); +fail: return 0; } @@ -70,12 +120,24 @@ int enable_roaming(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - //char *response = mobile_post_request("/goform/goform_set_cmd_process?isTest=false¬Callback=true&goformId=SET_CONNECTION_MODE&roam_setting_option=on"); char *response = mobile_enable_roaming(); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: + free(response); +fail: return 0; } @@ -83,12 +145,24 @@ int disable_roaming(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - //char *response = mobile_post_request("/goform/goform_set_cmd_process?isTest=false¬Callback=true&goformId=SET_CONNECTION_MODE&roam_setting_option=off"); char response = *mobile_disable_roaming(); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: + free(response); +fail: return 0; } @@ -96,12 +170,32 @@ int roam_status(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - //char *response = mobile_get_request("roam_setting_option"); char *response = mobile_get_roam_status(); + + if (!response) { + printf("no respose!\n"); + goto fail; + } struct json_object *parsed_response = json_tokener_parse(response); + if (!response) + { + printf("no respose!\n"); + goto fail; + } + struct json_object *parsed_response = json_tokener_parse(response); + + if (!parsed_response) + { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: + free(response); +fail: return 0; } diff --git a/dongle_pin.c b/dongle_pin.c index 73a21de96119af07492a96f8ba09d7183a38bc84..4d922cda4535ae40cbc4aeb8a1a235e1473f34d3 100644 --- a/dongle_pin.c +++ b/dongle_pin.c @@ -99,6 +99,11 @@ int set_pin(struct ubus_context *ctx, struct ubus_object *obj, goto fail; } struct json_object *parsed_response = json_tokener_parse(response); + + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } struct json_object *rv_json; json_object_object_get_ex(parsed_response, "pin_status", &rv_json); @@ -139,10 +144,11 @@ int set_pin(struct ubus_context *ctx, struct ubus_object *obj, printf("no result available from set_pin!"); goto free_all; } - write_to_ubus(parsed_response, ctx, req); + free_all: json_object_put(parsed_response); +free_response: free(response); fail: return 0; @@ -174,6 +180,11 @@ int disable_pin(struct ubus_context *ctx, struct ubus_object *obj, goto fail; } struct json_object *parsed_response = json_tokener_parse(response); + + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } struct json_object *rv_json; json_object_object_get_ex(parsed_response, "pin_status", &rv_json); @@ -201,9 +212,12 @@ int disable_pin(struct ubus_context *ctx, struct ubus_object *obj, } else { printf("already disabled!\n"); } -free_all: + write_to_ubus(parsed_response, ctx, req); + +free_all: json_object_put(parsed_response); +free_response: free(response); fail: return 0; @@ -235,6 +249,11 @@ int enable_pin(struct ubus_context *ctx, struct ubus_object *obj, goto fail; } struct json_object *parsed_response = json_tokener_parse(response); + + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } struct json_object *rv_json; json_object_object_get_ex(parsed_response, "pin_status", &rv_json); @@ -263,11 +282,13 @@ int enable_pin(struct ubus_context *ctx, struct ubus_object *obj, printf("already enabled!\n"); } -free_all: write_to_ubus(parsed_response, ctx, req); + +free_all: json_object_put(parsed_response); -fail: +free_response: free(response); +fail: return 0; } @@ -297,10 +318,17 @@ int verify_pin(struct ubus_context *ctx, struct ubus_object *obj, } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + +free_all: json_object_put(parsed_response); -fail: +free_response: free(response); +fail: return 0; } @@ -316,8 +344,14 @@ int remaining_tries(struct ubus_context *ctx, struct ubus_object *obj, } struct json_object *parsed_response = json_tokener_parse(response); + if (!parsed_response) { + printf("No valid JSON, failed parsing!\n"); + goto free_response; + } write_to_ubus(parsed_response, ctx, req); + json_object_put(parsed_response); +free_response: free(response); fail: return 0; diff --git a/libmobile.c b/libmobile.c index b348cc591024fdf07bd89c5bcad76e8d5ac36845..b4d212635bbe45a7c76375a5b83d5fd1c3986e29 100644 --- a/libmobile.c +++ b/libmobile.c @@ -180,6 +180,10 @@ char *mobile_get_pin_status(void) return mobile_get_request("pin_status"); } +char *mobile_get_rssi(void) +{ + return mobile_get_request("rssi"); +} char *mobile_get_modem_state(void) { diff --git a/libmobile.h b/libmobile.h index 7b3116f229cbdc9726db327fc49fb98b3fabd7e6..4178b5982bc42bcd9f12dcca95bbfe7917d28c74 100644 --- a/libmobile.h +++ b/libmobile.h @@ -231,6 +231,17 @@ char *mobile_get_pinnumber(void); */ char *mobile_get_pin_status(void); +/** + * Function: mobile_get_rssi + * + * Gets the rssi, indicating the signal strength. + * + * Returns: + * A string containing the servers response in JSON format, {"rssi": {} } on success. + * NULL on failure. + */ +char *mobile_get_rssi(void); + /** * Function: mobile_get_modem_state *