diff --git a/dongle_apn.c b/dongle_apn.c index e32f46f5fff23b3aa0ca96ac48484c86a04ffc84..dbd94fc95b08a0045342faad2dcb7ee85e8be6ed 100644 --- a/dongle_apn.c +++ b/dongle_apn.c @@ -32,24 +32,6 @@ int list_apn_profiles(struct ubus_context *ctx, struct ubus_object *obj, struct json_object *apn_profiles = get_apn_profiles_json(); write_to_ubus(apn_profiles, ctx, req); - /*struct blob_buf bb; - - memset(&bb, 0, sizeof(struct blob_buf)); - blob_buf_init(&bb, 0); - json_object_object_foreach(apn_profiles, key, val) { - char *apn_profile = json_object_get_string(val); - - if (strlen(apn_profile) > 0) { - char *apn_name = strtok(apn_profile, "($)"); - - blobmsg_add_string(&bb, key, apn_name); - } else - break; - } - ubus_send_reply(ctx, req, bb.head); - - json_object_put(apn_profiles); - blob_buf_free(&bb);*/ return 0; } diff --git a/dongle_network.c b/dongle_network.c index 98f526350cafd81283084b4761f9bf3fdaf05b14..ba265dd5dc165d6d1016b87af23e3183bb025426 100644 --- a/dongle_network.c +++ b/dongle_network.c @@ -17,12 +17,10 @@ struct ubus_context *ctx; -int signal_strength(struct ubus_context *ctx, struct ubus_object *obj, +int get_signal_strength(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg) { - struct blob_buf bb; - char *response = get_request("rssi"); struct json_object *parsed_response = json_tokener_parse(response); @@ -32,9 +30,32 @@ int signal_strength(struct ubus_context *ctx, struct ubus_object *obj, return 0; } +int connect_network(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + char *response = _connect(); + struct json_object *parsed_response = json_tokener_parse(response); + + write_to_ubus(parsed_response, ctx, req); + return 0; +} + +int disconnect(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) +{ + char *response = _disconnect(); + struct json_object *parsed_response = json_tokener_parse(response); + + write_to_ubus(parsed_response, ctx, req); + return 0; +} struct ubus_method dongle_object_methods[] = { - UBUS_METHOD_NOARG("signal_strength", signal_strength), + UBUS_METHOD_NOARG("get_signal_strength", get_signal_strength), + UBUS_METHOD_NOARG("connect", connect_network), + UBUS_METHOD_NOARG("disconnect", disconnect), }; struct ubus_object_type dongle_object_type = UBUS_OBJECT_TYPE("dongle", dongle_object_methods); diff --git a/libmobile.c b/libmobile.c index be66ad30d920b4b1d614d5cc0b5d434e18406138..3e835f144a361cafc9f94de737a36b17e2701955 100644 --- a/libmobile.c +++ b/libmobile.c @@ -101,11 +101,26 @@ int get_apn_profiles_len(void) return -1; } +char *_connect(void) +{ + char query[1024] = {0}; + + strncpy(query, "http://192.168.0.1/goform//goform_set_cmd_process?isTest=false&goformId=CONNECT_NETWORK", 1023); + return post_request(query); +} + +char *_disconnect(void) +{ + char query[1024] = {0}; + // removed notcallback, why have it? + strncpy(query, "http://192.168.0.1/goform//goform_set_cmd_process?isTest=false&goformId=DISCONNECT_NETWORK", 1023); + return post_request(query); +} + char *_delete_apn(int idx) { char query[1024] = {0}; - query[0] = '\0'; 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); diff --git a/libmobile.h b/libmobile.h index 2bc6e63201439ff15d4e8fa6032264b5b2cefbac..6758ca0d6fbc0299edf8becc3e201d6ea1a822b8 100644 --- a/libmobile.h +++ b/libmobile.h @@ -12,6 +12,8 @@ size_t write_func(void *buffer, size_t size, size_t nmemb, void *userp); struct json_object *get_apn_profiles_json(void); struct blob_buf json_to_blob(struct json_object *response, struct blob_buf bb); int get_apn_profiles_len(void); +char *_connect(void); +char *_disconnect(void); char *_delete_apn(int idx); int get_apn_profile_idx(struct json_object *apn_profiles, char *name); char *get_current_wan_apn(void);