diff --git a/src_main/io/pibasetransfer.cpp b/src_main/io/pibasetransfer.cpp index 9cd1cc84..745353f0 100644 --- a/src_main/io/pibasetransfer.cpp +++ b/src_main/io/pibasetransfer.cpp @@ -5,6 +5,7 @@ const uint PIBaseTransfer::signature = 0x54424950; PIBaseTransfer::PIBaseTransfer(): crc(standardCRC_16()), diag(false) { header.sig = signature; + crc_enabled = true; header.session_id = 0; packet_header_size = sizeof(PacketHeader) + customHeader().size(); part_header_size = sizeof(Part) + sizeof(int); @@ -77,7 +78,9 @@ void PIBaseTransfer::received(PIByteArray data) { return; } else { uint rcrc = h.crc; - uint ccrc = crc.calculate(data.data(), data.size_s()); + uint ccrc; + if (crc_enabled) ccrc = crc.calculate(data.data(), data.size_s()); + else ccrc = 0; if (rcrc != ccrc) { header.id = h.id; piCoutObj << "invalid CRC"; @@ -523,7 +526,8 @@ PIByteArray PIBaseTransfer::build_packet(int id) { mutex_header.lock(); header.id = id + 1; header.type = pt_Data; - header.crc = crc.calculate(ret); + if (crc_enabled) header.crc = crc.calculate(ret); + else header.crc = 0; hdr << header; mutex_header.unlock(); ret.insert(0, hdr); diff --git a/src_main/io/pibasetransfer.h b/src_main/io/pibasetransfer.h index f5001e63..52fac139 100644 --- a/src_main/io/pibasetransfer.h +++ b/src_main/io/pibasetransfer.h @@ -65,6 +65,9 @@ public: void setTimeout(double sec) {timeout_ = sec; diag.setDisconnectTimeout(sec);} double timeout() const {return timeout_;} + void setCRCEnabled(bool en = true) {crc_enabled = en;} + bool isCRCEnabled() const {return crc_enabled;} + const PIString & stateString() const {return state_string;} llong bytesAll() const {return bytes_all;} llong bytesCur() const {return bytes_cur;} @@ -89,19 +92,18 @@ public: EVENT1(sendRequest, PIByteArray &, data) protected: + void buildSession(PIVector parts); + virtual PIByteArray buildPacket(Part fi) = 0; + virtual void receivePart(Part fi, PIByteArray ba, PIByteArray pheader) = 0; + virtual PIByteArray customHeader() {return PIByteArray();} + bool send_process(); + uint packet_header_size, part_header_size; bool break_, is_sending, is_receiving, is_pause; PIString state_string; llong bytes_all, bytes_cur; - - void buildSession(PIVector parts); - virtual PIByteArray buildPacket(Part fi) = 0; - virtual void receivePart(Part fi, PIByteArray ba, PIByteArray pheader) = 0; - virtual PIByteArray customHeader() {return PIByteArray();} - bool send_process(); - -private: +private: enum PacketType {pt_Unknown, pt_Data, pt_ReplySuccess, pt_ReplyInvalid, pt_Break, pt_Start, pt_Pause}; # pragma pack(push,1) @@ -114,6 +116,15 @@ private: friend PIByteArray & operator >>(PIByteArray & s, PIBaseTransfer::StartRequest & v); friend PIByteArray & operator <<(PIByteArray & s, const PIBaseTransfer::StartRequest & v); + void processData(int id, PIByteArray &data); + PIByteArray build_packet(int id); + int checkSession(); + void sendBreak(int session_id); + void sendReply(PacketType reply); + bool getStartRequest(); + bool finish_send(bool ok); + void finish_receive(bool ok, bool quet = false); + static const uint signature; int packet_size, packets_count; double timeout_; @@ -127,15 +138,7 @@ private: PIMutex mutex_session; PIMutex mutex_send; PIMutex mutex_header; - - void processData(int id, PIByteArray &data); - PIByteArray build_packet(int id); - int checkSession(); - void sendBreak(int session_id); - void sendReply(PacketType reply); - bool getStartRequest(); - bool finish_send(bool ok); - void finish_receive(bool ok, bool quet = false); + bool crc_enabled; }; inline PIByteArray & operator <<(PIByteArray & s, const PIBaseTransfer::PacketHeader & v) {s << v.sig << v.type << v.session_id << v.id << v.crc; return s;} diff --git a/src_main/io/pipeer.cpp b/src_main/io/pipeer.cpp index a1fee1b5..232268b3 100755 --- a/src_main/io/pipeer.cpp +++ b/src_main/io/pipeer.cpp @@ -37,6 +37,8 @@ PIPeer::PeerData::PeerData(const PIString & n): PIObject(n) { dt_in.setPacketSize(_PIPEER_MSG_SIZE); dt_out.setPacketSize(_PIPEER_MSG_SIZE); + dt_in.setCRCEnabled(false); + dt_out.setCRCEnabled(false); CONNECTU(&dt_in, sendRequest, this, dtSendRequestIn) CONNECTU(&dt_out, sendRequest, this, dtSendRequestOut) CONNECTU(&dt_in, receiveFinished, this, dtReceiveFinishedIn) diff --git a/utils/system_daemon/daemon.cpp b/utils/system_daemon/daemon.cpp index 7364709b..9379a23c 100644 --- a/utils/system_daemon/daemon.cpp +++ b/utils/system_daemon/daemon.cpp @@ -12,6 +12,7 @@ Daemon::Remote::Remote(const PIString & n): PIThread() { term = 0; ft.setName(n); ft.setPacketSize(3984); + ft.setCRCEnabled(false); CONNECTU(&ft, sendRequest, this, ftSendRequest) CONNECTU(&ft, receiveFilesFinished, this, ftReceived) CONNECTU(&ft, sendFilesFinished, this, ftSended) @@ -269,6 +270,7 @@ Daemon::Daemon(): PIPeer(pisd_prefix + PISystemInfo::instance()->hostname + "_" CONNECTU(_self, sendFinished, this, closeFileDialog) CONNECTU(_self, changeDirFinished, this, dirChanged) localft.setName(self_name); + localft.setCRCEnabled(false); CONNECTU(&localft, sendRequest, _self, received) dtimer.addDelimiter(5); dtimer.start(200); diff --git a/utils/udp_file_transfer/main.cpp b/utils/udp_file_transfer/main.cpp index e1d5fa48..54bda7ca 100644 --- a/utils/udp_file_transfer/main.cpp +++ b/utils/udp_file_transfer/main.cpp @@ -14,7 +14,8 @@ public: eth.setReadAddress(src_ip_port); eth.setSendAddress(dst_ip_port); if (test_) { - testt.setPacketSize(1280); + testt.setCRCEnabled(false); + //testt.setPacketSize(1280); testt.setName("TEST"); //testt.setTimeout(0.1); CONNECTU(&testt, sendRequest, this, ftsend); @@ -40,7 +41,7 @@ public: } void startTest() { - PIByteArray ba(1024*1024*64); + PIByteArray ba(1024*1024*256); testt.send(ba); }