diff options
Diffstat (limited to 'binding-wifi')
-rw-r--r-- | binding-wifi/agent.c | 292 | ||||
-rw-r--r-- | binding-wifi/binding-wifi.pro | 11 | ||||
-rw-r--r-- | binding-wifi/binding.pri | 6 | ||||
-rw-r--r-- | binding-wifi/export.map | 1 | ||||
-rw-r--r-- | binding-wifi/wifi-api.c | 789 | ||||
-rw-r--r-- | binding-wifi/wifi-api.h | 38 | ||||
-rw-r--r-- | binding-wifi/wifi-connman.c | 396 | ||||
-rw-r--r-- | binding-wifi/wifi-connman.h | 148 |
8 files changed, 0 insertions, 1681 deletions
diff --git a/binding-wifi/agent.c b/binding-wifi/agent.c deleted file mode 100644 index 6b0f235..0000000 --- a/binding-wifi/agent.c +++ /dev/null @@ -1,292 +0,0 @@ -/* Copyright 2016 ALPS ELECTRIC CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#include <stdio.h> -#include <errno.h> - -#include <gio/gio.h> -#include "wifi-connman.h" - -static GMainLoop *loop = NULL; - -static GDBusNodeInfo *introspection_data = NULL; - -GDBusConnection *connectionAgent; - -GDBusMethodInvocation *invocation_passkey = NULL; - -/* Introspection data for the agent service */ -static const gchar introspection_xml[] = "<node>" - " <interface name='net.connman.Agent'>" - " <method name='RequestInput'>" - " <arg type='o' name='service' direction='in'/>" - " <arg type='a{sv}' name='fields' direction='in'/>" - " <arg type='a{sv}' name='fields' direction='out'/>" - " </method>" - " <method name='ReportError'>" - " <arg type='o' name='service' direction='in'/>" - " <arg type='s' name='error' direction='in'/>" - " </method>" - " </interface>" - "</node>"; - -callback password_callback; -callback wifiListChanged_callback; - -static void handle_method_call(GDBusConnection *connection, const gchar *sender, - const gchar *object_path, const gchar *interface_name, - const gchar *method_name, GVariant *parameters, - GDBusMethodInvocation *invocation, gpointer user_data) { - //MyObject *myobj = user_data; - - if (g_strcmp0(method_name, "RequestInput") == 0) { - DEBUG(afbitf,"RequestInput method on Agent interface has been called\n"); - - invocation_passkey = invocation; - - GVariantIter *array; - gchar * object_path; - g_variant_get(parameters, "(oa{sv})", &object_path, &array); - //TODO: get only object path for now, complete parameters are - - /* - object path "/net/connman/service/wifi_d85d4c880b1a_4c656e6f766f204b3520506c7573_managed_psk" - array [ - dict entry( - string "Passphrase" - variant array [ - dict entry( - string "Type" - variant string "psk" - ) - dict entry( - string "Requirement" - variant string "mandatory" - ) - ] - ) - ] - */ - NOTICE(afbitf,"Passphrase requested for network : %s\n", object_path); - (*password_callback)(0, object_path); - - - } - - if (g_strcmp0(method_name, "ReportError") == 0) { - ERROR(afbitf,"ReportError method on Agent interface has een called\n"); - - gchar *error_string; // = NULL; - - gchar * object_path; - g_variant_get(parameters, "(os)", &object_path, &error_string); - - ERROR(afbitf, "Error %s for %s\n", error_string, object_path); - - if (g_strcmp0(error_string, "invalid-key") == 0) { - - WARNING(afbitf, "Passkey is not correct.\n"); - (*password_callback)(1, "invalid-key"); - - } - - } -} - -GError* sendPasskey(gchar *passkey) { - - GVariantBuilder *builder; - GVariant *value = NULL; - - NOTICE(afbitf, "Passkey to send: %s\n", passkey); - - builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}")); - - g_variant_builder_add(builder, "{sv}", "Passphrase", - g_variant_new_string(passkey)); - - value = g_variant_new("(a{sv})", builder); - - g_dbus_method_invocation_return_value(invocation_passkey, value); - - return NULL; - -} - -static const GDBusInterfaceVTable interface_vtable = { handle_method_call, NULL, - NULL }; - -static void on_bus_acquired(GDBusConnection *connection, const gchar *name, - gpointer user_data) { - //MyObject *myobj = user_data; - guint registration_id; - - registration_id = g_dbus_connection_register_object(connection, - "/net/connman/Agent", introspection_data->interfaces[0], - &interface_vtable, NULL, NULL, /* user_data_free_func */ - NULL); /* GError** */ - //TODO: make some proper error message rather than exiting - //g_assert(registration_id > 0); - - return NULL; -} - -static void test_signal_handler (GDBusConnection *connection, const gchar *sender_name, const gchar *object_path, const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data) { - - //do not parse, just check what has changed and make callback - - // we need to refresh completelist anyway.. - if (g_strcmp0(signal_name, "PropertiesChanged") == 0) { - - (*wifiListChanged_callback)(1, "PropertiesChanged"); - } - else if (g_strcmp0(signal_name, "BSSRemoved") == 0) { - (*wifiListChanged_callback)(2, "BSSRemoved"); - } - - else if (g_strcmp0(signal_name, "BSSAdded") == 0) { - (*wifiListChanged_callback)(2, "BSSAdded"); - } - else WARNING(afbitf,"unhandled signal %s %s %s, %s", sender_name, object_path, interface_name, signal_name); - - -} - -void* register_agent(void *data) { - - guint owner_id; - - guint networkChangedID; - - introspection_data = g_dbus_node_info_new_for_xml(introspection_xml, NULL); - g_assert(introspection_data != NULL); - - //myobj = g_object_new(my_object_get_type(), NULL); - -// owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, "org.agent", -// G_BUS_NAME_OWNER_FLAGS_NONE, on_bus_acquired, on_name_acquired, -// on_name_lost, myobj, -// NULL); - -//FIXME: ALLOW_REPLACEMENT for now, make proper deinitialization - owner_id = g_bus_own_name(G_BUS_TYPE_SYSTEM, AGENT_SERVICE, - G_BUS_NAME_OWNER_FLAGS_REPLACE, on_bus_acquired, NULL, NULL, NULL, - NULL); - //G_BUS_NAME_OWNER_FLAGS_NONE G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT - - - //"net.connman.Manager", "ServicesChanged", - networkChangedID = g_dbus_connection_signal_subscribe(connectionAgent, NULL, "fi.w1.wpa_supplicant1.Interface", NULL, NULL, NULL, G_DBUS_SIGNAL_FLAGS_NONE, test_signal_handler, NULL, NULL); - - g_assert(networkChangedID !=0); - - loop = g_main_loop_new(NULL, FALSE); - - //sleep(10); - g_main_loop_run(loop); - - g_bus_unown_name(owner_id); - - g_dbus_node_info_unref(introspection_data); - - //g_object_unref(myobj); - - return NULL; - -} - -GError* create_agent(GDBusConnection *connection) { - - int err = -1; - pthread_t tid[1]; - - - connectionAgent = connection; - - err = pthread_create((&tid[0]), NULL, register_agent, NULL); - - if (err != 0) { - ERROR(afbitf,"\ncan't create thread :[%d]", err); - ERROR(afbitf,"Fatal error!\n\n"); - return NULL; - } - - GVariant *message = NULL; - GError *error = NULL; - - GVariant *params = NULL; - - char *agent_path = AGENT_PATH; - - params = g_variant_new("(o)", agent_path); - - message = g_dbus_connection_call_sync(connection, CONNMAN_SERVICE, - CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, "RegisterAgent", params, - NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - if (error) { - ERROR(afbitf,"error: %d:%s\n", error->code, error->message); - - return error; - - } else { - INFO(afbitf,"Agent registered\n"); - return NULL; - } - -} - -GError* stop_agent(GDBusConnection *connection) { - - GVariant *message = NULL; - GError *error = NULL; - - - GVariant *params = NULL; - - char *agent_path = AGENT_PATH; - - - params = g_variant_new("(o)", agent_path); - - message = g_dbus_connection_call_sync(connection, CONNMAN_SERVICE, - CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, "UnregisterAgent", params, - NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - if (error) { - ERROR(afbitf, "error: %d:%s\n", error->code, error->message); - return error; - - } else { - DEBUG(afbitf,"Agent unregistered\n"); - return NULL; - } - -} - -void register_callbackSecurity(callback callback_function) { - - password_callback = callback_function; - -} - -void register_callbackWiFiList(callback callback_function) { - - wifiListChanged_callback = callback_function; - -} - - diff --git a/binding-wifi/binding-wifi.pro b/binding-wifi/binding-wifi.pro deleted file mode 100644 index a6a7b41..0000000 --- a/binding-wifi/binding-wifi.pro +++ /dev/null @@ -1,11 +0,0 @@ -TARGET = settings-wifi-binding - -HEADERS = wifi-api.h wifi-connman.h -SOURCES = agent.c wifi-api.c wifi-connman.c - -LIBS += -Wl,--version-script=$$PWD/export.map - -CONFIG += link_pkgconfig -PKGCONFIG += json-c afb-daemon glib-2.0 gio-2.0 gobject-2.0 zlib - -include(binding.pri) diff --git a/binding-wifi/binding.pri b/binding-wifi/binding.pri deleted file mode 100644 index 3448a56..0000000 --- a/binding-wifi/binding.pri +++ /dev/null @@ -1,6 +0,0 @@ -TEMPLATE = lib -CONFIG += plugin use_c_linker -CONFIG -= qt -QMAKE_CFLAGS += -Wextra -Wconversion -Wno-unused-parameter -Werror=maybe-uninitialized -Werror=implicit-function-declaration -ffunction-sections -fdata-sections -Wl,--as-needed -Wl,--gc-sections - -DESTDIR = $${OUT_PWD}/../package/root/lib diff --git a/binding-wifi/export.map b/binding-wifi/export.map deleted file mode 100644 index 0ef1ac7..0000000 --- a/binding-wifi/export.map +++ /dev/null @@ -1 +0,0 @@ -{ global: afbBindingV1Register; local: *; }; diff --git a/binding-wifi/wifi-api.c b/binding-wifi/wifi-api.c deleted file mode 100644 index 30552e8..0000000 --- a/binding-wifi/wifi-api.c +++ /dev/null @@ -1,789 +0,0 @@ -/* Copyright 2016 ALPS ELECTRIC CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/** - * \file - * - * \brief Implementation of WiFi Binder for AGL's App Framework - * - * \author ALPS Electric - */ - -#define _GNU_SOURCE -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <unistd.h> -#include <json-c/json.h> -#include <afb/afb-binding.h> - -#include "wifi-api.h" -#include "wifi-connman.h" - - - -static int need_passkey_flag = 0; -static int passkey_not_correct_flag = 0; - -char *passkey; -callback ptr_my_callback; -callback wifiListChanged_clbck; - -GSList *wifi_list = NULL; - - -/** - * \brief Input the passkey for connection to AP. - * - * \param[in] passkey pasword for the network - * - * The user should first subscribe for the event 'passkey' and then provide passkey - * when this event has been received. - * - * */ -static void insertpasskey(struct afb_req request) { - - - const char *passkey_from_user; - - /* retrieves the argument, expects passkey string */ - passkey_from_user = afb_req_value(request, "passkey"); - - NOTICE(afbitf, "Passkey inserted: %s\n", passkey_from_user); - - sendPasskey(passkey_from_user); - - - if (passkey != NULL) { - - registerPasskey(passkey); - } else { - NOTICE(afbitf, "Please enter the passkey first\n"); - - } -} - - - -struct event -{ - struct event *next; - struct afb_event event; - char tag[1]; -}; - -static struct event *events = 0; - -/** - * \internal - * \brief Helper function that searches for a specific event. - * - * \param[in] tag of the event - */ -static struct event *event_get(const char *tag) -{ - struct event *e = events; - while(e && strcmp(e->tag, tag)) - e = e->next; - return e; -} - -/** - * \internal - * \brief Helper function that actually pushes the event. - * - * \param[in] tag of the event - * \param[in] *args json object that contains data for the event - * - */ -static int do_event_push(struct json_object *args, const char *tag) -{ - struct event *e; - e = event_get(tag); - return e ? afb_event_push(e->event, json_object_get(args)) : -1; -} - -/** - * \internal - * \brief Pushes the event of 'tag' with the 'data - * - * \param[in] tag - * \param[in] data - * - */ -static void eventpush (struct afb_req request) -{ - const char *tag = afb_req_value(request, "tag"); - const char *data = afb_req_value(request, "data"); - json_object *object = data ? json_tokener_parse(data) : NULL; - - if (tag == NULL) - afb_req_fail(request, "failed", "bad arguments"); - else if (0 > do_event_push(object, tag)) - afb_req_fail(request, "failed", "push error"); - else - afb_req_success(request, NULL, NULL); -} - -/** - * - * \brief Notify user that passkey is necessary. - * - * \param[in] number additional integer data produced by Agent - * \param[in] asciidata additional ascii data produced by Agent - * - * This function is called from the registered agent on RequestInput() call. - * - */ -void ask_for_passkey(int number, const char* asciidata) { - NOTICE(afbitf, "Passkey for %s network needed.", asciidata); - NOTICE(afbitf, "Sending event."); - - json_object *jresp = json_object_new_object(); - - json_object *int1 = json_object_new_int(number); - json_object *string = json_object_new_string(asciidata); - - json_object_object_add(jresp, "data1", int1); - json_object_object_add(jresp, "data2", string); - - - do_event_push(jresp, "passkey"); -} - -/** - * \internal - * \brief Notify GUI that wifi list has changed. - * - * \param[in] number number of event that caused the callback - * \param[in] asciidata additional data, e.g "BSSRemoved" - * - * User should first subscribe for the event 'networkList' and then wait for this event. - * When notification comes, update the list if networks by scan_result call. - * - */ -void wifiListChanged(int number, const char* asciidata) { - - //WARNING(afbitf, "wifiListChanged, reason:%d, %s",number, asciidata ); - - - json_object *jresp = json_object_new_object(); - - json_object *int1 = json_object_new_int(number); - json_object *string = json_object_new_string(asciidata); - - json_object_object_add(jresp, "data1", int1); - json_object_object_add(jresp, "data2", string); - - do_event_push(jresp, "networkList"); - - - -} - - -/** - * \brief Initializes the binder and activates the WiFi HW, should be called first. - * - * \param[in] request no specific data needed - * - * \return result of the request, either "success" or "failed" with description of error - * - * This will fail if - * - agent for handling passkey requests cannot be registered - * - some error is returned from connman - */ -static void activate(struct afb_req request) /*AFB_SESSION_CHECK*/ -{ - json_object *jresp; - GError *error = NULL; - - if (ptr_my_callback == NULL) { - - ptr_my_callback = ask_for_passkey; - register_callbackSecurity(ptr_my_callback); - - } - - if (wifiListChanged_clbck == NULL) { - - wifiListChanged_clbck = wifiListChanged; - register_callbackWiFiList(wifiListChanged_clbck); - - } - - jresp = json_object_new_object(); - json_object_object_add(jresp, "activation", json_object_new_string("on")); - - error = do_wifiActivate(); - - if (error == NULL) { - - afb_req_success(request, jresp, "Wi-Fi - Activated"); - - } else - - afb_req_fail(request, "failed", error->message); - -} - -/** - * \brief Deinitializes the binder and deactivates the WiFi HW. - * - * \param[in] request no specific data needed - * - * \return result of the request, either "success" or "failed" with description of error - * - * This will fail if - * - agent for handling passkey requests cannot be unregistered - * - some error is returned from connman - * - */ -static void deactivate(struct afb_req request) /*AFB_SESSION_CHECK*/ -{ - - json_object *jresp; - GError *error = NULL; - - ptr_my_callback = NULL; - - jresp = json_object_new_object(); - json_object_object_add(jresp, "deactivation", json_object_new_string("on")); - - error = do_wifiDeactivate(); - - if (error == NULL) { - - afb_req_success(request, jresp, "Wi-Fi - Activated"); - - } else - - afb_req_fail(request, "failed", error->message); -} - -/** - * \brief Starts scan for access points. - * - * \param[in] request no specific data needed - * - * \return result of the request, either "success" or "failed" with description of error - * - * User should first subscribe for the event 'networkList' and then wait for event to come. - * When notification comes, update the list of networks by scan_result call. - */ -static void scan(struct afb_req request) /*AFB_SESSION_NONE*/ -{ - GError *error = NULL; - - error = do_wifiScan(); - - if (error == NULL) { - - afb_req_success(request, NULL, "Wi-Fi - Scan success"); - - } else - - afb_req_fail(request, "failed", error->message); - -} - -/** - * \brief Return network list. - * - * \param[in] request no specific data needed - * - * \return result of the request, either "success" or "failed" with description of error \n - * result is array of following json objects: Number, Strength, ESSID, Security, IPAddress, State. - * E.g. {"Number":0,"Strength":82,"ESSID":"wifidata02","Security":"ieee8021x","IPAddress":"unsigned","State":"idle"}, or \n - * {"Number":1,"Strength":51,"ESSID":"ALCZM","Security":"WPA-PSK","IPAddress":"192.168.1.124","State":"ready"} - */ -static void scan_result(struct afb_req request) /*AFB_SESSION_CHECK*/ -{ - struct wifi_profile_info *wifiProfile = NULL; - GSList *list = NULL; - GSList *holdMe = NULL; - wifi_list = NULL; - char *essid = NULL; - char *address = NULL; - char *security = NULL; - char *state = NULL; - unsigned int strength = 0; - int number = 0; - GError *error = NULL; - - error = do_displayScan(&wifi_list); /*Get wifi scan list*/ - if (error == NULL) { - json_object *my_array = json_object_new_array(); - - for (list = wifi_list; list; list = list->next) { /*extract wifi scan result*/ - wifiProfile = (struct wifi_profile_info *) list->data; - security = wifiProfile->Security.sec_type; - strength = wifiProfile->Strength; - //if (essid == NULL || security == NULL) - // continue; - - essid = wifiProfile->ESSID == NULL ? - "HiddenSSID" : wifiProfile->ESSID; - address = - wifiProfile->wifiNetwork.IPaddress == NULL ? - "unsigned" : wifiProfile->wifiNetwork.IPaddress; - state = wifiProfile->state; - //TODO: is there a case when security is NULL? - - json_object *int1 = json_object_new_int(number); - json_object *int2 = json_object_new_int(strength); - json_object *jstring1 = json_object_new_string(essid); - json_object *jstring2 = json_object_new_string(security); - json_object *jstring3 = json_object_new_string(address); - json_object *jstring4 = json_object_new_string(state); - - json_object *jresp = json_object_new_object(); - json_object_object_add(jresp, "Number", int1); - json_object_object_add(jresp, "Strength", int2); - json_object_object_add(jresp, "ESSID", jstring1); - json_object_object_add(jresp, "Security", jstring2); - json_object_object_add(jresp, "IPAddress", jstring3); - json_object_object_add(jresp, "State", jstring4); - - DEBUG(afbitf, "The object json: %s\n", json_object_to_json_string(jresp)); - - /*input each scan result into my_array*/ - json_object_array_add(my_array, jresp); - number += 1; - - //set the HMI icon according to strength, only if "ready" or "online" - - int error = 0; - struct wifiStatus *status; - - status = g_try_malloc0(sizeof(struct wifiStatus)); - error = wifi_state(status); /*get current status of power and connection*/ - if (!error) { - - if (status->connected == 1) { - - if ((strcmp(state, "ready") == 0) - || ((strcmp(state, "online") == 0))) { - - if (strength < 30) - setHMIStatus(BAR_1); - else if (strength < 50) - setHMIStatus(BAR_2); - else if (strength < 70) - setHMIStatus(BAR_3); - else - setHMIStatus(BAR_FULL); - } - } else - setHMIStatus(BAR_NO); - } - - } - while (list != NULL) { - holdMe = list->next; - g_free(list); - list = holdMe; - } - afb_req_success(request, my_array, "Wi-Fi - Scan Result is Displayed"); - } else - afb_req_fail(request, "failed", error->message); -} - -/** - * \brief Connects to a specific network. - * - * \param[in] request Number of network to connect to. - * - * \return result of the request, either "success" or "failed" with description of error - * - * Specify number of network to connect to obtained by scan_result(). - * User should first subscribe for the event 'passkey', if passkey - * is needed for connection this event is pushed. - * - */ -static void connect(struct afb_req request) { - - struct wifi_profile_info *wifiProfileToConnect = NULL; - - const char *network; - int network_index = 0; - GError *error = NULL; - GSList *item = NULL; - - /* retrieves the argument, expects the network number */ - network = afb_req_value(request, "network"); - - if (network == NULL) - //TODO:better error message - afb_req_fail(request, "failed", - "specify a network number to connect to"); - - else { - network_index = atoi(network); - NOTICE(afbitf,"Joining network number %d\n", network_index); - - - } - - //get information about desired network - item = g_slist_nth_data(wifi_list, network_index); - - if (item == NULL) { - //Index starts from 1 - ERROR(afbitf, "Network with number %d not found.\n", network_index + 1); - //TODO:better error message - afb_req_fail(request, "failed", "bad arguments"); - } - - else { - wifiProfileToConnect = (struct wifi_profile_info *) item; - INFO(afbitf, "Name: %s, strength: %d, %s\n", wifiProfileToConnect->ESSID, - wifiProfileToConnect->Strength, - wifiProfileToConnect->NetworkPath); - } - error = do_connectNetwork(wifiProfileToConnect->NetworkPath); - - if (error == NULL) - afb_req_success(request, NULL, NULL); - - else if (passkey_not_correct_flag) { - need_passkey_flag = 0; - passkey_not_correct_flag = 0; - afb_req_fail(request, "passkey-incorrect", NULL); - } else if (need_passkey_flag) { - need_passkey_flag = 0; - afb_req_fail(request, "need-passkey", NULL); - - } else - afb_req_fail(request, "failed", error->message); -} - -/** - * \brief Disconnects from a network. - * - * \param[in] request number of network to disconnect from - * - * \return result of the request, either "success" or "failed" with description of error - * - * Specify number of network to disconnect from obtained by scan_result(). - */ -static void disconnect(struct afb_req request) { - - struct wifi_profile_info *wifiProfileToConnect = NULL; - - const char *network; - int network_index = 0; - GError *error = NULL; - GSList *item = NULL; - - /* retrieves the argument, expects the network number */ - network = afb_req_value(request, "network"); - - if (network == NULL) - //TODO:better error message - afb_req_fail(request, "failed", - "specify a network number to disconnect from"); - - else { - network_index = atoi(network); - NOTICE(afbitf, "Joining network number %d\n", network_index); - - } - - //get information about desired network - item = g_slist_nth_data(wifi_list, network_index); - - if (item == NULL) { - //Index starts from 1 - ERROR(afbitf,"Network with number %d not found.\n", network_index + 1); - //TODO:better error message - afb_req_fail(request, "failed", "bad arguments"); - } - - else { - wifiProfileToConnect = (struct wifi_profile_info *) item; - INFO(afbitf, "Name: %s, strength: %d, %s\n", wifiProfileToConnect->ESSID, - wifiProfileToConnect->Strength, - wifiProfileToConnect->NetworkPath); - } - error = do_disconnectNetwork(wifiProfileToConnect->NetworkPath); - - if (error == NULL) - afb_req_success(request, NULL, NULL); - else - afb_req_fail(request, "failed", error->message); -} - -/** - * \brief Return current status of a connection. - * - * \param[in] request no specific data needed - * - * \return result of the request, either "success" with status or "failed" with description of error - */ -static void status(struct afb_req request) { - int error = 0; - wifi_list = NULL; - struct wifiStatus *status; - json_object *jresp = json_object_new_object(); - - status = g_try_malloc0(sizeof(struct wifiStatus)); - error = wifi_state(status); /*get current status of power and connection*/ - if (!error) { - if (status->state == 0) {/*Wi-Fi is OFF*/ - json_object_object_add(jresp, "Power", - json_object_new_string("OFF")); - //json_object_object_add(jresp, "Connection", json_object_new_string("Disconnected")); - DEBUG(afbitf, "Wi-Fi OFF\n"); - } else {/*Wi-Fi is ON*/ - json_object_object_add(jresp, "Power", - json_object_new_string("ON")); - if (status->connected == 0) {/*disconnected*/ - json_object_object_add(jresp, "Connection", - json_object_new_string("Disconnected")); - DEBUG(afbitf, "Wi-Fi ON - Disconnected \n"); - } else {/*Connected*/ - json_object_object_add(jresp, "Connection", - json_object_new_string("Connected")); - DEBUG(afbitf, "Wi-Fi ON - Connected \n"); - } - } - afb_req_success(request, jresp, "Wi-Fi - Connection Status Checked"); - } else { - afb_req_fail(request, "failed", "Wi-Fi - Connection Status unknown"); - } -} - -static void reconnect() { - /*TBD*/ -} - - - -/** - * \internal - * \brief Helper functions that actually delete the tag. - * - * \param[in] tag tag to delete - * - * \return result of the request, either "success" or "failed" with description of error - */ -static int event_del(const char *tag) -{ - struct event *e, **p; - - /* check exists */ - e = event_get(tag); - if (!e) return -1; - - /* unlink */ - p = &events; - while(*p != e) p = &(*p)->next; - *p = e->next; - - /* destroys */ - afb_event_drop(e->event); - free(e); - return 0; -} - -/** - * \internal - * \brief Helper functions that actually creates event of the tag. - * - * \param[in] tag tag to add - * \param[in] name name to add - * - * \return result of the request, either "success" or "failed" with description of error - */ -static int event_add(const char *tag, const char *name) -{ - struct event *e; - - /* check valid tag */ - e = event_get(tag); - if (e) return -1; - - /* creation */ - e = malloc(strlen(tag) + sizeof *e); - if (!e) return -1; - strcpy(e->tag, tag); - - /* make the event */ - e->event = afb_daemon_make_event(afbitf->daemon, name); - if (!e->event.closure) { free(e); return -1; } - - /* link */ - e->next = events; - events = e; - return 0; -} - -/** - * \brief Creates event of the tag. - * - * \param[in] request tag and name of the event - * - * \return result of the request, either "success" or "failed" with description of error - */ -static void eventadd (struct afb_req request) -{ - const char *tag = afb_req_value(request, "tag"); - const char *name = afb_req_value(request, "name"); - - json_object *query = afb_req_json(request); - - if (tag == NULL || name == NULL) - afb_req_fail(request, "failed", "bad arguments"); - else if (0 != event_add(tag, name)) - afb_req_fail(request, "failed", "creation error"); - else - afb_req_success(request, NULL, NULL); -} - -/** - * \brief Deletes the event of tag. - * - * \param[in] request tag to delete - * - * \return result of the request, either "success" or "failed" with description of error - */ -static void eventdel (struct afb_req request) -{ - const char *tag = afb_req_value(request, "tag"); - - if (tag == NULL) - afb_req_fail(request, "failed", "bad arguments"); - else if (0 != event_del(tag)) - afb_req_fail(request, "failed", "deletion error"); - else - afb_req_success(request, NULL, NULL); -} - - -/** - * \internal - * \brief Helper functions to subscribe for the event of tag. - * - * \param[in] request tag to subscribe for - * - * \return result of the request, either "success" or "failed" with description of error - */ -static int event_subscribe(struct afb_req request, const char *tag) -{ - struct event *e; - e = event_get(tag); - return e ? afb_req_subscribe(request, e->event) : -1; -} - -/** - * \internal - * \brief Helper functions to unsubscribe for the event of tag. - * - * \param[in] request tag to unsubscribe for - * - * \return result of the request, either "success" or "failed" with description of error - */ -static int event_unsubscribe(struct afb_req request, const char *tag) -{ - struct event *e; - e = event_get(tag); - return e ? afb_req_unsubscribe(request, e->event) : -1; -} - - -/** - * \brief Subscribes for the event of tag. - * - * \param[in] request tag to subscribe for - * - * \return result of the request, either "success" or "failed" with description of error - */ -static void eventsub (struct afb_req request) -{ - const char *tag = afb_req_value(request, "tag"); - - if (tag == NULL) - afb_req_fail(request, "failed", "bad arguments"); - else if (0 != event_subscribe(request, tag)) - afb_req_fail(request, "failed", "subscription error"); - else - afb_req_success(request, NULL, NULL); -} - - -/** - * \brief Unsubscribes for the event of tag. - * - * \param[in] request tag to unsubscribe for - * - * \return result of the request, either "success" or "failed" with description of error - */ -static void eventunsub (struct afb_req request) -{ - const char *tag = afb_req_value(request, "tag"); - - if (tag == NULL) - afb_req_fail(request, "failed", "bad arguments"); - else if (0 != event_unsubscribe(request, tag)) - afb_req_fail(request, "failed", "unsubscription error"); - else - afb_req_success(request, NULL, NULL); -} - - -/* - * array of the verbs exported to afb-daemon - */ -static const struct afb_verb_desc_v1 binding_verbs[] = { -/* VERB'S NAME SESSION MANAGEMENT FUNCTION TO CALL SHORT DESCRIPTION */ -{ .name = "activate", .session = AFB_SESSION_NONE, .callback = activate, .info = "Activate Wi-Fi" }, -{ .name = "deactivate", .session = AFB_SESSION_NONE, .callback = deactivate, .info ="Deactivate Wi-Fi" }, -{ .name = "scan", .session = AFB_SESSION_NONE, .callback = scan, .info ="Scanning Wi-Fi" }, -{ .name = "scan_result", .session = AFB_SESSION_NONE, .callback = scan_result, .info = "Get scan result Wi-Fi" }, -{ .name = "connect", .session = AFB_SESSION_NONE, .callback = connect, .info ="Connecting to Access Point" }, -{ .name = "status", .session = AFB_SESSION_NONE, .callback = status, .info ="Check connection status" }, -{ .name = "disconnect", .session = AFB_SESSION_NONE, .callback = disconnect, .info ="Disconnecting connection" }, -{ .name = "reconnect", .session = AFB_SESSION_NONE, .callback = reconnect, .info ="Reconnecting to Access Point" }, -{ .name = "insertpasskey",.session = AFB_SESSION_NONE, .callback = insertpasskey, .info ="inputs the passkey after it has been requsted"}, -{ .name = "eventadd", .session = AFB_SESSION_NONE, .callback = eventadd, .info ="adds the event of 'name' for the 'tag'"}, -{ .name = "eventsub", .session = AFB_SESSION_NONE, .callback = eventsub, .info ="unsubscribes to the event of 'tag'"}, -{ .name = "eventpush", .session = AFB_SESSION_NONE, .callback = eventpush, .info ="pushes the event of 'tag' with the 'data'"}, -{ .name = "eventunsub", .session = AFB_SESSION_NONE, .callback = eventunsub, .info ="unsubscribes to the event of 'tag'"}, -{ .name = "eventdel", .session = AFB_SESSION_NONE, .callback = eventdel, .info ="deletes the event of 'tag'"}, - -{ .name = NULL } /* marker for end of the array */ -}; - -/* - * description of the binding for afb-daemon - */ -static const struct afb_binding binding_description = { -/* description conforms to VERSION 1 */ -.type = AFB_BINDING_VERSION_1, .v1 = { /* fills the v1 field of the union when AFB_BINDING_VERSION_1 */ -.prefix = "wifi-manager", /* the API name (or binding name or prefix) */ -.info = "wifi API", /* short description of of the binding */ -.verbs = binding_verbs /* the array describing the verbs of the API */ -} }; - -/* - * activation function for registering the binding called by afb-daemon - */ -const struct afb_binding *afbBindingV1Register( - const struct afb_binding_interface *itf) { - afbitf = itf; // records the interface for accessing afb-daemon - return &binding_description; // returns the description of the binding -} - diff --git a/binding-wifi/wifi-api.h b/binding-wifi/wifi-api.h deleted file mode 100644 index 429211b..0000000 --- a/binding-wifi/wifi-api.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2016 ALPS ELECTRIC CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#ifndef WIFI_API_H -#define WIFI_API_H - -/* global plugin handle, should store everything we may need */ -typedef struct { - int devCount; -} pluginHandleT; - -/* private client context [will be destroyed when client leaves] */ -typedef struct { - unsigned char activate; - unsigned char connected; -} wifiCtxHandleT; - - -struct scan_list_info { - int number; - char *SSID; - char *Security; - int Strength; -}; - -#endif /* AUDIO_API_H */ diff --git a/binding-wifi/wifi-connman.c b/binding-wifi/wifi-connman.c deleted file mode 100644 index 924898e..0000000 --- a/binding-wifi/wifi-connman.c +++ /dev/null @@ -1,396 +0,0 @@ -/* Copyright 2016 ALPS ELECTRIC CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <glib.h> -//#include <dbus/dbus.h> -#include <gio/gio.h> -#include <glib-object.h> - -#include "wifi-api.h" -#include "wifi-connman.h" - -static __thread struct security_profile Security = { NULL, NULL, NULL, NULL, 0, - 0 }; - -int extract_values(GVariantIter *content, struct wifi_profile_info* wifiProfile) { - GVariant *var = NULL; - GVariant *subvar = NULL; - GVariantIter *array; - const gchar *key = NULL; - const gchar *subkey = NULL; - const gchar *value_char = NULL; - GVariantIter *content_sub; - unsigned int value_int; - gsize length; - - while (g_variant_iter_loop(content, "{sv}", &key, &var)) { - if (g_strcmp0(key, "Name") == 0) { - value_char = g_variant_get_string(var, &length); - wifiProfile->ESSID = (char *) value_char; - } else if (g_strcmp0(key, "Security") == 0) { - g_variant_get(var, "as", &content_sub); - while (g_variant_iter_loop(content_sub, "s", &value_char)) { - if (g_strcmp0(value_char, "none") == 0) - wifiProfile->Security.sec_type = "Open"; - else if (g_strcmp0(value_char, "wep") == 0) - wifiProfile->Security.sec_type = "WEP"; - else if (g_strcmp0(value_char, "psk") == 0) - wifiProfile->Security.sec_type = "WPA-PSK"; - else if (g_strcmp0(value_char, "ieee8021x") == 0) - wifiProfile->Security.sec_type = "ieee8021x"; - else if (g_strcmp0(value_char, "wpa") == 0) - wifiProfile->Security.sec_type = "WPA-PSK"; - else if (g_strcmp0(value_char, "rsn") == 0) - wifiProfile->Security.sec_type = "WPA2-PSK"; - else if (g_strcmp0(value_char, "wps") == 0) - wifiProfile->Security.wps_support = 1; - else - Security.sec_type = "Open"; - } - } else if (g_strcmp0(key, "Strength") == 0) { - value_int = (unsigned int) g_variant_get_byte(var); - wifiProfile->Strength = value_int; - } else if (g_strcmp0(key, "State") == 0) { - value_char = g_variant_get_string(var, &length); - wifiProfile->state = (char *) value_char; - } else if (g_strcmp0(key, "IPv4") == 0) { - g_variant_get(var, "a{sv}", &array); - while (g_variant_iter_loop(array, "{sv}", &subkey, &subvar)) { - if (g_strcmp0(subkey, "Method") == 0) { - value_char = g_variant_get_string(subvar, &length); - if (g_strcmp0(value_char, "dhcp") == 0) - wifiProfile->wifiNetwork.method = "dhcp"; - else if (g_strcmp0(value_char, "manual") == 0) - wifiProfile->wifiNetwork.method = "manual"; - else if (g_strcmp0(value_char, "fixed") == 0) - wifiProfile->wifiNetwork.method = "fix"; - else if (g_strcmp0(value_char, "off") == 0) - wifiProfile->wifiNetwork.method = "off"; - } else if (g_strcmp0(subkey, "Address") == 0) { - value_char = g_variant_get_string(subvar, &length); - wifiProfile->wifiNetwork.IPaddress = (char *) value_char; - } else if (g_strcmp0(subkey, "Netmask") == 0) { - value_char = g_variant_get_string(subvar, &length); - wifiProfile->wifiNetwork.netmask = (char *) value_char; - } - } - } - } - return 0; -} - -int wifi_state(struct wifiStatus *status) { - GError *error = NULL; - GVariant *message = NULL; - GVariantIter *array; - GDBusConnection *connection; - GVariant *var = NULL; - const gchar *key = NULL; - gboolean value_bool; - - connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - if (connection == NULL) { - ERROR(afbitf,"Cannot connect to D-Bus, %s", error->message); - return -1; - } - message = g_dbus_connection_call_sync(connection, CONNMAN_SERVICE, - CONNMAN_TECHNOLOGY_PATH, CONNMAN_TECHNOLOGY_INTERFACE, "GetProperties", - NULL, NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - if (message == NULL) { - ERROR(afbitf,"Error %s while calling GetProperties method", error->message); - return -1; - } - g_variant_get(message, "(a{sv})", &array); - while (g_variant_iter_loop(array, "{sv}", &key, &var)) { - if (g_strcmp0(key, "Powered") == 0) { - value_bool = g_variant_get_boolean(var); - if (value_bool) - status->state = 1; - else - status->state = 0; - } else if (g_strcmp0(key, "Connected") == 0) { - value_bool = g_variant_get_boolean(var); - if (value_bool) - status->connected = 1; - else - status->connected = 0; - } - } - g_variant_iter_free(array); - g_variant_unref(message); - - return 0; -} - -GError* do_wifiActivate() { - GVariant *params = NULL; - params = g_variant_new("(sv)", "Powered", g_variant_new_boolean(TRUE)); - GDBusConnection *connection; - GError *error = NULL; - - connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - - if (connection == NULL) { - ERROR(afbitf,"Cannot connect to D-Bus, %s", error->message); - return error; - } - - //create the agent to handle security - error = create_agent(connection); - - if (error) - //This is fatal error, without agent secured networks can not be handled - return error; - - g_dbus_connection_call(connection, CONNMAN_SERVICE, - CONNMAN_WIFI_TECHNOLOGY_PREFIX, CONNMAN_TECHNOLOGY_INTERFACE, "SetProperty", - params, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, &error); - - if (error) { - ERROR(afbitf,"Error %s while calling SetProperty method", error->message); - - return error; - } - - else { - NOTICE(afbitf,"Power ON succeeded\n"); - return NULL; - } - -} - -GError* do_wifiDeactivate() { - GVariant *params = NULL; - params = g_variant_new("(sv)", "Powered", g_variant_new_boolean(FALSE)); - GDBusConnection *connection; - GError *error = NULL; - - /*connection = gdbus_conn->connection;*/ - connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - if (connection == NULL) { - ERROR(afbitf,"Cannot connect to D-Bus, %s", error->message); - return error; - } - - //create the agent to handle security - error = stop_agent(connection); - - if (error) { - WARNING(afbitf, "Error while unregistering the agent, ignoring."); - - } - - g_dbus_connection_call(connection, CONNMAN_SERVICE, - CONNMAN_WIFI_TECHNOLOGY_PREFIX, CONNMAN_TECHNOLOGY_INTERFACE, "SetProperty", - params, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, &error); - - if (error) { - ERROR(afbitf,"Error %s while calling SetProperty method", error->message); - - return error; - } - - else { - NOTICE(afbitf, "Power OFF succeeded\n"); - return NULL; - } -} - -GError* do_wifiScan() { - GDBusConnection *connection; - GError *error = NULL; - - /*connection = gdbus_conn->connection;*/ - connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - if (connection == NULL) { - ERROR(afbitf,"Cannot connect to D-Bus, %s", error->message); - return error; - } - - g_dbus_connection_call(connection, CONNMAN_SERVICE, - CONNMAN_WIFI_TECHNOLOGY_PREFIX, CONNMAN_TECHNOLOGY_INTERFACE, "Scan", NULL, - NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_REPLY_TIMEOUT, NULL, NULL, &error); - if (error) { - ERROR(afbitf,"Error %s while calling Scan method", error->message); - - return error; - } - - else { - INFO(afbitf, "Scan succeeded\n"); - return NULL; - } -} - -GError* do_displayScan(GSList **wifi_list) { - GError *error = NULL; - GVariant *message = NULL; - GVariantIter *array; - gchar *object; - GVariantIter *content = NULL; - GDBusConnection *connection; - struct wifi_profile_info *wifiProfile = NULL; - - /*connection = gdbus_conn->connection;*/ - connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - if (connection == NULL) { - ERROR(afbitf,"Cannot connect to D-Bus, %s", error->message); - return error; - } - message = g_dbus_connection_call_sync(connection, CONNMAN_SERVICE, - CONNMAN_MANAGER_PATH, CONNMAN_MANAGER_INTERFACE, "GetServices", NULL, NULL, - G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - if (message == NULL) { - ERROR(afbitf,"Error %s while calling GetServices method", error->message); - return error; - } - g_variant_get(message, "(a(oa{sv}))", &array); - while (g_variant_iter_loop(array, "(oa{sv})", &object, &content)) { - if (g_str_has_prefix(object, - CONNMAN_WIFI_SERVICE_PROFILE_PREFIX) == TRUE) { - wifiProfile = g_try_malloc0(sizeof(struct wifi_profile_info)); - - extract_values(content, wifiProfile); - wifiProfile->NetworkPath = g_try_malloc0(strlen(object)); - strcpy(wifiProfile->NetworkPath, object); - DEBUG(afbitf, - "SSID= %s, security= %s, path= %s, Strength= %d, wps support= %d\n", - wifiProfile->ESSID, wifiProfile->Security.sec_type, - wifiProfile->NetworkPath, wifiProfile->Strength, - wifiProfile->Security.wps_support); - DEBUG(afbitf, "method= %s, ip address= %s, netmask= %s\n", - wifiProfile->wifiNetwork.method, - wifiProfile->wifiNetwork.IPaddress, - wifiProfile->wifiNetwork.netmask); - *wifi_list = g_slist_append(*wifi_list, - (struct wifi_profile_info *) wifiProfile); - } - } - g_variant_iter_free(array); - - return NULL; -} - -GError* do_connectNetwork(gchar *networkPath) { - - NOTICE(afbitf, "Connecting to: %s\n", networkPath); - - GVariant *message = NULL; - GError *error = NULL; - GDBusConnection *connection; - - connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - - message = g_dbus_connection_call_sync(connection, CONNMAN_SERVICE, - networkPath, CONNMAN_SERVICE_INTERFACE, "Connect", NULL, NULL, - G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT_SHORT, NULL, &error); - - //TODO: do we need retunrn value in message - - if (error) { - ERROR(afbitf,"Error %s while calling Connect method", error->message); - return error; - } else { - INFO(afbitf,"Connection succeeded\n"); - return NULL; - } - -} - -GError* do_disconnectNetwork(gchar *networkPath) { - - NOTICE(afbitf, "Connecting to: %s\n", networkPath); - - GVariant *message = NULL; - GError *error = NULL; - GDBusConnection *connection; - - connection = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); - - if (connection == NULL) { - ERROR(afbitf,"Cannot connect to D-Bus, %s", error->message); - return error; - } - - message = g_dbus_connection_call_sync(connection, CONNMAN_SERVICE, - networkPath, CONNMAN_SERVICE_INTERFACE, "Disconnect", NULL, NULL, - G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - //TODO: do we need return value in message - - if (error) { - ERROR(afbitf,"Error %s while calling Disconnect method", error->message); - return error; - } else { - INFO(afbitf,"Disconnection succeeded\n"); - return NULL; - } - -} - -void registerPasskey(gchar *passkey) { - - INFO(afbitf,"Passkey: %s\n", passkey); - sendPasskey(passkey); - - -} - -GError* setHMIStatus(enum wifiStates state) { - - gchar *iconString = NULL; - GDBusConnection *connection; - GVariant *params = NULL; - GVariant *message = NULL; - GError *error = NULL; - - if (state==BAR_NO) iconString = "qrc:/images/Status/HMI_Status_Wifi_NoBars-01.png"; - else if (state==BAR_1) iconString = "qrc:/images/Status/HMI_Status_Wifi_1Bar-01.png"; - else if (state==BAR_2) iconString = "qrc:/images/Status/HMI_Status_Wifi_2Bars-01.png"; - else if (state==BAR_3) iconString = "qrc:/images/Status/HMI_Status_Wifi_3Bars-01.png"; - else if (state==BAR_FULL) iconString = "qrc:/images/Status/HMI_Status_Wifi_Full-01.png"; - - connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error); - - if (connection == NULL) { - ERROR(afbitf,"Cannot connect to D-Bus, %s", error->message); - return error; - } - - params = g_variant_new("(is)", HOMESCREEN_WIFI_ICON_POSITION, iconString); - - message = g_dbus_connection_call_sync(connection, HOMESCREEN_SERVICE, - HOMESCREEN_ICON_PATH, HOMESCREEN_ICON_INTERFACE, "setStatusIcon", params, - NULL, G_DBUS_CALL_FLAGS_NONE, - DBUS_REPLY_TIMEOUT, NULL, &error); - - if (error) { - ERROR(afbitf,"Error %s while setting up the status icon", error->message); - - return error; - } else { - return NULL; - } - -} - diff --git a/binding-wifi/wifi-connman.h b/binding-wifi/wifi-connman.h deleted file mode 100644 index dfc0d5b..0000000 --- a/binding-wifi/wifi-connman.h +++ /dev/null @@ -1,148 +0,0 @@ -/* Copyright 2016 ALPS ELECTRIC CO., LTD. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -#define _GNU_SOURCE - -//#include <dlog.h> -#include <glib.h> -#include <stdlib.h> -#include <gio/gio.h> -#include <glib-object.h> - -#include <afb/afb-binding.h> - -#ifdef __cplusplus -extern "C" { -#endif - -// - - -/* - * the interface to afb-daemon - */ -const struct afb_binding_interface *afbitf; - -/** Maximum Profile Count */ -#define CONNMAN_MAX_BUFLEN 512 - -#define CONNMAN_STATE_STRLEN 16 - -#define CONNMAN_SERVICE "net.connman" -#define CONNMAN_MANAGER_INTERFACE CONNMAN_SERVICE ".Manager" -#define CONNMAN_TECHNOLOGY_INTERFACE CONNMAN_SERVICE ".Technology" -#define CONNMAN_SERVICE_INTERFACE CONNMAN_SERVICE ".Service" -#define CONNMAN_PROFILE_INTERFACE CONNMAN_SERVICE ".Profile" -#define CONNMAN_COUNTER_INTERFACE CONNMAN_SERVICE ".Counter" -#define CONNMAN_ERROR_INTERFACE CONNMAN_SERVICE ".Error" -#define CONNMAN_AGENT_INTERFACE CONNMAN_SERVICE ".Agent" - -#define CONNMAN_MANAGER_PATH "/" -#define CONNMAN_PATH "/net/connman" -#define CONNMAN_TECHNOLOGY_PATH "/net/connman/technology/wifi" - -/** ConnMan technology and profile prefixes for ConnMan 0.78 */ - -#define CONNMAN_WIFI_TECHNOLOGY_PREFIX CONNMAN_PATH "/technology/wifi" -#define CONNMAN_WIFI_SERVICE_PROFILE_PREFIX CONNMAN_PATH "/service/wifi_" - -#define WIFI_ESSID_LEN 128 -#define WIFI_MAX_WPSPIN_LEN 8 -#define WIFI_BSSID_LEN 17 -#define WIFI_MAX_PSK_PASSPHRASE_LEN 65 -#define WIFI_MAX_WEP_KEY_LEN 26 - -#define HOMESCREEN_SERVICE "org.agl.homescreen" -#define HOMESCREEN_ICON_INTERFACE "org.agl.statusbar" -#define HOMESCREEN_ICON_PATH "/StatusBar" -#define HOMESCREEN_WIFI_ICON_POSITION 0 - - -#define AGENT_PATH "/net/connman/Agent" -#define AGENT_SERVICE "org.agent" - -#define DBUS_REPLY_TIMEOUT (120 * 1000) -#define DBUS_REPLY_TIMEOUT_SHORT (10 * 1000) - - -struct gdbus_connection_data_s{ - GDBusConnection *connection; - int conn_ref_count; - GCancellable *cancellable; - void *handle_libnetwork; -}; - - -struct wifiStatus { - unsigned int state; - unsigned int connected; -}; - -struct security_profile{ - char *sec_type; - char *enc_type; - char *wepKey; - char *pskKey; - unsigned int PassphraseRequired; - unsigned int wps_support; -}; - -struct wifi_net{ - char *method; - char *IPaddress; - char *netmask; -}; - -struct wifi_profile_info{ - char *ESSID; - char *NetworkPath; - char *state; - unsigned int Strength; - struct security_profile Security; - struct wifi_net wifiNetwork; -}; - -enum wifiStates {BAR_NO, BAR_1, BAR_2, BAR_3, BAR_FULL}; - -typedef void(*callback)(int number, const char* asciidata); -void register_callbackSecurity(callback ptr); -void register_callbackWiFiList(callback ptr); - - - -int extract_values(GVariantIter *content, struct wifi_profile_info* wifiProfile); -int wifi_state(struct wifiStatus *status); -GError* do_wifiActivate(); -GError* do_wifiDeactivate(); -GError* do_wifiScan(); -GError* do_displayScan(GSList **wifi_list); -GError* do_connectNetwork(gchar *object); -GError* do_disconnectNetwork(gchar *object); - -GError* create_agent(GDBusConnection *connection); -GError* stop_agent(GDBusConnection *connection); - -GError* setHMIStatus(enum wifiStates); - -void registerPasskey(gchar *object); -GError* sendPasskey(gchar *object); - -GError* do_initialize(); -GError* do_initialize(); - - - - - |