From c382a0a81143c677c57a189dc4041f23e1009f1d Mon Sep 17 00:00:00 2001
From: Dmitriy Gerasimov <naeper@demlabs.net>
Date: Tue, 14 May 2019 16:05:56 +0700
Subject: [PATCH] [*] Fixed some weak places

---
 stream/dap_stream_pkt.c | 86 +++++++++++++++++++++++------------------
 stream/dap_stream_pkt.h | 12 +++---
 2 files changed, 54 insertions(+), 44 deletions(-)

diff --git a/stream/dap_stream_pkt.c b/stream/dap_stream_pkt.c
index d4cc85b..066f30c 100755
--- a/stream/dap_stream_pkt.c
+++ b/stream/dap_stream_pkt.c
@@ -42,21 +42,21 @@
 
 
 
-const size_t dap_hdr_size=8+2+1+1+4;
-const uint8_t dap_sig[8]={0xa0,0x95,0x96,0xa9,0x9e,0x5c,0xfb,0xfa};
+static const size_t s_dap_hdr_size=8+2+1+1+4;
+const uint8_t c_dap_stream_sig[8]={0xa0,0x95,0x96,0xa9,0x9e,0x5c,0xfb,0xfa};
 
 
-dap_stream_pkt_t * dap_stream_pkt_detect(void * data, uint32_t data_size)
+dap_stream_pkt_t * dap_stream_pkt_detect(void * a_data, size_t data_size)
 {
-    void * sig_start=data;
+    uint8_t * sig_start=(uint8_t*) a_data;
     dap_stream_pkt_t * ret=NULL;
-    uint32_t length_left=data_size;
-    while(sig_start=memchr(sig_start, dap_sig[0],length_left) ){
-        length_left= data_size-( sig_start-data);
-        if(length_left < sizeof(dap_sig) )
+    size_t length_left=data_size;
+    while( (sig_start=memchr(sig_start, c_dap_stream_sig[0],length_left)) != NULL ){
+        length_left= data_size- (size_t)  ( sig_start- (uint8_t *) a_data);
+        if(length_left < sizeof(c_dap_stream_sig) )
             break;
-        if(memcmp(sig_start,dap_sig,sizeof(dap_sig))==0){
-            ret=sig_start;
+        if(memcmp(sig_start,c_dap_stream_sig,sizeof(c_dap_stream_sig))==0){
+            ret= (dap_stream_pkt_t*) sig_start;
             if(ret->hdr.size > STREAM_PKT_SIZE_MAX ){
                 //log_it(L_ERROR, "Too big packet size %u",ret->hdr.size);
                 ret=NULL;
@@ -68,9 +68,16 @@ dap_stream_pkt_t * dap_stream_pkt_detect(void * data, uint32_t data_size)
     return ret;
 }
 
-size_t encode_dummy(const void * buf, const size_t buf_size, void * buf_out){
-    if(memcpy(buf_out,buf,buf_size) != NULL)
-        return buf_size;
+/**
+ * @brief s_encode_dummy
+ * @param a_buf
+ * @param a_buf_size
+ * @param a_buf_out
+ * @return
+ */
+static size_t s_encode_dummy(const void * a_buf, size_t a_buf_size, void * a_buf_out){
+    if(memcpy(a_buf_out,a_buf,a_buf_size) != NULL)
+        return a_buf_size;
     else
         return 0;
 }
@@ -81,9 +88,9 @@ size_t encode_dummy(const void * buf, const size_t buf_size, void * buf_out){
  * @param pkt
  * @param buf_out
  */
-size_t dap_stream_pkt_read(struct dap_stream * sid,struct dap_stream_pkt * pkt, void * buf_out, size_t buf_out_size)
+size_t dap_stream_pkt_read( dap_stream_t * a_stream, dap_stream_pkt_t * a_pkt, void * a_buf_out, size_t a_buf_out_size)
 {
-    size_t ds = sid->session->key->dec_na(sid->session->key,pkt->data,pkt->hdr.size,buf_out, buf_out_size);
+    size_t ds = a_stream->session->key->dec_na(a_stream->session->key,a_pkt->data,a_pkt->hdr.size,a_buf_out, a_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)
 //           );
@@ -104,48 +111,51 @@ size_t dap_stream_pkt_read(struct dap_stream * sid,struct dap_stream_pkt * pkt,
  * @return
  */
 
-size_t dap_stream_pkt_write(struct dap_stream * sid, const void * data, uint32_t data_size)
+size_t dap_stream_pkt_write(dap_stream_t * a_stream, const void * a_data, size_t a_data_size)
 {
     size_t ret=0;
     stream_pkt_hdr_t pkt_hdr;
 
-    if(data_size > STREAM_BUF_SIZE_MAX ){
-        log_it(L_ERROR,"Too big data size %lu, bigger than encryption buffer size %lu",data_size,sizeof(sid->buf));
-        data_size=sizeof(sid->buf);
+    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);
     }
 
     memset(&pkt_hdr,0,sizeof(pkt_hdr));
-    memcpy(pkt_hdr.sig,dap_sig,sizeof(pkt_hdr.sig));
+    memcpy(pkt_hdr.sig,c_dap_stream_sig,sizeof(pkt_hdr.sig));
 
-    pkt_hdr.size = sid->session->key->enc_na(sid->session->key, data,data_size,sid->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,a_stream->buf, STREAM_BUF_SIZE_MAX);
 //    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);
 
-    if(sid->conn_udp){
-        ret+=dap_udp_client_write(sid->conn,&pkt_hdr,sizeof(pkt_hdr));
-        ret+=dap_udp_client_write(sid->conn,sid->buf,pkt_hdr.size);
+    if(a_stream->conn_udp){
+        ret+=dap_udp_client_write(a_stream->conn,&pkt_hdr,sizeof(pkt_hdr));
+        ret+=dap_udp_client_write(a_stream->conn,a_stream->buf,pkt_hdr.size);
     }
-    else if(sid->conn){
-        ret+=dap_client_remote_write(sid->conn,&pkt_hdr,sizeof(pkt_hdr));
-        ret+=dap_client_remote_write(sid->conn,sid->buf,pkt_hdr.size);
+    else if(a_stream->conn){
+        ret+=dap_client_remote_write(a_stream->conn,&pkt_hdr,sizeof(pkt_hdr));
+        ret+=dap_client_remote_write(a_stream->conn,a_stream->buf,pkt_hdr.size);
     }
-    else if(sid->events_socket) {
-        ret += dap_events_socket_write(sid->events_socket, &pkt_hdr, sizeof(pkt_hdr));
-        ret += dap_events_socket_write(sid->events_socket, sid->buf, pkt_hdr.size);
+    else if(a_stream->events_socket) {
+        ret += dap_events_socket_write(a_stream->events_socket, &pkt_hdr, sizeof(pkt_hdr));
+        ret += dap_events_socket_write(a_stream->events_socket, a_stream->buf, pkt_hdr.size);
         }
     return ret;
 }
 
-
-extern void dap_stream_send_keepalive(struct dap_stream * sid)
+/**
+ * @brief dap_stream_send_keepalive
+ * @param a_stream
+ */
+void dap_stream_send_keepalive(dap_stream_t * a_stream)
 {
-    for(int i=0;i<sid->channel_count;i++)
-    if(sid->channel[i]->proc){
-        if(sid->channel[i]->proc->id == SERVICE_CHANNEL_ID){
-            dap_stream_ch_send_keepalive(sid->channel[i]);
-            dap_stream_ch_set_ready_to_write(sid->channel[i],true);
+    for(size_t i=0;i<a_stream->channel_count;i++)
+        if(a_stream->channel[i]->proc){
+            if(a_stream->channel[i]->proc->id == SERVICE_CHANNEL_ID){
+                dap_stream_ch_send_keepalive(a_stream->channel[i]);
+                dap_stream_ch_set_ready_to_write(a_stream->channel[i],true);
+            }
         }
-    }
 }
 
 
diff --git a/stream/dap_stream_pkt.h b/stream/dap_stream_pkt.h
index ca072ff..e92cfbd 100755
--- a/stream/dap_stream_pkt.h
+++ b/stream/dap_stream_pkt.h
@@ -24,7 +24,7 @@
 
 #define STREAM_PKT_SIZE_MAX 500000
 struct dap_stream;
-
+typedef struct dap_stream dap_stream_t;
 #define STREAM_PKT_TYPE_DATA_PACKET 0x00
 #define STREAM_PKT_TYPE_SERVICE_PACKET 0xff
 //#define STREAM_PKT_TYPE_KEEPALIVE 0x11
@@ -50,14 +50,14 @@ typedef struct stream_srv_pkt{
 } __attribute__((packed)) stream_srv_pkt_t;
 
 
-extern const uint8_t dap_sig[8];
+extern const uint8_t c_dap_stream_sig[8];
 
-dap_stream_pkt_t * dap_stream_pkt_detect(void * data, uint32_t data_size);
+dap_stream_pkt_t * dap_stream_pkt_detect(void * a_data, size_t data_size);
 
-size_t dap_stream_pkt_read(struct dap_stream * sid,struct dap_stream_pkt * pkt, void * buf_out, size_t buf_out_size);
+size_t dap_stream_pkt_read(dap_stream_t * a_stream, dap_stream_pkt_t * a_pkt, void * a_buf_out, size_t a_buf_out_size);
 
-size_t dap_stream_pkt_write(struct dap_stream * sid, const void * data, uint32_t data_size);
+size_t dap_stream_pkt_write(dap_stream_t * a_stream, const void * data, size_t a_data_size);
 
-void dap_stream_send_keepalive(struct dap_stream * sid);
+void dap_stream_send_keepalive( dap_stream_t * a_stream);
 
 
-- 
GitLab