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_cModWebSocket.h Source File

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_ */