diff --git a/ngc_ext_common.hpp b/ngc_ext_common.hpp index a5fd94c..910cbc6 100644 --- a/ngc_ext_common.hpp +++ b/ngc_ext_common.hpp @@ -85,16 +85,66 @@ enum _PacketType : uint8_t { // - ] HS1_RESPONSE_LAST_IDS, + // request the other side to initiate a FT + // - 1 byte (file_kind) + // - X bytes (file_kind dependent id, differnt sizes) + FT1_REQUEST, + + // 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 + // - 1 byte (file_kind) + // - X bytes (file_kind dependent id, differnt sizes) + // - 8 bytes (data size) // TODO: do all file kinds have a size at init? + // - 1 byte (temporary_file_tf_id, for this peer only, technically just a prefix to distinguish between simultainious fts) + FT1_INIT, + + // acknowlage init (like an accept) + // - 1 byte (temporary_file_tf_id) + FT1_INIT_ACK, + + // data fragment + // - 1 byte (temporary_file_tf_id) + // - 2 bytes (sequece id) + // - X bytes (the data fragment) + // (size is implicit) + FT1_DATA, + + // acknowlage data fragments + // TODO: last 3 should be sufficient, 5 should be generous, would eleminate the byte for size + // - 1 byte (temporary_file_tf_id) + // - 1 byte (number of sequence ids to ack, this kind of depends on window size) + // - array [ (of sequece ids) + // - 2 bytes (sequece id) + // - ] + FT1_DATA_ACK, + + // sender has gotten every data fragment acked, so we signal finish + // - 1 byte (temporary_file_tf_id) + FT1_DATA_FIN, + + // and we ack that, we need this, so file_id is not reused earlier + // - 1 byte (temporary_file_tf_id) + FT1_DATA_FIN_ACK, }; static const char* _pkgid2str(_PacketType type) { -#define _HS1_CASE(x) case (x): return #x; +#define _EXT_CASE(x) case (x): return #x; switch (type) { - _HS1_CASE(INVALID) - _HS1_CASE(HS1_REQUEST_LAST_IDS) - _HS1_CASE(HS1_RESPONSE_LAST_IDS) + _EXT_CASE(INVALID) + + _EXT_CASE(HS1_REQUEST_LAST_IDS) + _EXT_CASE(HS1_RESPONSE_LAST_IDS) + + _EXT_CASE(FT1_REQUEST) + _EXT_CASE(FT1_INIT) + _EXT_CASE(FT1_INIT_ACK) + _EXT_CASE(FT1_DATA) + _EXT_CASE(FT1_DATA_ACK) + _EXT_CASE(FT1_DATA_FIN) + _EXT_CASE(FT1_DATA_FIN_ACK) + default: return ""; } -#undef _HS1_CASE +#undef _EXT_CASE }