fix PIFileTransfer
git-svn-id: svn://db.shs.com.ru/pip@73 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -36,6 +36,7 @@ void PIBaseTransfer::stopSend() {
|
||||
void PIBaseTransfer::stopReceive() {
|
||||
if (!is_receiving) return;
|
||||
break_ = true;
|
||||
// piCoutObj << "stopReceive()";
|
||||
finish_receive(false);
|
||||
}
|
||||
|
||||
@@ -46,10 +47,13 @@ void PIBaseTransfer::received(PIByteArray data) {
|
||||
diag.received(data.size(), false);
|
||||
return;
|
||||
}
|
||||
diag.received(data.size(), true);
|
||||
PacketHeader h;
|
||||
data >> h;
|
||||
PacketType pt = (PacketType)h.type;
|
||||
if (!h.check_sig()) {
|
||||
diag.received(data.size(), false);
|
||||
return;
|
||||
} else diag.received(data.size(), true);
|
||||
// piCoutObj << "receive" << h.session_id << h.type << h.id;
|
||||
switch (pt) {
|
||||
case pt_Unknown: break;
|
||||
@@ -84,6 +88,7 @@ void PIBaseTransfer::received(PIByteArray data) {
|
||||
}
|
||||
if (is_receiving && h.id == 0) {
|
||||
if (checkSession() == 0 && pt == pt_ReplySuccess) finish_receive(true);
|
||||
// if (checkSession() == 0 && pt == pt_ReplySuccess) { piCoutObj << "Success receive"; finish_receive(true);}
|
||||
}
|
||||
break;
|
||||
case pt_Break:
|
||||
@@ -103,10 +108,13 @@ void PIBaseTransfer::received(PIByteArray data) {
|
||||
sendBreak(h.session_id);
|
||||
return;
|
||||
}
|
||||
if (header.session_id != h.session_id && is_receiving) {
|
||||
// sendBreak(h.session_id);
|
||||
// return;
|
||||
finish_receive(false, true);
|
||||
if (is_receiving) {
|
||||
if (header.session_id != h.session_id) {
|
||||
// sendBreak(h.session_id);
|
||||
// return;
|
||||
// piCoutObj << "restart receive";
|
||||
finish_receive(false, true);
|
||||
} else return;
|
||||
}
|
||||
if (data.size() == sizeof(StartRequest)) {
|
||||
StartRequest sr;
|
||||
@@ -121,10 +129,11 @@ void PIBaseTransfer::received(PIByteArray data) {
|
||||
session.resize(sr.packets);
|
||||
replies.resize(sr.packets + 1);
|
||||
replies.fill(pt_Unknown);
|
||||
is_receiving = true;
|
||||
break_ = false;
|
||||
diag.reset();
|
||||
diag.start(100);
|
||||
// piCoutObj << "receiveStarted()";
|
||||
is_receiving = true;
|
||||
break_ = false;
|
||||
receiveStarted();
|
||||
replies_cnt = send_queue = 0;
|
||||
state_string = "receiving";
|
||||
@@ -140,10 +149,10 @@ void PIBaseTransfer::received(PIByteArray data) {
|
||||
bool PIBaseTransfer::send_process() {
|
||||
packet_header_size = sizeof(PacketHeader) + customHeader().size();
|
||||
break_ = false;
|
||||
is_sending = true;
|
||||
diag.reset();
|
||||
diag.start(100);
|
||||
sendStarted();
|
||||
is_sending = true;
|
||||
replies.resize(session.size() + 1);
|
||||
replies.fill(pt_Unknown);
|
||||
PIByteArray ba;
|
||||
@@ -203,6 +212,7 @@ bool PIBaseTransfer::send_process() {
|
||||
|
||||
|
||||
int PIBaseTransfer::checkSession() {
|
||||
if (!(is_receiving || is_sending)) return -1;
|
||||
int miss = 0;
|
||||
for (int i = 1; i < replies.size_s(); i++) {
|
||||
if (replies[i] != pt_ReplySuccess) miss++;
|
||||
@@ -379,35 +389,38 @@ PIByteArray PIBaseTransfer::build_packet(int id) {
|
||||
|
||||
|
||||
bool PIBaseTransfer::finish_send(bool ok) {
|
||||
is_sending = false;
|
||||
if (ok) state_string = "send done";
|
||||
else state_string = "send failed";
|
||||
// piCoutObj << state_string << PIString::readableSize(bytes_all);
|
||||
is_sending = false;
|
||||
header.id = 0;
|
||||
if (!ok) sendBreak(header.session_id);
|
||||
else sendReply(pt_ReplySuccess);
|
||||
diag.stop();
|
||||
sendFinished(ok);
|
||||
diag.stop();
|
||||
bytes_all = bytes_cur = 0;
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
void PIBaseTransfer::finish_receive(bool ok, bool quet) {
|
||||
is_receiving = false;
|
||||
if (ok) state_string = "receive done";
|
||||
else state_string = "receive failed";
|
||||
// piCoutObj << state_string << PIString::readableSize(bytes_all);
|
||||
is_receiving = false;
|
||||
// piCoutObj << state_string;// << PIString::readableSize(bytes_all);
|
||||
if (!ok && !quet) sendBreak(header.session_id);
|
||||
diag.stop();
|
||||
receiveFinished(ok);
|
||||
diag.stop();
|
||||
bytes_all = bytes_cur = 0;
|
||||
}
|
||||
|
||||
|
||||
void PIBaseTransfer::diagChanged(PIDiagnostics::Quality new_quality, PIDiagnostics::Quality old_quality) {
|
||||
if (is_receiving) {
|
||||
if (new_quality == PIDiagnostics::Failure) stopReceive();
|
||||
if (new_quality == PIDiagnostics::Failure) {
|
||||
piCout << "disconnected!";
|
||||
stopReceive();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user