From 84da1d596a2e06f3dee196c0e809015b49b28a16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Sat, 7 May 2022 23:21:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20handle=5Faccept=20loop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/server.c b/server.c index 252a8b5..ad7e831 100644 --- a/server.c +++ b/server.c @@ -591,9 +591,10 @@ static void handle_accept(void *p) { printf("[handle] Get %zd bytes, total: %zd.\n", numbytes, offset); #endif if(offset < CMDPACKET_HEAD_LEN) break; - if(offset < CMDPACKET_HEAD_LEN+cp->datalen) { - numbytes = recv(accept_fd, buff+offset, CMDPACKET_HEAD_LEN+cp->datalen-offset, MSG_WAITALL); - if(numbytes <= 0) break; + if(offset < CMDPACKET_HEAD_LEN+(ssize_t)(cp->datalen)) { + ssize_t toread = CMDPACKET_HEAD_LEN+(ssize_t)(cp->datalen)-offset; + numbytes = recv(accept_fd, buff+offset, toread, MSG_WAITALL); + if(numbytes != toread) break; else { offset += numbytes; #ifdef DEBUG @@ -601,16 +602,16 @@ static void handle_accept(void *p) { #endif } } - numbytes = CMDPACKET_HEAD_LEN+cp->datalen; // 暂存 packet len + numbytes = CMDPACKET_HEAD_LEN+(ssize_t)(cp->datalen); // 暂存 packet len if(offset < numbytes) break; #ifdef DEBUG printf("[handle] Decrypt %d bytes data...\n", (int)cp->datalen); #endif - if(cp->cmd < 5) { + if(cp->cmd <= CMDEND) { if(cmdpacket_decrypt(cp, index, cfg.pwd)) { cp->data[cp->datalen] = 0; timer_pointer_of(p)->dat = (char*)cp->data; - timer_pointer_of(p)->numbytes = cp->datalen; + timer_pointer_of(p)->numbytes = (ssize_t)(cp->datalen); printf("[normal] Get %zd bytes packet with cmd: %d, data: %s\n", offset, cp->cmd, cp->data); switch(cp->cmd) { case CMDGET: @@ -622,7 +623,7 @@ static void handle_accept(void *p) { case CMDMD5: if(!is_ex_dict_open && !s5_md5(timer_pointer_of(p))) goto CONV_END; break; - case CMDACK: break; + case CMDACK: case CMDEND: default: goto CONV_END; break; } @@ -630,11 +631,11 @@ static void handle_accept(void *p) { puts("Decrypt normal data failed"); break; } - } else if(cp->cmd < 8) { + } else if(cp->cmd <= CMDDAT) { if(cmdpacket_decrypt(cp, index, cfg.sps)) { cp->data[cp->datalen] = 0; timer_pointer_of(p)->dat = (char*)cp->data; - timer_pointer_of(p)->numbytes = cp->datalen; + timer_pointer_of(p)->numbytes = (ssize_t)(cp->datalen); printf("[super] Get %zd bytes packet with data: %s\n", offset, cp->data); switch(cp->cmd) { case CMDSET: