Fix DNS address setting.
[platform/framework/native/connectivity-service.git] / src / NetService.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file    NetService.cpp
20  * @brief   This is the implementation file for the %NetService class.
21  */
22
23 #include <net_connection.h>
24 #include <FApp_AppManagerImpl.h>
25 #include <FBaseSysLog.h>
26
27 #include <FNetNetAccountManager.h>
28 #include <FBaseString.h>
29 #include <FNet_NetTypes.h>
30 #include "FBase_StringConverter.h"
31 #include "NetService.h"
32
33 using namespace Tizen::Base;
34 using namespace Tizen::Net;
35
36
37 NetService::NetService(void)
38         : __pConnectionHandle(null)
39 {
40         int ret = CONNECTION_ERROR_NONE;
41         ret = connection_create(&__pConnectionHandle);
42
43         SysLog(NID_NET, "The return value from connection_create() is %d", ret);
44 }
45
46 NetService::~NetService(void)
47 {
48         if (__pConnectionHandle != null)
49         {
50                 connection_destroy(__pConnectionHandle);
51                 __pConnectionHandle = null;
52         }
53 }
54
55 result
56 NetService::GetAppNetAccountId(const String& profileName, int& netAccountId)
57 {
58         result r = E_SUCCESS;
59
60         if (profileName.Equals(L"Internet", false))
61         {
62                 netAccountId = _DEFAULT_PS_ACCOUNT_ID;
63         }
64         else if (profileName.Equals(L"Mms", false))
65         {
66                 netAccountId = _DEFAULT_MMS_ACCOUNT_ID;
67         }
68         else
69         {
70                 netAccountId = INVALID_HANDLE;
71                 r = E_INVALID_ARG;
72         }
73
74         return r;
75 }
76
77 result
78 NetService::SetNetAccountId(int netAccountId, int& netAccountId2)
79 {
80         result r = E_SUCCESS;
81
82         netAccountId2 = netAccountId;
83
84         return r;
85 }
86
87
88
89 result
90 NetService::UpdateSystemNetAccount(const String& profileName, const NetAccountInfo& netAccountInfo, int bearerType)
91 {
92         result r = E_SUCCESS;
93
94         int ret = CONNECTION_ERROR_NONE;
95         connection_h connectionHandle = null;
96         connection_profile_h profileHandle = null;
97
98         ret = connection_create(&connectionHandle);
99         SysTryReturnResult(NID_NET, ret == CONNECTION_ERROR_NONE, E_SYSTEM,
100                         "A system error has been occurred. The return value from connection_create() is %d", ret);
101
102         SysAssertf(connectionHandle != null, "Not yet constructed. Construct() should be called before use.");
103
104         profileHandle = GetPsProfileHandleN(profileName);
105         SysTryReturnResult(NID_NET, profileHandle != null, E_INVALID_ACCOUNT,
106                         "Invalid network account. The current value of account id is %d", netAccountInfo.GetAccountId());
107
108         r = ConvertToProfileInfo((void*)profileHandle, netAccountInfo, bearerType);
109         if (IsFailed(r))
110         {
111                 SysLogException(NID_NET, r, "[%s] Propagating.", GetErrorMessage(r));
112
113                 connection_profile_destroy(profileHandle);
114                 connection_destroy(connectionHandle);
115
116                 return r;
117         }
118
119         ret = connection_update_profile((void*)connectionHandle, profileHandle);
120
121         connection_profile_destroy(profileHandle);
122         connection_destroy(connectionHandle);
123
124         SysTryReturnResult(NID_NET, ret == CONNECTION_ERROR_NONE, E_SYSTEM,
125                         "A system error has been occurred. The return value from connection_update_profile() is %d", ret);
126
127         return r;
128 }
129
130 result
131 NetService::ResetNetStatistics(int bearerType, int statType)
132 {
133         int err = CONNECTION_ERROR_NONE;
134
135         SysTryReturnResult(NID_NET, (bearerType == NET_BEARER_WIFI || bearerType == NET_BEARER_PS),
136                         E_INVALID_ARG, "Invalid bearer type. [%d]", bearerType);
137
138         //Reset net statistics info based on type
139         switch (statType)
140         {
141         //supported cases
142         case NET_STAT_RCVD_SIZE:
143                 if (bearerType == NET_BEARER_PS)
144                 {
145                         err = connection_reset_statistics(CONNECTION_TYPE_CELLULAR, CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA);
146                 }
147                 else
148                 {
149                         err = connection_reset_statistics(CONNECTION_TYPE_WIFI, CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA);
150                 }
151
152                 break;
153
154         case NET_STAT_SENT_SIZE:
155                 if (bearerType == NET_BEARER_PS)
156                 {
157                         err = connection_reset_statistics(CONNECTION_TYPE_CELLULAR, CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA);
158                 }
159                 else
160                 {
161                         err = connection_reset_statistics(CONNECTION_TYPE_WIFI, CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA);
162                 }
163
164                 break;
165
166         case NET_STAT_TOTAL_RCVD_SIZE:
167                 if (bearerType == NET_BEARER_PS)
168                 {
169                         err = connection_reset_statistics(CONNECTION_TYPE_CELLULAR, CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA);
170                 }
171                 else
172                 {
173                         err = connection_reset_statistics(CONNECTION_TYPE_WIFI, CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA);
174                 }
175
176                 break;
177
178         case NET_STAT_TOTAL_SENT_SIZE:
179                 if (bearerType == NET_BEARER_PS)
180                 {
181                         err = connection_reset_statistics(CONNECTION_TYPE_CELLULAR, CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA);
182                 }
183                 else
184                 {
185                         err = connection_reset_statistics(CONNECTION_TYPE_WIFI, CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA);
186                 }
187
188                 break;
189
190         default:
191                 SysTryReturnResult(NID_NET, false, E_INVALID_ARG, "Invalid argument is used.");
192
193                 break;
194         }
195
196         SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
197
198         return E_SUCCESS;
199 }
200
201 result
202 NetService::ResetAllNetStatistics(int bearerType)
203 {
204         int err = CONNECTION_ERROR_NONE;
205
206         SysTryReturnResult(NID_NET, (bearerType == NET_BEARER_WIFI || bearerType == NET_BEARER_PS),
207                         E_INVALID_ARG, "Invalid bearer type. [%d]", bearerType);
208
209         //we support only PS and WIFI
210         if (bearerType == NET_BEARER_PS)
211         {
212                 err = connection_reset_statistics(CONNECTION_TYPE_CELLULAR, CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA);
213                 SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
214
215                 err = connection_reset_statistics(CONNECTION_TYPE_CELLULAR, CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA);
216                 SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
217
218                 err = connection_reset_statistics(CONNECTION_TYPE_CELLULAR, CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA);
219                 SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
220
221                 err = connection_reset_statistics(CONNECTION_TYPE_CELLULAR, CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA);
222                 SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
223
224         }
225         else
226         {
227                 err = connection_reset_statistics(CONNECTION_TYPE_WIFI, CONNECTION_STATISTICS_TYPE_LAST_SENT_DATA);
228                 SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
229
230                 err = connection_reset_statistics(CONNECTION_TYPE_WIFI, CONNECTION_STATISTICS_TYPE_LAST_RECEIVED_DATA);
231                 SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
232
233                 err = connection_reset_statistics(CONNECTION_TYPE_WIFI, CONNECTION_STATISTICS_TYPE_TOTAL_SENT_DATA);
234                 SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
235
236                 err = connection_reset_statistics(CONNECTION_TYPE_WIFI, CONNECTION_STATISTICS_TYPE_TOTAL_RECEIVED_DATA);
237                 SysTryReturnResult(NID_NET, err == CONNECTION_ERROR_NONE, E_SYSTEM,     "A system error has been occurred. Operation failed. [err:%d]", err);
238         }
239
240         return E_SUCCESS;
241 }
242
243 void*
244 NetService::GetPsProfileHandleN(const String& profileName)
245 {
246         SysLog(NID_NET, "GetPsProfileHandleN() has been called with ProfileName : %ls", profileName.GetPointer());
247
248         ClearLastResult();
249
250         int ret = CONNECTION_ERROR_NONE;
251         connection_h connectionHandle = null;
252         connection_profile_iterator_h iterator = null;
253         connection_profile_h profileHandle = null;
254         connection_profile_h matchingProfileHandle = null;
255
256         SysTryReturn(NID_NET, !profileName.IsEmpty(), null, E_INVALID_ARG,
257                         "[%s] Invalid argument is used. profileName is an empty string.", GetErrorMessage(E_INVALID_ARG));
258
259         ret = connection_create(&connectionHandle);
260         SysTryReturn(NID_NET, ret == CONNECTION_ERROR_NONE, null, E_SYSTEM,
261                         "[%s] A system error has been occurred. The return value from connection_create() is %d", GetErrorMessage(E_SYSTEM), ret);
262
263         ret = connection_get_profile_iterator(connectionHandle, CONNECTION_ITERATOR_TYPE_REGISTERED, &iterator);
264         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, , E_SYSTEM,
265                         "[%s] A system error has been occurred. The return value from connection_get_profile_iterator() is %d", GetErrorMessage(E_SYSTEM), ret);
266
267         ret = connection_profile_iterator_next(iterator, &profileHandle);
268         while (profileHandle != null)
269         {
270                 char* pTempProfileName = null;
271                 String tempProfileName;
272
273                 ret = connection_profile_get_id(profileHandle, &pTempProfileName);
274                 SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, , E_SYSTEM,
275                                 "[%s] A system error has been occurred. The return value from connection_profile_get_id() is %d", GetErrorMessage(E_SYSTEM), ret);
276
277                 tempProfileName = String(pTempProfileName);
278                 free(pTempProfileName);
279
280                 if (profileName.Equals(tempProfileName))
281                 {
282                         ret = connection_profile_clone(&matchingProfileHandle, profileHandle);
283                         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, matchingProfileHandle = null, E_SYSTEM,
284                                         "[%s] A system error has been occurred. The return value from connection_profile_clone() is %d", GetErrorMessage(E_SYSTEM), ret);
285
286                         break;
287                 }
288
289                 profileHandle = null;
290                 ret = connection_profile_iterator_next(iterator, &profileHandle);
291         }
292
293         SysTryCatch(NID_NET, matchingProfileHandle != null, , E_INVALID_ACCOUNT,
294                         "[%s] Matching account is not found.", GetErrorMessage(E_INVALID_ACCOUNT));
295
296         connection_destroy_profile_iterator(iterator);
297         connection_destroy(connectionHandle);
298
299         return matchingProfileHandle;
300
301 CATCH:
302         if (iterator != null)
303         {
304                 connection_destroy_profile_iterator(iterator);
305         }
306
307         if (connectionHandle != null)
308         {
309                 connection_destroy(connectionHandle);
310         }
311
312         return null;
313 }
314
315 result
316 NetService::ConvertToProfileInfo(void* pProfileHandle, const NetAccountInfo& netAccountInfo, int bearerType) const
317 {
318         result r = E_SUCCESS;
319         connection_profile_h profileHandle = (connection_profile_h)pProfileHandle;
320         int ret = CONNECTION_ERROR_NONE;
321         connection_cellular_auth_type_e cellAuthType = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
322         connection_ip_config_type_e ipConfigType = CONNECTION_IP_CONFIG_TYPE_NONE;
323
324         char* pApn = null;
325         char* pAuthId = null;
326         char* pAuthPassword = null;
327         char* pHomeUrl = null;
328         char* pDnsAddr = null;
329         char* pLocalAddr = null;
330         char* pProxyAddr = null;
331         String proxyAddr;
332
333         NetNapAuthType authType;
334         String authId;
335         String authPw;
336
337         SysTryReturnResult(NID_NET, pProfileHandle != null, E_INVALID_ARG, "pProfileHandle is null.");
338         SysTryReturnResult(NID_NET, ((bearerType == NET_BEARER_PS) || (bearerType == NET_BEARER_MMS)),
339                         E_INVALID_ARG, "Invalid argument is used. BearerType has to be PS. bearerType=%d", bearerType);
340
341         if (!netAccountInfo.GetAccessPointName().IsEmpty())
342         {
343                 pApn = _StringConverter::CopyToCharArrayN(netAccountInfo.GetAccessPointName());
344                 SysTryCatch(NID_NET, pApn != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
345                                 "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
346
347                 ret = connection_profile_set_cellular_apn(profileHandle, pApn);
348                 delete[] pApn;
349                 SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
350                                 "[%s] A system error has been occurred. The return value from connection_profile_set_cellular_apn() is %d", GetErrorMessage(E_SYSTEM), ret);
351         }
352
353         netAccountInfo.GetAuthenticationInfo(authType, authId, authPw);
354
355         if (authType == NET_NAPAUTH_PAP)
356         {
357                 cellAuthType = CONNECTION_CELLULAR_AUTH_TYPE_PAP;
358         }
359         else if (authType == NET_NAPAUTH_CHAP)
360         {
361                 cellAuthType = CONNECTION_CELLULAR_AUTH_TYPE_CHAP;
362         }
363         else
364         {
365                 cellAuthType = CONNECTION_CELLULAR_AUTH_TYPE_NONE;
366         }
367
368         if (!authId.IsEmpty())
369         {
370                 pAuthId = _StringConverter::CopyToCharArrayN(authId);
371                 // OOM can occur.
372         }
373
374         if (!authPw.IsEmpty())
375         {
376                 pAuthPassword = _StringConverter::CopyToCharArrayN(authPw);
377                 // OOM can occur.
378         }
379
380         if ((pAuthId != null) && (pAuthPassword != null))
381         {
382                 ret = connection_profile_set_cellular_auth_info(profileHandle, cellAuthType, pAuthId, pAuthPassword);
383         }
384         else
385         {
386                 ret = connection_profile_set_cellular_auth_info(profileHandle, cellAuthType, " ", " ");
387         }
388         if (pAuthId != null)
389         {
390                 delete[] pAuthId;
391         }
392         if (pAuthPassword != null)
393         {
394                 delete[] pAuthPassword;
395         }
396         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
397                         "[%s] A system error has been occurred. The return value from connection_profile_set_cellular_auth_info() is %d", GetErrorMessage(E_SYSTEM), ret);
398
399         if (!netAccountInfo.GetHomeUrl().IsEmpty())
400         {
401                 pHomeUrl = _StringConverter::CopyToCharArrayN(netAccountInfo.GetHomeUrl());
402                 SysTryCatch(NID_NET, pHomeUrl != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
403
404                 ret = connection_profile_set_cellular_home_url(profileHandle, pHomeUrl);
405                 delete[] pHomeUrl;
406         }
407         else
408         {
409                 ret = connection_profile_set_cellular_home_url(profileHandle, " ");
410         }
411         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
412                         "[%s] A system error has been occurred. The return value from connection_profile_set_cellular_home_url() is %d", GetErrorMessage(E_SYSTEM), ret);
413
414         ret = connection_profile_get_ip_config_type(profileHandle, CONNECTION_ADDRESS_FAMILY_IPV4, &ipConfigType);
415         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
416                         "[%s] A system error has been occurred. The return value from connection_profile_get_ip_config_type() is %d", GetErrorMessage(E_SYSTEM), ret);
417
418         if (ipConfigType != CONNECTION_IP_CONFIG_TYPE_FIXED)
419         {
420                 if (netAccountInfo.GetLocalAddressScheme() == NET_ADDRESS_SCHEME_STATIC)
421                 {
422                         ret = connection_profile_set_ip_config_type(profileHandle, CONNECTION_ADDRESS_FAMILY_IPV4, CONNECTION_IP_CONFIG_TYPE_STATIC);
423                         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM,
424                                         E_SYSTEM, "[%s] A system error has been occurred. The return value from connection_profile_set_ip_config_type() is %d", ret);
425
426                         SysTryCatch(NID_NET, netAccountInfo.GetLocalAddress() != null, r = E_INVALID_ARG, E_INVALID_ARG,
427                                         "[%s] Invalid argument is used. Local Address Scheme is static, but local address is null.", GetErrorMessage(E_INVALID_ARG));
428
429                         pLocalAddr = _StringConverter::CopyToCharArrayN(netAccountInfo.GetLocalAddress()->ToString());
430                         SysTryCatch(NID_NET, pLocalAddr != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
431                                         "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
432
433                         ret = connection_profile_set_ip_address(profileHandle, CONNECTION_ADDRESS_FAMILY_IPV4, pLocalAddr);
434                         delete[] pLocalAddr;
435                         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
436                                         "[%s] A system error has been occurred. The return value from connection_profile_set_ip_address() is %d", GetErrorMessage(E_SYSTEM), ret);
437                 }
438                 else
439                 {
440                         ret = connection_profile_set_ip_config_type(profileHandle, CONNECTION_ADDRESS_FAMILY_IPV4, CONNECTION_IP_CONFIG_TYPE_DYNAMIC);
441                         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
442                                         "[%s] A system error has been occurred. The return value connection_profile_set_ip_config_type() is %d", GetErrorMessage(E_SYSTEM), ret);
443                 }
444         }
445
446         if (netAccountInfo.GetDnsAddressScheme() == NET_ADDRESS_SCHEME_STATIC)
447         {
448                 if (netAccountInfo.GetPrimaryDnsAddress() != null)
449                 {
450                         pDnsAddr = _StringConverter::CopyToCharArrayN(netAccountInfo.GetPrimaryDnsAddress()->ToString());
451                         SysTryCatch(NID_NET, pDnsAddr != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
452                                         "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
453
454                         ret = connection_profile_set_dns_address(profileHandle, 1, CONNECTION_ADDRESS_FAMILY_IPV4, pDnsAddr);
455                         delete[] pDnsAddr;
456                         pDnsAddr = null;
457                         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
458                                         "[%s] A system error has been occurred. The return value from connection_profile_set_dns_address() is %d", GetErrorMessage(E_SYSTEM), ret);
459                 }
460
461                 if (netAccountInfo.GetSecondaryDnsAddress() != null)
462                 {
463                         pDnsAddr = _StringConverter::CopyToCharArrayN(netAccountInfo.GetSecondaryDnsAddress()->ToString());
464                         SysTryCatch(NID_NET, pDnsAddr != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
465                                         "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
466
467                         ret = connection_profile_set_dns_address(profileHandle, 2, CONNECTION_ADDRESS_FAMILY_IPV4, pDnsAddr);
468                         delete[] pDnsAddr;
469                         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
470                                         "[%s] A system error has been occurred. The return value from connection_profile_set_dns_address() is %d", GetErrorMessage(E_SYSTEM), ret);
471                 }
472         }
473
474         if (netAccountInfo.GetProxyAddress() != null)
475         {
476                 proxyAddr = netAccountInfo.GetProxyAddress()->GetNetEndPoint();
477                 if (proxyAddr.IsEmpty() == false)
478                 {
479                         ret = connection_profile_set_proxy_type(profileHandle, CONNECTION_PROXY_TYPE_MANUAL);
480                         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
481                                         "[%s] A system error has been occurred. The return value connection_profile_set_proxy_type() is %d", GetErrorMessage(E_SYSTEM), ret);
482
483                         pProxyAddr = _StringConverter::CopyToCharArrayN(proxyAddr);
484                         SysTryCatch(NID_NET, pProxyAddr != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
485                                         "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
486
487                         ret = connection_profile_set_proxy_address(profileHandle, CONNECTION_ADDRESS_FAMILY_IPV4, pProxyAddr);
488                         delete[] pProxyAddr;
489                 }
490                 else
491                 {
492                         ret = connection_profile_set_proxy_address(profileHandle, CONNECTION_ADDRESS_FAMILY_IPV4, null);
493                 }
494         }
495         else
496         {
497                 ret = connection_profile_set_proxy_address(profileHandle, CONNECTION_ADDRESS_FAMILY_IPV4, null);
498         }
499         SysTryCatch(NID_NET, ret == CONNECTION_ERROR_NONE, r = E_SYSTEM, E_SYSTEM,
500                         "[%s] A system error has been occurred. The return value connection_profile_set_proxy_address() is %d", GetErrorMessage(E_SYSTEM), ret);
501
502         return r;
503
504 CATCH:
505         return r;
506 }