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

Dependents:   MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more

libMiMic(MiMic library for mbed)は、WebService機能を提供するSDKです。 mbedでWebAPIに対応したネットワークデバイスを簡単に作ることが出来ます。

libMiMicはMiMic projectで開発しています。MiMic projectについてはこちらをご覧ください。 http://nyatla.jp/mimic/wp/

構成

libMiMicはmbedRTOS上で動作し、ユーザアプリケーションにAPIを提供します。コアAPIはC言語で記述されていますが、使用頻度の高いものについてはmbed向けのC++APIが準備されています。

/media/uploads/nyatla/libmimic-sdk.png

※libMiMicはmbedの標準イーサネットドライバをしようしていません。

標準イーサネットドライバと同時に使用することはできません。

  • MiMicIP - IPv4スタックです。レテンシとメモリ消費量を抑えたuipベースのライブラリです。
  • ARP/ICMP/UDP/TCP - 基礎的なソケットAPIを提供します。APIは独自です。
  • HTTP/1.1 Server - HTTP/1.1に対応したサーバです。マルチセッション・Chunked・持続性接続に対応しています。
  • HTTP Modules - HTTP/1.1の機能モジュールです。以下のモジュールがあります。
    • ROM file provider - ROMに格納したファイルイメージを公開します。
    • File system provider - mbedファイルシステムを公開します。
    • Onchip configuration - プログラムフラッシュを利用して設定を保存します。
    • MiMicVM processor - RPCリクエスト(MiMicVM)を処理します。
    • FileUpload - ファイルアップロードを受け取ります。
    • URL decoder - HTTPリクエストを解析します。
    • UPnP handler -UPnPメッセージを処理します。
    • WebSocket - Websocketサーバです。
  • mDNS - マルチキャストDNSサービスです。
  • UPnP - UPnP/1.0の機能を提供します。UPnP handlerと協調して動作します。(現在はデバイス探索(SSDP)・デスクリプション(Description)のみ実装してあります。)
  • DHCP/APIPA - ゼロコンフィギュレーション用のモジュールです。
  • HTTP/1.1 Client
  • mbed C++ class library - mbed向けのC++CPIです。C言語のものより簡単です。

対応機種

  • mbed(mbed LPC1768)
  • LPCXpresso1769

プログラム

Import programMiMicRemoteMCU-for-Mbed

MiMic RemoteMCU for mbed. This program provides MCU control API over REST API. It can control MCU from Javascript,PHP or any HTTP rest client directly. And, The application has self development environment.

Import programMbedFileServer

The program publishes files at local directory and SD filesystem. It is a full-fledged webServer somewhat.

サンプル

Import programMiMicSimpleHttpd

This is a simplest HTTP server made ​​of libMiMic. It will echo back a request path.

Import programUPnPBasicDevice

Simplest UPnP basic device example. This program to run UPnP basic device on the mbed.

Import programWebSocketSample

MiMicSDK Websocket module sample program.

Import programHttpClientSamlpe

A http client sample program.

Import programTcpSocketClientSamlpe

MiMicSDK Tcp client socket sample program.

Import programUdpSocketSamlpe

Udp socket sample program. This program will send back the received packet.

チュートリアル

English

libMiMic(MiMic library for mbed) is SDK which provides Webservice functions. It can be created networking device easily using mbed.

See more MiMic information, See MiMic project website. http://nyatla.jp/mimic/wp/

Structure

libMiMic run on mbed RTOS and provides networking API to user application. This library has C++ class API for the mbed, and low-level C language API.

/media/uploads/nyatla/libmimic-sdk.png

For WebService general, it can be written in a simple C + + API.

