git-svn-id: svn://db.shs.com.ru/pip@420 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -5,6 +5,7 @@ const uint PIBaseTransfer::signature = 0x54424950;
|
|||||||
|
|
||||||
PIBaseTransfer::PIBaseTransfer(): crc(standardCRC_16()), diag(false) {
|
PIBaseTransfer::PIBaseTransfer(): crc(standardCRC_16()), diag(false) {
|
||||||
header.sig = signature;
|
header.sig = signature;
|
||||||
|
crc_enabled = true;
|
||||||
header.session_id = 0;
|
header.session_id = 0;
|
||||||
packet_header_size = sizeof(PacketHeader) + customHeader().size();
|
packet_header_size = sizeof(PacketHeader) + customHeader().size();
|
||||||
part_header_size = sizeof(Part) + sizeof(int);
|
part_header_size = sizeof(Part) + sizeof(int);
|
||||||
@@ -77,7 +78,9 @@ void PIBaseTransfer::received(PIByteArray data) {
|
|||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
uint rcrc = h.crc;
|
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) {
|
if (rcrc != ccrc) {
|
||||||
header.id = h.id;
|
header.id = h.id;
|
||||||
piCoutObj << "invalid CRC";
|
piCoutObj << "invalid CRC";
|
||||||
@@ -523,7 +526,8 @@ PIByteArray PIBaseTransfer::build_packet(int id) {
|
|||||||
mutex_header.lock();
|
mutex_header.lock();
|
||||||
header.id = id + 1;
|
header.id = id + 1;
|
||||||
header.type = pt_Data;
|
header.type = pt_Data;
|
||||||
header.crc = crc.calculate(ret);
|
if (crc_enabled) header.crc = crc.calculate(ret);
|
||||||
|
else header.crc = 0;
|
||||||
hdr << header;
|
hdr << header;
|
||||||
mutex_header.unlock();
|
mutex_header.unlock();
|
||||||
ret.insert(0, hdr);
|
ret.insert(0, hdr);
|
||||||
|
|||||||
@@ -65,6 +65,9 @@ public:
|
|||||||
void setTimeout(double sec) {timeout_ = sec; diag.setDisconnectTimeout(sec);}
|
void setTimeout(double sec) {timeout_ = sec; diag.setDisconnectTimeout(sec);}
|
||||||
double timeout() const {return timeout_;}
|
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;}
|
const PIString & stateString() const {return state_string;}
|
||||||
llong bytesAll() const {return bytes_all;}
|
llong bytesAll() const {return bytes_all;}
|
||||||
llong bytesCur() const {return bytes_cur;}
|
llong bytesCur() const {return bytes_cur;}
|
||||||
@@ -89,19 +92,18 @@ public:
|
|||||||
EVENT1(sendRequest, PIByteArray &, data)
|
EVENT1(sendRequest, PIByteArray &, data)
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void buildSession(PIVector<Part> 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;
|
uint packet_header_size, part_header_size;
|
||||||
bool break_, is_sending, is_receiving, is_pause;
|
bool break_, is_sending, is_receiving, is_pause;
|
||||||
PIString state_string;
|
PIString state_string;
|
||||||
llong bytes_all, bytes_cur;
|
llong bytes_all, bytes_cur;
|
||||||
|
|
||||||
void buildSession(PIVector<Part> 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};
|
enum PacketType {pt_Unknown, pt_Data, pt_ReplySuccess, pt_ReplyInvalid, pt_Break, pt_Start, pt_Pause};
|
||||||
|
|
||||||
# pragma pack(push,1)
|
# pragma pack(push,1)
|
||||||
@@ -114,6 +116,15 @@ private:
|
|||||||
friend PIByteArray & operator >>(PIByteArray & s, PIBaseTransfer::StartRequest & v);
|
friend PIByteArray & operator >>(PIByteArray & s, PIBaseTransfer::StartRequest & v);
|
||||||
friend PIByteArray & operator <<(PIByteArray & s, const 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;
|
static const uint signature;
|
||||||
int packet_size, packets_count;
|
int packet_size, packets_count;
|
||||||
double timeout_;
|
double timeout_;
|
||||||
@@ -127,15 +138,7 @@ private:
|
|||||||
PIMutex mutex_session;
|
PIMutex mutex_session;
|
||||||
PIMutex mutex_send;
|
PIMutex mutex_send;
|
||||||
PIMutex mutex_header;
|
PIMutex mutex_header;
|
||||||
|
bool crc_enabled;
|
||||||
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);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline PIByteArray & operator <<(PIByteArray & s, const PIBaseTransfer::PacketHeader & v) {s << v.sig << v.type << v.session_id << v.id << v.crc; return s;}
|
inline PIByteArray & operator <<(PIByteArray & s, const PIBaseTransfer::PacketHeader & v) {s << v.sig << v.type << v.session_id << v.id << v.crc; return s;}
|
||||||
|
|||||||
@@ -37,6 +37,8 @@
|
|||||||
PIPeer::PeerData::PeerData(const PIString & n): PIObject(n) {
|
PIPeer::PeerData::PeerData(const PIString & n): PIObject(n) {
|
||||||
dt_in.setPacketSize(_PIPEER_MSG_SIZE);
|
dt_in.setPacketSize(_PIPEER_MSG_SIZE);
|
||||||
dt_out.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_in, sendRequest, this, dtSendRequestIn)
|
||||||
CONNECTU(&dt_out, sendRequest, this, dtSendRequestOut)
|
CONNECTU(&dt_out, sendRequest, this, dtSendRequestOut)
|
||||||
CONNECTU(&dt_in, receiveFinished, this, dtReceiveFinishedIn)
|
CONNECTU(&dt_in, receiveFinished, this, dtReceiveFinishedIn)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ Daemon::Remote::Remote(const PIString & n): PIThread() {
|
|||||||
term = 0;
|
term = 0;
|
||||||
ft.setName(n);
|
ft.setName(n);
|
||||||
ft.setPacketSize(3984);
|
ft.setPacketSize(3984);
|
||||||
|
ft.setCRCEnabled(false);
|
||||||
CONNECTU(&ft, sendRequest, this, ftSendRequest)
|
CONNECTU(&ft, sendRequest, this, ftSendRequest)
|
||||||
CONNECTU(&ft, receiveFilesFinished, this, ftReceived)
|
CONNECTU(&ft, receiveFilesFinished, this, ftReceived)
|
||||||
CONNECTU(&ft, sendFilesFinished, this, ftSended)
|
CONNECTU(&ft, sendFilesFinished, this, ftSended)
|
||||||
@@ -269,6 +270,7 @@ Daemon::Daemon(): PIPeer(pisd_prefix + PISystemInfo::instance()->hostname + "_"
|
|||||||
CONNECTU(_self, sendFinished, this, closeFileDialog)
|
CONNECTU(_self, sendFinished, this, closeFileDialog)
|
||||||
CONNECTU(_self, changeDirFinished, this, dirChanged)
|
CONNECTU(_self, changeDirFinished, this, dirChanged)
|
||||||
localft.setName(self_name);
|
localft.setName(self_name);
|
||||||
|
localft.setCRCEnabled(false);
|
||||||
CONNECTU(&localft, sendRequest, _self, received)
|
CONNECTU(&localft, sendRequest, _self, received)
|
||||||
dtimer.addDelimiter(5);
|
dtimer.addDelimiter(5);
|
||||||
dtimer.start(200);
|
dtimer.start(200);
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ public:
|
|||||||
eth.setReadAddress(src_ip_port);
|
eth.setReadAddress(src_ip_port);
|
||||||
eth.setSendAddress(dst_ip_port);
|
eth.setSendAddress(dst_ip_port);
|
||||||
if (test_) {
|
if (test_) {
|
||||||
testt.setPacketSize(1280);
|
testt.setCRCEnabled(false);
|
||||||
|
//testt.setPacketSize(1280);
|
||||||
testt.setName("TEST");
|
testt.setName("TEST");
|
||||||
//testt.setTimeout(0.1);
|
//testt.setTimeout(0.1);
|
||||||
CONNECTU(&testt, sendRequest, this, ftsend);
|
CONNECTU(&testt, sendRequest, this, ftsend);
|
||||||
@@ -40,7 +41,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void startTest() {
|
void startTest() {
|
||||||
PIByteArray ba(1024*1024*64);
|
PIByteArray ba(1024*1024*256);
|
||||||
testt.send(ba);
|
testt.send(ba);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user