diff --git a/dongle_apn.c b/dongle_apn.c index 37bd07019e597acc9adbffdb220e2d3746ea7126..09354ff38c41bcb0332bd608a9a7408e8e900a55 100644 --- a/dongle_apn.c +++ b/dongle_apn.c @@ -58,28 +58,17 @@ int set_apn_profile(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - char *response = mobile_get_apn_profiles(); - struct json_object *apn_profiles = json_tokener_parse(response); struct blob_attr *tb[__APN_MAX]; char name[1024] = {0}; //STR_MAX or something from limits.h - int idx; blobmsg_parse(apn_policy, __APN_MAX, tb, blob_data(msg), blob_len(msg)); strncpy(name, (char *)blobmsg_data(tb[name]), 1023); - printf("name %s\n", name); - idx = apn_profile_idx(apn_profiles, name); - if (idx < 0) - goto fail; - - free(response); - response = mobile_set_apn_profile(idx); + char *response = mobile_set_apn_profile(name); struct json_object *parsed_response = json_tokener_parse(response); write_to_ubus(parsed_response, ctx, req); -fail: free(response); - json_object_put(apn_profiles); return 0; } diff --git a/libmobile.c b/libmobile.c index 7e52a0c9939e5e6b8ebcc9693ca01bef5c922821..fe6be73313f60749fceec827fa59e347772a5655 100644 --- a/libmobile.c +++ b/libmobile.c @@ -191,24 +191,27 @@ char *mobile_get_apn_profiles(void) return mobile_get_request("APN_config0,APN_config1,APN_config2,APN_config3,APN_config4,APN_config5,APN_config6,APN_config7,APN_config8,APN_config9,APN_config10,APN_config11,APN_config12,APN_config13,APN_config14,APN_config15,APN_config16,APN_config17,APN_config18,APN_config19"); } -char *mobile_create_apn_profile(char *apn) +char *mobile_create_apn_profile(char *name) { char query[1024] = {0}; strncpy(query, "isTest=false&goformId=APN_PROC_EX&apn_action=save&apn_mode=manual&profile_name=", 1023); - strncat(query + strlen(query), apn, 1023); + strncat(query + strlen(query), name, 1023); strncat(query + strlen(query), "&wan_dial=*99%23&apn_select=manual&pdp_type=IP&pdp_select=auto&pdp_addr=&index=", 1023); sprintf(query + strlen(query), "%d", get_apn_profiles_len()); strncat(query + strlen(query), "&wan_apn=", 1023); - strncat(query + strlen(query), apn, 1023); + strncat(query + strlen(query), name, 1023); strncat(query + strlen(query), "&ppp_auth_mode=none&ppp_username=&ppp_passwd=&dns_mode=auto&prefer_dns_manual=&standby_dns_manual=", 1023); printf("query: %s\n", query); return mobile_post_request(query); } -char *mobile_set_apn_profile(int idx) +char *mobile_set_apn_profile(char *name) { + char *apn_profiles = mobile_get_apn_profiles(); + struct json_object *apn_profiles_json = json_object_tokener(apn_profiles); + int idx = apn_profile_idx(apn_profiles_json, name); char query[1024] = {0}; strncpy(query, "isTest=false&goformId=APN_PROC_EX&apn_mode=manual&apn_action=set_default&set_default_flag=1&pdp_type=IP&index=", 1023); diff --git a/libmobile.h b/libmobile.h index 8979ef32b4638131097f4bcba2772b11782a6035..5947d4cbb53d249a7d327e49918203dace5d7b6b 100644 --- a/libmobile.h +++ b/libmobile.h @@ -96,7 +96,8 @@ int get_apn_profiles_len(void); * Connects the dongle's network. * * Returns: - * A string containing the servers response (a json string containing {"result": "success"/"failure"}), indicating whether the call was successful or not. + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. * NULL on failure. */ char *mobile_connect_network(void); @@ -106,7 +107,8 @@ char *mobile_connect_network(void); * Disconnects the dongle's network. * * Returns: - * A string containing the servers response (a json string containing {"result": "success"/"failure"}), indicating whether the call was successful or not. + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. * NULL on failure. */ char *mobile_disconnect_network(void); @@ -120,7 +122,8 @@ char *mobile_disconnect_network(void); * name - The name of the APN profile to be removed. * * Returns: - * A string containing the servers response (a json string containing {"result": "success"/"failure"}), indicating whether the call was successful or not. + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. * NULL on failure. */ char *mobile_delete_apn(char *name); @@ -130,26 +133,194 @@ char *mobile_delete_apn(char *name); * * Enables the roaming option on the dongle. * - * Parameters: - * name - The name of the APN profile to be removed. - * * Returns: - * A string containing the servers response (a json string containing {"result": "success"/"failure"}), indicating whether the call was successful or not. + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. * NULL on failure. */ char *mobile_enable_roaming(void); + +/** + * Function: mobile_disable_roaming + * + * Disables the roaming option on the dongle. + * + * Returns: + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. + * NULL on failure. + */ char *mobile_disable_roaming(void); + +/** + * Function: mobile_disable_roaming + * + * Gets the current roam status of the dongle. + * + * Returns: + * A string containing the servers response in JSON format, {"roam_setting_option": "on"/"off" } + * NULL on failure. + */ char *mobile_get_roam_status(void); + +/** + * Function: mobile_get_wan_apn + * + * Gets the currently active APN profile's WAN name. + * + * Returns: + * A string containing the servers response in JSON format, {"wan_apn": "<name>" } on success. + * NULL on failure. + */ char *mobile_get_wan_apn(void); + +/** + * Function: mobile_get_pinnumber + * + * Gets the pinnumber, indicating how many tries are remaining before the SIM card is locked. + * + * Returns: + * A string containing the servers response in JSON format, {"pinnumber": {1..3} } on success. + * NULL on failure. + */ char *mobile_get_pinnumber(void); + +/** + * Function: mobile_get_pin_status + * + * Gets the pinnumber, indicating whether pin is enabled or not. + * + * Returns: + * A string containing the servers response in JSON format, {"pinnumber": {0..1} } on success. + * NULL on failure. + */ char *mobile_get_pin_status(void); + +/** + * Function: mobile_get_modem_state + * + * Gets a variety of variables related to the modems state, i.e. network. + * + * Returns: + * A string containing the servers response in JSON format on success. + * NULL on failure. + */ char *mobile_get_modem_state(void); + +/** + * Function: mobile_get_apn_profiles + * + * Gets all available APN profile names. + * + * Returns: + * A string containing the servers response in JSON format on success. + * NULL on failure. + */ char *mobile_get_apn_profiles(void); -char *mobile_create_apn_profile(char *apn); -char *mobile_set_apn_profile(int idx); + +/** + * Function: mobile_create_apn_profile + * + * Creates a new APN profile. + * + * Parameter: + * name - Name of the APN (and WAN) profile to create. + * + * Returns: + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. + * NULL on failure. + */ +char *mobile_create_apn_profile(char *name); + +/** + * Function: mobile_set_apn_profile + * + * Sets a name APN profile to be activate. + * + * Parameter: + * name - Name of the APN profile to activate. + * + * Returns: + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. + * NULL on failure. + */ +char *mobile_set_apn_profile(char *name); + +/** + * Function: mobile_enable_pin + * + * Enables pin on the SIM card. + * + * Parameter: + * pin - The current pin card of the SIM. + * + * Returns: + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. + * NULL on failure. + */ char *mobile_enable_pin(char *pin); + +/** + * Function: mobile_set_pin + * + * Sets a new pin for the SIM card. + * + * Parameter: + * current_pin - The currently active pin for the SIM card. + * new_pin - The pin code which to set as the active pin for the SIM card. + * + * Returns: + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. + * NULL on failure. + */ char *mobile_set_pin(char *current_pin, char *new_pin); + +/** + * Function: mobile_disable_pin + * + * Disables pin for the SIM card. + * + * Parameter: + * pin - Currently active pin. + * + * Returns: + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. + * NULL on failure. + */ char *mobile_disable_pin(char *pin); + +/** + * Function: mobile_post_request + * + * Function that prepares curl environment and final POST query, then executes said query. + * + * Parameter: + * query - The POST query content to execute. + * + * Returns: + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. + * NULL on failure. + */ char *mobile_post_request(char *query); + +/** + * Function: mobile_get_request + * + * Function that prepares curl environment and final GET query, then executes said query. + * + * Parameter: + * vars - A string of comma separated values which to get from the server. + * + * Returns: + * A string containing the servers response (a json string containing {"result": "success"/"failure" }), + indicating whether the server successfully executed the query. + * NULL on failure. + */ char *mobile_get_request(char *vars); #endif \ No newline at end of file