3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <glib-object.h>
22 #include "utility/sync_util.h"
23 #include "network-access/interface.h"
24 #include "network-access/interface_internal.h"
25 #include "network-access/external.h"
26 #include "plugin/network_access_plugin.h"
27 #include "fsapi/operation.h"
29 #include "utility/fw_mainloop.h"
30 #include "utility/fw_mainloop_internal.h"
32 #include "network-access/network_status.h"
34 #include "network-access/session_manager.h"
36 #define NA_RETRY_CNT 3
39 #define EXPORT_API __attribute__ ((visibility("default")))
42 #ifndef SYNC_AGENT_LOG
44 #define LOG_TAG "AF_NACI"
47 sync_agent_na_result_e na_init_network_access(int na_plugin_id)
51 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
53 na_init_session_manager();
54 plugin_register_fw_mainloop_na_cb func_point_register_fw_mainloop_na = plugin_get_function_register_fw_mainloop_na(na_plugin_id);
55 if (func_point_register_fw_mainloop_na == NULL) {
56 _DEBUG_ERROR("cannot get pFunc !!");
57 res = SYNC_AGENT_NA_INIT_FAIL;
59 util_register_callback_to_main_loop(func_point_register_fw_mainloop_na, NULL);
67 EXPORT_API sync_agent_na_result_e sync_agent_open_connection(int na_plugin_id, int timeout, unsigned int *session_id)
71 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
73 _DEBUG_INFO("na_plugin_id [%d]", na_plugin_id);
75 int err = na_create_session_info(&session);
77 _DEBUG_ERROR("na_create_session_info() fail !!");
78 return SYNC_AGENT_NA_OPEN_CONNECTION_FAIL;
80 _DEBUG_INFO("na_create_session_info() success !!");
83 err = na_provide_session_id(session_id);
85 _DEBUG_ERROR("na_provide_session_id() fail !!");
86 return SYNC_AGENT_NA_OPEN_CONNECTION_FAIL;
88 _DEBUG_INFO("na_provide_session_id() success !!");
89 _DEBUG_INFO("session id : %d", *session_id);
92 err = na_set_timeout(*session_id, timeout);
94 _DEBUG_ERROR("na_set_timeout() fail !!");
95 return SYNC_AGENT_NA_OPEN_CONNECTION_FAIL;
97 _DEBUG_INFO("na_set_timeout() success !!");
100 if (plugin_use_network(na_plugin_id) == 1) {
101 /* use http plug-in */
102 switch (na_get_network_status()) {
103 case SYNC_AGENT_NA_NETWORK_UNKNOWN:
104 case SYNC_AGENT_NA_NETWORK_OFF:
106 _DEBUG_ERROR("network OFF !!");
107 err = na_remove_session_info(*session_id);
109 _DEBUG_ERROR("na_remove_session_info() fail !!");
111 _DEBUG_INFO("na_remove_session_info() success !!");
113 return SYNC_AGENT_NA_NETWORK_UNAVAILABLE;
116 case SYNC_AGENT_NA_NETWORK_ON:
118 _DEBUG_INFO("network ON !!");
119 /*FW_NETWORK_TYPE fw_net_type = get_network_type(); */
120 sync_agent_na_network_connection_state_e conn_state = na_get_connection_state();
121 _DEBUG_INFO("conn_state [%d]", conn_state);
122 /*if ((fw_net_type == NETWORK_NONE) || (fw_net_type == NETWORK_3G_OFF) || (fw_net_type == NETWORK_WIFI_OFF) || (fw_net_type == NETWORK_WIFI_ON_NOT_CONNECTED)) { */
123 // if ((SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_NONE <= conn_state && conn_state <= SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_WIFI_DISCONNECTED) ||
124 if ((SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_NONE <= conn_state && conn_state <= SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_WIFI_DEACTIVATED) ||
125 (conn_state == SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_CELLULAR_OUT_OF_SERVICE) || (conn_state == SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_CELLULAR_CALL_ONLY_AVAILABLE) ||
126 (SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_ETHERNET_DEACTIVATED <= conn_state && conn_state <= SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_ETHERNET_DISCONNECTED)) {
127 _DEBUG_ERROR("network ON but not connected !!");
128 err = na_remove_session_info(*session_id);
130 _DEBUG_ERROR("na_remove_session_info() fail !!");
132 _DEBUG_INFO("na_remove_session_info() success !!");
134 return SYNC_AGENT_NA_NETWORK_UNAVAILABLE;
143 plugin_open_connection_cb func_point_open_connection = plugin_get_function_connection(na_plugin_id);
145 if (func_point_open_connection == NULL) {
146 _DEBUG_ERROR("cannot get func_point_open_connection !!");
147 return SYNC_AGENT_NA_OPEN_CONNECTION_FAIL;
150 err = func_point_open_connection(&session, na_get_proxy(), timeout);
152 _DEBUG_ERROR("Open_Connection() fail !!");
153 return SYNC_AGENT_NA_OPEN_CONNECTION_FAIL;
155 _DEBUG_INFO("Open_Connection() success !!");
158 err = na_set_session(*session_id, session);
160 _DEBUG_ERROR("na_set_session() fail !!");
161 return SYNC_AGENT_NA_OPEN_CONNECTION_FAIL;
163 _DEBUG_INFO("na_set_session() success !!");
171 EXPORT_API sync_agent_na_result_e sync_agent_close_connection(int na_plugin_id, unsigned int session_id)
175 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
176 void *session = NULL;
178 _DEBUG_INFO("session id : %d", session_id);
179 int err = na_get_session(session_id, &session);
181 _DEBUG_INFO("get session() fail !!");
182 return SYNC_AGENT_NA_CLOSE_CONNECTION_FAIL;
184 _DEBUG_INFO("get session() success !!");
187 plugin_close_connection_cb func_point_close_connection = plugin_get_function_close_connection(na_plugin_id);
189 if (func_point_close_connection == NULL) {
190 _DEBUG_ERROR("cannot get func_point_close_connection !!");
191 return SYNC_AGENT_NA_CLOSE_CONNECTION_FAIL;
194 err = func_point_close_connection(session);
196 _DEBUG_ERROR("Close_Connection() fail !!");
197 return SYNC_AGENT_NA_CLOSE_CONNECTION_FAIL;
199 _DEBUG_INFO("Close_Connection() success !!");
202 err = na_remove_session_info(session_id);
204 _DEBUG_ERROR("na_remove_session_info() fail !!");
205 return SYNC_AGENT_NA_CLOSE_CONNECTION_FAIL;
207 _DEBUG_INFO("na_remove_session_info() success !!");
215 EXPORT_API sync_agent_na_result_e sync_agent_send_msg(GList * header_info, int na_plugin_id, char *send_msg, unsigned int send_msg_length, GList ** recv_header, unsigned char **recv_msg, unsigned int *recv_msg_length, sync_agent_na_send_type_e send_type,
216 unsigned int session_id)
220 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
221 void *session = NULL;
223 int try_again_cnt = 0;
224 _DEBUG_INFO("na_plugin_id [%d]", na_plugin_id);
226 /* check current network status */
227 if (plugin_use_network(na_plugin_id) == 1) {
228 res = sync_agent_check_network_status(0, 1);
229 if (res == SYNC_AGENT_NA_NETWORK_UNAVAILABLE) {
230 _DEBUG_INFO("network is unavailable !!");
231 // int err = na_remove_session_info(session_id, 0);
233 // _DEBUG_ERROR("na_remove_session_info() fail !!");
235 // _DEBUG_INFO("na_remove_session_info() success !!");
238 } else if (res == SYNC_AGENT_NA_NETWORK_CHANGING) {
239 _DEBUG_INFO("network type is changing !!");
240 _DEBUG_INFO("retry sync_agent_check_network_status() after 3 seconds !!");
242 /* retry checking network status */
243 res = sync_agent_check_network_status(0, 1);
244 if (res == SYNC_AGENT_NA_NETWORK_UNAVAILABLE) {
245 _DEBUG_INFO("network is unavailable !!");
248 _DEBUG_INFO("network is available !!");
251 _DEBUG_INFO("network is available !!");
258 plugin_header_binding_cb func_point_header_binding = plugin_get_function_header_binding(na_plugin_id);
260 if (func_point_header_binding == NULL) {
261 _DEBUG_ERROR("cannot get func_point_header_binding !!");
262 return SYNC_AGENT_NA_HEADER_BINDING_FAIL;
265 int err = na_get_msg(session_id, &msg);
267 _DEBUG_ERROR("na_get_msg() fail !!");
268 return SYNC_AGENT_NA_HEADER_BINDING_FAIL;
270 _DEBUG_INFO("na_get_msg() success !!");
273 unsigned int recv_msg_size = 0;
275 err = func_point_header_binding(header_info, &msg);
277 _DEBUG_ERROR("Header_Binding() fail !!");
278 return SYNC_AGENT_NA_HEADER_BINDING_FAIL;
280 _DEBUG_INFO("Header_Binding() success !!");
286 err = na_get_session(session_id, &session);
288 _DEBUG_ERROR("na_get_session() fail !!");
289 return SYNC_AGENT_NA_SEND_MSG_FAIL;
291 _DEBUG_INFO("na_get_session() success !!");
294 if (send_type == SYNC_AGENT_NA_SEND_TYPE_SEND_N_RECEIVE) {
295 plugin_send_message_cb func_point_send_message = plugin_get_function_send_message(na_plugin_id);
297 if (func_point_send_message == NULL) {
298 _DEBUG_ERROR("cannot get func_point_send_message !!");
299 return SYNC_AGENT_NA_SEND_MSG_FAIL;
303 err = func_point_send_message(session, &msg, send_msg, send_msg_length, &recv_msg_size);
305 if (err == -408) { /* FIXME : request time-out (temporary) */
306 _DEBUG_ERROR("request time-out !!");
307 return SYNC_AGENT_NA_TIME_OUT_SEND_MSG;
308 } else if (err == -1) { /* FIXME : cancel message (temporary) */
309 _DEBUG_INFO("send message canceled !!");
310 return SYNC_AGENT_NA_SEND_MSG_CANCEL;
311 } else if (err == -8) { /* try again - retry 3 times */
312 _DEBUG_ERROR("send message try again ( %d ) !!", try_again_cnt);
314 if (try_again_cnt < NA_RETRY_CNT) {
315 _DEBUG_INFO("re-make session !!");
322 plugin_open_connection_cb func_point_open_connection = plugin_get_function_connection(na_plugin_id);
323 if (func_point_open_connection == NULL) {
324 _DEBUG_ERROR("cannot get func_point_open_connection !!");
325 return SYNC_AGENT_NA_SEND_MSG_TRY_AGAIN;
329 int er = na_get_timeout(session_id, &timeout);
331 _DEBUG_ERROR("na_get_timeout() fail !!");
332 return SYNC_AGENT_NA_SEND_MSG_TRY_AGAIN;
335 err = func_point_open_connection(&session, na_get_proxy(), timeout);
337 _DEBUG_ERROR("Open_Connection() fail !!");
338 return SYNC_AGENT_NA_SEND_MSG_TRY_AGAIN;
340 _DEBUG_INFO("Open_Connection() success !!");
343 err = na_set_session(session_id, session);
345 _DEBUG_ERROR("na_set_session() fail !!");
346 return SYNC_AGENT_NA_SEND_MSG_TRY_AGAIN;
348 _DEBUG_INFO("na_set_session() success !!");
353 _DEBUG_ERROR("try again count over 3 times !!");
354 _DEBUG_ERROR("Send_Messasge() fail !!");
356 return SYNC_AGENT_NA_SEND_MSG_TRY_AGAIN;
358 } else if (err == -10) { /* untrusted certificate */
359 _DEBUG_INFO("untrusted certificate !!");
360 return SYNC_AGENT_NA_UNTRUSTED_CERTIFICATE;
362 _DEBUG_ERROR("Send_Message() fail !! : %d", err);
363 return SYNC_AGENT_NA_SEND_MSG_FAIL;
366 _DEBUG_INFO("Send_Message success !!");
368 } else if (send_type == SYNC_AGENT_NA_SEND_TYPE_JUST_SEND) {
369 plugin_just_send_message_cb func_point_just_send_message = plugin_get_function_just_send_message(na_plugin_id);
371 if (func_point_just_send_message == NULL) {
372 _DEBUG_ERROR("cannot get func_point_just_send_message !!");
373 return SYNC_AGENT_NA_JUST_SEND_MSG_FAIL;
376 err = func_point_just_send_message(session, &msg, send_msg, send_msg_length);
378 _DEBUG_ERROR("Just_Send_Message() fail !!");
379 return SYNC_AGENT_NA_JUST_SEND_MSG_FAIL;
381 _DEBUG_INFO("Just_Send_Message() success !!");
390 plugin_header_unbinding_cb func_point_header_unbinding = plugin_get_function_header_unbinding(na_plugin_id);
392 if (func_point_header_unbinding == NULL) {
393 _DEBUG_ERROR("cannot get func_point_header_unbinding !!");
394 return SYNC_AGENT_NA_HEADER_UNBINDING_FAIL;
398 * extract header/body information using message from server
400 err = func_point_header_unbinding(msg, recv_msg_size, recv_header, recv_msg, recv_msg_length);
402 _DEBUG_ERROR("Header_Unbinding() fail !!");
403 return SYNC_AGENT_NA_HEADER_UNBINDING_FAIL;
405 _DEBUG_INFO("Header_Unbinding() success !!");
413 EXPORT_API sync_agent_na_result_e sync_agent_cancel_msg(int na_plugin_id, unsigned int session_id)
417 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
418 void *session = NULL;
420 plugin_cancel_message_cb func_point_cancel_message = plugin_get_function_cancel_message(na_plugin_id);
422 if (func_point_cancel_message == NULL) {
423 _DEBUG_ERROR("cannot get func_point_cancel_message !!");
425 return SYNC_AGENT_NA_FAIL;
428 int err = na_get_session(session_id, &session);
430 _DEBUG_ERROR("na_get_session() fail !!");
431 return SYNC_AGENT_NA_CANCEL_MSG_FAIL;
433 _DEBUG_INFO("na_get_session() success !!");
436 _DEBUG_INFO("session id : %d", session_id);
437 err = func_point_cancel_message(session);
439 _DEBUG_ERROR("Cancel_Message() fail !!");
440 return SYNC_AGENT_NA_CANCEL_MSG_FAIL;
442 _DEBUG_INFO("Cancel_Message() success !!");
450 EXPORT_API sync_agent_na_result_e sync_agent_destroy_netowk_access()
454 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
456 na_destroy_session_manager();
463 EXPORT_API sync_agent_na_result_e sync_agent_get_header_info(int na_plugin_id, GList * header_info, char *key, char **value)
467 retvm_if(header_info == NULL, SYNC_AGENT_NA_FAIL, "GList is NULL !!");
469 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
471 plugin_get_header_info_cb func_point_get_header_info = plugin_get_function_get_header_info(na_plugin_id);
473 if (func_point_get_header_info == NULL) {
474 _DEBUG_ERROR("cannot get func_point_get_header_info !!");
476 return SYNC_AGENT_NA_FAIL;
479 int err = func_point_get_header_info(header_info, key, value);
481 _DEBUG_ERROR("Get_Header_Info() fail !!");
482 return SYNC_AGENT_NA_GET_HEADER_INFO_FAIL;
484 _DEBUG_INFO("Get_Header_Info() success !!");
492 sync_agent_na_result_e na_free_recv_header_info(GList * header_info)
496 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
498 if (header_info != NULL) {
500 sync_agent_na_common_header_info_s *iter_data;
502 for (iter = header_info; iter != NULL;) {
504 iter_data = ((sync_agent_na_common_header_info_s *) (iter->data));
506 iter = g_list_next(iter);
507 header_info = g_list_remove(header_info, iter_data);
509 if (iter_data->key != NULL)
510 free(iter_data->key);
511 if (iter_data->value != NULL)
512 free(iter_data->value);
516 g_list_free(header_info);
518 _DEBUG_INFO("header_info is free !!");
520 _DEBUG_INFO("header_info is NULL !!");
528 EXPORT_API sync_agent_na_result_e sync_agent_check_network_status(int interval, int retry_cnt)
532 retvm_if(interval < 0, SYNC_AGENT_NA_FAIL, "interval paramter is 0 !!!");
534 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
537 for (; i < retry_cnt; i++) {
538 switch (na_get_network_status()) {
539 case SYNC_AGENT_NA_NETWORK_UNKNOWN:
540 case SYNC_AGENT_NA_NETWORK_OFF:
542 _DEBUG_ERROR("network OFF !!");
543 res = SYNC_AGENT_NA_NETWORK_UNAVAILABLE;
546 case SYNC_AGENT_NA_NETWORK_ON:
548 _DEBUG_INFO("[%s] network ON \n", __func__);
549 /*FW_NETWORK_TYPE fw_net_type = get_network_type(); */
550 sync_agent_na_network_connection_state_e conn_state = na_get_connection_state();
551 _DEBUG_INFO("conn_state [%d]", conn_state);
552 /*if ((fw_net_type == NETWORK_NONE) || (fw_net_type == NETWORK_3G_OFF) || (fw_net_type == NETWORK_WIFI_OFF) || (fw_net_type == NETWORK_WIFI_ON_NOT_CONNECTED)) { */
553 //if ((SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_NONE <= conn_state && conn_state <= SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_WIFI_DISCONNECTED) ||
554 if ((SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_NONE <= conn_state && conn_state <= SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_WIFI_DEACTIVATED) ||
555 (conn_state == SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_CELLULAR_OUT_OF_SERVICE) || (conn_state == SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_CELLULAR_CALL_ONLY_AVAILABLE) ||
556 (SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_ETHERNET_DEACTIVATED <= conn_state && conn_state <= SYNC_AGENT_NA_NETWORK_CONNECTION_STATE_ETHERNET_DISCONNECTED)) {
557 _DEBUG_ERROR("network ON but not connected !!");
558 res = SYNC_AGENT_NA_NETWORK_UNAVAILABLE;
560 res = SYNC_AGENT_NA_SUCCESS;
566 case SYNC_AGENT_NA_NETWORK_CHANGE:
568 _DEBUG_INFO("[%s] network CHANGE \n", __func__);
569 res = SYNC_AGENT_NA_NETWORK_CHANGING;
585 EXPORT_API sync_agent_na_result_e sync_agent_get_connection_type(int *conn_type)
589 retvm_if(conn_type == NULL, SYNC_AGENT_NA_FAIL, "conn_type paramter is NULL !!!");
591 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
593 *conn_type = na_get_connection_type();
594 _DEBUG_INFO("current connection type : %d", *conn_type);
601 EXPORT_API sync_agent_na_result_e sync_agent_get_connection_state(int *conn_state)
605 retvm_if(conn_state == NULL, SYNC_AGENT_NA_FAIL, "conn_state paramter is NULL !!!");
607 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
609 *conn_state = na_get_connection_state();
610 _DEBUG_INFO("current connection state : %d", *conn_state);
617 sync_agent_na_result_e na_download_data(GList * header_info, int na_plugin_id, unsigned char *download_folder, unsigned int download_start_size, unsigned int download_body_size, unsigned char **out_download_path, sync_agent_na_send_type_e send_type,
618 unsigned int session_id)
622 retvm_if(header_info == NULL, SYNC_AGENT_NA_FAIL, "GList is NULL !!");
623 retvm_if(download_folder == NULL, SYNC_AGENT_NA_FAIL, "download folder path is NULL !!");
625 GList *recv_header_info = 0;
626 /* char *recvMsg = 0; */
627 unsigned char *recvMsg = NULL;
628 unsigned int recvMsg_size = 0;
630 unsigned int download_current_size = download_start_size;
631 /* unsigned int download_total_size = 0; */
632 int download_total_size = 0;
633 char *current_download_range = NULL;
634 char *download_file_name = NULL;
636 GList *backup_send_head_info_list = NULL;
639 int count = 0; /* for test log */
640 sync_agent_na_result_e ret = SYNC_AGENT_NA_SUCCESS;
641 while (download_total_size == 0 || download_current_size < download_total_size - 1) {
643 _DEBUG_INFO("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
644 _DEBUG_INFO("############# %d th download", ++count);
645 _DEBUG_INFO("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
647 /* back up the header list TODO */
648 /* GSList *backup_send_head_info_list = 0; */
649 backup_send_head_info_list = NULL;
651 for (iter = header_info; iter != NULL; iter = g_list_next(iter)) {
652 sync_agent_na_common_header_info_s *header_item_info = (sync_agent_na_common_header_info_s *) calloc(1, sizeof(sync_agent_na_common_header_info_s));
653 if (header_item_info == NULL) {
654 _DEBUG_ERROR("calloc failed !!");
655 ret = SYNC_AGENT_NA_DOWNLOAD_DATA_FAIL;
659 if (((sync_agent_na_common_header_info_s *) (iter->data))->key != NULL) {
660 header_item_info->key = strdup(((sync_agent_na_common_header_info_s *) (iter->data))->key);
662 if (((sync_agent_na_common_header_info_s *) (iter->data))->value != NULL) {
663 header_item_info->value = strdup(((sync_agent_na_common_header_info_s *) (iter->data))->value);
665 _DEBUG_ERROR("key : %s, value is NULL !!", header_item_info->key);
666 header_item_info->value = NULL;
669 backup_send_head_info_list = g_list_append(backup_send_head_info_list, header_item_info);
671 _DEBUG_ERROR("key is NULL !!");
672 //header_item_info->key = NULL;
673 //header_item_info->value = NULL;
674 free(header_item_info);
675 header_item_info = NULL;
678 /*backup_send_head_info_list = g_list_append(backup_send_head_info_list, header_item_info); */
680 if (header_item_info->key != NULL) {
681 if (strcmp(header_item_info->key, "Range") == 0)
682 _DEBUG_INFO("[Before] key : %s, value : %s", header_item_info->key, header_item_info->value);
688 ret = sync_agent_send_msg(backup_send_head_info_list, na_plugin_id, 0, 0, &recv_header_info, &recvMsg, &recvMsg_size, send_type, session_id);
689 if (ret != SYNC_AGENT_NA_SUCCESS) {
690 _DEBUG_ERROR("sync_agent_send_msg() fail");
691 ret = SYNC_AGENT_NA_DOWNLOAD_DATA_FAIL;
695 _DEBUG_INFO("RecvMSg_Size = %d", recvMsg_size);
696 _DEBUG_INFO("############# sync_agent_send_msg() success !!");
698 /* get download total size, download current range */
699 plugin_get_data_download_info_cb func_point_get_data_down_info = plugin_get_function_get_data_download_info(na_plugin_id);
700 if (func_point_get_data_down_info == NULL) {
701 _DEBUG_ERROR("cannot get func_point_get_data_down_info !!");
702 ret = SYNC_AGENT_NA_DOWNLOAD_DATA_FAIL;
706 ret = func_point_get_data_down_info(header_info, recv_header_info, &download_total_size, ¤t_download_range, &download_file_name);
707 if (ret != SYNC_AGENT_NA_SUCCESS) {
708 _DEBUG_ERROR("Get_Data_Down_Info() fail !!");
709 ret = SYNC_AGENT_NA_DOWNLOAD_DATA_FAIL;
713 _DEBUG_INFO("############# Get_Data_Down_Info() success !!");
714 if (current_download_range == NULL || download_total_size == 0 || download_file_name == NULL) {
715 _DEBUG_ERROR("current_download_range == NULL || download_total_size == 0 || download_file_name == NULL");
716 ret = SYNC_AGENT_NA_DOWNLOAD_DATA_FAIL;
720 _DEBUG_INFO("download_total_size = %d", download_total_size);
721 _DEBUG_INFO("current_download_range = %s", current_download_range);
722 _DEBUG_INFO("download_file_name = %s", download_file_name);
724 /* download path setting */
725 if (*out_download_path == NULL) {
726 *out_download_path = (unsigned char *)g_strdup_printf("%s/%s", download_folder, download_file_name);
727 _DEBUG_INFO("*out_download_path = %s", *out_download_path);
730 /* increment download count */
732 /* int down_size = 0; */
733 char *ptr = strtok(current_download_range, del);
739 _DEBUG_INFO("start_size = %s", ptr);
740 start_size = atoi(ptr);
742 ptr = strtok(NULL, del);
743 _DEBUG_INFO("end_size = %s", ptr);
744 end_size = atoi(ptr);
746 _DEBUG_INFO("prev download_current_size = %d", download_current_size);
747 _DEBUG_INFO("Gap = %d", end_size - start_size);
749 download_current_size += (end_size - start_size + 1);
750 _DEBUG_INFO("after download_current_size = %d", download_current_size);
753 bool isFinal = false;
754 if (download_current_size >= download_total_size - 1)
758 _DEBUG_INFO("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! RecvMSg_Size = %d", recvMsg_size);
759 ret = sync_agent_append_file((char *)(*out_download_path), (char *)recvMsg, recvMsg_size, false);
760 if (ret != SYNC_AGENT_NA_SUCCESS) {
761 _DEBUG_ERROR("sync_agent_write_file() fail !!");
762 ret = SYNC_AGENT_NA_DOWNLOAD_DATA_FAIL;
765 _DEBUG_INFO("############# sync_agent_write_file() success !!");
768 /* set download total size, download current range */
769 plugin_set_data_download_info_cb func_point_set_data_down_info = plugin_get_function_set_data_download_info(na_plugin_id);
770 if (func_point_set_data_down_info == NULL) {
771 _DEBUG_ERROR("cannot get func_point_set_data_down_info !!");
772 ret = SYNC_AGENT_NA_DOWNLOAD_DATA_FAIL;
776 char *new_download_range = g_strdup_printf("%d-%d", download_current_size, download_current_size + (download_body_size - 1));
777 ret = func_point_set_data_down_info(header_info, new_download_range);
778 if (ret != SYNC_AGENT_NA_SUCCESS) {
779 _DEBUG_ERROR("Set_Data_Down_Info() fail !!");
780 ret = SYNC_AGENT_NA_DOWNLOAD_DATA_FAIL;
784 _DEBUG_INFO("############# Set_Data_Down_Info() success !!");
790 if (backup_send_head_info_list != NULL) {
791 sync_agent_na_result_e result = na_free_recv_header_info(backup_send_head_info_list);
792 if (result != SYNC_AGENT_NA_SUCCESS)
793 _DEBUG_ERROR("na_free_recv_header_info() fail !!");
801 EXPORT_API sync_agent_na_result_e sync_agent_add_authentication_info(int na_plugin_id, char *id, char *password, unsigned int session_id)
805 retvm_if(id == NULL, SYNC_AGENT_NA_FAIL, "id is NULL !!");
806 retvm_if(password == NULL, SYNC_AGENT_NA_FAIL, "password is NULL !!");
808 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
809 void *session = NULL;
811 plugin_add_authentication_info_cb func_point_add_authentication_info = plugin_get_function_add_authentication_info(na_plugin_id);
813 if (func_point_add_authentication_info == NULL) {
814 _DEBUG_ERROR("cannot get func_point_add_authentication_info !!");
815 return SYNC_AGENT_NA_ADD_AUTH_INFO_FAIL;
818 int err = na_get_session(session_id, &session);
820 _DEBUG_ERROR("na_get_session() fail !!");
821 return SYNC_AGENT_NA_ADD_AUTH_INFO_FAIL;
823 _DEBUG_INFO("na_get_session() success !!");
826 _DEBUG_INFO("session id : %d", session_id);
828 err = func_point_add_authentication_info(session, id, password);
830 _DEBUG_ERROR("Add_Authentication_Info() fail !!");
831 return SYNC_AGENT_NA_ADD_AUTH_INFO_FAIL;
833 _DEBUG_INFO("Add_Authentication_Info() success !!");
841 sync_agent_na_result_e na_set_property(int na_plugin_id, unsigned int session_id, sync_agent_na_property_e property, ...)
845 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
846 void *session = NULL;
849 plugin_set_property_cb func_point_set_property = plugin_get_function_set_property(na_plugin_id);
851 if (func_point_set_property == NULL) {
852 _DEBUG_ERROR("cannot get SetProperty !!");
853 return SYNC_AGENT_NA_FAIL;
856 int err = na_get_session(session_id, &session);
858 _DEBUG_ERROR("na_get_session() fail !!");
859 return SYNC_AGENT_NA_FAIL;
861 _DEBUG_INFO("na_get_session() success !!");
864 _DEBUG_INFO("session id : %d", session_id);
866 va_start(va, property);
867 err = func_point_set_property(session, property, va);
869 _DEBUG_ERROR("SetProperty() fail !!");
871 return SYNC_AGENT_NA_FAIL;
873 _DEBUG_INFO("SetProperty() success !!");
882 EXPORT_API sync_agent_na_result_e sync_agent_get_status(int na_plugin_id, unsigned int session_id, sync_agent_na_status_e status, ...)
886 sync_agent_na_result_e res = SYNC_AGENT_NA_SUCCESS;
887 void *session = NULL;
890 plugin_get_status_cb func_point_get_status = plugin_get_function_get_status(na_plugin_id);
892 if (func_point_get_status == NULL) {
893 _DEBUG_ERROR("cannot get func_point_get_status !!");
894 return SYNC_AGENT_NA_FAIL;
897 int err = na_get_session(session_id, &session);
899 _DEBUG_ERROR("na_get_session() fail !!");
900 return SYNC_AGENT_NA_FAIL;
902 _DEBUG_INFO("na_get_session() success !!");
905 _DEBUG_INFO("session id : %d", session_id);
907 va_start(va, status);
908 err = func_point_get_status(session, status, va);
910 _DEBUG_ERROR("GetStatus() fail !!");
912 return SYNC_AGENT_NA_FAIL;
914 _DEBUG_INFO("GetStatus() success !!");
923 EXPORT_API void sync_agent_free_na_common_header_info(sync_agent_na_common_header_info_s * header_info)
927 if (header_info == NULL)
930 if (header_info->key != NULL) {
931 free(header_info->key);
933 if (header_info->value != NULL) {
934 free(header_info->value);