Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of libMiMic by
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 16:22:59 by
