diff --git a/ngc_ext_common.cpp b/ngc_ext_common.cpp deleted file mode 100644 index 625aebf..0000000 --- a/ngc_ext_common.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include "./ngc_ext_common.hpp" - -//#include -//#include -#include -//#include -//#include -//#include -//#include -//#include - - -bool _GroupKey::operator<(const _GroupKey& rhs) const { - for (size_t i = 0; i < data.size(); i++) { - if (data[i] < rhs.data[i]) { - return true; - } else if (data[i] > rhs.data[i]) { - return false; - } - } - return false; // equal -} - -bool _GroupKey::operator==(const _GroupKey& rhs) const { - for (size_t i = 0; i < data.size(); i++) { - if (data[i] != rhs.data[i]) { - return false; - } - } - return true; -} - -bool _PeerKey::operator<(const _PeerKey& rhs) const { - for (size_t i = 0; i < data.size(); i++) { - if (data[i] < rhs.data[i]) { - return true; - } else if (data[i] > rhs.data[i]) { - return false; - } - } - return false; // equal -} - -bool _PeerKey::operator==(const _PeerKey& rhs) const { - for (size_t i = 0; i < data.size(); i++) { - if (data[i] != rhs.data[i]) { - return false; - } - } - return true; -} - - -NGC_EXT_CTX* NGC_EXT_new(void) { - auto* ctx = new NGC_EXT_CTX; - // TODO: this is likely not necessary - for (auto& it : ctx->callbacks) { - it = nullptr; - } - return ctx; -} - -void NGC_EXT_kill(NGC_EXT_CTX* ngc_ext_ctx) { - delete ngc_ext_ctx; -} - -#define _EXT_HAVE(x, error) if ((length - curser) < (x)) { error; } -void NGC_EXT_handle_group_custom_packet( - Tox* tox, - NGC_EXT_CTX* ngc_ext_ctx, - - uint32_t group_number, - uint32_t peer_number, - - const uint8_t *data, - size_t length - //void *user_data -) { - size_t curser = 0; - - _EXT_HAVE(1, return) - - _PacketType pkg_type = static_cast<_PacketType>(*(data + curser)); - curser++; - - fprintf(stderr, "EX: custom_packet [%s] %lu\n", _pkgid2str(pkg_type), length); - - if (pkg_type == INVALID) { - fprintf(stderr, "(invalid)\n"); - return; - } - - auto handle_fn = ngc_ext_ctx->callbacks[pkg_type]; - if (handle_fn == nullptr) { - fprintf(stderr, "EX: !!! no handler for packet\n"); - return; - } - - handle_fn(tox, ngc_ext_ctx, group_number, peer_number, data+curser, length-curser); -} -#undef _EXT_HAVE - diff --git a/ngc_ext_common.h b/ngc_ext_common.h deleted file mode 100644 index b5febc8..0000000 --- a/ngc_ext_common.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef C_NGC_EXT_COMMON_H -#define C_NGC_EXT_COMMON_H - -// this is a c header - -#include - -#ifdef __cplusplus -extern "C" { -#endif - - - -// copy from tox.h: -#ifndef TOX_DEFINED -#define TOX_DEFINED -typedef struct Tox Tox; -#endif /* TOX_DEFINED */ - - - -typedef struct NGC_EXT_CTX NGC_EXT_CTX; - -NGC_EXT_CTX* NGC_EXT_new(void); -void NGC_EXT_kill(NGC_EXT_CTX* ngc_ext_ctx); - -void NGC_EXT_handle_group_custom_packet( - Tox* tox, - NGC_EXT_CTX* ngc_ext_ctx, - - uint32_t group_number, - uint32_t peer_number, - - // bool private, - - const uint8_t *data, - size_t length - //void *user_data -); - -#ifdef __cplusplus -} -#endif - -#endif // C_NGC_EXT_COMMON_H - diff --git a/ngc_ext_common.hpp b/ngc_ext_common.hpp deleted file mode 100644 index 8384530..0000000 --- a/ngc_ext_common.hpp +++ /dev/null @@ -1,146 +0,0 @@ -#pragma once - -#include - -#include "ngc_ext_common.h" -#include "ngc_hs1.h" -#include "ngc_ft1.h" - -//#include -//#include -//#include -//#include -//#include -//#include -//#include -//#include -#include - -enum _PacketType : uint8_t { - // TODO: why? - INVALID = 0u, - - //TODO: make it possible to go further back - // request last (few) message_ids for a peer - // - peer_key bytes (peer key we want to know ids for) - // - 1 byte (uint8_t count ids, atleast 1) - HS1_REQUEST_LAST_IDS = 1u, - - // respond to a request with 0 or more message ids, sorted by newest first - // - peer_key bytes (the msg_ids are from) - // - 1 byte (uint8_t count ids, can be 0) - // - array [ - // - msg_id bytes (the message id) - // - ] - 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 = 8u, - - // TODO: request result negative, speed up not found - - // 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) - // - 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) - // - X bytes (file_kind dependent id, differnt sizes) - FT1_INIT, - - // acknowlage init (like an accept) - // like tox ft control continue - // - 1 byte (transfer_id) - FT1_INIT_ACK, - - // TODO: init deny, speed up non acceptance - - // 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) - // // this is implicit (pkg size)- 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, -}; - -struct _GroupKey { - std::array data; - - _GroupKey(void) = default; - _GroupKey(const _GroupKey& other) : data(other.data) {} - _GroupKey(_GroupKey&&) = delete; - _GroupKey& operator=(const _GroupKey& other) { data = other.data; return *this; } - bool operator<(const _GroupKey& rhs) const; - bool operator==(const _GroupKey& rhs) const; - size_t size(void) const { return data.size(); } -}; - -struct _PeerKey { - std::array data; - - _PeerKey(void) = default; - _PeerKey(const _PeerKey& other) : data(other.data) {} - _PeerKey(_PeerKey&&) = delete; - _PeerKey& operator=(const _PeerKey& other) { data = other.data; return *this; } - bool operator<(const _PeerKey& rhs) const; - bool operator==(const _PeerKey& rhs) const; - size_t size(void) const { return data.size(); } -}; - -using handle_group_custom_packet_cb = void(*)( - Tox* tox, - NGC_EXT_CTX* ngc_ext_ctx, - - uint32_t group_number, - uint32_t peer_number, - - const uint8_t *data, - size_t length -); - - -struct NGC_EXT_CTX { - std::array callbacks; - NGC_HS1* ngc_hs1_ctx = nullptr; - NGC_FT1* ngc_ft1_ctx = nullptr; -}; - -[[maybe_unused]] static const char* _pkgid2str(_PacketType type) { -#define _EXT_CASE(x) case (x): return #x; - switch (type) { - _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 _EXT_CASE -} -