diff --git a/stream/stream.h b/stream/stream.h index 950f9bc5ae4f6a5b22ecbe3d7320aeac91752867..4c0708bd3d3bb3eef05a319ec38094df150c27a4 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 fcc96046e684f45ddd1c8f8619db5a7a7068b4a8..18118e16b942d634a49b7f91c9067e95d815b166 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 58eed79384b5aba7b028155c9d39697b4db7eda0..2b44efd282b992cffaf66e78d17c9077f4abd700 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 7b377d998a9639fcb9a270fad05437e639ed5771..555f1c88f65d109a3ea8799102d1a4ec014bb128 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; }