libMiMic does not have the standard Ethernet driver of mbed. It is not possible that will be used with the standard Ethernet driver.

  • MiMicIP - IPv4 protocol stack. This is based uip which is reduced memory and latency.
  • ARP / ICMP / UDP / TCP - Those are provide basic IP protocols.
  • HTTP/1.1 Server - The Http server compatible HTTP/1.1. It supports multi-session, chunked transport, persistent connection.
  • HTTP Modules - There are addon-module for HTTP server. The following modules.
    • ROM file module - Publish the file images in ROM.
    • File system module - Publish thefiles in mbed file system.
    • Onchip configuration module - To save the network settings to the program flash via REST.
    • MiMicVM module - To handle the (MiMicVM) RPC request.
    • FileUpload module - Accept a file via HTTP POST.
    • URL dedoce module - A versatility URL decoder.
    • UPnP handle module - To handle UPnP messages.
    • UPnP - This provides UPnP/1.0 device functions. It works together with UPnP handler.
    • Websocket - websocket (version13) server
  • mDNS Service - DNS-SD protocol server.
  • UPnP - This provides UPnP/1.0 device functions which works with UPnP handler. (You have been implemented (SSDP) ? description only (Description) device search now.) It is a module zero configuration for - DHCP / APIPA. mbed C + + class library - C of mbed for + + is the CPI. It is simple than that of the C language.
  • DHCP/APIPA - It support zero-cpnfigulation.
  • mbed C++ class library. Almost APIs for Web applications are available.
  • HTTP/1.1 Client

Supported target

  • mbed(mbed LPC1768)
  • LPCXpresso1769

Application

Import programMiMicRemoteMCU-for-Mbed

MiMic RemoteMCU for mbed. This program provides MCU control API over REST API. It can control MCU from Javascript,PHP or any HTTP rest client directly. And, The application has self development environment.

Import programMbedFileServer

The program publishes files at local directory and SD filesystem. It is a full-fledged webServer somewhat.

Sample

Import programMiMicSimpleHttpd

This is a simplest HTTP server made ​​of libMiMic. It will echo back a request path.

Import programUPnPBasicDevice

Simplest UPnP basic device example. This program to run UPnP basic device on the mbed.

Import programWebSocketSample

MiMicSDK Websocket module sample program.

Import programHttpClientSamlpe

A http client sample program.

Import programTcpSocketClientSamlpe

MiMicSDK Tcp client socket sample program.

Import programUdpSocketSamlpe

Udp socket sample program. This program will send back the received packet.

Tutorial

