static void handle_response (CcnetProcessor *processor, char *code, char *code_msg, char *content, int clen) { SeafileCheckTxV3Proc *proc = (SeafileCheckTxV3Proc *)processor; TransferTask *task = proc->task; if (strncmp(code, SC_OK, 3) == 0) { if (proc->type == CHECK_TX_TYPE_UPLOAD) handle_upload_ok (processor, task, content, clen); else handle_download_ok (processor, task, content, clen); } else if (strncmp (code, SC_PUT_TOKEN, 3) == 0) { /* In LAN sync, we don't use session token. */ if (clen == 0) { ccnet_processor_done (processor, TRUE); return; } if (content[clen-1] != '\0') { g_warning ("Bad response content.\n"); transfer_task_set_error (task, TASK_ERR_UNKNOWN); ccnet_processor_send_update (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return; } task->session_token = g_strdup (content); ccnet_processor_send_update (processor, SC_GET_VERSION, SS_GET_VERSION, NULL, 0); } else if (strncmp (code, SC_VERSION, 3) == 0) { task->protocol_version = atoi(content); ccnet_processor_done (processor, TRUE); } else { g_warning ("[check tx v3] Bad response: %s %s", code, code_msg); if (strncmp(code, SC_ACCESS_DENIED, 3) == 0) transfer_task_set_error (task, TASK_ERR_ACCESS_DENIED); else if (strncmp(code, SC_QUOTA_ERROR, 3) == 0) transfer_task_set_error (task, TASK_ERR_CHECK_QUOTA); else if (strncmp(code, SC_QUOTA_FULL, 3) == 0) transfer_task_set_error (task, TASK_ERR_QUOTA_FULL); else if (strncmp(code, SC_PROTOCOL_MISMATCH, 3) == 0) transfer_task_set_error (task, TASK_ERR_PROTOCOL_VERSION); else if (strncmp(code, SC_BAD_REPO, 3) == 0) transfer_task_set_error (task, TASK_ERR_BAD_REPO_ID); else transfer_task_set_error (task, TASK_ERR_UNKNOWN); ccnet_processor_done (processor, FALSE); } }
static void handle_response (CcnetProcessor *processor, char *code, char *code_msg, char *content, int clen) { SeafileCheckTxV3Proc *proc = (SeafileCheckTxV3Proc *)processor; TransferTask *task = proc->task; if (strncmp(code, SC_OK, 3) == 0) { if (proc->type == CHECK_TX_TYPE_UPLOAD) handle_upload_ok (processor, task, content, clen); else handle_download_ok (processor, task, content, clen); } else if (strncmp (code, SC_PUT_TOKEN, 3) == 0) { /* In LAN sync, we don't use session token. */ if (clen == 0) { ccnet_processor_done (processor, TRUE); return; } if (content[clen-1] != '\0') { seaf_warning ("Bad response content.\n"); transfer_task_set_error (task, TASK_ERR_UNKNOWN); ccnet_processor_send_update (processor, SC_BAD_ARGS, SS_BAD_ARGS, NULL, 0); ccnet_processor_done (processor, FALSE); return; } task->session_token = g_strdup (content); ccnet_processor_send_update (processor, SC_GET_VERSION, SS_GET_VERSION, NULL, 0); } else if (strncmp (code, SC_VERSION, 3) == 0) { int server_version = atoi(content); /* There is a bug in block transfer in version 4, so it's not supported. */ if (server_version == 4) server_version = 3; task->protocol_version = MIN (server_version, CURRENT_PROTO_VERSION); if (task->protocol_version < 5) { seaf_warning ("Deprecated server protocol version %d.\n", task->protocol_version); transfer_task_set_error (task, TASK_ERR_DEPRECATED_SERVER); ccnet_processor_done (processor, FALSE); return; } if (task->repo_version == 0) task->protocol_version = 5; else if (task->protocol_version == 5) { /* Syncing version 1 reop with 2.x server is not supported. * Actually version 1 repo can only be created by 3.x servers. * If version 1 repos exist on 2.x server, it means a down-grade * operation has been performed, which is not supported. */ seaf_warning ("Syncing version %d repo with protocol version %d " "is not supported.\n", task->repo_version, task->protocol_version); transfer_task_set_error (task, TASK_ERR_DEPRECATED_SERVER); ccnet_processor_done (processor, FALSE); return; } if (task->protocol_version >= 7 && !task->server_side_merge) task->protocol_version = 6; if (task->protocol_version >= 7 && task->type == TASK_TYPE_DOWNLOAD) set_download_head_info (task); seaf_message ("repo version is %d, protocol version is %d.\n", task->repo_version, task->protocol_version); ccnet_processor_done (processor, TRUE); } else { seaf_warning ("[check tx v3] Bad response: %s %s", code, code_msg); if (strncmp(code, SC_ACCESS_DENIED, 3) == 0) transfer_task_set_error (task, TASK_ERR_ACCESS_DENIED); else if (strncmp(code, SC_QUOTA_ERROR, 3) == 0) transfer_task_set_error (task, TASK_ERR_CHECK_QUOTA); else if (strncmp(code, SC_QUOTA_FULL, 3) == 0) transfer_task_set_error (task, TASK_ERR_QUOTA_FULL); else if (strncmp(code, SC_PROTOCOL_MISMATCH, 3) == 0) transfer_task_set_error (task, TASK_ERR_PROTOCOL_VERSION); else if (strncmp(code, SC_BAD_REPO, 3) == 0) transfer_task_set_error (task, TASK_ERR_BAD_REPO_ID); else transfer_task_set_error (task, TASK_ERR_UNKNOWN); ccnet_processor_done (processor, FALSE); } }