* Local Functions Declaration
*****************************************************************************/
static int __net_extract_wifi_info(GVariantIter *array, net_profile_info_t *ProfInfo);
-static int __net_extract_service_info(network_info_t *network_info,
- const char *ProfileName, GVariantIter *iter, net_profile_info_t *ProfInfo);
static int __net_extract_services(network_info_t *network_info,
GVariantIter *message, net_device_t device_type,
net_profile_info_t **profile_info, int *profile_count);
return Error;
}
-static int __net_extract_service_info(network_info_t *network_info,
+int _net_extract_service_info(network_info_t *network_info,
const char *ProfileName, GVariantIter *iter,
net_profile_info_t *ProfInfo)
{
g_variant_get(message, "(a(oa{sv}))", &iter);
while (g_variant_iter_loop(iter, "(oa{sv})", &path, &service)) {
if (g_strcmp0(ProfileName, path) == 0) {
- Error = __net_extract_service_info(network_info,
+ Error = _net_extract_service_info(network_info,
ProfileName, service, ProfInfo);
g_variant_iter_free(service);
g_free(path);
}
g_variant_get(message, "(a{sv})", &service);
- Error = __net_extract_service_info(network_info, ProfileName,
+ Error = _net_extract_service_info(network_info, ProfileName,
service, ProfInfo);
g_variant_iter_free(service);
g_variant_unref(message);
__NETWORK_FUNC_EXIT__;
}
-static int string2state(const char *state)
-{
- if (g_strcmp0(state, "idle") == 0)
- return NET_STATE_TYPE_IDLE;
- else if (g_strcmp0(state, "association") == 0)
- return NET_STATE_TYPE_ASSOCIATION;
- else if (g_strcmp0(state, "configuration") == 0)
- return NET_STATE_TYPE_CONFIGURATION;
- else if (g_strcmp0(state, "ready") == 0)
- return NET_STATE_TYPE_READY;
- else if (g_strcmp0(state, "online") == 0)
- return NET_STATE_TYPE_ONLINE;
- else if (g_strcmp0(state, "disconnect") == 0)
- return NET_STATE_TYPE_DISCONNECT;
- else if (g_strcmp0(state, "failure") == 0)
- return NET_STATE_TYPE_FAILURE;
-
- return NET_STATE_TYPE_UNKNOWN;
-}
-
static int __net_handle_service_state_changed(network_info_t *network_info,
- const gchar *sig_path, const char *key, const char *state)
+ const gchar *sig_path, net_state_type_t state, net_profile_info_t *prof_info)
{
net_err_t Error = NET_ERR_NONE;
net_state_type_t old_state, new_state;
return Error;
}
- NETWORK_LOG(NETWORK_LOW, "[%s] %s", state, sig_path);
+ NETWORK_LOG(NETWORK_LOW, "[%d] %s", state, sig_path);
if (device_type == NET_DEVICE_WIFI && net_wifi_state == WIFI_OFF) {
NETWORK_LOG(NETWORK_LOW, "Wi-Fi is off");
}
old_state = network_info->state_table[device_type];
- new_state = string2state(state);
+ new_state = state;
NETWORK_LOG(NETWORK_LOW, "old state[%d] new state[%d]", old_state, new_state);
NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_OPEN_IND");
}
- net_profile_info_t prof_info;
- if ((Error = net_get_profile_info(network_info, sig_path, &prof_info)) != NET_ERR_NONE) {
- NETWORK_LOG(NETWORK_ERROR, "net_get_profile_info() failed [%s]",
- _net_print_error(Error));
-
+ if (prof_info == NULL) {
event_data->Datalength = 0;
event_data->Data = NULL;
} else {
event_data->Datalength = sizeof(net_profile_info_t);
- event_data->Data = &prof_info;
+ event_data->Data = prof_info;
}
event_data->Error = Error;
{
__NETWORK_FUNC_ENTER__;
- const char *key = NULL;
- const char *value = NULL;
- GVariant *var;
network_info_t *network_info = (network_info_t *)user_data;
if (g_strcmp0(sig, SIGNAL_PROPERTY_CHANGED) == 0) {
- g_variant_get(param, "(sv)", &key, &var);
+ const char *key = NULL;
+ const char *value = NULL;
+ GVariant *var;
- if (g_strcmp0(key, "State") == 0) {
- g_variant_get(var, "s", &value);
+ g_variant_get(param, "(sv)", &key, &var);
- __net_handle_service_state_changed(network_info, path, key, value);
- } else if (g_strcmp0(key, "Error") == 0) {
+ if (g_strcmp0(key, "Error") == 0) {
g_variant_get(var, "s", &value);
__net_handle_service_set_error(key, value);
g_free((gchar *)key);
if (NULL != var)
g_variant_unref(var);
+
+ } else if (g_strcmp0(sig, SIGNAL_STATE_CHANGED_PROPERTIES) == 0) {
+ net_profile_info_t prof_info;
+ GVariantIter *iter = NULL;
+ const gchar *object_path = NULL;
+
+ g_variant_get(param, "((&oa{sv}))", &object_path, &iter);
+
+ _net_extract_service_info(network_info, object_path, iter, &prof_info);
+
+ __net_handle_service_state_changed(network_info, object_path,
+ prof_info.ProfileState, &prof_info);
+
+ g_variant_iter_free(iter);
}
__NETWORK_FUNC_EXIT__;
network_info,
CONNMAN_SERVICE,
CONNMAN_SERVICE_INTERFACE,
- SIGNAL_PROPERTY_CHANGED,
+ SIGNAL_STATE_CHANGED_PROPERTIES,
+ NULL,
NULL,
- "State",
__net_connman_service_signal_filter);
/* Create connman mesh state connection */