Committer:
nyatla
Date:
Fri Sep 13 06:38:16 2013 +0000
Revision:
57:bc4330dfa62f
Parent:
49:d4334acc3ec3
update mimic core r329;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 1:9f6a78395432 1 /*********************************************************************************
nyatla 1:9f6a78395432 2 * PROJECT: MiMic
nyatla 1:9f6a78395432 3 * --------------------------------------------------------------------------------
nyatla 1:9f6a78395432 4 *
nyatla 1:9f6a78395432 5 * This file is part of MiMic
nyatla 1:9f6a78395432 6 * Copyright (C)2011 Ryo Iizuka
nyatla 1:9f6a78395432 7 *
nyatla 1:9f6a78395432 8 * MiMic is free software: you can redistribute it and/or modify
nyatla 1:9f6a78395432 9 * it under the terms of the GNU Lesser General Public License as published
nyatla 1:9f6a78395432 10 * by the Free Software Foundation, either version 3 of the License, or
nyatla 1:9f6a78395432 11 * (at your option) any later version.
nyatla 1:9f6a78395432 12 *
nyatla 1:9f6a78395432 13 * This program is distributed in the hope that it will be useful,
nyatla 1:9f6a78395432 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
nyatla 1:9f6a78395432 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
nyatla 1:9f6a78395432 16 * GNU General Public License for more details.
nyatla 1:9f6a78395432 17 *
nyatla 1:9f6a78395432 18 * You should have received a copy of the GNU Lesser General Public License
nyatla 1:9f6a78395432 19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
nyatla 1:9f6a78395432 20 *
nyatla 1:9f6a78395432 21 * For further information please contact.
nyatla 1:9f6a78395432 22 * http://nyatla.jp/
nyatla 1:9f6a78395432 23 * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>
nyatla 1:9f6a78395432 24 *
nyatla 1:9f6a78395432 25 *********************************************************************************/
nyatla 1:9f6a78395432 26
nyatla 41:2389bd6b6f74 27 #ifndef NyLPC_TcHttpBasicHeaderParser_H
nyatla 41:2389bd6b6f74 28 #define NyLPC_TcHttpBasicHeaderParser_H
nyatla 1:9f6a78395432 29 #include "NyLPC_stdlib.h"
nyatla 1:9f6a78395432 30 #include "NyLPC_cHttpStream.h"
nyatla 1:9f6a78395432 31
nyatla 1:9f6a78395432 32 #ifdef __cplusplus
nyatla 1:9f6a78395432 33 extern "C" {
nyatla 1:9f6a78395432 34 #endif /* __cplusplus */
nyatla 2:b96c1e90d120 35
nyatla 2:b96c1e90d120 36 /**
nyatla 2:b96c1e90d120 37 * HeaderParserのステータス定義値。
nyatla 2:b96c1e90d120 38 */
nyatla 2:b96c1e90d120 39 typedef NyLPC_TUInt8 NyLPC_TcHttpBasicHeaderParser_ST;
nyatla 2:b96c1e90d120 40 #define NyLPC_TcHttpBasicHeaderParser_ST_START ((NyLPC_TcHttpBasicHeaderParser_ST)0x01)//HTTPステータスラインか、リクエストライン
nyatla 2:b96c1e90d120 41 #define NyLPC_TcHttpBasicHeaderParser_ST_RL_URL ((NyLPC_TcHttpBasicHeaderParser_ST)0x12)//URL
nyatla 2:b96c1e90d120 42 #define NyLPC_TcHttpBasicHeaderParser_ST_RL_VERSION ((NyLPC_TcHttpBasicHeaderParser_ST)0x13)//VERSION
nyatla 2:b96c1e90d120 43 #define NyLPC_TcHttpBasicHeaderParser_ST_SL_STATUSCODE ((NyLPC_TcHttpBasicHeaderParser_ST)0x21)//ステータスコード
nyatla 2:b96c1e90d120 44 #define NyLPC_TcHttpBasicHeaderParser_ST_SL_REASON ((NyLPC_TcHttpBasicHeaderParser_ST)0x22)//Reason-Phrase
nyatla 2:b96c1e90d120 45 #define NyLPC_TcHttpBasicHeaderParser_ST_MSGHEAD ((NyLPC_TcHttpBasicHeaderParser_ST)0x31)//MESSAGE
nyatla 2:b96c1e90d120 46 #define NyLPC_TcHttpBasicHeaderParser_ST_MSGPARAM ((NyLPC_TcHttpBasicHeaderParser_ST)0x32)//MESSAGEパラメータ部
nyatla 2:b96c1e90d120 47 #define NyLPC_TcHttpBasicHeaderParser_ST_MSG_CONTENTLENGTH ((NyLPC_TcHttpBasicHeaderParser_ST)0x33)//MESSAGEContentLength
nyatla 2:b96c1e90d120 48 #define NyLPC_TcHttpBasicHeaderParser_ST_MSG_CONNECTION ((NyLPC_TcHttpBasicHeaderParser_ST)0x34)//MESSAGEConnection
nyatla 2:b96c1e90d120 49 #define NyLPC_TcHttpBasicHeaderParser_ST_MSG_TRANSFERENCODING ((NyLPC_TcHttpBasicHeaderParser_ST)0x35)//TransferEncoding
nyatla 2:b96c1e90d120 50 #define NyLPC_TcHttpBasicHeaderParser_ST_MSG_RANGE ((NyLPC_TcHttpBasicHeaderParser_ST)0x36)//Range
nyatla 2:b96c1e90d120 51 #define NyLPC_TcHttpBasicHeaderParser_ST_EOH ((NyLPC_TcHttpBasicHeaderParser_ST)0x7F)//終わり
nyatla 2:b96c1e90d120 52 #define NyLPC_TcHttpBasicHeaderParser_ST_ERROR ((NyLPC_TcHttpBasicHeaderParser_ST)0x80)//終わり
nyatla 2:b96c1e90d120 53 /*
nyatla 2:b96c1e90d120 54 プライベート関数
nyatla 2:b96c1e90d120 55 */
nyatla 2:b96c1e90d120 56 #define NyLPC_TcHttpBasicHeaderParser_ST_isError(i_v) ((i_v)==NyLPC_TcHttpBasicHeaderParser_ST_ERROR)
nyatla 2:b96c1e90d120 57
nyatla 2:b96c1e90d120 58
nyatla 2:b96c1e90d120 59
nyatla 1:9f6a78395432 60 /**
nyatla 1:9f6a78395432 61 * このクラスは、Httpヘッダのパーサを定義します。
nyatla 1:9f6a78395432 62 */
nyatla 1:9f6a78395432 63 typedef struct NyLPC_TcHttpBasicHeaderParser NyLPC_TcHttpBasicHeaderParser_t;
nyatla 1:9f6a78395432 64
nyatla 1:9f6a78395432 65
nyatla 1:9f6a78395432 66 /**
nyatla 1:9f6a78395432 67 * HTTPメソッドの定義値。
nyatla 1:9f6a78395432 68 */
nyatla 1:9f6a78395432 69 typedef NyLPC_TUInt8 NyLPC_THttpMethodType;
nyatla 48:00d211aac2ec 70 //HTTP STANDARD
nyatla 48:00d211aac2ec 71 #define NyLPC_THttpMethodType_NULL ((NyLPC_THttpMethodType)0x00)
nyatla 1:9f6a78395432 72 #define NyLPC_THttpMethodType_GET ((NyLPC_THttpMethodType)0x01)
nyatla 1:9f6a78395432 73 #define NyLPC_THttpMethodType_POST ((NyLPC_THttpMethodType)0x02)
nyatla 1:9f6a78395432 74 #define NyLPC_THttpMethodType_HEAD ((NyLPC_THttpMethodType)0x03)
nyatla 48:00d211aac2ec 75 //SSDP
nyatla 48:00d211aac2ec 76 #define NyLPC_THttpMethodType_M_SEARCH ((NyLPC_THttpMethodType)0x11)
nyatla 48:00d211aac2ec 77 #define NyLPC_THttpMethodType_NOTIFY ((NyLPC_THttpMethodType)0x12)
nyatla 1:9f6a78395432 78
nyatla 14:4618692ec239 79 const char* NyLPC_THttpMethodType_toString(NyLPC_THttpMethodType i_method);
nyatla 14:4618692ec239 80
nyatla 1:9f6a78395432 81 /**
nyatla 1:9f6a78395432 82 * HTTPバージョンの定義値
nyatla 1:9f6a78395432 83 */
nyatla 1:9f6a78395432 84 typedef NyLPC_TUInt8 NyLPC_THttpVersion;
nyatla 1:9f6a78395432 85 #define NyLPC_THttpVersion_09 ((NyLPC_THttpVersion)0x01)
nyatla 1:9f6a78395432 86 #define NyLPC_THttpVersion_10 ((NyLPC_THttpVersion)0x02)
nyatla 1:9f6a78395432 87 #define NyLPC_THttpVersion_11 ((NyLPC_THttpVersion)0x03)
nyatla 1:9f6a78395432 88 #define NyLPC_THttpVersion_UNKNOWN ((NyLPC_THttpVersion)0x04)
nyatla 1:9f6a78395432 89
nyatla 1:9f6a78395432 90
nyatla 1:9f6a78395432 91 typedef NyLPC_TUInt8 NyLPC_THttpHeaderType;
nyatla 1:9f6a78395432 92 #define NyLPC_THttpHeaderType_REQUEST ((NyLPC_THttpHeaderType)0x01)
nyatla 1:9f6a78395432 93 #define NyLPC_THttpHeaderType_RESPONSE ((NyLPC_THttpHeaderType)0x02)
nyatla 1:9f6a78395432 94
nyatla 1:9f6a78395432 95
nyatla 1:9f6a78395432 96 typedef NyLPC_TUInt8 NyLPC_THttpMessgeHeader_Connection;
nyatla 1:9f6a78395432 97 #define NyLPC_THttpMessgeHeader_Connection_NONE ((NyLPC_THttpMessgeHeader_Connection)0x01)
nyatla 1:9f6a78395432 98 #define NyLPC_THttpMessgeHeader_Connection_CLOSE ((NyLPC_THttpMessgeHeader_Connection)0x02)
nyatla 1:9f6a78395432 99 #define NyLPC_THttpMessgeHeader_Connection_KEEPALIVE ((NyLPC_THttpMessgeHeader_Connection)0x03)
nyatla 57:bc4330dfa62f 100 #define NyLPC_THttpMessgeHeader_Connection_UPGRADE ((NyLPC_THttpMessgeHeader_Connection)0x04)
nyatla 1:9f6a78395432 101 #define NyLPC_THttpMessgeHeader_Connection_UNKNOWN ((NyLPC_THttpMessgeHeader_Connection)0x10)
nyatla 1:9f6a78395432 102
nyatla 1:9f6a78395432 103 typedef NyLPC_TUInt8 NyLPC_THttpMessgeHeader_TransferEncoding;
nyatla 1:9f6a78395432 104 #define NyLPC_THttpMessgeHeader_TransferEncoding_NONE ((NyLPC_THttpMessgeHeader_TransferEncoding)0x01) //TEはない
nyatla 1:9f6a78395432 105 #define NyLPC_THttpMessgeHeader_TransferEncoding_CHUNKED ((NyLPC_THttpMessgeHeader_TransferEncoding)0x02)
nyatla 1:9f6a78395432 106 #define NyLPC_THttpMessgeHeader_TransferEncoding_UNKNOWN ((NyLPC_THttpMessgeHeader_TransferEncoding)0x10)
nyatla 1:9f6a78395432 107
nyatla 1:9f6a78395432 108 #define NyLPC_THttpContentLength_INVALID_LENGTH 0xFFFFFFFF
nyatla 1:9f6a78395432 109
nyatla 1:9f6a78395432 110
nyatla 1:9f6a78395432 111
nyatla 1:9f6a78395432 112
nyatla 1:9f6a78395432 113
nyatla 1:9f6a78395432 114 /**
nyatla 1:9f6a78395432 115 * この構造体は、NyLPC_cHttpBasicHeaderParserの結果を格納します。
nyatla 1:9f6a78395432 116 */
nyatla 1:9f6a78395432 117 struct NyLPC_THttpBasicHeader
nyatla 1:9f6a78395432 118 {
nyatla 49:d4334acc3ec3 119 NyLPC_THttpMessgeHeader_TransferEncoding transfer_encoding;
nyatla 49:d4334acc3ec3 120 NyLPC_THttpMessgeHeader_Connection connection;
nyatla 1:9f6a78395432 121 NyLPC_THttpHeaderType type;
nyatla 49:d4334acc3ec3 122 NyLPC_TUInt8 _padding;
nyatla 1:9f6a78395432 123 union{
nyatla 1:9f6a78395432 124 struct{
nyatla 1:9f6a78395432 125 NyLPC_THttpVersion version;
nyatla 1:9f6a78395432 126 NyLPC_THttpMethodType method;
nyatla 1:9f6a78395432 127 }req;
nyatla 1:9f6a78395432 128 struct{
nyatla 1:9f6a78395432 129 NyLPC_THttpVersion version;
nyatla 1:9f6a78395432 130 NyLPC_TUInt32 status;
nyatla 1:9f6a78395432 131 }res;
nyatla 1:9f6a78395432 132 }startline;
nyatla 1:9f6a78395432 133 NyLPC_TUInt32 content_length;
nyatla 1:9f6a78395432 134 };
nyatla 1:9f6a78395432 135
nyatla 1:9f6a78395432 136 /**
nyatla 1:9f6a78395432 137 * このヘッダが持続性接続を求めているか判定します。
nyatla 1:9f6a78395432 138 */
nyatla 1:9f6a78395432 139 NyLPC_TBool NyLPC_THttpBasicHeader_isPersistent(const struct NyLPC_THttpBasicHeader* i_struct);
nyatla 1:9f6a78395432 140
nyatla 1:9f6a78395432 141
nyatla 1:9f6a78395432 142
nyatla 1:9f6a78395432 143
nyatla 1:9f6a78395432 144
nyatla 1:9f6a78395432 145
nyatla 1:9f6a78395432 146 /**
nyatla 1:9f6a78395432 147 * コンフィギュレーション値。
nyatla 1:9f6a78395432 148 * ショートパラメータ解析バッファのサイズ
nyatla 1:9f6a78395432 149 */
nyatla 1:9f6a78395432 150 #define NyLPC_cHttpBasicHeaderParser_SIZE_OF_WBS 32
nyatla 1:9f6a78395432 151
nyatla 1:9f6a78395432 152
nyatla 1:9f6a78395432 153
nyatla 1:9f6a78395432 154
nyatla 1:9f6a78395432 155 /**
nyatla 1:9f6a78395432 156 * 独自のメッセージフィールドを受け取るイベントハンドラです。
nyatla 1:9f6a78395432 157 * メッセージハンドラはNyLPC_cHttpBasicHeaderParserから3種類のメッセージを受け取ります。
nyatla 1:9f6a78395432 158 * ハンドラは、NyLPC_TcHttpBasicHeaderParserが処理しないメッセージヘッダをパース中に、次の順番で呼び出されます。
nyatla 1:9f6a78395432 159 * <ol>
nyatla 1:9f6a78395432 160 * <li>開始メッセージ - i_nameに有効な文字列を指定して、そのフィールド値が入力される事を伝えます。i_cはnullです。
nyatla 1:9f6a78395432 161 * <li>フィールドメッセージ - i_nameにNULL,i_cに\0以外の文字を指定して、フィールド値が入力されている事を指示します。
nyatla 1:9f6a78395432 162 * <li>フィールドエンド - i_nameにNULL,i_cに0を指定して、フィールドが完了した事を指示します。
nyatla 1:9f6a78395432 163 * </ol>
nyatla 1:9f6a78395432 164 */
nyatla 1:9f6a78395432 165 typedef NyLPC_TBool (*NyLPC_cHttpBasicHeaderParser_messageHandler) (NyLPC_TcHttpBasicHeaderParser_t* i_inst,const NyLPC_TChar* i_name,NyLPC_TChar i_c,struct NyLPC_THttpBasicHeader* o_out);
nyatla 1:9f6a78395432 166 /**
nyatla 1:9f6a78395432 167 * リクエストのURL文字列を受け取るイベントハンドラです。
nyatla 1:9f6a78395432 168 * メッセージハンドラはNyLPC_cHttpBasicHeaderParserから3種類のメッセージを受け取ります。
nyatla 1:9f6a78395432 169 * ハンドラは、NyLPC_TcHttpBasicHeaderParserが処理しないメッセージヘッダをパース中に、次の順番で呼び出されます。
nyatla 1:9f6a78395432 170 * <ol>
nyatla 1:9f6a78395432 171 * <li>URLメッセージ - i_cに\0以外の文字を指定して、URL値が入力されている事を指示します。
nyatla 1:9f6a78395432 172 * <li>URLエンド - i_cに0を指定して、URLが完了した事を指示します。
nyatla 1:9f6a78395432 173 * </ol>
nyatla 1:9f6a78395432 174 */
nyatla 1:9f6a78395432 175 typedef NyLPC_TBool (*NyLPC_cHttpBasicHeaderParser_urlHandler) (NyLPC_TcHttpBasicHeaderParser_t* i_inst,NyLPC_TChar i_c,struct NyLPC_THttpBasicHeader* o_out);
nyatla 1:9f6a78395432 176
nyatla 1:9f6a78395432 177
nyatla 1:9f6a78395432 178
nyatla 48:00d211aac2ec 179 /**
nyatla 48:00d211aac2ec 180 * HTTPヘッダパーサハンドラの集合です。
nyatla 48:00d211aac2ec 181 * ハンドラにNULL指定の場合TRUEを返したと見なします。
nyatla 48:00d211aac2ec 182 */
nyatla 1:9f6a78395432 183 struct NyLPC_TcHttpBasicHeaderParser_Handler
nyatla 1:9f6a78395432 184 {
nyatla 1:9f6a78395432 185 NyLPC_cHttpBasicHeaderParser_messageHandler messageHandler;
nyatla 1:9f6a78395432 186 NyLPC_cHttpBasicHeaderParser_urlHandler urlHandler;
nyatla 1:9f6a78395432 187 };
nyatla 1:9f6a78395432 188
nyatla 1:9f6a78395432 189
nyatla 1:9f6a78395432 190
nyatla 1:9f6a78395432 191 /**
nyatla 2:b96c1e90d120 192 * クラス構造体
nyatla 2:b96c1e90d120 193 */
nyatla 1:9f6a78395432 194 struct NyLPC_TcHttpBasicHeaderParser
nyatla 1:9f6a78395432 195 {
nyatla 1:9f6a78395432 196 /**継承クラスで実装すべきインタフェイス*/
nyatla 1:9f6a78395432 197 const struct NyLPC_TcHttpBasicHeaderParser_Handler* _handler;
nyatla 1:9f6a78395432 198 NyLPC_TUInt16 _rcode;//_stがERRORの時にエラーコードを格納する。
nyatla 2:b96c1e90d120 199 /** パースの実行状態*/
nyatla 2:b96c1e90d120 200 NyLPC_TcHttpBasicHeaderParser_ST _st;
nyatla 1:9f6a78395432 201 /**ワーク文字列*/
nyatla 1:9f6a78395432 202 NyLPC_TcStr_t _wsb;
nyatla 1:9f6a78395432 203 /**ワーク文字列のバッファ*/
nyatla 1:9f6a78395432 204 char _wsb_buf[NyLPC_cHttpBasicHeaderParser_SIZE_OF_WBS];
nyatla 1:9f6a78395432 205 };
nyatla 1:9f6a78395432 206
nyatla 1:9f6a78395432 207
nyatla 2:b96c1e90d120 208 void NyLPC_cHttpBasicHeaderParser_initialize(NyLPC_TcHttpBasicHeaderParser_t* i_inst,const struct NyLPC_TcHttpBasicHeaderParser_Handler* i_handler);
nyatla 1:9f6a78395432 209 #define NyLPC_cHttpBasicHeaderParser_finalize(i_inst)
nyatla 1:9f6a78395432 210
nyatla 2:b96c1e90d120 211 /**
nyatla 2:b96c1e90d120 212 * パーサの開始処理をします。
nyatla 2:b96c1e90d120 213 * 関数は、parseInit->parseChar[n回]->(parseStream)->parseFinishの順でコールします。
nyatla 2:b96c1e90d120 214 * parseChar、又はparseStreamでエラーが発生した場合は、後続の関数を呼び出すことは出来ません。
nyatla 2:b96c1e90d120 215 * parseCharでEOHに達した場合、parseCharまたはparseStreamを続けて呼ぶことは出来ません。
nyatla 2:b96c1e90d120 216 * parseFinishはparseCharまたはparseStreamでEOHに達した場合のみ呼び出すことが出来ます。
nyatla 2:b96c1e90d120 217 */
nyatla 2:b96c1e90d120 218 void NyLPC_cHttpBasicHeaderParser_parseInit(NyLPC_TcHttpBasicHeaderParser_t* i_inst,struct NyLPC_THttpBasicHeader* o_out);
nyatla 2:b96c1e90d120 219
nyatla 2:b96c1e90d120 220 /**
nyatla 2:b96c1e90d120 221 * パーサの処理を閉じます。
nyatla 2:b96c1e90d120 222 * @return
nyatla 2:b96c1e90d120 223 * パース処理が正常に終了したかの真偽値
nyatla 2:b96c1e90d120 224 */
nyatla 2:b96c1e90d120 225 NyLPC_TBool NyLPC_cHttpBasicHeaderParser_parseFinish(NyLPC_TcHttpBasicHeaderParser_t* i_inst,struct NyLPC_THttpBasicHeader* o_out);
nyatla 2:b96c1e90d120 226
nyatla 2:b96c1e90d120 227 /**
nyatla 2:b96c1e90d120 228 * 文字列をパースします。
nyatla 2:b96c1e90d120 229 * コール前にNyLPC_cHttpBasicHeaderParser_parseInitでパーサを開始してください。
nyatla 2:b96c1e90d120 230 * @return
nyatla 2:b96c1e90d120 231 * パースした文字数。エラーの場合-1です。
nyatla 2:b96c1e90d120 232 * 0以上の場合、getParseStatusでパーサの状態を確認してください。
nyatla 2:b96c1e90d120 233 */
nyatla 2:b96c1e90d120 234 NyLPC_TInt32 NyLPC_cHttpBasicHeaderParser_parseChar(NyLPC_TcHttpBasicHeaderParser_t* i_inst,const NyLPC_TChar* i_c,NyLPC_TInt32 i_size,struct NyLPC_THttpBasicHeader* o_out);
nyatla 2:b96c1e90d120 235
nyatla 2:b96c1e90d120 236
nyatla 2:b96c1e90d120 237 /**
nyatla 2:b96c1e90d120 238 * ストリームから読み出して、EOHに達するまでパースします。
nyatla 2:b96c1e90d120 239 * コール前にNyLPC_cHttpBasicHeaderParser_parseInitでパーサを開始してください。
nyatla 2:b96c1e90d120 240 * @return
nyatla 2:b96c1e90d120 241 * 処理が正常に終了したかを返します。
nyatla 2:b96c1e90d120 242 * TRUEの場合、ステータスはEOHに達しています。(parseFinishをコールできます。)
nyatla 2:b96c1e90d120 243 */
nyatla 48:00d211aac2ec 244 NyLPC_TBool NyLPC_cHttpBasicHeaderParser_parseStream(NyLPC_TcHttpBasicHeaderParser_t* i_inst,NyLPC_TiHttpPtrStream_t* i_stream,struct NyLPC_THttpBasicHeader* o_out);
nyatla 2:b96c1e90d120 245
nyatla 2:b96c1e90d120 246
nyatla 1:9f6a78395432 247 /**
nyatla 1:9f6a78395432 248 * parse関数がエラーの場合に、
nyatla 1:9f6a78395432 249 * 候補のエラーのステータスコードを返す。
nyatla 1:9f6a78395432 250 */
nyatla 1:9f6a78395432 251 #define NyLPC_cHttpBasicHeaderParser_getStatusCode(inst) ((inst)->_rcode)
nyatla 1:9f6a78395432 252
nyatla 1:9f6a78395432 253 #ifdef __cplusplus
nyatla 1:9f6a78395432 254 }
nyatla 1:9f6a78395432 255 #endif /* __cplusplus */
nyatla 1:9f6a78395432 256
nyatla 14:4618692ec239 257 #endif