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

Fork of libMiMic by Ryo Iizuka

Committer:
nyatla
Date:
Tue Jun 24 09:37:24 2014 +0000
Revision:
79:baa21f8763cf
Parent:
48:00d211aac2ec
Child:
109:18f12ac01097
MiMic core r375???

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 2:b96c1e90d120 1 /*
nyatla 2:b96c1e90d120 2 * NyLPC_cHttpdConnection.h
nyatla 2:b96c1e90d120 3 *
nyatla 2:b96c1e90d120 4 * Created on: 2013/02/07
nyatla 2:b96c1e90d120 5 * Author: nyatla
nyatla 2:b96c1e90d120 6 */
nyatla 2:b96c1e90d120 7
nyatla 2:b96c1e90d120 8 #ifndef NYLPC_CHTTPDCONNECTION_H_
nyatla 2:b96c1e90d120 9 #define NYLPC_CHTTPDCONNECTION_H_
nyatla 2:b96c1e90d120 10 #include "NyLPC_stdlib.h"
nyatla 2:b96c1e90d120 11 #include "NyLPC_cHttpRequestPrefixParser.h"
nyatla 12:efe841863fc8 12
nyatla 12:efe841863fc8 13 #ifdef __cplusplus
nyatla 12:efe841863fc8 14 extern "C" {
nyatla 12:efe841863fc8 15 #endif /* __cplusplus */
nyatla 12:efe841863fc8 16
nyatla 2:b96c1e90d120 17 #ifndef DEFINE_NyLPC_TcHttpd_t
nyatla 2:b96c1e90d120 18 typedef struct NyLPC_TcHttpd NyLPC_TcHttpd_t;
nyatla 2:b96c1e90d120 19 #define DEFINE_NyLPC_TcHttpd_t
nyatla 2:b96c1e90d120 20 #endif
nyatla 2:b96c1e90d120 21
nyatla 2:b96c1e90d120 22
nyatla 79:baa21f8763cf 23 /** HTTPコネクションの受信バッファのサイズ
nyatla 79:baa21f8763cf 24 */
nyatla 79:baa21f8763cf 25 #ifndef NyLPC_cHttpdConnection_SIZE_OF_RX_BUF
nyatla 79:baa21f8763cf 26 # define NyLPC_cHttpdConnection_SIZE_OF_RX_BUF 512
nyatla 79:baa21f8763cf 27 #endif
nyatla 2:b96c1e90d120 28
nyatla 2:b96c1e90d120 29 typedef NyLPC_TUInt8 NyLPC_TcHttpdConnection_Status;
nyatla 2:b96c1e90d120 30
nyatla 2:b96c1e90d120 31 /** リクエストプレフィクスを読み出した状態*/
nyatla 2:b96c1e90d120 32 #define NyLPC_cHttpdConnection_ReqStatus_LISTEN 0
nyatla 2:b96c1e90d120 33 /** ACCEPT待ち*/
nyatla 2:b96c1e90d120 34 #define NyLPC_cHttpdConnection_ReqStatus_ACCEPT 1
nyatla 2:b96c1e90d120 35 /** コネクションは接続済*/
nyatla 2:b96c1e90d120 36 #define NyLPC_cHttpdConnection_ReqStatus_PREFETCH 2
nyatla 2:b96c1e90d120 37 /** リクエストパース待ち*/
nyatla 2:b96c1e90d120 38 #define NyLPC_cHttpdConnection_ReqStatus_REQPARSE 3
nyatla 2:b96c1e90d120 39 /** リクエストパース済*/
nyatla 2:b96c1e90d120 40 #define NyLPC_cHttpdConnection_ReqStatus_END 4
nyatla 41:2389bd6b6f74 41 #define NyLPC_cHttpdConnection_ReqStatus_BODYPARSE 5
nyatla 2:b96c1e90d120 42
nyatla 2:b96c1e90d120 43
nyatla 2:b96c1e90d120 44
nyatla 2:b96c1e90d120 45
nyatla 2:b96c1e90d120 46 /** レスポンスヘッダ送付済*/
nyatla 2:b96c1e90d120 47 #define NyLPC_cHttpdConnection_ResStatus_HEAD 1
nyatla 2:b96c1e90d120 48 /** レスポンスヘッダ送付済*/
nyatla 2:b96c1e90d120 49 #define NyLPC_cHttpdConnection_ResStatus_BODY 2
nyatla 2:b96c1e90d120 50 /** レスポンスBODY送付済*/
nyatla 2:b96c1e90d120 51 #define NyLPC_cHttpdConnection_ResStatus_CLOSED 3
nyatla 2:b96c1e90d120 52 /** エラーが発生した。*/
nyatla 2:b96c1e90d120 53 #define NyLPC_cHttpdConnection_ResStatus_ERROR 4
nyatla 2:b96c1e90d120 54
nyatla 2:b96c1e90d120 55
nyatla 2:b96c1e90d120 56
nyatla 2:b96c1e90d120 57 /**
nyatla 2:b96c1e90d120 58 * Httpdのハンドラが引き渡す、HTTPDコネクションクラス。
nyatla 2:b96c1e90d120 59 *
nyatla 2:b96c1e90d120 60 */
nyatla 2:b96c1e90d120 61 #ifndef DEFINE_NyLPC_TcHttpdConnection_t
nyatla 2:b96c1e90d120 62 typedef struct NyLPC_TcHttpdConnection NyLPC_TcHttpdConnection_t;
nyatla 2:b96c1e90d120 63 #define DEFINE_NyLPC_TcHttpdConnection_t
nyatla 2:b96c1e90d120 64 #endif
nyatla 2:b96c1e90d120 65 struct NyLPC_TcHttpdConnection
nyatla 2:b96c1e90d120 66 {
nyatla 2:b96c1e90d120 67 NyLPC_TUInt8 _req_status;//リクエストステータス
nyatla 2:b96c1e90d120 68 NyLPC_TUInt8 _res_status;//レスポンスステータス
nyatla 2:b96c1e90d120 69 NyLPC_TUInt8 _connection_message_mode;//COnnection:closeをヘッダに書き込むかのフラグ
nyatla 2:b96c1e90d120 70 NyLPC_TcHttpd_t* _parent_httpd; //NyLPC_cHttpd
nyatla 2:b96c1e90d120 71 NyLPC_TcTcpSocket_t _socket;
nyatla 79:baa21f8763cf 72 NyLPC_TUInt8 _rxbuf[NyLPC_cHttpdConnection_SIZE_OF_RX_BUF];
nyatla 2:b96c1e90d120 73 NyLPC_TcHttpStream_t _in_stream;
nyatla 2:b96c1e90d120 74 NyLPC_TcHttpRequestPrefixParser_t _pparser;
nyatla 2:b96c1e90d120 75 union{
nyatla 2:b96c1e90d120 76 NyLPC_TcHttpBodyWriter_t _body_writer;
nyatla 2:b96c1e90d120 77 NyLPC_TcHttpHeaderWriter_t _head_writer;
nyatla 2:b96c1e90d120 78 };
nyatla 2:b96c1e90d120 79 };
nyatla 2:b96c1e90d120 80
nyatla 2:b96c1e90d120 81 /**
nyatla 2:b96c1e90d120 82 * @param i_parent_httpd
nyatla 2:b96c1e90d120 83 *
nyatla 2:b96c1e90d120 84 */
nyatla 2:b96c1e90d120 85 void NyLPC_cHttpdConnection_initialize(NyLPC_TcHttpdConnection_t* i_inst,NyLPC_TcHttpd_t* i_parent_httpd);
nyatla 2:b96c1e90d120 86 void NyLPC_cHttpdConnection_finalize(NyLPC_TcHttpdConnection_t* i_inst);
nyatla 2:b96c1e90d120 87
nyatla 41:2389bd6b6f74 88 /**
nyatla 41:2389bd6b6f74 89 * 100 Continueをストリームに送信する。
nyatla 41:2389bd6b6f74 90 * HTTP/1.1でPOSTメッセージを受け付けた場合にコールすること。
nyatla 41:2389bd6b6f74 91 * この関数はステータスがNyLPC_cHttpdConnection_ResStatus_HEADの時だけ実行できる。
nyatla 41:2389bd6b6f74 92 */
nyatla 41:2389bd6b6f74 93 NyLPC_TBool NyLPC_cHttpdConnection_send100Continue(NyLPC_TcHttpdConnection_t* i_inst);
nyatla 2:b96c1e90d120 94
nyatla 2:b96c1e90d120 95
nyatla 2:b96c1e90d120 96 /**
nyatla 2:b96c1e90d120 97 * レスポンスヘッダを送信します。
nyatla 2:b96c1e90d120 98 * BodyはChunkedエンコーディングで送信します。
nyatla 48:00d211aac2ec 99 * @param i_additional_header
nyatla 48:00d211aac2ec 100 * メッセージフィールドに追加する文字列です。
nyatla 48:00d211aac2ec 101 * \r\nで終端下文字列を指定して下さい。
nyatla 2:b96c1e90d120 102 */
nyatla 2:b96c1e90d120 103 NyLPC_TBool NyLPC_cHttpdConnection_sendResponseHeader(NyLPC_TcHttpdConnection_t* i_inst,NyLPC_TUInt16 i_response_code,const NyLPC_TChar* i_content_type,const NyLPC_TChar* i_additional_header);
nyatla 2:b96c1e90d120 104 /**
nyatla 2:b96c1e90d120 105 * レスポンスヘッダを送信します。
nyatla 2:b96c1e90d120 106 * BodyはContentLengthを伴って送信します。Body送信時にサイズチェックは行いません。
nyatla 48:00d211aac2ec 107 * @param i_content_length
nyatla 2:b96c1e90d120 108 * 最大で0x0fffffffを指定できます。
nyatla 48:00d211aac2ec 109 * @param i_additional_header
nyatla 48:00d211aac2ec 110 * メッセージフィールドに追加する文字列です。
nyatla 48:00d211aac2ec 111 * \r\nで終端下文字列を指定して下さい。
nyatla 2:b96c1e90d120 112 */
nyatla 2:b96c1e90d120 113 NyLPC_TBool NyLPC_cHttpdConnection_sendResponseHeader2(NyLPC_TcHttpdConnection_t* i_inst,NyLPC_TUInt16 i_response_code,const NyLPC_TChar* i_content_type,NyLPC_TUInt32 i_content_length,const NyLPC_TChar* i_additional_header);
nyatla 2:b96c1e90d120 114 /**
nyatla 2:b96c1e90d120 115 * レスポンスBodyを送信します。
nyatla 2:b96c1e90d120 116 * 関数を実行後、_res_statusはBODYかERRORに遷移します。
nyatla 2:b96c1e90d120 117 */
nyatla 2:b96c1e90d120 118 NyLPC_TBool NyLPC_cHttpdConnection_sendResponseBody(NyLPC_TcHttpdConnection_t* i_inst,const void* i_data,NyLPC_TUInt32 i_size);
nyatla 2:b96c1e90d120 119
nyatla 2:b96c1e90d120 120 /**
nyatla 2:b96c1e90d120 121 * レスポンスBodyを書式出力して送信します。
nyatla 2:b96c1e90d120 122 * 関数を実行後、_res_statusはBODYかERRORに遷移します。
nyatla 2:b96c1e90d120 123 */
nyatla 2:b96c1e90d120 124 NyLPC_TBool NyLPC_cHttpdConnection_sendResponseBodyF(NyLPC_TcHttpdConnection_t* i_inst,const char* i_fmt,...);
nyatla 2:b96c1e90d120 125
nyatla 12:efe841863fc8 126
nyatla 7:2b33a8d84eb3 127 /**
nyatla 7:2b33a8d84eb3 128 * Httpd全体で唯一のロックを取得する。
nyatla 7:2b33a8d84eb3 129 */
nyatla 7:2b33a8d84eb3 130 void NyLPC_cHttpdConnection_lock(NyLPC_TcHttpdConnection_t* i_inst);
nyatla 7:2b33a8d84eb3 131
nyatla 7:2b33a8d84eb3 132 /**
nyatla 7:2b33a8d84eb3 133 * Httpd全体で唯一のロックを開放する。
nyatla 7:2b33a8d84eb3 134 */
nyatla 7:2b33a8d84eb3 135 void NyLPC_cHttpdConnection_unlock(NyLPC_TcHttpdConnection_t* i_inst);
nyatla 2:b96c1e90d120 136
nyatla 2:b96c1e90d120 137
nyatla 2:b96c1e90d120 138 /**
nyatla 2:b96c1e90d120 139 * コネクションのStreamを返します。
nyatla 2:b96c1e90d120 140 */
nyatla 48:00d211aac2ec 141 #define NyLPC_cHttpdConnection_refStream(i_inst) (&(i_inst->_in_stream.super))
nyatla 2:b96c1e90d120 142
nyatla 19:33b9ba0859ee 143 #define NyLPC_cHttpdConnection_getMethod(i_inst) ((i_inst)->_pparser.method)
nyatla 19:33b9ba0859ee 144 #define NyLPC_cHttpdConnection_getReqStatus(i_inst) ((i_inst)->_req_status)
nyatla 2:b96c1e90d120 145
nyatla 12:efe841863fc8 146 #ifdef __cplusplus
nyatla 12:efe841863fc8 147 }
nyatla 12:efe841863fc8 148 #endif /* __cplusplus */
nyatla 2:b96c1e90d120 149
nyatla 2:b96c1e90d120 150 #endif /* NYLPC_CHTTPDCONNECTION_H_ */