From 79c70cea582dc15d4fe81942cfed243eaf6296b4 Mon Sep 17 00:00:00 2001
From: Anatolii Kurotych <akurotych@gmail.com>
Date: Mon, 10 Dec 2018 09:46:26 +0200
Subject: [PATCH] [*] Change signature stream_ctl_init

---
 stream/stream.h     |  2 +-
 stream/stream_ctl.c | 19 +++++++++++++++----
 stream/stream_ctl.h |  5 ++++-
 stream/stream_pkt.c |  5 +++--
 4 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/stream/stream.h b/stream/stream.h
index 950f9bc..4c0708b 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -45,7 +45,7 @@ struct dap_http_client;
 struct dap_http;
 struct stream;
 struct stream_pkt;
-#define STREAM_BUF_SIZE_MAX 20480
+#define STREAM_BUF_SIZE_MAX 500000
 #define STREAM_KEEPALIVE_TIMEOUT 3   // How  often send keeplive messages (seconds)
 #define STREAM_KEEPALIVE_PASSES 3    // How many messagges without answers need for disconnect client and close session
 
diff --git a/stream/stream_ctl.c b/stream/stream_ctl.c
index fcc9604..18118e1 100644
--- a/stream/stream_ctl.c
+++ b/stream/stream_ctl.c
@@ -45,16 +45,27 @@ const char* connection_type_str[] =
 		[STREAM_SESSION_UDP] = "udp"
 };
 
+static struct {
+    size_t size;
+    dap_enc_key_type_t type;
+} _socket_forward_key;
+
+
 #define DAPMP_VERSION 13
 bool stream_check_proto_version(unsigned int ver);
 void stream_ctl_proc(struct dap_http_simple *cl_st, void * arg);
 
 /**
- * @brief stream_ctl_init Initialize stream control module
- * @return Zero if ok others if not
+ * @brief stream_ctl_init
+ * @param socket_forward_key_type
+ * @param socket_forward_key_size - Can be null for some alghoritms
+ * @return
  */
-int stream_ctl_init()
+int stream_ctl_init(dap_enc_key_type_t socket_forward_key_type,
+                    size_t socket_forward_key_size)
 {
+    _socket_forward_key.type = socket_forward_key_type;
+    _socket_forward_key.size = socket_forward_key_size;
     log_it(L_NOTICE,"Initialized stream control module");
     return 0;
 }
@@ -116,7 +127,7 @@ void stream_ctl_proc(struct dap_http_simple *cl_st, void * arg)
 
             char *key_str = calloc(1, KEX_KEY_STR_SIZE);
             dap_random_string_fill(key_str, KEX_KEY_STR_SIZE);
-            ss->key = dap_enc_key_new_generate(DAP_ENC_KEY_TYPE_IAES, key_str, strlen(key_str), NULL, 0, 0);
+            ss->key = dap_enc_key_new_generate(_socket_forward_key.type, key_str, strlen(key_str), NULL, 0, _socket_forward_key.size);
             enc_http_reply_f(dg,"%u %s",ss->id,key_str);
             *return_code = Http_Status_OK;
 
diff --git a/stream/stream_ctl.h b/stream/stream_ctl.h
index 58eed79..2b44efd 100644
--- a/stream/stream_ctl.h
+++ b/stream/stream_ctl.h
@@ -24,7 +24,10 @@
 struct dap_http;
 
 #define KEX_KEY_STR_SIZE 128
-extern int stream_ctl_init();
+
+int stream_ctl_init(dap_enc_key_type_t socket_forward_key_type,
+                    size_t socket_forward_key_size);
+
 extern void stream_ctl_deinit();
 extern void stream_ctl_add_proc(struct dap_http * sh, const char * url);
 
diff --git a/stream/stream_pkt.c b/stream/stream_pkt.c
index 7b377d9..555f1c8 100644
--- a/stream/stream_pkt.c
+++ b/stream/stream_pkt.c
@@ -83,7 +83,7 @@ size_t encode_dummy(const void * buf, const size_t buf_size, void * buf_out){
  */
 size_t stream_pkt_read(struct stream * sid,struct stream_pkt * pkt, void * buf_out, size_t buf_out_size)
 {
-    size_t ds = dap_enc_iaes256_cbc_decrypt_fast(sid->session->key,pkt->data,pkt->hdr.size,buf_out, buf_out_size);
+    size_t ds = sid->session->key->dec_na(sid->session->key,pkt->data,pkt->hdr.size,buf_out, buf_out_size);
 //    log_it(L_DEBUG,"Stream decoded %lu bytes ( last bytes 0x%02x 0x%02x 0x%02x 0x%02x ) ", ds,
 //           *((uint8_t *)buf_out+ds-4),*((uint8_t *)buf_out+ds-3),*((uint8_t *)buf_out+ds-2),*((uint8_t *)buf_out+ds-1)
 //           );
@@ -117,7 +117,7 @@ size_t stream_pkt_write(struct stream * sid, const void * data, uint32_t data_si
     memset(&pkt_hdr,0,sizeof(pkt_hdr));
     memcpy(pkt_hdr.sig,dap_sig,sizeof(pkt_hdr.sig));
 
-    pkt_hdr.size = dap_enc_iaes256_cbc_encrypt_fast(sid->session->key, data,data_size,sid->buf, STREAM_BUF_SIZE_MAX);
+    pkt_hdr.size = sid->session->key->enc_na(sid->session->key, data,data_size,sid->buf, STREAM_BUF_SIZE_MAX);
 
     if(sid->conn_udp){
         ret+=dap_udp_client_write(sid->conn,&pkt_hdr,sizeof(pkt_hdr));
@@ -127,6 +127,7 @@ size_t stream_pkt_write(struct stream * sid, const void * data, uint32_t data_si
         ret+=dap_client_remote_write(sid->conn,&pkt_hdr,sizeof(pkt_hdr));
         ret+=dap_client_remote_write(sid->conn,sid->buf,pkt_hdr.size);
     }
+
     return ret;
 }
 
-- 
GitLab