diff --git a/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c b/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c index 3086c895e9dd99f691f65238779f3745d6763f2a..398ec38ed0f2a20cc2ef2454fe5d1ee6bd8c89ef 100644 --- a/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c +++ b/dap-sdk/net/stream/ch/dap_stream_ch_pkt.c @@ -164,16 +164,18 @@ size_t dap_stream_ch_pkt_write_unsafe(dap_stream_ch_t * a_ch, uint8_t a_type, c (char) l_hdr.id, l_hdr.size, l_hdr.type, l_hdr.seq_id , l_hdr.enc_type ); } - - if(a_data_size+sizeof(l_hdr)> sizeof(a_ch->buf) ){ - log_it(L_ERROR,"Too big data size %lu, bigger than encryption buffer size %lu", a_data_size, sizeof(a_ch->buf)); - a_data_size=sizeof(a_ch->buf)-sizeof(l_hdr); + if(a_data_size > 250000){ + printf("bazinga"); } - memcpy(a_ch->buf,&l_hdr,sizeof(l_hdr) ); + + uint8_t * l_ch_buf = DAP_NEW_SIZE(uint8_t, a_data_size+sizeof(l_hdr)); + assert(l_ch_buf); + memcpy(l_ch_buf,&l_hdr,sizeof(l_hdr) ); if( a_data_size ) - memcpy(a_ch->buf+sizeof(l_hdr),a_data,a_data_size ); + memcpy(l_ch_buf+sizeof(l_hdr),a_data,a_data_size ); - size_t l_ret=dap_stream_pkt_write_unsafe(a_ch->stream,a_ch->buf,a_data_size+sizeof(l_hdr)); + size_t l_ret=dap_stream_pkt_write_unsafe(a_ch->stream,l_ch_buf,a_data_size+sizeof(l_hdr)); + DAP_DELETE(l_ch_buf); a_ch->stat.bytes_write+=a_data_size; a_ch->ready_to_write=true; return l_ret; diff --git a/dap-sdk/net/stream/ch/include/dap_stream_ch.h b/dap-sdk/net/stream/ch/include/dap_stream_ch.h index dc1e862802027079df2b340e2393803d0082ea23..6c48a6ccb5bd0694209f17b99fc36c463cec0dc7 100644 --- a/dap-sdk/net/stream/ch/include/dap_stream_ch.h +++ b/dap-sdk/net/stream/ch/include/dap_stream_ch.h @@ -46,8 +46,6 @@ typedef struct dap_stream_ch{ uint64_t bytes_read; } stat; - uint8_t buf[500000]; - dap_stream_ch_proc_t * proc; void * internal; struct dap_stream_ch *me; diff --git a/dap-sdk/net/stream/stream/dap_stream_pkt.c b/dap-sdk/net/stream/stream/dap_stream_pkt.c index 1f1357e25aa5f3648608b55fc058be88fee0d6c9..99dcfe2cd800f3e7497bed3f1864f85d373c3ce6 100644 --- a/dap-sdk/net/stream/stream/dap_stream_pkt.c +++ b/dap-sdk/net/stream/stream/dap_stream_pkt.c @@ -121,6 +121,7 @@ size_t dap_stream_pkt_read_unsafe( dap_stream_t * a_stream, dap_stream_pkt_t * a } +#define DAP_STREAM_PKT_ENCRYPTION_OVERHEAD 200 //intended overkill, it's about ~2*16+15 for oaes /** * @brief stream_ch_pkt_write @@ -135,22 +136,23 @@ size_t dap_stream_pkt_write_unsafe(dap_stream_t * a_stream, const void * a_data, size_t ret=0; stream_pkt_hdr_t pkt_hdr; - if(a_data_size > STREAM_BUF_SIZE_MAX ){ - log_it(L_ERROR,"Too big data size %lu, bigger than encryption buffer size %lu",a_data_size,sizeof(a_stream->buf)); - a_data_size=sizeof(a_stream->buf); - } + size_t l_stream_buf_size = a_data_size + DAP_STREAM_PKT_ENCRYPTION_OVERHEAD; + uint8_t * l_stream_buf = DAP_NEW_SIZE(uint8_t, l_stream_buf_size); + assert(l_stream_buf); memset(&pkt_hdr,0,sizeof(pkt_hdr)); memcpy(pkt_hdr.sig,c_dap_stream_sig,sizeof(pkt_hdr.sig)); - pkt_hdr.size =(uint32_t) a_stream->session->key->enc_na(a_stream->session->key, a_data,a_data_size,a_stream->buf, STREAM_BUF_SIZE_MAX); + pkt_hdr.size =(uint32_t) a_stream->session->key->enc_na(a_stream->session->key, a_data,a_data_size,l_stream_buf,l_stream_buf_size); + assert(pkt_hdr.size > 0 && pkt_hdr.size <= l_stream_buf_size); // printf("*[dap_stream_pkt_write] size=%d key=0x%x _inheritor_size=%d\n", pkt_hdr.size, sid->session->key, // sid->session->key->_inheritor_size); ret+=dap_events_socket_write_unsafe(a_stream->esocket,&pkt_hdr,sizeof(pkt_hdr)); - ret+=dap_events_socket_write_unsafe(a_stream->esocket,a_stream->buf,pkt_hdr.size); + ret+=dap_events_socket_write_unsafe(a_stream->esocket,l_stream_buf,pkt_hdr.size); dap_events_socket_set_writable_unsafe(a_stream->esocket, true); + DAP_DELETE(l_stream_buf); return ret; } diff --git a/dap-sdk/net/stream/stream/include/dap_stream.h b/dap-sdk/net/stream/stream/include/dap_stream.h index 888be346b5ae1b3b43b0d3aea5bc9004bfc999e1..d57a211b875ffcff13d22b00732da3ee28321ff4 100644 --- a/dap-sdk/net/stream/stream/include/dap_stream.h +++ b/dap-sdk/net/stream/stream/include/dap_stream.h @@ -73,7 +73,6 @@ typedef struct dap_stream { uint8_t buf_defrag[STREAM_BUF_SIZE_MAX]; uint64_t buf_defrag_size; - uint8_t buf[STREAM_BUF_SIZE_MAX]; uint8_t pkt_cache[STREAM_BUF_SIZE_MAX]; dap_stream_ch_t *channel[255]; // TODO reduce channels to 16 to economy memory