OSDN Git Service

websocketのペイロードキャッシュの問題を解消
authornyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Wed, 25 Jun 2014 03:00:30 +0000 (03:00 +0000)
committernyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Wed, 25 Jun 2014 03:00:30 +0000 (03:00 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@376 47198e57-cb75-475f-84c4-a814cd6f29e0

lib/src/NyLPC_cMiMicEnv.c
lib/src/net/httpd/mod/NyLPC_cModWebSocket.c

index 6409697..ff5e22c 100644 (file)
@@ -1,7 +1,7 @@
 #include "NyLPC_cMiMicEnv.h"\r
 #include "../uip/NyLPC_cUipService_protected.h"\r
 \r
-const static char* VERSION="MiMic/1.5.7";\r
+const static char* VERSION="MiMic/1.5.8";\r
 \r
 #if NyLPC_MCU==NyLPC_MCU_LPC4088\r
 const static char* MCU="LPC4088";\r
index efa162c..95786a9 100644 (file)
@@ -324,7 +324,7 @@ NyLPC_TBool NyLPC_cModWebSocket_canRead(const NyLPC_TcModWebSocket_t* i_inst)
 void NyLPC_cModWebSocket_update(NyLPC_TcModWebSocket_t* i_inst,NyLPC_TUInt32 i_time_out)\r
 {\r
        const NyLPC_TUInt8* rx;\r
-       NyLPC_TInt32 rs;\r
+       NyLPC_TInt32 rs,rt;\r
        NyLPC_TUInt16 header_size;\r
        NyLPC_TUInt8 w8[2];\r
        if(i_inst->_payload_st==NyLPC_TcModWebSocket_ST_CLOSED){\r
@@ -382,6 +382,7 @@ START:
                        memcpy(i_inst->_frame_mask,(rx+header_size-4),4);\r
                        NyLPC_TUInt8_setBit(i_inst->_frame_flags_bits,FLAGS_MASK_BIT);\r
                }\r
+               //ペイロードポインターのリセット\r
                i_inst->payload_ptr=0;\r
 \r
                //パケットサイズの確定(基本ヘッダ+マスク)\r
@@ -421,7 +422,12 @@ START:
                                        //Timeout\r
                                        goto Timeout;\r
                                }\r
-                               //読み込みサイズを決定\r
+                               //読出し可能なサイズを決定\r
+                               rt=i_inst->payload_size-i_inst->payload_ptr;\r
+                               if(rs>rt){\r
+                                       rs=rt;\r
+                               }\r
+                               //パケットを破棄\r
                                NyLPC_iHttpPtrStream_write(NyLPC_cHttpdConnection_refStream(i_inst->_ref_connection),rx,rs);\r
                                NyLPC_iHttpPtrStream_rseek(NyLPC_cHttpdConnection_refStream(i_inst->_ref_connection),rs);\r
                                i_inst->payload_ptr+=rs;\r
@@ -441,7 +447,12 @@ START:
                                        //Timeout\r
                                        goto Timeout;\r
                                }\r
-                               //読み込みサイズを決定\r
+                               //読出し可能なサイズを決定\r
+                               rt=i_inst->payload_size-i_inst->payload_ptr;\r
+                               if(rs>rt){\r
+                                       rs=rt;\r
+                               }\r
+                               //パケットを破棄\r
                                NyLPC_iHttpPtrStream_rseek(NyLPC_cHttpdConnection_refStream(i_inst->_ref_connection),rs);\r
                                i_inst->payload_ptr+=rs;\r
                        }\r
@@ -502,7 +513,13 @@ NyLPC_TInt16 NyLPC_cModWebSocket_readCB(NyLPC_TcModWebSocket_t* i_inst,NyLPC_TcM
                //Timeout\r
                goto Timeout;\r
        }\r
-       rd=0;//読みだしたバイト数\r
+       //読出し可能な残りサイズを計算して上書き\r
+       rd=i_inst->payload_size-i_inst->payload_ptr;\r
+       if(rs>rd){\r
+               rs=rd;\r
+       }\r
+       //読みだしたバイト数をリセット\r
+       rd=0;\r
        //アンマスク\r
        if(NyLPC_TUInt8_isBitOn(i_inst->_frame_flags_bits,FLAGS_MASK_BIT)){\r
                //マスク有の時\r