2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #endif /* __cplusplus */
24 /*****************************************************************************
26 *****************************************************************************/
34 #include <dbus/dbus.h>
35 #include <dbus/dbus-glib-lowlevel.h>
37 /*****************************************************************************
39 *****************************************************************************/
41 #include "network-internal.h"
42 #include "network-signal-handler.h"
43 #include "network-dbus-request.h"
45 /*****************************************************************************
47 *****************************************************************************/
50 /*****************************************************************************
51 * Local Functions Declaration
52 *****************************************************************************/
53 static DBusHandlerResult __net_signal_filter
54 (DBusConnection *conn, DBusMessage *msg, void *user_data);
56 static int __net_get_state(DBusMessage *msg, char *state, char *error);
57 static char* __net_get_property(DBusMessage* msg, char** property);
58 static int __net_handle_scan_rsp(DBusMessage* msg);
59 static int __net_handle_wifi_power_rsp(const char *state);
60 static int __net_svc_error_string_to_enum(const char *error);
61 static void __net_handle_svc_failure_ind(const char *profile_name, const char *svc_error);
62 static void __net_handle_state_ind(const char* profile_name, net_state_type_t profile_state);
64 /*****************************************************************************
66 *****************************************************************************/
69 /*****************************************************************************
70 * Extern Global Variables
71 *****************************************************************************/
72 extern network_info_t NetworkInfo;
73 extern network_request_table_t request_table[NETWORK_REQUEST_TYPE_MAX];
75 /*****************************************************************************
76 * Extern Functions Declarations
77 *****************************************************************************/
79 /*****************************************************************************
81 *****************************************************************************/
82 DBusConnection* signal_conn = NULL;
83 static net_state_type_t service_state_table[NET_DEVICE_MAX] = {NET_STATE_TYPE_UNKNOWN,};
85 /*****************************************************************************
86 * Local Functions Definition
87 *****************************************************************************/
89 static int __net_get_state(DBusMessage *msg, char *state, char *error)
91 __NETWORK_FUNC_ENTER__;
93 char *key_name = NULL;
94 char *svc_state = NULL;
95 char *svc_error = NULL;
96 DBusMessageIter iter, sub_iter;
97 int Error = NET_ERR_UNKNOWN;
100 dbus_message_iter_init(msg, &iter);
101 int ArgType = dbus_message_iter_get_arg_type(&iter);
103 if (ArgType != DBUS_TYPE_STRING)
106 dbus_message_iter_get_basic(&iter, &key_name);
107 if (strcmp(key_name, "State") != 0)
110 dbus_message_iter_next(&iter);
111 ArgType = dbus_message_iter_get_arg_type(&iter);
112 if (ArgType != DBUS_TYPE_VARIANT)
115 dbus_message_iter_recurse(&iter, &sub_iter);
116 ArgType = dbus_message_iter_get_arg_type(&sub_iter);
117 if (ArgType != DBUS_TYPE_STRING)
120 dbus_message_iter_get_basic(&sub_iter, &svc_state);
121 snprintf(state, strlen(svc_state) + 1, "%s", svc_state);
122 Error = NET_ERR_NONE;
125 dbus_message_iter_next(&iter);
126 ArgType = dbus_message_iter_get_arg_type(&iter);
127 if (ArgType != DBUS_TYPE_STRING)
130 dbus_message_iter_get_basic(&iter, &key_name);
131 if (strcmp(key_name, "Error") != 0)
134 dbus_message_iter_next(&iter);
135 ArgType = dbus_message_iter_get_arg_type(&iter);
136 if (ArgType != DBUS_TYPE_VARIANT)
139 dbus_message_iter_recurse(&iter, &sub_iter);
140 ArgType = dbus_message_iter_get_arg_type(&sub_iter);
141 if (ArgType != DBUS_TYPE_STRING)
144 dbus_message_iter_get_basic(&sub_iter, &svc_error);
145 snprintf(error, strlen(svc_error) + 1, "%s", svc_error);
148 __NETWORK_FUNC_EXIT__;
152 static char* __net_get_property(DBusMessage* msg, char** property)
154 DBusMessageIter args, variant;
155 char* sigvalue = NULL;
157 __NETWORK_FUNC_ENTER__;
159 if (!dbus_message_iter_init(msg, &args))
161 NETWORK_LOG( NETWORK_LOW, "Message does not have parameters\n");
163 else if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_STRING)
165 NETWORK_LOG( NETWORK_LOW, "Argument is not string\n");
169 dbus_message_iter_get_basic(&args, &sigvalue);
170 dbus_message_iter_next(&args);
171 dbus_message_iter_recurse(&args, &variant);
172 if (dbus_message_iter_get_arg_type(&variant) == DBUS_TYPE_STRING)
173 dbus_message_iter_get_basic(&variant, property);
178 __NETWORK_FUNC_EXIT__;
183 static int __net_handle_scan_rsp(DBusMessage* msg)
185 __NETWORK_FUNC_ENTER__;
187 int boolvalue = FALSE;
188 net_event_info_t event_data = {0,};
190 boolvalue = _net_get_boolean(msg);
191 if(boolvalue == TRUE)
192 event_data.Error = NET_ERR_NONE;
194 event_data.Error = NET_ERR_UNKNOWN;
196 NETWORK_LOG( NETWORK_LOW, "[Manager : ScanCompleted] Got Signal with value [%d]\n", boolvalue);
198 if(request_table[NETWORK_REQUEST_TYPE_SCAN].flag == TRUE)
200 memset(&request_table[NETWORK_REQUEST_TYPE_SCAN], 0, sizeof(network_request_table_t));
202 event_data.Event = NET_EVENT_WIFI_SCAN_RSP;
203 event_data.Datalength = 0;
204 event_data.Data = NULL;
205 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_WIFI_SCAN_RSP\n");
206 _net_client_callback(&event_data);
210 event_data.Event = NET_EVENT_WIFI_SCAN_IND;
211 event_data.Datalength = 0;
212 event_data.Data = NULL;
213 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_WIFI_SCAN_IND\n");
214 _net_client_callback(&event_data);
217 __NETWORK_FUNC_EXIT__;
221 static int __net_handle_wifi_power_rsp(const char *state)
223 __NETWORK_FUNC_ENTER__;
225 int wifi_state_flag = 0;
226 net_event_info_t event_data = {0,};
227 int hotspot_state = 0;
229 vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &hotspot_state);
230 if (hotspot_state & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI) {
231 __NETWORK_FUNC_EXIT__;
235 if (strcmp(state, "offline") == 0 && NetworkInfo.wifi_state != WIFI_OFF) {
236 NetworkInfo.wifi_state = WIFI_OFF;
238 event_data.Error = NET_ERR_NONE;
240 if(request_table[NETWORK_REQUEST_TYPE_SCAN].flag == TRUE)
241 memset(&request_table[NETWORK_REQUEST_TYPE_SCAN],
242 0, sizeof(network_request_table_t));
244 } else if (strcmp(state, "enabled") == 0 && NetworkInfo.wifi_state != WIFI_ON) {
245 NetworkInfo.wifi_state = WIFI_ON;
247 event_data.Error = NET_ERR_NONE;
248 usleep(300000); /* This will be removed after connman upgrade */
251 if (wifi_state_flag != 0) {
252 if (request_table[NETWORK_REQUEST_TYPE_WIFI_POWER].flag == TRUE) {
253 memset(&request_table[NETWORK_REQUEST_TYPE_WIFI_POWER],
254 0, sizeof(network_request_table_t));
256 event_data.Event = NET_EVENT_WIFI_POWER_RSP;
257 NETWORK_LOG(NETWORK_LOW,
258 "Sending NET_EVENT_WIFI_POWER_RSP wifi state : %d\n",
259 NetworkInfo.wifi_state);
261 event_data.Event = NET_EVENT_WIFI_POWER_IND;
262 NETWORK_LOG(NETWORK_LOW,
263 "Sending NET_EVENT_WIFI_POWER_IND wifi state : %d\n",
264 NetworkInfo.wifi_state);
267 event_data.Datalength = sizeof(net_wifi_state_t);
268 event_data.Data = &(NetworkInfo.wifi_state);
269 _net_client_callback(&event_data);
272 __NETWORK_FUNC_EXIT__;
276 static int __net_svc_error_string_to_enum(const char *error)
278 if (strcmp(error, "out-of-range") == 0)
279 return NET_ERR_CONNECTION_OUT_OF_RANGE;
280 else if(strcmp(error, "pin-missing") == 0)
281 return NET_ERR_CONNECTION_PIN_MISSING;
282 else if(strcmp(error, "dhcp-failed") == 0)
283 return NET_ERR_CONNECTION_DHCP_FAILED;
284 else if(strcmp(error, "connect-failed") == 0)
285 return NET_ERR_CONNECTION_CONNECT_FAILED;
286 else if(strcmp(error, "login-failed") == 0)
287 return NET_ERR_CONNECTION_LOGIN_FAILED;
288 else if(strcmp(error, "auth-failed") == 0)
289 return NET_ERR_CONNECTION_AUTH_FAILED;
290 else if(strcmp(error, "invalid-key") == 0)
291 return NET_ERR_CONNECTION_INVALID_KEY;
293 return NET_ERR_UNKNOWN;
296 static void __net_handle_svc_failure_ind(const char *profile_name, const char *svc_error)
298 __NETWORK_FUNC_ENTER__;
300 net_event_info_t event_data = {0,};
301 char event_string[64] = {0,};
303 char *svc_name1 = request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName;
304 char *svc_name2 = request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS].ProfileName;
306 if (request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE &&
307 strcmp(profile_name, svc_name1) == 0) {
309 memset(&request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION], 0,
310 sizeof(network_request_table_t));
312 event_data.Event = NET_EVENT_OPEN_RSP;
313 g_strlcpy(event_string, "Sending NET_EVENT_OPEN_RSP", 64);
314 } else if (request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS].flag == TRUE &&
315 strcmp(profile_name, svc_name2) == 0) {
317 memset(&request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS], 0,
318 sizeof(network_request_table_t));
320 event_data.Event = NET_EVENT_WIFI_WPS_RSP;
321 g_strlcpy(event_string, "Sending NET_EVENT_WIFI_WPS_RSP", 64);
323 __net_handle_state_ind(profile_name, NET_STATE_TYPE_FAILURE);
324 __NETWORK_FUNC_EXIT__;
328 snprintf(event_data.ProfileName,
329 NET_PROFILE_NAME_LEN_MAX+1, "%s", profile_name);
331 event_data.Error = __net_svc_error_string_to_enum(svc_error);
332 event_data.Datalength = 0;
333 event_data.Data = NULL;
335 NETWORK_LOG(NETWORK_LOW, "%s, Error : %d\n", event_string, event_data.Error);
336 _net_client_callback(&event_data);
338 __NETWORK_FUNC_EXIT__;
341 static void __net_handle_state_ind(const char* profile_name, net_state_type_t profile_state)
343 __NETWORK_FUNC_ENTER__;
345 net_event_info_t event_data = {0,};
347 event_data.Error = NET_ERR_NONE;
348 event_data.Event = NET_EVENT_NET_STATE_IND;
350 g_strlcpy(event_data.ProfileName, profile_name,
351 sizeof(event_data.ProfileName));
353 event_data.Datalength = sizeof(net_state_type_t);
354 event_data.Data = &profile_state;
356 NETWORK_LOG(NETWORK_LOW, "Sending NET_EVENT_NET_STATE_IND, state : %d, profile name : %s\n",
357 profile_state, event_data.ProfileName);
359 _net_client_callback(&event_data);
361 __NETWORK_FUNC_EXIT__;
364 static DBusHandlerResult
365 __net_signal_filter (DBusConnection* conn, DBusMessage* msg, void* user_data)
367 __NETWORK_FUNC_ENTER__;
369 static char svc_state[CONNMAN_MAX_BUFLEN] = "";
370 static char svc_error[CONNMAN_MAX_BUFLEN] = "";
371 static char ProfileName[NET_PROFILE_NAME_LEN_MAX + 1] = "";
373 static int open_connection_rsp_sent = FALSE;
375 const char* sig_path = NULL;
376 const char* svc_name1 = NULL;
377 const char* svc_name2 = NULL;
378 const char* svc_name3 = NULL;
380 char* sigvalue = NULL;
381 net_event_info_t event_data = {0,};
382 net_err_t Error = NET_ERR_NONE;
383 net_device_t device_type = NET_DEVICE_UNKNOWN;
387 NETWORK_LOG( NETWORK_LOW, "Invalid Message. Ignore\n");
388 /* We have handled this message, don't pass it on */
389 __NETWORK_FUNC_EXIT__;
390 return DBUS_HANDLER_RESULT_HANDLED;
393 if (dbus_message_is_signal(msg, CONNMAN_MANAGER_INTERFACE, CONNMAN_SIGNAL_PROPERTY_CHANGED))
395 sigvalue = _net_get_string(msg);
398 /* We have handled this message, don't pass it on */
399 __NETWORK_FUNC_EXIT__;
400 return DBUS_HANDLER_RESULT_HANDLED;
402 NETWORK_LOG( NETWORK_LOW, "[Manager : PropertyChanged] Got Signal with value [%s]\n", sigvalue);
404 if(strcmp(sigvalue, "Services") == 0)
406 /** Ignore - compared for future use */
408 else if(strcmp(sigvalue, "ConnectedTechnologies") == 0)
410 /** Ignore - compared for future use */
412 else if(strcmp(sigvalue, "State") == 0)
414 /** Ignore - compared for future use */
416 else if(strcmp(sigvalue, "DefaultTechnology") == 0)
418 /** Ignore - compared for future use */
422 NETWORK_LOG( NETWORK_LOW, "-------[Manager : PropertyChanged]--------\n");
425 /* We have handled this message, don't pass it on */
426 __NETWORK_FUNC_EXIT__;
427 return DBUS_HANDLER_RESULT_HANDLED;
429 else if (dbus_message_is_signal(msg, CONNMAN_MANAGER_INTERFACE, CONNMAN_SIGNAL_STATE_CHANGED))
431 sigvalue = _net_get_string(msg);
434 /* We have handled this message, don't pass it on */
435 __NETWORK_FUNC_EXIT__;
436 return DBUS_HANDLER_RESULT_HANDLED;
438 NETWORK_LOG( NETWORK_LOW, "[Manager : StateChanged] Got Signal with value [%s]\n", sigvalue);
440 if(strcmp(sigvalue, "online") == 0)
442 /** Ignore - compared for future use */
445 /* We have handled this message, don't pass it on */
446 __NETWORK_FUNC_EXIT__;
447 return DBUS_HANDLER_RESULT_HANDLED;
449 else if (dbus_message_is_signal(msg, CONNMAN_MANAGER_INTERFACE, CONNMAN_SIGNAL_SCAN_COMPLETED))
451 __net_handle_scan_rsp(msg);
453 /* We have handled this message, don't pass it on */
454 __NETWORK_FUNC_EXIT__;
455 return DBUS_HANDLER_RESULT_HANDLED;
457 else if (dbus_message_is_signal(msg, CONNMAN_TECHNOLOGY_INTERFACE, CONNMAN_SIGNAL_PROPERTY_CHANGED))
459 char* property = NULL;
461 sigvalue = __net_get_property(msg, &property);
464 /* We have handled this message, don't pass it on */
465 __NETWORK_FUNC_EXIT__;
466 return DBUS_HANDLER_RESULT_HANDLED;
469 memset(ProfileName, 0, sizeof(ProfileName));
470 _net_get_path(msg, ProfileName);
472 NETWORK_LOG( NETWORK_LOW,
473 "[Technology : PropertyChanged] Got Signal with value [%s] path [%s] state [%s]\n",
474 sigvalue, ProfileName, property);
476 if(strstr(ProfileName, "/wifi") == NULL)
478 __NETWORK_FUNC_EXIT__;
479 return DBUS_HANDLER_RESULT_HANDLED;
482 if(strcmp(sigvalue, "State") == 0 && property != NULL)
484 __net_handle_wifi_power_rsp(property);
486 /* We have handled this message, don't pass it on */
487 __NETWORK_FUNC_EXIT__;
488 return DBUS_HANDLER_RESULT_HANDLED;
490 else if (dbus_message_is_signal(msg, CONNMAN_SERVICE_INTERFACE, CONNMAN_SIGNAL_PROPERTY_CHANGED))
492 sigvalue = _net_get_string(msg);
495 /* We have handled this message, don't pass it on */
496 __NETWORK_FUNC_EXIT__;
497 return DBUS_HANDLER_RESULT_HANDLED;
499 NETWORK_LOG( NETWORK_LOW, "[Service : PropertyChanged] Got Signal with value [%s]\n", sigvalue);
501 if(strcmp(sigvalue, "Strength") == 0)
503 /** Ignore - compared for future use */
505 else if(strcmp(sigvalue, "PassphraseRequired") == 0)
507 /** Ignore - compared for future use */
509 else if(strcmp(sigvalue, "State") == 0)
511 memset(ProfileName, 0, sizeof(ProfileName));
512 _net_get_path(msg, ProfileName);
514 device_type = _net_get_tech_type_from_path(ProfileName);
516 if(device_type == NET_DEVICE_UNKNOWN)
518 /* We have handled this message, don't pass it on */
519 __NETWORK_FUNC_EXIT__;
520 return DBUS_HANDLER_RESULT_HANDLED;
523 sig_path = ProfileName;
525 memset(svc_state, 0, sizeof(svc_state));
526 memset(svc_error, 0, sizeof(svc_error));
527 __net_get_state(msg, svc_state, svc_error);
528 NETWORK_LOG(NETWORK_LOW, "Current ConnMan svc_state [%s] and svc_error [%s] for ProfileName [%s]\n",
529 svc_state, svc_error, ProfileName);
531 if (device_type == NET_DEVICE_WIFI &&
532 NetworkInfo.wifi_state == WIFI_OFF) {
533 NETWORK_LOG(NETWORK_LOW, "Warning!! Wi-Fi is already off!!\n");
534 /* We have handled this message, don't pass it on */
535 __NETWORK_FUNC_EXIT__;
536 return DBUS_HANDLER_RESULT_HANDLED;;
539 if(strcmp(svc_state, "idle") == 0)
541 service_state_table[device_type] = NET_STATE_TYPE_IDLE;
542 __net_handle_state_ind(ProfileName, NET_STATE_TYPE_IDLE);
544 else if(strcmp(svc_state, "association") == 0)
546 service_state_table[device_type] = NET_STATE_TYPE_ASSOCIATION;
547 __net_handle_state_ind(ProfileName, NET_STATE_TYPE_ASSOCIATION);
549 else if(strcmp(svc_state, "configuration") == 0)
551 service_state_table[device_type] = NET_STATE_TYPE_CONFIGURATION;
552 __net_handle_state_ind(ProfileName, NET_STATE_TYPE_CONFIGURATION);
554 else if(strcmp(svc_state, "ready") == 0 ||
555 strcmp(svc_state, "online") == 0)
557 if(service_state_table[device_type] != NET_STATE_TYPE_READY &&
558 service_state_table[device_type] != NET_STATE_TYPE_ONLINE)
560 svc_name1 = request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName;
561 svc_name2 = request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS].ProfileName;
563 if(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE &&
564 strcmp(sig_path, svc_name1) == 0)
566 memset(&request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION], 0,
567 sizeof(network_request_table_t));
569 event_data.Event = NET_EVENT_OPEN_RSP;
570 NETWORK_LOG( NETWORK_LOW, "Sending NET_EVENT_OPEN_RSP\n");
572 else if(request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS].flag == TRUE &&
573 strcmp(sig_path, svc_name2) == 0)
575 memset(&request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS], 0,
576 sizeof(network_request_table_t));
578 event_data.Event = NET_EVENT_WIFI_WPS_RSP;
579 NETWORK_LOG( NETWORK_LOW, "Sending NET_EVENT_WIFI_WPS_RSP\n");
583 event_data.Event = NET_EVENT_OPEN_IND;
584 NETWORK_LOG( NETWORK_LOW, "Sending NET_EVENT_OPEN_IND\n");
587 net_profile_info_t prof_info;
588 if((Error = net_get_profile_info(ProfileName, &prof_info)) != NET_ERR_NONE)
590 NETWORK_LOG( NETWORK_ERROR, "Error!!! net_get_profile_info() failed [%s]\n",
591 _net_print_error(Error));
592 event_data.Datalength = 0;
593 event_data.Data = NULL;
597 event_data.Datalength = sizeof(net_profile_info_t);
598 event_data.Data = &prof_info;
601 event_data.Error = Error;
602 snprintf(event_data.ProfileName, NET_PROFILE_NAME_LEN_MAX + 1, "%s", ProfileName);
603 open_connection_rsp_sent = TRUE;
604 _net_client_callback(&event_data);
608 if (strcmp(svc_state, "ready") == 0)
609 __net_handle_state_ind(ProfileName, NET_STATE_TYPE_READY);
611 __net_handle_state_ind(ProfileName, NET_STATE_TYPE_ONLINE);
614 if (strcmp(svc_state, "ready") == 0)
615 service_state_table[device_type] = NET_STATE_TYPE_READY;
617 service_state_table[device_type] = NET_STATE_TYPE_ONLINE;
619 else if(strcmp(svc_state, "disconnect") == 0)
621 svc_name1 = request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION].ProfileName;
622 svc_name2 = request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName;
623 svc_name3 = request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS].ProfileName;
625 if(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE &&
626 strcmp(sig_path, svc_name2) == 0)
628 memset(&request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION], 0,
629 sizeof(network_request_table_t));
631 /** Send Open Resp */
632 event_data.Error = NET_ERR_OPERATION_ABORTED;
633 event_data.Event = NET_EVENT_OPEN_RSP;
634 snprintf(event_data.ProfileName,
635 NET_PROFILE_NAME_LEN_MAX+1, "%s", ProfileName);
637 event_data.Datalength = 0;
638 event_data.Data = NULL;
639 NETWORK_LOG( NETWORK_LOW, "Sending NET_EVENT_OPEN_RSP\n");
640 _net_client_callback(&event_data);
642 else if(request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS].flag == TRUE &&
643 strcmp(sig_path, svc_name3) == 0)
645 memset(&request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS], 0,
646 sizeof(network_request_table_t));
649 event_data.Error = NET_ERR_OPERATION_ABORTED;
650 event_data.Event = NET_EVENT_WIFI_WPS_RSP;
651 snprintf(event_data.ProfileName,
652 NET_PROFILE_NAME_LEN_MAX+1, "%s", ProfileName);
654 event_data.Datalength = 0;
655 event_data.Data = NULL;
656 NETWORK_LOG( NETWORK_LOW, "Sending NET_EVENT_WIFI_WPS_RSP\n");
657 _net_client_callback(&event_data);
659 else if(request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION].flag == TRUE &&
660 strcmp(sig_path, svc_name1) == 0)
662 memset(&request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION], 0,
663 sizeof(network_request_table_t));
665 /** Send Close Resp */
666 event_data.Error = Error;
667 event_data.Event = NET_EVENT_CLOSE_RSP;
668 snprintf(event_data.ProfileName,
669 NET_PROFILE_NAME_LEN_MAX+1, "%s", ProfileName);
671 event_data.Datalength = 0;
672 event_data.Data = NULL;
673 NETWORK_LOG( NETWORK_LOW, "Sending NET_EVENT_CLOSE_RSP\n");
674 _net_client_callback(&event_data);
679 /** Send Close Ind */
680 event_data.Error = Error;
681 event_data.Event = NET_EVENT_CLOSE_IND;
682 snprintf(event_data.ProfileName,
683 NET_PROFILE_NAME_LEN_MAX+1, "%s", ProfileName);
685 event_data.Datalength = 0;
686 event_data.Data = NULL;
687 NETWORK_LOG( NETWORK_LOW, "Sending NET_EVENT_CLOSE_IND\n");
688 _net_client_callback(&event_data);
691 service_state_table[device_type] = NET_STATE_TYPE_DISCONNECT;
693 else if(strcmp(svc_state, "failure") == 0)
695 __net_handle_svc_failure_ind(sig_path, (char*)svc_error);
696 service_state_table[device_type] = NET_STATE_TYPE_FAILURE;
697 __NETWORK_FUNC_EXIT__;
698 return DBUS_HANDLER_RESULT_HANDLED;
701 else if(strcmp(sigvalue, "Nameservers") == 0)
703 /* We have handled this message, don't pass it on */
704 __NETWORK_FUNC_EXIT__;
705 return DBUS_HANDLER_RESULT_HANDLED;
707 else if(strcmp(sigvalue, "IPv4") == 0)
709 /** Ignore - compared for future use */
711 else if(strcmp(sigvalue, "Ethernet") == 0)
713 /** Ignore - compared for future use */
715 else if(strcmp(sigvalue, "Domains") == 0)
717 /** Ignore - compared for future use */
719 else if(strcmp(sigvalue, "IPv4.Configuration") == 0)
721 /** Ignore - compared for future use */
725 /** Ignore - compared for future use */
728 /* We have handled this message, don't pass it on */
729 __NETWORK_FUNC_EXIT__;
730 return DBUS_HANDLER_RESULT_HANDLED;
733 if (dbus_message_is_signal(msg, CONNMAN_COUNTER_INTERFACE, "Usage"))
735 NETWORK_LOG( NETWORK_LOW, "Received [COUNTER_USAGE_SIGNAL] signal from modman\n");
737 else if (dbus_message_is_signal(msg, CONNMAN_COUNTER_INTERFACE, "Release"))
739 NETWORK_LOG( NETWORK_LOW, "Received [COUNTER_RELEASE_SIGNAL] signal from modman\n");
742 NETWORK_LOG( NETWORK_LOW, "Useless signal. Ignored !!!\n");
743 __NETWORK_FUNC_EXIT__;
744 return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
747 /*****************************************************************************
749 *****************************************************************************/
751 int _net_deregister_signal(void)
753 __NETWORK_FUNC_ENTER__;
755 if (signal_conn == NULL) {
756 NETWORK_LOG(NETWORK_HIGH, "Already de-registered. Nothing to be done\n");
757 __NETWORK_FUNC_EXIT__;
761 dbus_connection_remove_filter(signal_conn, __net_signal_filter, NULL);
762 NETWORK_LOG(NETWORK_HIGH, "dbus_connection_remove_filter() successful\n");
763 NETWORK_LOG(NETWORK_LOW, "Successfully removed signal filter rules\n");
765 /* If DBusPendingCall remains, it should be released */
766 if (_net_dbus_is_pending_call_used() == TRUE)
768 dbus_pending_call_cancel(_net_dbus_get_pending_call());
769 _net_dbus_set_pending_call(NULL);
770 _net_dbus_set_pending_call_used(FALSE);
771 NETWORK_LOG(NETWORK_HIGH, "DBus pending call successfully removed\n");
774 dbus_connection_unref(signal_conn);
776 __NETWORK_FUNC_EXIT__;
780 int _net_register_signal(void)
782 DBusConnection* conn = NULL;
785 __NETWORK_FUNC_ENTER__;
787 dbus_error_init(&err);
788 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
790 NETWORK_LOG(NETWORK_EXCEPTION, "Error!!! Failed to connect to the D-BUS daemon: [%s]\n", err.message);
791 dbus_error_free(&err);
792 __NETWORK_FUNC_EXIT__;
793 return NET_ERR_UNKNOWN;
798 dbus_connection_setup_with_g_main(conn, NULL);
800 /** listening to messages from all objects as no path is specified */
801 /** see signals from the given interface */
802 dbus_bus_add_match(conn, CONNMAN_MANAGER_SIGNAL_FILTER, &err);
803 dbus_connection_flush(conn);
804 if (dbus_error_is_set(&err)) {
805 NETWORK_LOG(NETWORK_ERROR, "Error!!! Match Error (%s)\n", err.message);
806 dbus_error_free(&err);
807 __NETWORK_FUNC_EXIT__;
808 return NET_ERR_UNKNOWN;
811 dbus_bus_add_match(conn, CONNMAN_TECHNOLOGY_SIGNAL_FILTER, &err);
812 dbus_connection_flush(conn);
813 if (dbus_error_is_set(&err)) {
814 NETWORK_LOG(NETWORK_ERROR, "Error!!! Match Error (%s)\n", err.message);
815 dbus_error_free(&err);
816 __NETWORK_FUNC_EXIT__;
817 return NET_ERR_UNKNOWN;
820 dbus_bus_add_match(conn, CONNMAN_SERVICE_SIGNAL_FILTER, &err);
821 dbus_connection_flush(conn);
822 if (dbus_error_is_set(&err)) {
823 NETWORK_LOG(NETWORK_ERROR, "Error!!! Match Error (%s)\n", err.message);
824 dbus_error_free(&err);
825 __NETWORK_FUNC_EXIT__;
826 return NET_ERR_UNKNOWN;
829 dbus_bus_add_match(conn, CONNMAN_NETWORK_COUNTER_FILTER, &err);
830 dbus_connection_flush(conn);
831 if (dbus_error_is_set(&err)) {
832 NETWORK_LOG(NETWORK_ERROR, "Error!!! Match Error (%s)\n", err.message);
833 dbus_error_free(&err);
834 __NETWORK_FUNC_EXIT__;
835 return NET_ERR_UNKNOWN;
838 if (dbus_connection_add_filter(conn, __net_signal_filter, NULL, NULL) == FALSE) {
839 NETWORK_LOG(NETWORK_ERROR, "Error!!! dbus_connection_add_filter() failed\n");
840 __NETWORK_FUNC_EXIT__;
841 return NET_ERR_UNKNOWN;
844 NETWORK_LOG(NETWORK_LOW, "Successfully set signal filter rules\n");
845 __NETWORK_FUNC_EXIT__;
849 int _net_init_service_state_table(void)
851 __NETWORK_FUNC_ENTER__;
853 net_err_t Error = NET_ERR_NONE;
854 net_cm_network_status_t network_status;
856 Error = net_get_network_status(NET_DEVICE_WIFI, &network_status);
857 if (Error != NET_ERR_NONE) {
858 __NETWORK_FUNC_EXIT__;
862 if (network_status == NET_STATUS_AVAILABLE)
863 service_state_table[NET_DEVICE_WIFI] = NET_STATE_TYPE_READY;
865 Error = net_get_network_status(NET_DEVICE_CELLULAR, &network_status);
866 if (Error != NET_ERR_NONE) {
867 __NETWORK_FUNC_EXIT__;
871 if (network_status == NET_STATUS_AVAILABLE)
872 service_state_table[NET_DEVICE_CELLULAR] = NET_STATE_TYPE_READY;
874 NETWORK_LOG(NETWORK_HIGH, "init service state table. wifi:%d, cellular:%d\n",
875 service_state_table[NET_DEVICE_WIFI],
876 service_state_table[NET_DEVICE_CELLULAR]);
878 __NETWORK_FUNC_EXIT__;
884 #endif /* __cplusplus */