static __inline__ void recvChunkedBody( int sockfd, PZ_BUF zBuf, FILE* file) { /* chunk format: chunk-size(hex) CRLF chunk-data CRLF */ int i, chunk_len; do { i = zBuf->length; if (recvNextLine( sockfd, zBuf)<0) break; //add by emman on 2007-3-14 //if ( zBuf->length == i) break; //end add zBuf->length = i; chunk_len = strtol(zBuf->buf + zBuf->length, 0, 16); //add by emman on 2007-3-14 //if ( chunk_len == 0 ) break; //end add recvChunk( zBuf, sockfd, chunk_len+2); /* + trailing CRLF */ zBuf->length -= 2; zBuf->buf[zBuf->length] = '\0'; fwrite( zBuf->buf, 1, zBuf->length, file); zBuf->length = 0; } while(chunk_len); }
void USB_Recv(uint8_t *data, uint32_t len) { if ((uint32_t)data&0x03) return; g_recvData = data; g_recvLen = len; g_recvOffset = 0; g_recvComplete = 0; recvChunk(); }
void USB_EndPoint2 (uint32_t event) { switch (event) { case USB_EVT_OUT_NAK: //bulkOutNak(); break; case USB_EVT_OUT: recvChunk(); break; case USB_EVT_IN: // this gets called upon completion sendChunk(); break; } }