This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Dependents:   MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers NyLPC_cHttpBodyParser.c Source File

NyLPC_cHttpBodyParser.c

00001 #include "NyLPC_cHttpBodyParser.h"
00002 
00003 #define HTTP_TIMEOUT NyLPC_TiHttpPtrStream_DEFAULT_HTTP_TIMEOUT
00004 
00005 static NyLPC_TBool bodyHandler(NyLPC_TcHttpBasicBodyParser_t* i_inst,NyLPC_TChar i_c)
00006 {
00007     NyLPC_TcHttpBodyParser_t* inst=(NyLPC_TcHttpBodyParser_t*)i_inst;
00008     *(inst->ref_buf+inst->len)=i_c;
00009     inst->len++;
00010     return inst->buf_size>inst->len;
00011 }
00012 
00013 static struct NyLPC_TcHttpBasicBodyParser_Handler _bh={bodyHandler};
00014 
00015 void NyLPC_cHttpBodyParser_initialize(NyLPC_TcHttpBodyParser_t* i_inst)
00016 {
00017     NyLPC_cHttpBasicBodyParser_initialize(&i_inst->_super,&_bh);
00018 }
00019 void NyLPC_cHttpBodyParser_finalize(NyLPC_TcHttpBodyParser_t* i_inst)
00020 {
00021     NyLPC_cHttpBasicBodyParser_finalize(&i_inst->_super);
00022 }
00023 
00024 
00025 /**
00026  * @param i_out
00027  * 読み出したデータサイズ。戻り値trueの場合のみ有効。0の場合終端。
00028  * @return
00029  * エラーの発生状況
00030  */
00031 NyLPC_TBool NyLPC_cHttpBodyParser_parseStream(NyLPC_TcHttpBodyParser_t* i_inst,NyLPC_TiHttpPtrStream_t* i_stream,NyLPC_TChar* i_buf,NyLPC_TInt16 i_buf_size,NyLPC_TInt16* i_out)
00032 {
00033     NyLPC_TcHttpBodyParser_t* inst=(NyLPC_TcHttpBodyParser_t*)i_inst;
00034     const char* rp_base;
00035     NyLPC_TInt32 rsize;
00036     inst->len=0;
00037     inst->buf_size=i_buf_size;
00038     inst->ref_buf=i_buf;
00039     if(i_inst->_super._status==NyLPC_TcHttpBasicBodyParser_ST_EOB){
00040         *i_out=0;
00041         return NyLPC_TBool_TRUE;
00042     }
00043     for(;;){
00044         //タイムアウト付でストリームから読み出し。
00045         rsize=NyLPC_iHttpPtrStream_pread(i_stream,(const void**)(&rp_base),HTTP_TIMEOUT);
00046         if(rsize<=0){
00047             //Read失敗
00048             return NyLPC_TBool_FALSE;
00049         }
00050         rsize=NyLPC_cHttpBasicBodyParser_parseChar(&i_inst->_super,rp_base,rsize);
00051         if(i_inst->_super._status==NyLPC_TcHttpBasicBodyParser_ST_ERROR){
00052             //パース失敗
00053             return NyLPC_TBool_FALSE;
00054         }
00055         NyLPC_iHttpPtrStream_rseek(i_stream,(NyLPC_TUInt16)rsize);
00056         *i_out=i_inst->len;
00057         return NyLPC_TBool_TRUE;
00058     }
00059 }