diff --git a/dongle_apn.c b/dongle_apn.c
index 70027cbf9d4810ee4d144896b93b70f62228f675..37bd07019e597acc9adbffdb220e2d3746ea7126 100644
--- a/dongle_apn.c
+++ b/dongle_apn.c
@@ -40,27 +40,17 @@ int delete_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}; //what is max available name length in dongle?
- int idx;
blobmsg_parse(apn_policy, __APN_MAX, tb, blob_data(msg), blob_len(msg));
strncpy(name, (char *)blobmsg_data(tb[APN]), 1023);
- printf("name to remove: %s\n", name);
-
- idx = apn_profile_idx(apn_profiles, name);
-
- if (idx >= 0) {
- char *response = mobile_delete_apn(idx);
- struct json_object *parsed_response = json_tokener_parse(response);
- write_to_ubus(parsed_response, ctx, req);
- json_object_put(apn_profiles);
- free(response);
- }
+ char *response = mobile_delete_apn(name);
+ struct json_object *parsed_response = json_tokener_parse(response);
+ write_to_ubus(parsed_response, ctx, req);
+ free(response);
return 0;
}
@@ -71,15 +61,14 @@ int set_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
char *response = mobile_get_apn_profiles();
struct json_object *apn_profiles = json_tokener_parse(response);
struct blob_attr *tb[__APN_MAX];
- char apn[1024] = {0}; //STR_MAX or something from limits.h
+ 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);
- strncpy(apn, (char *)blobmsg_data(tb[APN]), 1023);
- printf("apn %s\n", apn);
-
- idx = apn_profile_idx(apn_profiles, apn);
+ idx = apn_profile_idx(apn_profiles, name);
if (idx < 0)
goto fail;
@@ -99,13 +88,12 @@ int create_apn_profile(struct ubus_context *ctx, struct ubus_object *obj,
struct blob_attr *msg)
{
struct blob_attr *tb[__APN_MAX];
- char apn[1024]; //STR_MAX or something from limits.h
+ char name[1024] = {0}; //STR_MAX or something from limits.h
blobmsg_parse(apn_policy, __APN_MAX, tb, blob_data(msg), blob_len(msg));
- apn[0] = '\0';
- strncpy(apn, (char *)blobmsg_data(tb[APN]), 1023);
- char *response = mobile_create_apn_profile(apn);
+ strncpy(name, (char *)blobmsg_data(tb[name]), 1023);
+ char *response = mobile_create_apn_profile(name);
struct json_object *parsed_response = json_tokener_parse(response);
write_to_ubus(parsed_response, ctx, req);
diff --git a/libmobile.c b/libmobile.c
index 5a771534be195cafe81604be88722852ca78a063..7e52a0c9939e5e6b8ebcc9693ca01bef5c922821 100644
--- a/libmobile.c
+++ b/libmobile.c
@@ -101,12 +101,16 @@ int get_apn_profiles_len(void)
json_object_object_foreach(apn_profiles, key, val) {
if (strlen(json_object_get_string(val)) > 0)
len++;
- else
- return len;
+ else {
+ goto finished;
+ }
}
json_object_put(apn_profiles);
return -1;
+finished:
+ json_object_put(apn_profiles);
+ return len;
}
char *mobile_connect_network(void)
@@ -125,15 +129,26 @@ char *mobile_disconnect_network(void)
return mobile_post_request(query);
}
-char *mobile_delete_apn(int idx)
+char *mobile_delete_apn(char *name)
{
+ char *apn_profiles = mobile_get_apn_profiles();
+ struct json_object *apn_profiles_json = json_tokener_parse(apn_profiles);
char query[1024] = {0};
+ int idx = apn_profile_idx(apn_profiles_json, name);
+
+ free(apn_profiles);
+ if (idx < 0)
+ goto fail;
strncpy(query, "isTest=false&apn_action=delete&apn_mode=manual&index=", 1023);
sprintf(query + strlen(query), "%d", idx);
strncat(query + strlen(query), "&goformId=APN_PROC_EX", 1023);
+ json_object_put(apn_profiles_json);
return mobile_post_request(query);
+fail:
+ json_object_put(apn_profiles_json);
+ return NULL;
}
char *mobile_enable_roaming(void)
diff --git a/libmobile.h b/libmobile.h
index 5fab753b8eb90f21762acc9d6fee03b8bbeb0334..8979ef32b4638131097f4bcba2772b11782a6035 100644
--- a/libmobile.h
+++ b/libmobile.h
@@ -6,16 +6,137 @@
#include <libubox/blobmsg.h>
#include <libubus.h>
+
+/**
+ * Function: write_to_ubus
+ *
+ * Prints a json_object pointer's json structure to ubus.
+ *
+ * Parameters:
+ * parsed_response - A struct json_object pointer to json structure to be printed to ubus.
+ * ctx - Ubus context containing connection.
+ * req - Information for from the ubus request.
+ *
+ * Returns:
+ * 0 On success.
+ * -1 On failure.
+ */
int write_to_ubus(struct json_object *parsed_response, struct ubus_context *ctx, struct ubus_request_data *req);
+
+/**
+ * Function: curl_cleaner
+ *
+ * Free's the curl environment.
+ *
+ * Parameters:
+ * curl - The curl easy handle variable.
+ */
void curl_cleaner(CURLcode *curl);
+
+/**
+ * Function: write_func
+ *
+ * The callback function from performing the curl command, response from server will be parsed here.
+ *
+ * Parameters:
+ * buffer - Contains chunk of response from server.
+ * size - Size (byte) of type in buffer array.
+ * nmemb - Number of members in buffer.
+ * userp - Pointer to area allocated for storing results from server.
+ *
+ * Returns:
+ * Number of bytes managed (size*nmemb).
+ */
size_t write_func(void *buffer, size_t size, size_t nmemb, void *userp);
+
+/**
+ * Function: json_to_blob
+ *
+ * Parses a json_object pointer to a corresponding blob buffer.
+ *
+ * Parameters:
+ * response - json_object pointer to be replicated in a blob buffer.
+ * bb - The blob buffer to hold the results.
+ *
+ * Returns:
+ * Blob buffer containing the replicated json_object.
+ */
struct blob_buf json_to_blob(struct json_object *response, struct blob_buf bb);
+
+/**
+ * Function: apn_profile_idx
+ *
+ * Finds the index of a given profile name from all available profiles.
+ *
+ * Parameters:
+ * apn_profiles - json_object pointer to apn_profiles (gotten from a previous call to <mobile_get_apn_profiles>)
+ * name - Name of the APN index for which will be searched.
+ *
+ * Returns:
+ * Index of the APN on success.
+ * -1 on failure.
+ */
+
int apn_profile_idx(struct json_object *apn_profiles, char *name);
+
+/**
+ * Function: get_apn_profiles_len
+ *
+ * Finds the number of APN profiles available.
+ *
+ * Returns:
+ * Number of APN profiles available on success.
+ * -1 on failure.
+ */
int get_apn_profiles_len(void);
+/**
+ * Function: mobile_connect_network
+ *
+ * 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.
+ * NULL on failure.
+ */
char *mobile_connect_network(void);
+/**
+ * Function: mobile_disconnect_network
+ *
+ * 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.
+ * NULL on failure.
+ */
char *mobile_disconnect_network(void);
-char *mobile_delete_apn(int idx);
+
+/**
+ * Function: mobile_delete_apn
+ *
+ * Deletes an existing APN profile from the APN list.
+ *
+ * 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.
+ * NULL on failure.
+ */
+char *mobile_delete_apn(char *name);
+
+/**
+ * Function: mobile_enable_roaming
+ *
+ * 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.
+ * NULL on failure.
+ */
char *mobile_enable_roaming(void);
char *mobile_disable_roaming(void);
char *mobile_get_roam_status(void);