MCPcopy Create free account
hub / github.com/RGAA-Software/GoDesk / ParseBinaryMessage

Method ParseBinaryMessage

src/render_panel/transfer/file_transfer.cpp:34–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

32 }
33
34 void FileTransferChannel::ParseBinaryMessage(std::string_view _data) {
35 auto msg = std::make_shared<tc::Message>();
36 std::string data(_data.data(), _data.size());
37 if (!msg->ParseFromString(data)) {
38 LOGE("Parse proto message failed");
39 return;
40 }
41
42 if (msg->type() == MessageType::kFileTransfer) {
43 auto fs = msg->file_transfer();
44
45 auto func_transfer_failed = [=, this]() {
46 tc::Message resp_msg;
47 resp_msg.set_type(MessageType::kRespFileTransfer);
48 auto resp_file_transfer = resp_msg.mutable_resp_file_transfer();
49 resp_file_transfer->set_id(fs.id());
50 resp_file_transfer->set_state(RespFileTransfer::kTransferFailed);
51 resp_file_transfer->set_filename(fs.filename());
52 PostBinaryMessage(resp_msg.SerializeAsString());
53 };
54
55 if (fs.state() == FileTransfer::kRequestFileTransfer) {
56 LOGI("Ref folder: {}", fs.ref_folder());
57 std::string file_path;
58 // with folder ?
59 if (!fs.ref_folder().empty()) {
60 QString folder_path = QString::fromStdString(settings_->file_transfer_folder_ + "/" + fs.ref_folder());
61 QDir dir(folder_path);
62 if (!dir.exists()) {
63 if (dir.mkpath(".")) {
64 } else {
65 LOGE("Create folder failed: {}", folder_path.toStdString());
66 return;
67 }
68 }
69 file_path = settings_->file_transfer_folder_ + "/" + fs.ref_path();
70 } else {
71 // 1. check file state
72 file_path = settings_->file_transfer_folder_ + "/" + fs.filename();
73 }
74 bool ready_to_transfer;
75 if (!QFile::exists(file_path.c_str())) {
76 ready_to_transfer = true;
77 } else {
78 if (File::Delete(file_path)) {
79 ready_to_transfer = true;
80 } else {
81 ready_to_transfer = false;
82 LOGE("Delete file failed: {}", file_path);
83 }
84 }
85
86 // 2. response
87 tc::Message resp_msg;
88 resp_msg.set_type(MessageType::kRespFileTransfer);
89 auto resp_file_transfer = resp_msg.mutable_resp_file_transfer();
90 resp_file_transfer->set_id(fs.id());
91 if (ready_to_transfer) {

Callers 1

ParseFtBinaryMessageMethod · 0.80

Calls 1

IsOpenMethod · 0.80

Tested by

no test coverage detected