2 * Network Client Library
4 * Copyright 2012 Samsung Electronics Co., Ltd
6 * Licensed under the Flora License, Version 1.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.tizenopensource.org/license
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
24 #endif /* __cplusplus */
27 /*****************************************************************************
29 *****************************************************************************/
36 #include <dbus/dbus.h>
39 /*****************************************************************************
41 *****************************************************************************/
43 #include "network-internal.h"
44 #include "network-signal-handler.h"
45 #include "network-dbus-request.h"
47 /*****************************************************************************
49 *****************************************************************************/
51 /*****************************************************************************
52 * Local Functions Declaration
53 *****************************************************************************/
55 static int __net_get_default_profile(void *param, net_profile_info_t *active_profile_info);
57 /*****************************************************************************
59 *****************************************************************************/
61 /*****************************************************************************
63 *****************************************************************************/
65 extern network_request_table_t request_table[NETWORK_REQUEST_TYPE_MAX];
67 /*****************************************************************************
69 *****************************************************************************/
71 network_info_t NetworkInfo = {0, };
73 /*****************************************************************************
74 * Local Functions Definition
75 *****************************************************************************/
77 static int __net_get_default_profile(void *param, net_profile_info_t *active_profile_info)
79 __NETWORK_FUNC_ENTER__;
81 net_err_t Error = NET_ERR_NONE;
83 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
84 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
85 __NETWORK_FUNC_EXIT__;
86 return NET_ERR_APP_NOT_REGISTERED;
90 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid parameter\n");
91 __NETWORK_FUNC_EXIT__;
92 return NET_ERR_INVALID_PARAM;
95 Error = _net_get_default_profile_info(active_profile_info);
97 if (Error != NET_ERR_NONE) {
98 NETWORK_LOG(NETWORK_ERROR,
99 "Error!!! _net_get_default_profile_info() failed. Error [%s]\n",
100 _net_print_error(Error));
102 __NETWORK_FUNC_EXIT__;
106 __NETWORK_FUNC_EXIT__;
110 /*****************************************************************************
111 * ConnMan Client Common Interface API Definition
112 *****************************************************************************/
115 * @fn EXPORT_API int net_register_client(net_event_cb_t event_cb, void *user_data)
117 * This function registers callback with the network client
120 * @return int - NET_ERR_NONE on success, negative values for errors
121 * @param[in] net_event_cb_t event_cb - Pointer to callback function
122 * void* user_data - Pointer to user data
125 EXPORT_API int net_register_client(net_event_cb_t event_cb, void *user_data)
127 __NETWORK_FUNC_ENTER__;
129 net_err_t Error = NET_ERR_NONE;
131 if (event_cb == NULL) {
132 NETWORK_LOG(NETWORK_ASSERT, "Error!! Invalid EventCb parameter\n");
133 __NETWORK_FUNC_EXIT__;
134 return NET_ERR_INVALID_PARAM;
137 if (NetworkInfo.ClientEventCb != NULL) {
138 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application Already registered\n");
139 __NETWORK_FUNC_EXIT__;
140 return NET_ERR_APP_ALREADY_REGISTERED;
143 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
144 if (_net_mutex_init() != NET_ERR_NONE) {
145 __NETWORK_FUNC_EXIT__;
146 return NET_ERR_UNKNOWN;
149 Error = _net_register_signal();
150 if (Error != NET_ERR_NONE) {
151 NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_register_signal() failed. Error [%s]\n",
152 _net_print_error(Error));
153 _net_mutex_destroy();
154 __NETWORK_FUNC_EXIT__;
158 NetworkInfo.wifi_state = _net_get_wifi_state();
159 _net_init_service_state_table();
162 g_atomic_int_inc(&NetworkInfo.ref_count);
164 NetworkInfo.ClientEventCb = event_cb;
165 NetworkInfo.user_data = user_data;
167 NETWORK_LOG(NETWORK_HIGH, "Client Register Successfully\n");
169 __NETWORK_FUNC_EXIT__;
173 int net_register_client_ext(net_event_cb_t event_cb, net_device_t client_type, void *user_data)
175 net_err_t Error = NET_ERR_NONE;
177 if (event_cb == NULL || (client_type != NET_DEVICE_DEFAULT && client_type != NET_DEVICE_WIFI)) {
178 NETWORK_LOG(NETWORK_ASSERT, "Error!! Invalid EventCb parameter\n");
179 return NET_ERR_INVALID_PARAM;
182 switch (client_type) {
183 case NET_DEVICE_DEFAULT:
184 if (NetworkInfo.ClientEventCb_conn != NULL) {
185 NETWORK_LOG(NETWORK_ERROR, "Error!!! Connection CAPI Already registered\n");
186 return NET_ERR_APP_ALREADY_REGISTERED;
189 case NET_DEVICE_WIFI:
190 if (NetworkInfo.ClientEventCb_wifi != NULL) {
191 NETWORK_LOG(NETWORK_ERROR, "Error!!! Wi-Fi CAPI Already registered\n");
192 return NET_ERR_APP_ALREADY_REGISTERED;
198 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
199 if (_net_mutex_init() != NET_ERR_NONE)
200 return NET_ERR_UNKNOWN;
202 Error = _net_register_signal();
203 if (Error != NET_ERR_NONE) {
204 NETWORK_LOG(NETWORK_ERROR, "Error!!! _net_register_signal() failed. Error [%s]\n",
205 _net_print_error(Error));
206 _net_mutex_destroy();
210 NetworkInfo.wifi_state = _net_get_wifi_state();
211 _net_init_service_state_table();
214 g_atomic_int_inc(&NetworkInfo.ref_count);
216 switch (client_type) {
217 case NET_DEVICE_DEFAULT:
218 NetworkInfo.ClientEventCb_conn = event_cb;
219 NetworkInfo.user_data_conn = user_data;
221 case NET_DEVICE_WIFI:
222 NetworkInfo.ClientEventCb_wifi = event_cb;
223 NetworkInfo.user_data_wifi = user_data;
228 NETWORK_LOG(NETWORK_HIGH, "Client Register Successfully\n");
234 * @fn EXPORT_API int net_deregister_client(void)
236 * This function deregisters with network client
239 * @return int - NET_ERR_NONE on success, negative values for errors
244 EXPORT_API int net_deregister_client(void)
246 __NETWORK_FUNC_ENTER__;
248 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0 ||
249 NetworkInfo.ClientEventCb == NULL) {
250 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
251 __NETWORK_FUNC_EXIT__;
252 return NET_ERR_APP_NOT_REGISTERED;
255 if (g_atomic_int_dec_and_test(&NetworkInfo.ref_count)) {
256 _net_deregister_signal();
257 _net_mutex_destroy();
258 _net_clear_request_table();
261 NetworkInfo.ClientEventCb = NULL;
262 NetworkInfo.user_data = NULL;
263 NETWORK_LOG(NETWORK_HIGH, "Client De-Register Successfull\n");
265 __NETWORK_FUNC_EXIT__;
269 int net_deregister_client_ext(net_device_t client_type)
271 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
272 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
273 return NET_ERR_APP_NOT_REGISTERED;
276 switch (client_type) {
277 case NET_DEVICE_DEFAULT:
278 if (NetworkInfo.ClientEventCb_conn == NULL) {
279 NETWORK_LOG(NETWORK_ERROR, "Error!!! Connection CAPI was not registered\n");
280 return NET_ERR_APP_NOT_REGISTERED;
282 NetworkInfo.ClientEventCb_conn = NULL;
283 NetworkInfo.user_data_conn = NULL;
285 case NET_DEVICE_WIFI:
286 if (NetworkInfo.ClientEventCb_wifi == NULL) {
287 NETWORK_LOG(NETWORK_ERROR, "Error!!! Wi-Fi CAPI was not registered\n");
288 return NET_ERR_APP_NOT_REGISTERED;
290 NetworkInfo.ClientEventCb_wifi = NULL;
291 NetworkInfo.user_data_wifi = NULL;
294 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid client_type parameter\n");
295 return NET_ERR_INVALID_PARAM;
298 if (g_atomic_int_dec_and_test(&NetworkInfo.ref_count)) {
299 _net_deregister_signal();
300 _net_mutex_destroy();
301 _net_clear_request_table();
304 NETWORK_LOG(NETWORK_HIGH, "Client De-Register Successfull\n");
309 * @fn EXPORT_API int net_get_active_net_info(net_profile_info_t *active_profile_info)
311 * This API returns the information of active(default) network profile.
314 * @return int - NET_ERR_NONE on success, negative values for errors
316 * @param[out] active_profile_info The information of active(default) network profile.
318 EXPORT_API int net_get_active_net_info(net_profile_info_t *active_profile_info)
320 __NETWORK_FUNC_ENTER__;
322 net_err_t Error = NET_ERR_NONE;
324 Error = __net_get_default_profile((void*)active_profile_info, active_profile_info);
326 __NETWORK_FUNC_EXIT__;
331 * @fn EXPORT_API int net_get_active_ipaddress(net_addr_t *ip_address)
333 * This API returns a specific information of active(default) network profile.
336 * @return int - NET_ERR_NONE on success, negative values for errors
338 * @param[out] ip_address Ip address of active(default) network profile.
340 EXPORT_API int net_get_active_ipaddress(net_addr_t *ip_address)
342 __NETWORK_FUNC_ENTER__;
344 net_err_t Error = NET_ERR_NONE;
345 net_profile_info_t active_profile_info;
346 net_dev_info_t *net_info = NULL;
348 Error = __net_get_default_profile((void*)ip_address, &active_profile_info);
349 if (Error != NET_ERR_NONE) {
350 __NETWORK_FUNC_EXIT__;
354 if (active_profile_info.profile_type == NET_DEVICE_CELLULAR)
355 net_info = &active_profile_info.ProfileInfo.Pdp.net_info;
356 else if (active_profile_info.profile_type == NET_DEVICE_WIFI)
357 net_info = &active_profile_info.ProfileInfo.Wlan.net_info;
358 else if (active_profile_info.profile_type == NET_DEVICE_ETHERNET)
359 net_info = &active_profile_info.ProfileInfo.Ethernet.net_info;
361 Error = NET_ERR_UNKNOWN;
363 if (net_info != NULL)
364 memcpy(ip_address, &net_info->IpAddr, sizeof(net_addr_t));
366 __NETWORK_FUNC_EXIT__;
371 * @fn EXPORT_API int net_get_active_netmask(net_addr_t *netmask)
373 * This API returns a specific information of active(default) network profile.
376 * @return int - NET_ERR_NONE on success, negative values for errors
378 * @param[out] netmask Netmask of active(default) network profile.
380 EXPORT_API int net_get_active_netmask(net_addr_t *netmask)
382 __NETWORK_FUNC_ENTER__;
384 net_err_t Error = NET_ERR_NONE;
385 net_profile_info_t active_profile_info;
386 net_dev_info_t *net_info = NULL;
388 Error = __net_get_default_profile((void*)netmask, &active_profile_info);
389 if (Error != NET_ERR_NONE) {
390 __NETWORK_FUNC_EXIT__;
394 if (active_profile_info.profile_type == NET_DEVICE_CELLULAR)
395 net_info = &active_profile_info.ProfileInfo.Pdp.net_info;
396 else if (active_profile_info.profile_type == NET_DEVICE_WIFI)
397 net_info = &active_profile_info.ProfileInfo.Wlan.net_info;
398 else if (active_profile_info.profile_type == NET_DEVICE_ETHERNET)
399 net_info = &active_profile_info.ProfileInfo.Ethernet.net_info;
401 Error = NET_ERR_UNKNOWN;
403 if (net_info != NULL)
404 memcpy(netmask, &net_info->SubnetMask, sizeof(net_addr_t));
406 __NETWORK_FUNC_EXIT__;
411 * @fn EXPORT_API int net_get_active_gateway(net_addr_t *gateway)
413 * This API returns a specific information of active(default) network profile.
416 * @return int - NET_ERR_NONE on success, negative values for errors
418 * @param[out] gateway Gateway address of active(default) network profile.
420 EXPORT_API int net_get_active_gateway(net_addr_t *gateway)
422 __NETWORK_FUNC_ENTER__;
424 net_err_t Error = NET_ERR_NONE;
425 net_profile_info_t active_profile_info;
426 net_dev_info_t *net_info = NULL;
428 Error = __net_get_default_profile((void*)gateway, &active_profile_info);
429 if (Error != NET_ERR_NONE) {
430 __NETWORK_FUNC_EXIT__;
434 if (active_profile_info.profile_type == NET_DEVICE_CELLULAR)
435 net_info = &active_profile_info.ProfileInfo.Pdp.net_info;
436 else if (active_profile_info.profile_type == NET_DEVICE_WIFI)
437 net_info = &active_profile_info.ProfileInfo.Wlan.net_info;
438 else if (active_profile_info.profile_type == NET_DEVICE_ETHERNET)
439 net_info = &active_profile_info.ProfileInfo.Ethernet.net_info;
441 Error = NET_ERR_UNKNOWN;
443 if (net_info != NULL)
444 memcpy(gateway, &net_info->GatewayAddr, sizeof(net_addr_t));
446 __NETWORK_FUNC_EXIT__;
451 * @fn EXPORT_API int net_get_active_dns(net_addr_t *dns)
453 * This API returns a specific information of active(default) network profile.
456 * @return int - NET_ERR_NONE on success, negative values for errors
458 * @param[out] dns DNS address of active(default) network profile.
460 EXPORT_API int net_get_active_dns(net_addr_t *dns)
462 __NETWORK_FUNC_ENTER__;
464 net_err_t Error = NET_ERR_NONE;
465 net_profile_info_t active_profile_info;
466 net_dev_info_t *net_info = NULL;
468 Error = __net_get_default_profile((void*)dns, &active_profile_info);
469 if (Error != NET_ERR_NONE) {
470 __NETWORK_FUNC_EXIT__;
474 if (active_profile_info.profile_type == NET_DEVICE_CELLULAR)
475 net_info = &active_profile_info.ProfileInfo.Pdp.net_info;
476 else if (active_profile_info.profile_type == NET_DEVICE_WIFI)
477 net_info = &active_profile_info.ProfileInfo.Wlan.net_info;
478 else if (active_profile_info.profile_type == NET_DEVICE_ETHERNET)
479 net_info = &active_profile_info.ProfileInfo.Ethernet.net_info;
481 Error = NET_ERR_UNKNOWN;
483 if (net_info != NULL)
484 memcpy(dns, &net_info->DnsAddr[0], sizeof(net_addr_t));
486 __NETWORK_FUNC_EXIT__;
491 * @fn EXPORT_API int net_get_active_essid(net_essid_t *essid)
493 * This API returns a specific information of active(default) network profile.
496 * @return int - NET_ERR_NONE on success, negative values for errors
498 * @param[out] essid ESSID of active(default) network profile.
500 EXPORT_API int net_get_active_essid(net_essid_t *essid)
502 __NETWORK_FUNC_ENTER__;
504 net_err_t Error = NET_ERR_NONE;
505 net_profile_info_t active_profile_info;
506 net_wifi_profile_info_t *wlan_info = NULL;
508 Error = __net_get_default_profile((void*)essid, &active_profile_info);
509 if (Error != NET_ERR_NONE) {
510 __NETWORK_FUNC_EXIT__;
514 if (active_profile_info.profile_type == NET_DEVICE_CELLULAR) {
515 NETWORK_LOG(NETWORK_ERROR, "Error!!! Active(default) network is cellular type.\n");
516 Error = NET_ERR_NO_SERVICE;
517 } else if (active_profile_info.profile_type == NET_DEVICE_ETHERNET) {
518 NETWORK_LOG(NETWORK_ERROR, "Error!!! Active(default) network is ethernet type.\n");
519 Error = NET_ERR_NO_SERVICE;
520 } else if (active_profile_info.profile_type == NET_DEVICE_WIFI) {
521 wlan_info = &active_profile_info.ProfileInfo.Wlan;
522 memcpy(essid->essid, wlan_info->essid, NET_WLAN_ESSID_LEN+1);
524 Error = NET_ERR_UNKNOWN;
526 __NETWORK_FUNC_EXIT__;
531 * @fn EXPORT_API int net_get_active_proxy(net_proxy_t *proxy)
533 * This API returns a specific information of active(default) network profile.
536 * @return int - NET_ERR_NONE on success, negative values for errors
538 * @param[out] proxy Proxy of active(default) network profile.
540 EXPORT_API int net_get_active_proxy(net_proxy_t *proxy)
542 __NETWORK_FUNC_ENTER__;
544 net_err_t Error = NET_ERR_NONE;
545 net_profile_info_t active_profile_info;
546 net_dev_info_t *net_info = NULL;
548 Error = __net_get_default_profile((void*)proxy, &active_profile_info);
549 if (Error != NET_ERR_NONE) {
550 __NETWORK_FUNC_EXIT__;
554 if (active_profile_info.profile_type == NET_DEVICE_CELLULAR)
555 net_info = &active_profile_info.ProfileInfo.Pdp.net_info;
556 else if (active_profile_info.profile_type == NET_DEVICE_WIFI)
557 net_info = &active_profile_info.ProfileInfo.Wlan.net_info;
558 else if (active_profile_info.profile_type == NET_DEVICE_ETHERNET)
559 net_info = &active_profile_info.ProfileInfo.Ethernet.net_info;
561 Error = NET_ERR_UNKNOWN;
563 if (net_info != NULL)
564 memcpy(proxy->proxy_addr, net_info->ProxyAddr, NET_PROXY_LEN_MAX+1);
566 __NETWORK_FUNC_EXIT__;
571 * @fn EXPORT_API int net_is_connected(void)
573 * This function check's whether connection manager is connected or not
576 * @return int - TRUE if connected, else FALSE
580 EXPORT_API int net_is_connected(void)
582 char state[CONNMAN_MAX_BUFLEN] = ""; /** Possible value are "online", "offline" and "connected" */
583 net_err_t Error = NET_ERR_NONE;
585 __NETWORK_FUNC_ENTER__;
587 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
588 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
589 __NETWORK_FUNC_EXIT__;
590 return NET_ERR_APP_NOT_REGISTERED;
593 if ((Error = _net_dbus_get_state(state)) != NET_ERR_NONE) {
594 NETWORK_LOG(NETWORK_ERROR, "Error!!! failed to get state. Error [%s]\n",
595 _net_print_error(Error));
596 __NETWORK_FUNC_EXIT__;
600 if ((strcmp(state, "online") == 0) || (strcmp(state, "connected") == 0)) {
601 NETWORK_LOG(NETWORK_HIGH, "State [%s]\n", state);
602 __NETWORK_FUNC_EXIT__;
606 __NETWORK_FUNC_EXIT__;
612 * @fn EXPORT_API int net_get_network_status(net_service_type_t network_type, net_cm_network_status_t* pNetworkStatus)
614 * This function requests wifi/pdp network status
617 * @return int - NET_ERR_NONE on success, negative values for errors
618 * @param[in] net_service_type_t network_type - Network type (wlan/pdp/default), of whose status to be checked.
619 * @param[out] net_cm_network_status_t* pNetworkStatus - Status of the requested network.
622 EXPORT_API int net_get_network_status(net_device_t device_type, net_cm_network_status_t* network_status)
624 net_err_t Error = NET_ERR_NONE;
626 __NETWORK_FUNC_ENTER__;
628 if(g_atomic_int_get(&NetworkInfo.ref_count) == 0)
630 NETWORK_LOG( NETWORK_ERROR, "Error!!! Application was not registered\n");
631 __NETWORK_FUNC_EXIT__;
632 return NET_ERR_APP_NOT_REGISTERED;
635 if((Error = _net_dbus_get_network_status(device_type, network_status)) != NET_ERR_NONE)
637 NETWORK_LOG( NETWORK_ERROR, "Error!!! failed to get network status. Error [%s]\n",
638 _net_print_error(Error));
639 __NETWORK_FUNC_EXIT__;
643 __NETWORK_FUNC_EXIT__;
647 EXPORT_API int net_get_statistics(net_device_t device_type, net_statistics_type_e statistics_type, unsigned long long *size)
649 net_err_t Error = NET_ERR_NONE;
651 if ((Error = _net_dbus_get_statistics(device_type, statistics_type, size)) != NET_ERR_NONE )
652 NETWORK_LOG(NETWORK_ERROR,
653 "Error!!! Failed to get statistics info. error : [%s]\n",
654 _net_print_error(Error));
659 EXPORT_API int net_set_statistics(net_device_t device_type, net_statistics_type_e statistics_type)
661 net_err_t Error = NET_ERR_NONE;
663 if ((Error = _net_dbus_set_statistics(device_type, statistics_type)) != NET_ERR_NONE )
664 NETWORK_LOG(NETWORK_ERROR,
665 "Error!!! Failed to set statistics info. error : [%s]\n",
666 _net_print_error(Error));
671 /*****************************************************************************
672 * ConnMan Wi-Fi Client Interface Async Function Definition
673 *****************************************************************************/
677 * @fn EXPORT_API int net_open_connection_with_profile(const char *profile_name)
679 * This function request open connection for the given profile name.
682 * @return int - NET_ERR_NONE on success, negative values for errors
683 * @param[in] char *ProfileName - Profile Name to be connected
687 EXPORT_API int net_open_connection_with_profile(const char *profile_name)
689 __NETWORK_FUNC_ENTER__;
691 net_err_t Error = NET_ERR_NONE;
693 NETWORK_LOG(NETWORK_HIGH, "ProfileName [%s] passed\n", profile_name);
695 if (_net_check_profile_name(profile_name) != NET_ERR_NONE) {
696 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid ProfileName passed\n");
697 __NETWORK_FUNC_EXIT__;
698 return NET_ERR_INVALID_PARAM;
701 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
702 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
703 __NETWORK_FUNC_EXIT__;
704 return NET_ERR_APP_NOT_REGISTERED;
707 if (request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE) {
708 NETWORK_LOG(NETWORK_ASSERT, "Error!! Request already in progress\n");
709 __NETWORK_FUNC_EXIT__;
710 return NET_ERR_IN_PROGRESS;
713 if (_net_dbus_is_pending_call_used() == TRUE) {
714 NETWORK_LOG(NETWORK_ASSERT, "Error!! pending call already in progress\n");
715 __NETWORK_FUNC_EXIT__;
716 return NET_ERR_IN_PROGRESS;
719 request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag = TRUE;
720 snprintf(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName,
721 NET_PROFILE_NAME_LEN_MAX+1, "%s", profile_name);
723 if ((Error = _net_dbus_open_connection(profile_name)) != NET_ERR_NONE) {
724 NETWORK_LOG(NETWORK_ERROR,
725 "Error!! Failed to request open connection, Error [%s]\n",
726 _net_print_error(Error));
728 if(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE)
729 memset(&request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION],
730 0, sizeof(network_request_table_t));
732 __NETWORK_FUNC_EXIT__;
736 NETWORK_LOG(NETWORK_HIGH, "Connect Request Success for ProfileName[%s]\n", profile_name);
737 __NETWORK_FUNC_EXIT__;
742 * @fn EXPORT_API int net_open_connection_with_preference(net_service_type_t service_type)
744 * This function request open connection for the given service type.
747 * @return int - NET_ERR_NONE on success, negative values for errors
748 * @param[in] net_service_type_t service_type - Service type to be connected
751 EXPORT_API int net_open_connection_with_preference(net_service_type_t service_type)
753 __NETWORK_FUNC_ENTER__;
755 net_err_t Error = NET_ERR_NONE;
756 net_profile_name_t profile_name;
757 memset(&profile_name, 0, sizeof(net_profile_name_t));
759 if (service_type != NET_SERVICE_INTERNET &&
760 service_type != NET_SERVICE_MMS &&
761 service_type != NET_SERVICE_WAP) {
762 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Service Type passed\n");
763 __NETWORK_FUNC_EXIT__;
764 return NET_ERR_INVALID_PARAM;
767 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
768 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
769 __NETWORK_FUNC_EXIT__;
770 return NET_ERR_APP_NOT_REGISTERED;
773 if (request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE) {
774 NETWORK_LOG(NETWORK_ASSERT, "Error!! Request already in progress\n");
775 __NETWORK_FUNC_EXIT__;
776 return NET_ERR_IN_PROGRESS;
779 if (_net_dbus_is_pending_call_used() == TRUE) {
780 NETWORK_LOG(NETWORK_ASSERT, "Error!! pending call already in progress\n");
781 __NETWORK_FUNC_EXIT__;
782 return NET_ERR_IN_PROGRESS;
785 Error = _net_get_service_profile(service_type, &profile_name);
786 if (Error != NET_ERR_NONE) {
787 NETWORK_LOG(NETWORK_ASSERT, "Error!! Failed to find service\n");
788 __NETWORK_FUNC_EXIT__;
792 request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag = TRUE;
793 snprintf(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName,
794 NET_PROFILE_NAME_LEN_MAX+1, "%s", profile_name.ProfileName);
796 if ((Error = _net_dbus_open_connection(profile_name.ProfileName)) != NET_ERR_NONE) {
797 NETWORK_LOG(NETWORK_ERROR,
798 "Error!! Failed to request open connection, Error [%s]\n",
799 _net_print_error(Error));
801 if(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE)
802 memset(&request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION],
803 0, sizeof(network_request_table_t));
805 __NETWORK_FUNC_EXIT__;
809 NETWORK_LOG(NETWORK_HIGH, "Connect Request Success for ProfileName[%s]\n",
810 profile_name.ProfileName);
811 __NETWORK_FUNC_EXIT__;
815 int net_open_connection_with_preference_ext(net_service_type_t service_type, net_profile_name_t *prof_name)
817 net_err_t Error = NET_ERR_NONE;
818 net_profile_name_t profile_name;
819 memset(&profile_name, 0, sizeof(net_profile_name_t));
821 if (service_type != NET_SERVICE_INTERNET &&
822 service_type != NET_SERVICE_MMS &&
823 service_type != NET_SERVICE_WAP) {
824 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid Service Type passed\n");
825 return NET_ERR_INVALID_PARAM;
828 if (prof_name == NULL) {
829 NETWORK_LOG(NETWORK_ERROR, "Error!!! Invalid profile name passed\n");
830 return NET_ERR_INVALID_PARAM;
833 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
834 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
835 return NET_ERR_APP_NOT_REGISTERED;
838 if (request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE) {
839 NETWORK_LOG(NETWORK_ASSERT, "Error!! Request already in progress\n");
840 return NET_ERR_IN_PROGRESS;
843 if (_net_dbus_is_pending_call_used() == TRUE) {
844 NETWORK_LOG(NETWORK_ASSERT, "Error!! pending call already in progress\n");
845 __NETWORK_FUNC_EXIT__;
846 return NET_ERR_IN_PROGRESS;
849 Error = _net_get_service_profile(service_type, &profile_name);
850 if (Error != NET_ERR_NONE) {
851 NETWORK_LOG(NETWORK_ASSERT, "Error!! Failed to find service\n");
855 request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag = TRUE;
856 snprintf(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].ProfileName,
857 NET_PROFILE_NAME_LEN_MAX+1, "%s", profile_name.ProfileName);
859 if ((Error = _net_dbus_open_connection(profile_name.ProfileName)) != NET_ERR_NONE) {
860 NETWORK_LOG(NETWORK_ERROR,
861 "Error!! Failed to request open connection, Error [%s]\n",
862 _net_print_error(Error));
864 if(request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE)
865 memset(&request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION],
866 0, sizeof(network_request_table_t));
871 NETWORK_LOG(NETWORK_HIGH, "Connect Request Success for ProfileName[%s]\n",
872 profile_name.ProfileName);
874 memcpy(prof_name, &profile_name, sizeof(net_profile_name_t));
879 * @fn EXPORT_API int net_close_connection(const char *profile_name)
881 * This function requests close connection for the given profile name.
884 * @return int - NET_ERR_NONE on success, negative values for errors
885 * @param[in] char *profile_name - Connected profile Name
889 EXPORT_API int net_close_connection(const char *profile_name)
891 __NETWORK_FUNC_ENTER__;
893 net_err_t Error = NET_ERR_NONE;
895 NETWORK_LOG(NETWORK_HIGH, "ProfileName [%s] passed\n", profile_name);
897 if (_net_check_profile_name(profile_name) != NET_ERR_NONE) {
898 NETWORK_LOG(NETWORK_ERROR, "Error!! Invalid ProfileName parameter\n");
899 __NETWORK_FUNC_EXIT__;
900 return NET_ERR_INVALID_PARAM;
903 if (g_atomic_int_get(&NetworkInfo.ref_count) == 0) {
904 NETWORK_LOG(NETWORK_ERROR, "Error!!! Application was not registered\n");
905 __NETWORK_FUNC_EXIT__;
906 return NET_ERR_APP_NOT_REGISTERED;
909 if (request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION].flag == TRUE) {
910 NETWORK_LOG(NETWORK_ASSERT, "Error!!! Request already in progress\n");
911 __NETWORK_FUNC_EXIT__;
912 return NET_ERR_IN_PROGRESS;
915 if (_net_dbus_is_pending_call_used() == TRUE) {
916 if (request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION].flag == TRUE) {
917 _net_dbus_clear_pending_call();
918 memset(&request_table[NETWORK_REQUEST_TYPE_OPEN_CONNECTION],
919 0, sizeof(network_request_table_t));
921 } else if (request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS].flag == TRUE) {
922 _net_dbus_clear_pending_call();
923 memset(&request_table[NETWORK_REQUEST_TYPE_ENROLL_WPS],
924 0, sizeof(network_request_table_t));
926 NETWORK_LOG(NETWORK_ASSERT, "Error!! pending call already in progress\n");
927 __NETWORK_FUNC_EXIT__;
928 return NET_ERR_IN_PROGRESS;
932 request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION].flag = TRUE;
933 snprintf(request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION].ProfileName,
934 NET_PROFILE_NAME_LEN_MAX+1, "%s", profile_name);
936 if ((Error = _net_dbus_close_connection(profile_name)) != NET_ERR_NONE) {
937 NETWORK_LOG(NETWORK_ERROR,
938 "Error!! Failed to request close connection, Error [%s]\n",
939 _net_print_error(Error));
941 if (request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION].flag == TRUE)
942 memset(&request_table[NETWORK_REQUEST_TYPE_CLOSE_CONNECTION],
943 0, sizeof(network_request_table_t));
945 __NETWORK_FUNC_EXIT__;
949 __NETWORK_FUNC_EXIT__;
955 #endif /* __cplusplus */