From 31f80592f000da65d1ca42b1879876959acd22e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Sat, 10 Aug 2019 12:06:27 +0200 Subject: [PATCH] Support Version 7 in ChiakiTakion --- lib/include/chiaki/takion.h | 4 ++++ lib/src/senkusha.c | 1 + lib/src/streamconnection.c | 1 + lib/src/takion.c | 16 +++++++++++++++- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/lib/include/chiaki/takion.h b/lib/include/chiaki/takion.h index e1cbffb..87a801b 100644 --- a/lib/include/chiaki/takion.h +++ b/lib/include/chiaki/takion.h @@ -67,6 +67,7 @@ static inline uint8_t chiaki_takion_av_packet_audio_unit_size(ChiakiTakionAVPack static inline uint8_t chiaki_takion_av_packet_audio_source_units_count(ChiakiTakionAVPacket *packet) { return packet->units_in_frame_fec & 0xf; } static inline uint8_t chiaki_takion_av_packet_audio_fec_units_count(ChiakiTakionAVPacket *packet) { return (packet->units_in_frame_fec >> 4) & 0xf; } +typedef ChiakiErrorCode (*ChiakiTakionAVPacketParse)(ChiakiTakionAVPacket *packet, uint8_t *buf, size_t buf_size); typedef struct chiaki_takion_congestion_packet_t { @@ -115,6 +116,7 @@ typedef struct chiaki_takion_connect_info_t ChiakiTakionCallback cb; void *cb_user; bool enable_crypt; + uint8_t protocol_version; } ChiakiTakionConnectInfo; @@ -165,6 +167,8 @@ typedef struct chiaki_takion_t * Advertised Receiver Window Credit */ uint32_t a_rwnd; + + ChiakiTakionAVPacketParse av_packet_parse; } ChiakiTakion; diff --git a/lib/src/senkusha.c b/lib/src/senkusha.c index 539232e..251be2e 100644 --- a/lib/src/senkusha.c +++ b/lib/src/senkusha.c @@ -125,6 +125,7 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_senkusha_run(ChiakiSenkusha *senkusha) assert(err == CHIAKI_ERR_SUCCESS); takion_info.enable_crypt = false; + takion_info.protocol_version = 7; takion_info.cb = senkusha_takion_cb; takion_info.cb_user = senkusha; diff --git a/lib/src/streamconnection.c b/lib/src/streamconnection.c index 849fe01..a4b5d68 100644 --- a/lib/src/streamconnection.c +++ b/lib/src/streamconnection.c @@ -139,6 +139,7 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_stream_connection_run(ChiakiStreamConnectio assert(err == CHIAKI_ERR_SUCCESS); takion_info.enable_crypt = true; + takion_info.protocol_version = 9; takion_info.cb = stream_connection_takion_cb; takion_info.cb_user = stream_connection; diff --git a/lib/src/takion.c b/lib/src/takion.c index 9cc2c45..a20f687 100644 --- a/lib/src/takion.c +++ b/lib/src/takion.c @@ -177,6 +177,20 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_connect(ChiakiTakion *takion, Chiaki ChiakiErrorCode ret = CHIAKI_ERR_SUCCESS; takion->log = info->log; + + switch(info->protocol_version) + { + case 7: + takion->av_packet_parse = chiaki_takion_v7_av_packet_parse; + break; + case 9: + takion->av_packet_parse = chiaki_takion_v9_av_packet_parse; + break; + default: + CHIAKI_LOGE(takion->log, "Unknown Takion Protocol Version %u", (unsigned int)info->protocol_version); + return CHIAKI_ERR_INVALID_DATA; + } + takion->gkcrypt_local = NULL; ret = chiaki_mutex_init(&takion->gkcrypt_local_mutex, true); if(ret != CHIAKI_ERR_SUCCESS) @@ -199,7 +213,7 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_connect(ChiakiTakion *takion, Chiaki takion->postponed_packets_size = 0; takion->postponed_packets_count = 0; - CHIAKI_LOGI(takion->log, "Takion connecting"); + CHIAKI_LOGI(takion->log, "Takion connecting (version %u)", (unsigned int)info->protocol_version); ChiakiErrorCode err = chiaki_stop_pipe_init(&takion->stop_pipe); if(err != CHIAKI_ERR_SUCCESS)