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_cHttpdThread.c Source File

NyLPC_cHttpdThread.c

00001 #include "NyLPC_cHttpd_protected.h"
00002 #include "NyLPC_cHttpdConnection.h"
00003 #include "NyLPC_cHttpdConnection_protected.h"
00004 #include "NyLPC_cHttpdThread_protected.h"
00005 
00006 
00007 static int server(void* p);
00008 
00009 NyLPC_TBool NyLPC_cHttpdThread_initialize(NyLPC_TcHttpdThread_t* i_inst,NyLPC_TcHttpd_t* i_parent,NyLPC_TInt32 i_prio)
00010 {
00011     if(!NyLPC_cHttpdConnection_initialize(&(i_inst->_connection),i_parent)){
00012         return NyLPC_TBool_FALSE;
00013     }
00014     NyLPC_cThread_initialize(&(i_inst->_super),NyLPC_cHttpdThread_SIZE_OF_THREAD_STACK,i_prio);
00015     return NyLPC_TBool_TRUE;
00016 }
00017 void NyLPC_cHttpdThread_finalize(NyLPC_TcHttpdThread_t* i_inst)
00018 {
00019     NyLPC_cThread_finalize(&i_inst->_super);
00020     NyLPC_cHttpdConnection_finalize(&(i_inst->_connection));
00021 }
00022 
00023 NyLPC_TBool NyLPC_cHttpdThread_start(NyLPC_TcHttpdThread_t* i_inst,NyLPC_TiTcpListener_t* i_listener)
00024 {
00025     //停止中?
00026     if(!NyLPC_cThread_isTerminated(&(i_inst->_super))){
00027         return NyLPC_TBool_FALSE;
00028     }
00029     //リスニング
00030     if(!NyLPC_cHttpdConnection_listenSocket(&(i_inst->_connection),i_listener)){
00031         return NyLPC_TBool_FALSE;
00032     }
00033     //Accept可能なので開始。
00034     NyLPC_cThread_start(&(i_inst->_super),server,&i_inst->_connection);
00035     return NyLPC_TBool_TRUE;
00036 
00037 }
00038 
00039 
00040 
00041 
00042 //Httpのセッション関数
00043 static int server(void* p)
00044 {
00045     NyLPC_TcHttpdConnection_t* inst=(NyLPC_TcHttpdConnection_t*)p;
00046     //コネクションをAccept
00047     if(!NyLPC_cHttpdConnection_acceptSocket(inst)){
00048         NyLPC_OnErrorGoto(Error);
00049     }
00050     //コネクション数の追加
00051     NyLPC_cHttpd_incNumOfConnection(inst->_parent_httpd);
00052 
00053 
00054     //サブネットアクセスの確認
00055     for(;;){
00056         //リクエストのプレフィクスを取得
00057         if(!NyLPC_cHttpdConnection_prefetch(inst)){
00058             //Prefetch出来ないならループ終了。
00059             break;
00060         }
00061         //持続性接続の初期モードを設定
00062         if(NyLPC_cHttpd_getNumOfConnection(inst->_parent_httpd)>NyLPC_cHttpd_MAX_PERSISTENT_CONNECTION){
00063             NyLPC_cHttpdConnection_setConnectionMode(inst,NyLPC_TcHttpdConnection_CONNECTION_MODE_CLOSE);
00064         }else{
00065             NyLPC_cHttpdConnection_setConnectionMode(inst,NyLPC_TcHttpdConnection_CONNECTION_MODE_CONTINUE);
00066         }
00067         {//handler
00068             (inst->_parent_httpd->function.onRequest)(inst);
00069         }
00070         //HTTP層のクローズ
00071         if(!NyLPC_cHttpdConnection_closeResponse(inst)){
00072             break;
00073         }
00074         //次のプリフェッチを準備。
00075         if(!NyLPC_cHttpdConnection_prevNextPrefetch(inst)){
00076             break;
00077         }
00078     }
00079     NyLPC_cHttpd_decNumOfConnection(inst->_parent_httpd);
00080     NyLPC_cHttpdConnection_closeSocket(inst);
00081     return 0;
00082 Error:
00083     NyLPC_cHttpdConnection_closeSocket(inst);
00084     return -1;
00085 }
00086