Compare commits
3 Commits
fd094b157f
...
4aab6e489d
Author | SHA1 | Date | |
---|---|---|---|
4aab6e489d | |||
5e884fd3ee | |||
9a4be575ba |
@ -78,7 +78,7 @@ bool NGCEXTEventProvider::parse_ft1_init(
|
|||||||
e.file_size = 0u;
|
e.file_size = 0u;
|
||||||
_DATA_HAVE(sizeof(e.file_size), std::cerr << "NGCEXT: packet too small, missing file_size\n"; return false)
|
_DATA_HAVE(sizeof(e.file_size), std::cerr << "NGCEXT: packet too small, missing file_size\n"; return false)
|
||||||
for (size_t i = 0; i < sizeof(e.file_size); i++, curser++) {
|
for (size_t i = 0; i < sizeof(e.file_size); i++, curser++) {
|
||||||
e.file_size |= size_t(data[curser]) << (i*8);
|
e.file_size |= uint64_t(data[curser]) << (i*8);
|
||||||
}
|
}
|
||||||
|
|
||||||
// - 1 byte (temporary_file_tf_id)
|
// - 1 byte (temporary_file_tf_id)
|
||||||
|
@ -30,6 +30,7 @@ namespace Events {
|
|||||||
uint32_t peer_number;
|
uint32_t peer_number;
|
||||||
|
|
||||||
// respond to a request with 0 or more message ids, sorted by newest first
|
// respond to a request with 0 or more message ids, sorted by newest first
|
||||||
|
|
||||||
// - peer_key bytes (the msg_ids are from)
|
// - peer_key bytes (the msg_ids are from)
|
||||||
ToxKey peer_key;
|
ToxKey peer_key;
|
||||||
|
|
||||||
@ -47,6 +48,7 @@ namespace Events {
|
|||||||
uint32_t peer_number;
|
uint32_t peer_number;
|
||||||
|
|
||||||
// request the other side to initiate a FT
|
// request the other side to initiate a FT
|
||||||
|
|
||||||
// - 4 byte (file_kind)
|
// - 4 byte (file_kind)
|
||||||
uint32_t file_kind;
|
uint32_t file_kind;
|
||||||
|
|
||||||
@ -59,6 +61,7 @@ namespace Events {
|
|||||||
uint32_t peer_number;
|
uint32_t peer_number;
|
||||||
|
|
||||||
// tell the other side you want to start a FT
|
// tell the other side you want to start a FT
|
||||||
|
|
||||||
// - 4 byte (file_kind)
|
// - 4 byte (file_kind)
|
||||||
uint32_t file_kind;
|
uint32_t file_kind;
|
||||||
|
|
||||||
@ -88,6 +91,7 @@ namespace Events {
|
|||||||
uint32_t peer_number;
|
uint32_t peer_number;
|
||||||
|
|
||||||
// data fragment
|
// data fragment
|
||||||
|
|
||||||
// - 1 byte (temporary_file_tf_id)
|
// - 1 byte (temporary_file_tf_id)
|
||||||
uint8_t transfer_id;
|
uint8_t transfer_id;
|
||||||
|
|
||||||
|
@ -210,13 +210,13 @@ void NGCFT1::iteratePeer(float time_delta, uint32_t group_number, uint32_t peer_
|
|||||||
if (transfer.state == Group::Peer::RecvTransfer::State::FINISHING) {
|
if (transfer.state == Group::Peer::RecvTransfer::State::FINISHING) {
|
||||||
transfer.finishing_timer -= time_delta;
|
transfer.finishing_timer -= time_delta;
|
||||||
if (transfer.finishing_timer <= 0.f) {
|
if (transfer.finishing_timer <= 0.f) {
|
||||||
dispatch(
|
//dispatch(
|
||||||
NGCFT1_Event::recv_done,
|
// NGCFT1_Event::recv_done,
|
||||||
Events::NGCFT1_recv_done{
|
// Events::NGCFT1_recv_done{
|
||||||
group_number, peer_number,
|
// group_number, peer_number,
|
||||||
uint8_t(idx)
|
// uint8_t(idx)
|
||||||
}
|
// }
|
||||||
);
|
//);
|
||||||
|
|
||||||
peer.recv_transfers.at(idx).reset();
|
peer.recv_transfers.at(idx).reset();
|
||||||
}
|
}
|
||||||
@ -543,7 +543,7 @@ bool NGCFT1::onEvent(const Events::NGCEXT_ft1_init_ack& e) {
|
|||||||
|
|
||||||
bool NGCFT1::onEvent(const Events::NGCEXT_ft1_data& e) {
|
bool NGCFT1::onEvent(const Events::NGCEXT_ft1_data& e) {
|
||||||
#if !NDEBUG
|
#if !NDEBUG
|
||||||
//std::cout << "NGCFT1: got FT1_DATA\n";
|
//std::cout << "NGCFT1: got FT1_DATA " << e.sequence_id << "\n";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (e.data.empty()) {
|
if (e.data.empty()) {
|
||||||
@ -602,6 +602,14 @@ bool NGCFT1::onEvent(const Events::NGCEXT_ft1_data& e) {
|
|||||||
// TODO: keep around for remote timeout + delay + offset, so we can be sure all acks where received
|
// TODO: keep around for remote timeout + delay + offset, so we can be sure all acks where received
|
||||||
// or implement a dedicated finished that needs to be acked
|
// or implement a dedicated finished that needs to be acked
|
||||||
transfer.finishing_timer = 0.5f; // TODO: we are receiving, we dont know delay
|
transfer.finishing_timer = 0.5f; // TODO: we are receiving, we dont know delay
|
||||||
|
|
||||||
|
dispatch(
|
||||||
|
NGCFT1_Event::recv_done,
|
||||||
|
Events::NGCFT1_recv_done{
|
||||||
|
e.group_number, e.peer_number,
|
||||||
|
e.transfer_id
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -687,14 +687,13 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_request& e) {
|
|||||||
// TODO: queue instead
|
// TODO: queue instead
|
||||||
//queueUpRequestInfo(e.group_number, e.peer_number, info_hash);
|
//queueUpRequestInfo(e.group_number, e.peer_number, info_hash);
|
||||||
uint8_t transfer_id {0};
|
uint8_t transfer_id {0};
|
||||||
_nft.NGC_FT1_send_init_private(
|
if (_nft.NGC_FT1_send_init_private(
|
||||||
e.group_number, e.peer_number,
|
e.group_number, e.peer_number,
|
||||||
static_cast<uint32_t>(e.file_kind),
|
static_cast<uint32_t>(e.file_kind),
|
||||||
e.file_id, e.file_id_size,
|
e.file_id, e.file_id_size,
|
||||||
o.get<Components::FT1InfoSHA1Data>().data.size(),
|
o.get<Components::FT1InfoSHA1Data>().data.size(),
|
||||||
&transfer_id
|
&transfer_id
|
||||||
);
|
)) {
|
||||||
|
|
||||||
_sending_transfers.emplaceInfo(
|
_sending_transfers.emplaceInfo(
|
||||||
e.group_number, e.peer_number,
|
e.group_number, e.peer_number,
|
||||||
transfer_id,
|
transfer_id,
|
||||||
@ -702,6 +701,7 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_request& e) {
|
|||||||
o.get<Components::FT1InfoSHA1Data>().data
|
o.get<Components::FT1InfoSHA1Data>().data
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const auto c = _tcm.getContactGroupPeer(e.group_number, e.peer_number);
|
const auto c = _tcm.getContactGroupPeer(e.group_number, e.peer_number);
|
||||||
_tox_peer_to_contact[combine_ids(e.group_number, e.peer_number)] = c; // workaround
|
_tox_peer_to_contact[combine_ids(e.group_number, e.peer_number)] = c; // workaround
|
||||||
@ -855,6 +855,7 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_init& e) {
|
|||||||
|
|
||||||
bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_data& e) {
|
bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_data& e) {
|
||||||
if (!_receiving_transfers.containsPeerTransfer(e.group_number, e.peer_number, e.transfer_id)) {
|
if (!_receiving_transfers.containsPeerTransfer(e.group_number, e.peer_number, e.transfer_id)) {
|
||||||
|
std::cerr << "SHA1_NGCFT1 waring: unknown transfer " << e.transfer_id << " from " << e.group_number << ":" << e.peer_number << "\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -862,6 +863,7 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_data& e) {
|
|||||||
|
|
||||||
transfer.time_since_activity = 0.f;
|
transfer.time_since_activity = 0.f;
|
||||||
if (transfer.isInfo()) {
|
if (transfer.isInfo()) {
|
||||||
|
std::cout << "SHA1_NGCFT1: got info data " << e.data_size << "@" << e.data_offset << " from " << e.group_number << ":" << e.peer_number << "\n";
|
||||||
auto& info_data = transfer.getInfo().info_data;
|
auto& info_data = transfer.getInfo().info_data;
|
||||||
for (size_t i = 0; i < e.data_size && i + e.data_offset < info_data.size(); i++) {
|
for (size_t i = 0; i < e.data_size && i + e.data_offset < info_data.size(); i++) {
|
||||||
info_data[i+e.data_offset] = e.data[i];
|
info_data[i+e.data_offset] = e.data[i];
|
||||||
@ -875,6 +877,7 @@ bool SHA1_NGCFT1::onEvent(const Events::NGCFT1_recv_data& e) {
|
|||||||
|
|
||||||
auto* file2 = objGetFile2Write(o);
|
auto* file2 = objGetFile2Write(o);
|
||||||
if (file2 == nullptr) {
|
if (file2 == nullptr) {
|
||||||
|
std::cerr << "SHA1_NGCFT1 error: writing file failed, no file object\n";
|
||||||
return false; // early out
|
return false; // early out
|
||||||
}
|
}
|
||||||
if (!file2->write({e.data, e.data_size}, offset_into_file + e.data_offset)) {
|
if (!file2->write({e.data, e.data_size}, offset_into_file + e.data_offset)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user