This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Dependents: MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more
NyLPC_cModWebSocket.h
00001 #ifndef NYLPC_CMODWEBSOCKET_H_ 00002 #define NYLPC_CMODWEBSOCKET_H_ 00003 00004 /********************************************************************************* 00005 * PROJECT: MiMic 00006 * -------------------------------------------------------------------------------- 00007 * 00008 * This file is part of MiMic 00009 * Copyright (C)2011 Ryo Iizuka 00010 * 00011 * MiMic is free software: you can redistribute it and/or modify 00012 * it under the terms of the GNU Lesser General Public License as published 00013 * by the Free Software Foundation, either version 3 of the License, or 00014 * (at your option) any later version. 00015 * 00016 * This program is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Lesser General Public License 00022 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00023 * 00024 * For further information please contact. 00025 * http://nyatla.jp/ 00026 * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp> 00027 * 00028 *********************************************************************************/ 00029 #include "NyLPC_stdlib.h" 00030 #include "NyLPC_http.h" 00031 #include "../NyLPC_cHttpdConnection_protected.h" 00032 #include "../NyLPC_cHttpdUtils.h" 00033 #include "NyLPC_cModRomFiles.h" 00034 00035 #ifdef __cplusplus 00036 extern "C" { 00037 #endif /* __cplusplus */ 00038 00039 /** 00040 * ファイルアップロードの為の基本シーケンスを提供する抽象クラスです。 00041 * 継承クラスで_abstruct_function以下の関数に実体を設定して使います。 00042 */ 00043 typedef struct NyLPC_TcModWebSocket NyLPC_TcModWebSocket_t; 00044 00045 00046 #define NyLPC_TcModWebSocket_FRAME_TYPE_BIN 0x01 00047 #define NyLPC_TcModWebSocket_FRAME_TYPE_TXT 0x02 00048 00049 typedef NyLPC_TUInt8 NyLPC_TcModWebSocket_ST; 00050 /** 00051 * パケットヘッダの受信待ちである。 00052 */ 00053 #define NyLPC_TcModWebSocket_ST_START_PAYLOAD 0x02 00054 /** 00055 * ペイロードの読み取り中である。 00056 */ 00057 #define NyLPC_TcModWebSocket_ST_READ_PAYLOAD 0x03 00058 /** 00059 * WebSocketは閉じられた。 00060 */ 00061 #define NyLPC_TcModWebSocket_ST_CLOSED 0x04 00062 00063 /** 00064 * クラス構造体 00065 */ 00066 struct NyLPC_TcModWebSocket 00067 { 00068 NyLPC_TcModRomFiles_t super; 00069 /** 00070 * サブプロトコル。NULLの場合0 00071 */ 00072 const NyLPC_TChar* _ref_sub_protocol; 00073 /**ペイロードの解析ステータス*/ 00074 NyLPC_TcModWebSocket_ST _payload_st; 00075 NyLPC_TUInt8 _frame_type; 00076 /** 00077 * BIT0: MASK value 00078 */ 00079 NyLPC_TUInt8 _frame_flags_bits; 00080 NyLPC_TUInt8 _frame_mask[4]; 00081 /** ペイロードサイズ*/ 00082 NyLPC_TUInt16 payload_size; 00083 /** ペイロード位置*/ 00084 NyLPC_TUInt16 payload_ptr; 00085 NyLPC_TcHttpdConnection_t* _ref_connection; 00086 }; 00087 00088 00089 /** 00090 * NyLPC_cModWebSocket_readCB関数のコールバックハンドラです。 00091 * @return 00092 * -1 :エラーが発生したことを通知します。NyLPC_cModWebSocket_readCBは負数を返してクローズします。 00093 * 0 :読出しの中断を通知します。NyLPC_cModWebSocket_readCBは読み取ったデータ数を記録して正常終了します。 00094 * 1 :読出しの継続を通知します。NyLPC_cModWebSocket_readCBは継続してデータを通知します。 00095 */ 00096 typedef NyLPC_TInt32 (*NyLPC_TcModWebSocket_onRreadCB)(void* i_param,NyLPC_TChar i_c); 00097 00098 /** 00099 * コンストラクタ。 00100 */ 00101 void NyLPC_cModWebSocket_initialize(NyLPC_TcModWebSocket_t* i_inst,const NyLPC_TChar* i_ref_root_path); 00102 00103 void NyLPC_cModWebSocket_finalize(NyLPC_TcModWebSocket_t* i_inst); 00104 00105 /** 00106 * モジュールがコネクションをハンドリングできるかを返します。 00107 */ 00108 NyLPC_TBool NyLPC_cModWebSocket_canHandle(NyLPC_TcModWebSocket_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection); 00109 00110 /** 00111 * モジュールを実行します。 00112 */ 00113 NyLPC_TBool NyLPC_cModWebSocket_execute(NyLPC_TcModWebSocket_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection); 00114 00115 /** 00116 * NyLPC_cModWebSocket_read関数がブロック無しに完了できるかを返します。 00117 * NyLPC_cModWebSocket_readで処理をブロックしたくない場合に使います。 00118 * アプリケーションはこの関数を頻繁にチェックして、trueの場合は速やかにNyLPC_cModWebSocket_readを実行してください。 00119 */ 00120 NyLPC_TBool NyLPC_cModWebSocket_canRead(const NyLPC_TcModWebSocket_t* i_inst); 00121 00122 00123 /** 00124 * 受信データをコールバック関数に通知するNyLPC_cModWebSocket_readです。 00125 * @param i_cb 00126 * NyLPC_TcModWebSocket_onRreadCBのi_paramに設定する数値です。 00127 * @return 00128 * n>0:データ受信 00129 * 0 :タイムアウト。コネクションの状態は変化しない。 00130 * -1 :エラー コネクションはNyLPC_TcModWebSocket_ST_CLOSEDへ遷移する。 00131 */ 00132 NyLPC_TInt16 NyLPC_cModWebSocket_readCB(NyLPC_TcModWebSocket_t* i_inst,NyLPC_TcModWebSocket_onRreadCB i_cb,void* i_cb_param); 00133 00134 00135 /** 00136 * ストリームからデータを受信して、可能ならi_bufに最大i_buf_lenバイトのデータを受信します。 00137 * この関数はデータ以外のパケットも処理します。 00138 * @return 00139 * n>0:受信成功。nバイトのデータを受信した。 00140 * 0 :タイムアウト。コネクションの状態は変化しない。 00141 * -1 :エラー。 コネクションはNyLPC_TcModWebSocket_ST_CLOSEDへ遷移する。 00142 */ 00143 NyLPC_TInt16 NyLPC_cModWebSocket_read(NyLPC_TcModWebSocket_t* i_inst,void* i_buf,NyLPC_TInt16 i_buf_len); 00144 /** 00145 * i_bufからi_lenバイトのデータを送信します。データは1ペーロードとしてクライアントへ送信されます。 00146 * この関数はデータ以外のパケットも処理します。 00147 * @return 00148 * true: 送信に成功した。 00149 * false:送信に失敗した。 コネクションはNyLPC_TcModWebSocket_ST_CLOSEDへ遷移する。 00150 */ 00151 NyLPC_TBool NyLPC_cModWebSocket_write(NyLPC_TcModWebSocket_t* i_inst,const void* i_buf,NyLPC_TInt16 i_len); 00152 /** 00153 * 書式文字列を出力します。 00154 */ 00155 NyLPC_TBool NyLPC_cModWebSocket_writeFormat(NyLPC_TcModWebSocket_t* i_inst,const NyLPC_TChar* i_fmt,...); 00156 NyLPC_TBool NyLPC_cModWebSocket_writeFormatV(NyLPC_TcModWebSocket_t* i_inst,const NyLPC_TChar* i_fmt,va_list args); 00157 00158 00159 /** 00160 * 書式文字列を出力した場合の文字数を返します。 00161 * この関数は、startBulkWrite関数のi_lenパラメータに渡す値を計算するときに使います。 00162 */ 00163 NyLPC_TInt16 NyLPC_cModWebSocket_testFormatV(NyLPC_TcModWebSocket_t* i_inst,const NyLPC_TChar* i_fmt,va_list args); 00164 NyLPC_TInt16 NyLPC_cModWebSocket_testFormat(NyLPC_TcModWebSocket_t* i_inst,const NyLPC_TChar* i_fmt,...); 00165 00166 /** 00167 * バルク書き込みを開始します。 00168 * バルク書き込みは、endBulkWrite関数をコールするまでにwriteBulk関数で入力されたデータを、1つのi_lenサイズのWebsocketパケットとして送信します。 00169 * バルク書き込み中は、通常のwrite関数を使用することができません。 00170 * @param i_len 00171 * NyLPC_cModWebSocket_endBulkFormatでバルク書き込みを終了するまでに入力するデータサイズを指定します。 00172 */ 00173 NyLPC_TBool NyLPC_cModWebSocket_startBulkWrite(NyLPC_TcModWebSocket_t* i_inst,NyLPC_TInt16 i_len); 00174 /** 00175 * バルク書き込みを終了します。 00176 * この関数をコールする前に、startBulkWrite関数のi_lenで指定した大きさのデータを入力し終えている必要があります。 00177 * 過不足があった場合、WebSocketセッションが破壊されます。 00178 */ 00179 NyLPC_TBool NyLPC_cModWebSocket_endBulkWrite(NyLPC_TcModWebSocket_t* i_inst); 00180 NyLPC_TBool NyLPC_cModWebSocket_writeBulkFormatV(NyLPC_TcModWebSocket_t* i_inst,const NyLPC_TChar* i_fmt,va_list args); 00181 NyLPC_TBool NyLPC_cModWebSocket_writeBulkFormat(NyLPC_TcModWebSocket_t* i_inst,const NyLPC_TChar* i_fmt,...); 00182 00183 /** 00184 * CLOSEパケットを送信してコネクションを閉じます。 00185 * この関数はデータ以外のパケットも処理します。 00186 * i_codeにはWebsocketのコード 00187 */ 00188 void NyLPC_cModWebSocket_close(NyLPC_TcModWebSocket_t* i_inst,NyLPC_TUInt16 i_code); 00189 00190 #ifdef __cplusplus 00191 } 00192 #endif /* __cplusplus */ 00193 00194 #endif /* NYLPC_CMODWEBSOCKET_H_ */
Generated on Tue Jul 12 2022 15:46:16 by 1.7.2