more init handle
This commit is contained in:
parent
6d4ee7de42
commit
bd0c45f885
@ -42,9 +42,9 @@ enum _PacketType : uint8_t {
|
|||||||
// tell the other side you want to start a FT
|
// tell the other side you want to start a FT
|
||||||
// TODO: might use id layer instead. with it, it would look similar to friends_ft
|
// TODO: might use id layer instead. with it, it would look similar to friends_ft
|
||||||
// - 1 byte (file_kind)
|
// - 1 byte (file_kind)
|
||||||
// - X bytes (file_kind dependent id, differnt sizes)
|
|
||||||
// - 8 bytes (data size, can be 0 if unknown, BUT files have to be atleast 1 byte)
|
// - 8 bytes (data size, can be 0 if unknown, BUT files have to be atleast 1 byte)
|
||||||
// - 1 byte (temporary_file_tf_id, for this peer only, technically just a prefix to distinguish between simultainious fts)
|
// - 1 byte (temporary_file_tf_id, for this peer only, technically just a prefix to distinguish between simultainious fts)
|
||||||
|
// - X bytes (file_kind dependent id, differnt sizes)
|
||||||
FT1_INIT,
|
FT1_INIT,
|
||||||
|
|
||||||
// acknowlage init (like an accept)
|
// acknowlage init (like an accept)
|
||||||
|
68
ngc_ft1.cpp
68
ngc_ft1.cpp
@ -58,7 +58,7 @@ struct NGC_FT1 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void _handle_FT1_REQUEST(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
static void _handle_FT1_REQUEST(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
||||||
//static void _handle_FT1_INIT(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
static void _handle_FT1_INIT(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
||||||
//static void _handle_FT1_INIT_ACK(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
//static void _handle_FT1_INIT_ACK(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
||||||
//static void _handle_FT1_DATA(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
//static void _handle_FT1_DATA(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
||||||
//static void _handle_FT1_DATA_ACK(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
//static void _handle_FT1_DATA_ACK(Tox* tox, NGC_EXT_CTX* ngc_ext_ctx, uint32_t group_number, uint32_t peer_number, const uint8_t *data, size_t length);
|
||||||
@ -70,7 +70,7 @@ bool NGC_FT1_init(NGC_EXT_CTX* ngc_ext_ctx, const struct NGC_FT1_options* option
|
|||||||
ngc_ext_ctx->ngc_ft1_ctx->options = *options;
|
ngc_ext_ctx->ngc_ft1_ctx->options = *options;
|
||||||
|
|
||||||
ngc_ext_ctx->callbacks[FT1_REQUEST] = _handle_FT1_REQUEST;
|
ngc_ext_ctx->callbacks[FT1_REQUEST] = _handle_FT1_REQUEST;
|
||||||
ngc_ext_ctx->callbacks[FT1_INIT] = nullptr;
|
ngc_ext_ctx->callbacks[FT1_INIT] = _handle_FT1_INIT;
|
||||||
ngc_ext_ctx->callbacks[FT1_INIT_ACK] = nullptr;
|
ngc_ext_ctx->callbacks[FT1_INIT_ACK] = nullptr;
|
||||||
ngc_ext_ctx->callbacks[FT1_DATA] = nullptr;
|
ngc_ext_ctx->callbacks[FT1_DATA] = nullptr;
|
||||||
ngc_ext_ctx->callbacks[FT1_DATA_ACK] = nullptr;
|
ngc_ext_ctx->callbacks[FT1_DATA_ACK] = nullptr;
|
||||||
@ -187,7 +187,7 @@ bool NGC_FT1_send_init_private(
|
|||||||
|
|
||||||
// - 1 byte packet id
|
// - 1 byte packet id
|
||||||
// - 1 byte (file_kind)
|
// - 1 byte (file_kind)
|
||||||
// - 8 bytes (data size) // TODO: do all file kinds have a size at init?
|
// - 8 bytes (data size)
|
||||||
// - 1 byte (temporary_file_tf_id, for this peer only, technically just a prefix to distinguish between simultainious fts)
|
// - 1 byte (temporary_file_tf_id, for this peer only, technically just a prefix to distinguish between simultainious fts)
|
||||||
// - X bytes (file_kind dependent id, differnt sizes)
|
// - X bytes (file_kind dependent id, differnt sizes)
|
||||||
|
|
||||||
@ -259,5 +259,67 @@ static void _handle_FT1_REQUEST(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void _handle_FT1_INIT(
|
||||||
|
Tox* tox,
|
||||||
|
NGC_EXT_CTX* ngc_ext_ctx,
|
||||||
|
|
||||||
|
uint32_t group_number,
|
||||||
|
uint32_t peer_number,
|
||||||
|
|
||||||
|
const uint8_t *data,
|
||||||
|
size_t length
|
||||||
|
) {
|
||||||
|
size_t curser = 0;
|
||||||
|
|
||||||
|
// - 1 byte (file_kind)
|
||||||
|
|
||||||
|
// TODO: might be uint16_t or even larger
|
||||||
|
uint8_t file_kind_u8;
|
||||||
|
_DATA_HAVE(sizeof(file_kind_u8), fprintf(stderr, "packet too small, missing file_kind\n"); return)
|
||||||
|
file_kind_u8 = data[curser++];
|
||||||
|
auto file_kind = static_cast<NGC_FT1_file_kind>(file_kind_u8);
|
||||||
|
|
||||||
|
// - 8 bytes (data size)
|
||||||
|
size_t file_size {0u};
|
||||||
|
_DATA_HAVE(sizeof(file_size), fprintf(stderr, "packet too small, missing file_size\n"); return)
|
||||||
|
for (size_t i = 0; i < sizeof(file_size); i++, curser++) {
|
||||||
|
file_size |= size_t(data[curser]) << i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// - 1 byte (temporary_file_tf_id, for this peer only, technically just a prefix to distinguish between simultainious fts)
|
||||||
|
uint8_t transfer_id;
|
||||||
|
_DATA_HAVE(sizeof(transfer_id), fprintf(stderr, "packet too small, missing transfer_id\n"); return)
|
||||||
|
transfer_id = data[curser++];
|
||||||
|
|
||||||
|
// - X bytes (file_kind dependent id, differnt sizes)
|
||||||
|
|
||||||
|
fprintf(stderr, "got FT init with file_kind:%u file_size:%lu tf_id:%u [", file_kind_u8, file_size, transfer_id);
|
||||||
|
for (size_t curser_copy = curser; curser_copy < length; curser_copy++) {
|
||||||
|
fprintf(stderr, "%02X", data[curser_copy]);
|
||||||
|
}
|
||||||
|
fprintf(stderr, "]\n");
|
||||||
|
|
||||||
|
// check if slot free ?
|
||||||
|
|
||||||
|
NGC_FT1_recv_init_cb* fn_ptr = nullptr;
|
||||||
|
if (ngc_ext_ctx->ngc_ft1_ctx->cb_init.count(file_kind)) {
|
||||||
|
fn_ptr = ngc_ext_ctx->ngc_ft1_ctx->cb_init.at(file_kind);
|
||||||
|
}
|
||||||
|
bool accept_ft;
|
||||||
|
if (fn_ptr) {
|
||||||
|
// last part of message (file_id) is not yet parsed, just give it to cb
|
||||||
|
accept_ft = fn_ptr(tox, ngc_ext_ctx, group_number, peer_number, data+curser, length-curser, transfer_id, file_size);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "missing cb for init\n");
|
||||||
|
accept_ft = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (accept_ft) {
|
||||||
|
// send ack
|
||||||
|
} else {
|
||||||
|
// TODO deny?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#undef _DATA_HAVE
|
#undef _DATA_HAVE
|
||||||
|
|
||||||
|
@ -464,6 +464,7 @@ static bool _handle_HS1_ft_init_message(
|
|||||||
const uint8_t transfer_id,
|
const uint8_t transfer_id,
|
||||||
const size_t file_size
|
const size_t file_size
|
||||||
) {
|
) {
|
||||||
|
fprintf(stderr, "-------hs handle ft init\n");
|
||||||
return false; // deny
|
return false; // deny
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user