This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Fork of libMiMic by
core/net/httpd/NyLPC_cHttpdConnection.h@79:baa21f8763cf, 2014-06-24 (annotated)
- 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?
User | Revision | Line number | New 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_ */ |