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.
Dependents: MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more
core/net/httpd/mod/NyLPC_cMocMiMicSetting.c@29:e19aab0c4156, 2013-05-04 (annotated)
- Committer:
- nyatla
- Date:
- Sat May 04 12:11:59 2013 +0000
- Revision:
- 29:e19aab0c4156
- Parent:
- 27:eb66b517efe6
- Child:
- 37:fc4b4fd6a649
update platform selector
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| nyatla | 2:b96c1e90d120 | 1 | /********************************************************************************* |
| nyatla | 2:b96c1e90d120 | 2 | * PROJECT: MiMic |
| nyatla | 2:b96c1e90d120 | 3 | * -------------------------------------------------------------------------------- |
| nyatla | 2:b96c1e90d120 | 4 | * |
| nyatla | 2:b96c1e90d120 | 5 | * This file is part of MiMic |
| nyatla | 2:b96c1e90d120 | 6 | * Copyright (C)2011 Ryo Iizuka |
| nyatla | 2:b96c1e90d120 | 7 | * |
| nyatla | 2:b96c1e90d120 | 8 | * MiMic is free software: you can redistribute it and/or modify |
| nyatla | 2:b96c1e90d120 | 9 | * it under the terms of the GNU Lesser General Public License as published |
| nyatla | 2:b96c1e90d120 | 10 | * by the Free Software Foundation, either version 3 of the License, or |
| nyatla | 2:b96c1e90d120 | 11 | * (at your option) any later version. |
| nyatla | 2:b96c1e90d120 | 12 | * |
| nyatla | 2:b96c1e90d120 | 13 | * This program is distributed in the hope that it will be useful, |
| nyatla | 2:b96c1e90d120 | 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| nyatla | 2:b96c1e90d120 | 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| nyatla | 2:b96c1e90d120 | 16 | * GNU General Public License for more details. |
| nyatla | 2:b96c1e90d120 | 17 | * |
| nyatla | 2:b96c1e90d120 | 18 | * You should have received a copy of the GNU Lesser General Public License |
| nyatla | 2:b96c1e90d120 | 19 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| nyatla | 2:b96c1e90d120 | 20 | * |
| nyatla | 2:b96c1e90d120 | 21 | * For further information please contact. |
| nyatla | 2:b96c1e90d120 | 22 | * http://nyatla.jp/ |
| nyatla | 2:b96c1e90d120 | 23 | * <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp> |
| nyatla | 2:b96c1e90d120 | 24 | * |
| nyatla | 2:b96c1e90d120 | 25 | *********************************************************************************/ |
| nyatla | 2:b96c1e90d120 | 26 | #include "NyLPC_cModMiMicSetting.h" |
| nyatla | 2:b96c1e90d120 | 27 | #include "NyLPC_stdlib.h" |
| nyatla | 14:4618692ec239 | 28 | #include "../NyLPC_cHttpdUtils.h" |
| nyatla | 2:b96c1e90d120 | 29 | #include "NyLPC_http.h" |
| nyatla | 2:b96c1e90d120 | 30 | #include "NyLPC_mimicVm.h" |
| nyatla | 2:b96c1e90d120 | 31 | #include "NyLPC_flash.h" |
| nyatla | 2:b96c1e90d120 | 32 | #include "../NyLPC_cHttpdConnection_protected.h" |
| nyatla | 7:2b33a8d84eb3 | 33 | #include "../../NyLPC_cNet.h" |
| nyatla | 7:2b33a8d84eb3 | 34 | |
| nyatla | 27:eb66b517efe6 | 35 | #define MOD_VERSION "ModMiMicSetting/1.2" |
| nyatla | 2:b96c1e90d120 | 36 | #define SIZE_OF_SETUP_PARAM 7 |
| nyatla | 2:b96c1e90d120 | 37 | struct TModMiMicSettingRequest |
| nyatla | 2:b96c1e90d120 | 38 | { |
| nyatla | 2:b96c1e90d120 | 39 | struct NyLPC_THttpBasicHeader super; |
| nyatla | 2:b96c1e90d120 | 40 | NyLPC_TUInt8 _content_id; |
| nyatla | 2:b96c1e90d120 | 41 | //解析用 |
| nyatla | 2:b96c1e90d120 | 42 | NyLPC_TUInt8 _qery_name_id; |
| nyatla | 2:b96c1e90d120 | 43 | NyLPC_TUInt8 _astate; |
| nyatla | 2:b96c1e90d120 | 44 | NyLPC_TInt16 _prefix_len; |
| nyatla | 2:b96c1e90d120 | 45 | NyLPC_TcStr_t _tstr; |
| nyatla | 2:b96c1e90d120 | 46 | NyLPC_TChar _tstr_buf[16]; |
| nyatla | 2:b96c1e90d120 | 47 | /** 文字列のパーサ*/ |
| nyatla | 2:b96c1e90d120 | 48 | NyLPC_TcMiMicDbCompiler_t _binparser; |
| nyatla | 2:b96c1e90d120 | 49 | union{ |
| nyatla | 2:b96c1e90d120 | 50 | struct{ |
| nyatla | 2:b96c1e90d120 | 51 | /**pパラメータ。最大長さは16。長さ6であること。 |
| nyatla | 2:b96c1e90d120 | 52 | * [0]:MACAddrの、[0][1][2][3] |
| nyatla | 2:b96c1e90d120 | 53 | * [1]:MACAddrの、[4][5][X][X] |
| nyatla | 2:b96c1e90d120 | 54 | * [2]:IPAddr(Networkorder) |
| nyatla | 2:b96c1e90d120 | 55 | * [3]:Subnetmask(Networkorder) |
| nyatla | 2:b96c1e90d120 | 56 | * [4]:Defaultgateway |
| nyatla | 2:b96c1e90d120 | 57 | * [5]:[0:port0][1:port1][X][X] |
| nyatla | 2:b96c1e90d120 | 58 | * [6]:accessmode [0:AC1][1:AC2][X][X] |
| nyatla | 2:b96c1e90d120 | 59 | */ |
| nyatla | 2:b96c1e90d120 | 60 | NyLPC_TUInt32 param_buf[SIZE_OF_SETUP_PARAM]; |
| nyatla | 2:b96c1e90d120 | 61 | NyLPC_TUInt16 param_len; |
| nyatla | 2:b96c1e90d120 | 62 | NyLPC_TUInt32 cval;//コマンド値 |
| nyatla | 2:b96c1e90d120 | 63 | }setup; |
| nyatla | 2:b96c1e90d120 | 64 | struct{ |
| nyatla | 2:b96c1e90d120 | 65 | /** |
| nyatla | 2:b96c1e90d120 | 66 | * 不明な名前の場合は、ここに名前をコピー |
| nyatla | 2:b96c1e90d120 | 67 | */ |
| nyatla | 2:b96c1e90d120 | 68 | NyLPC_TChar path[32]; |
| nyatla | 2:b96c1e90d120 | 69 | }unknown; |
| nyatla | 2:b96c1e90d120 | 70 | }content; |
| nyatla | 2:b96c1e90d120 | 71 | }; |
| nyatla | 2:b96c1e90d120 | 72 | |
| nyatla | 2:b96c1e90d120 | 73 | |
| nyatla | 2:b96c1e90d120 | 74 | static NyLPC_TBool messageHandler(NyLPC_TcHttpBasicHeaderParser_t* i_inst,const NyLPC_TChar* i_name,NyLPC_TChar i_c,struct NyLPC_THttpBasicHeader* o_out) |
| nyatla | 2:b96c1e90d120 | 75 | { |
| nyatla | 2:b96c1e90d120 | 76 | (void)i_inst; |
| nyatla | 2:b96c1e90d120 | 77 | (void)i_name; |
| nyatla | 2:b96c1e90d120 | 78 | (void)i_c; |
| nyatla | 2:b96c1e90d120 | 79 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 80 | } |
| nyatla | 2:b96c1e90d120 | 81 | |
| nyatla | 2:b96c1e90d120 | 82 | #define ST_PARSE_PATH 1 |
| nyatla | 2:b96c1e90d120 | 83 | #define ST_PARSE_QUERY_NAME 2 |
| nyatla | 2:b96c1e90d120 | 84 | #define ST_PARSE_QUERY_VALUE 3 //Query読み出し中 |
| nyatla | 2:b96c1e90d120 | 85 | #define ST_PARSE_QUERY_VALUE_P 4 |
| nyatla | 2:b96c1e90d120 | 86 | #define ST_PARSE_QUERY_VALUE_C 5 |
| nyatla | 2:b96c1e90d120 | 87 | /** |
| nyatla | 2:b96c1e90d120 | 88 | * コンテンツID定義(コンテンツ名に対応) |
| nyatla | 2:b96c1e90d120 | 89 | */ |
| nyatla | 2:b96c1e90d120 | 90 | #define CONTENT_ID_UNKNOWN 1 |
| nyatla | 2:b96c1e90d120 | 91 | #define CONTENT_ID_SETUP 2 |
| nyatla | 2:b96c1e90d120 | 92 | #define CONTENT_ID_INDEX 3 |
| nyatla | 2:b96c1e90d120 | 93 | #define CONTENT_ID_STATUS 4 |
| nyatla | 2:b96c1e90d120 | 94 | #define CONTENT_ID_CSS 5 |
| nyatla | 2:b96c1e90d120 | 95 | #define CONTENT_ID_LOGO 6 |
| nyatla | 2:b96c1e90d120 | 96 | |
| nyatla | 2:b96c1e90d120 | 97 | #define QNAME_ID_P 4 |
| nyatla | 2:b96c1e90d120 | 98 | #define QNAME_ID_C 5 |
| nyatla | 2:b96c1e90d120 | 99 | #define QNAME_ID_UNKNOWN 0 |
| nyatla | 2:b96c1e90d120 | 100 | |
| nyatla | 2:b96c1e90d120 | 101 | #define QVAL_C_GET 1 |
| nyatla | 2:b96c1e90d120 | 102 | #define QVAL_C_UPDATE 2 |
| nyatla | 2:b96c1e90d120 | 103 | #define QVAL_C_UNKNOWN 0 |
| nyatla | 2:b96c1e90d120 | 104 | |
| nyatla | 2:b96c1e90d120 | 105 | |
| nyatla | 2:b96c1e90d120 | 106 | static const struct NyLPC_TTextIdTbl url_tbl[]= |
| nyatla | 2:b96c1e90d120 | 107 | { |
| nyatla | 2:b96c1e90d120 | 108 | {"setup.api",CONTENT_ID_SETUP}, |
| nyatla | 2:b96c1e90d120 | 109 | {NULL,CONTENT_ID_UNKNOWN} |
| nyatla | 2:b96c1e90d120 | 110 | }; |
| nyatla | 2:b96c1e90d120 | 111 | |
| nyatla | 2:b96c1e90d120 | 112 | static const struct NyLPC_TTextIdTbl qname_id_table[]= |
| nyatla | 2:b96c1e90d120 | 113 | { |
| nyatla | 2:b96c1e90d120 | 114 | {"p",QNAME_ID_P}, |
| nyatla | 2:b96c1e90d120 | 115 | {"c",QNAME_ID_C}, |
| nyatla | 2:b96c1e90d120 | 116 | {NULL,QNAME_ID_UNKNOWN} |
| nyatla | 2:b96c1e90d120 | 117 | }; |
| nyatla | 2:b96c1e90d120 | 118 | |
| nyatla | 2:b96c1e90d120 | 119 | |
| nyatla | 2:b96c1e90d120 | 120 | |
| nyatla | 2:b96c1e90d120 | 121 | |
| nyatla | 2:b96c1e90d120 | 122 | static NyLPC_TBool urlHandler(NyLPC_TcHttpBasicHeaderParser_t* i_inst,NyLPC_TChar i_c,struct NyLPC_THttpBasicHeader* o_out) |
| nyatla | 2:b96c1e90d120 | 123 | { |
| nyatla | 2:b96c1e90d120 | 124 | |
| nyatla | 2:b96c1e90d120 | 125 | struct TModMiMicSettingRequest* out=(struct TModMiMicSettingRequest*)o_out; |
| nyatla | 2:b96c1e90d120 | 126 | //読み飛ばし |
| nyatla | 2:b96c1e90d120 | 127 | if(out->_prefix_len<0){ |
| nyatla | 2:b96c1e90d120 | 128 | out->_prefix_len++; |
| nyatla | 2:b96c1e90d120 | 129 | return NyLPC_TBool_TRUE;//読み飛ばし |
| nyatla | 2:b96c1e90d120 | 130 | } |
| nyatla | 2:b96c1e90d120 | 131 | if(out->_astate==ST_PARSE_PATH){ |
| nyatla | 2:b96c1e90d120 | 132 | if(i_c!='\0' && i_c!='?'){ |
| nyatla | 2:b96c1e90d120 | 133 | if(!NyLPC_cStr_put(&(out->_tstr),i_c)){ |
| nyatla | 2:b96c1e90d120 | 134 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 135 | } |
| nyatla | 2:b96c1e90d120 | 136 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 137 | } |
| nyatla | 2:b96c1e90d120 | 138 | out->_content_id=NyLPC_TTextIdTbl_getMatchId(NyLPC_cStr_str(&(out->_tstr)),url_tbl); |
| nyatla | 2:b96c1e90d120 | 139 | switch(out->_content_id) |
| nyatla | 2:b96c1e90d120 | 140 | { |
| nyatla | 2:b96c1e90d120 | 141 | case CONTENT_ID_SETUP: |
| nyatla | 2:b96c1e90d120 | 142 | out->content.setup.param_len=0; |
| nyatla | 2:b96c1e90d120 | 143 | out->content.setup.cval=QVAL_C_UNKNOWN; |
| nyatla | 2:b96c1e90d120 | 144 | break; |
| nyatla | 2:b96c1e90d120 | 145 | default: |
| nyatla | 2:b96c1e90d120 | 146 | break; |
| nyatla | 2:b96c1e90d120 | 147 | } |
| nyatla | 2:b96c1e90d120 | 148 | NyLPC_cStr_clear(&(out->_tstr)); |
| nyatla | 2:b96c1e90d120 | 149 | out->_astate=ST_PARSE_QUERY_NAME;//クエリ名解析へ |
| nyatla | 2:b96c1e90d120 | 150 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 151 | } |
| nyatla | 2:b96c1e90d120 | 152 | switch(out->_content_id) |
| nyatla | 2:b96c1e90d120 | 153 | { |
| nyatla | 2:b96c1e90d120 | 154 | case CONTENT_ID_SETUP: |
| nyatla | 2:b96c1e90d120 | 155 | switch(out->_astate){ |
| nyatla | 2:b96c1e90d120 | 156 | case ST_PARSE_QUERY_NAME: |
| nyatla | 2:b96c1e90d120 | 157 | if(i_c!='\0' && i_c!='&' && i_c!='='){ |
| nyatla | 2:b96c1e90d120 | 158 | if(!NyLPC_cStr_put(&(out->_tstr),i_c)){ |
| nyatla | 2:b96c1e90d120 | 159 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 160 | } |
| nyatla | 2:b96c1e90d120 | 161 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 162 | } |
| nyatla | 2:b96c1e90d120 | 163 | //Query確定。 |
| nyatla | 2:b96c1e90d120 | 164 | out->_qery_name_id=NyLPC_TTextIdTbl_getMatchId(NyLPC_cStr_str(&(out->_tstr)),qname_id_table); |
| nyatla | 2:b96c1e90d120 | 165 | NyLPC_cStr_clear(&(out->_tstr)); |
| nyatla | 2:b96c1e90d120 | 166 | //クエリ値がある場合 |
| nyatla | 2:b96c1e90d120 | 167 | switch(out->_qery_name_id){ |
| nyatla | 2:b96c1e90d120 | 168 | case QNAME_ID_P: |
| nyatla | 2:b96c1e90d120 | 169 | out->_astate=ST_PARSE_QUERY_VALUE_P;//MIMICBCのDBパラメータパーサを借用。 |
| nyatla | 2:b96c1e90d120 | 170 | out->content.setup.param_len=0; |
| nyatla | 2:b96c1e90d120 | 171 | break; |
| nyatla | 2:b96c1e90d120 | 172 | case QNAME_ID_C: |
| nyatla | 2:b96c1e90d120 | 173 | out->_astate=ST_PARSE_QUERY_VALUE_C; |
| nyatla | 2:b96c1e90d120 | 174 | break; |
| nyatla | 2:b96c1e90d120 | 175 | default: |
| nyatla | 2:b96c1e90d120 | 176 | out->_astate=ST_PARSE_QUERY_VALUE; |
| nyatla | 2:b96c1e90d120 | 177 | break; |
| nyatla | 2:b96c1e90d120 | 178 | } |
| nyatla | 2:b96c1e90d120 | 179 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 180 | case ST_PARSE_QUERY_VALUE: |
| nyatla | 2:b96c1e90d120 | 181 | //未知のクエリは無視 |
| nyatla | 2:b96c1e90d120 | 182 | if(i_c!='\0' && i_c!='&'){ |
| nyatla | 2:b96c1e90d120 | 183 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 184 | } |
| nyatla | 2:b96c1e90d120 | 185 | //クエリ値解析完了 |
| nyatla | 2:b96c1e90d120 | 186 | out->_astate=ST_PARSE_QUERY_NAME; |
| nyatla | 2:b96c1e90d120 | 187 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 188 | case ST_PARSE_QUERY_VALUE_C: |
| nyatla | 2:b96c1e90d120 | 189 | if(i_c!='\0' && i_c!='&'){ |
| nyatla | 2:b96c1e90d120 | 190 | if(!NyLPC_cStr_put(&(out->_tstr),i_c)){ |
| nyatla | 2:b96c1e90d120 | 191 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 192 | } |
| nyatla | 2:b96c1e90d120 | 193 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 194 | } |
| nyatla | 2:b96c1e90d120 | 195 | if(NyLPC_cStr_isEqual(&out->_tstr,"get")){ |
| nyatla | 2:b96c1e90d120 | 196 | out->content.setup.cval=QVAL_C_GET; |
| nyatla | 2:b96c1e90d120 | 197 | }else if(NyLPC_cStr_isEqual(&out->_tstr,"update")){ |
| nyatla | 2:b96c1e90d120 | 198 | out->content.setup.cval=QVAL_C_UPDATE; |
| nyatla | 2:b96c1e90d120 | 199 | }else{ |
| nyatla | 2:b96c1e90d120 | 200 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 201 | } |
| nyatla | 2:b96c1e90d120 | 202 | out->_astate=ST_PARSE_QUERY_NAME; |
| nyatla | 2:b96c1e90d120 | 203 | NyLPC_cStr_clear(&(out->_tstr)); |
| nyatla | 2:b96c1e90d120 | 204 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 205 | case ST_PARSE_QUERY_VALUE_P: |
| nyatla | 2:b96c1e90d120 | 206 | if(i_c!='\0' && i_c!='&'){ |
| nyatla | 2:b96c1e90d120 | 207 | if(out->content.setup.param_len>=SIZE_OF_SETUP_PARAM) |
| nyatla | 2:b96c1e90d120 | 208 | { |
| nyatla | 2:b96c1e90d120 | 209 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 210 | } |
| nyatla | 2:b96c1e90d120 | 211 | switch(NyLPC_cMiMicDbCompiler_compileFragment2(&(out->_binparser),i_c,out->content.setup.param_buf+out->content.setup.param_len)) |
| nyatla | 2:b96c1e90d120 | 212 | { |
| nyatla | 2:b96c1e90d120 | 213 | case NyLPC_TcMiMicDbCompiler_RET_CONTINUE: |
| nyatla | 2:b96c1e90d120 | 214 | break; |
| nyatla | 2:b96c1e90d120 | 215 | case NyLPC_TcMiMicDbCompiler_RET_OK: |
| nyatla | 2:b96c1e90d120 | 216 | out->content.setup.param_len++; |
| nyatla | 2:b96c1e90d120 | 217 | break; |
| nyatla | 2:b96c1e90d120 | 218 | case NyLPC_TcMiMicDbCompiler_RET_ERROR: |
| nyatla | 2:b96c1e90d120 | 219 | default: |
| nyatla | 2:b96c1e90d120 | 220 | //ERROR |
| nyatla | 2:b96c1e90d120 | 221 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 222 | } |
| nyatla | 2:b96c1e90d120 | 223 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 224 | } |
| nyatla | 2:b96c1e90d120 | 225 | //区切りのいいところで終わってる? |
| nyatla | 2:b96c1e90d120 | 226 | if(NyLPC_cMiMicDbCompiler_hasFragment(&(out->_binparser))){ |
| nyatla | 2:b96c1e90d120 | 227 | //ERROR |
| nyatla | 2:b96c1e90d120 | 228 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 229 | } |
| nyatla | 2:b96c1e90d120 | 230 | //終端しているなら、次のクエリへ |
| nyatla | 2:b96c1e90d120 | 231 | out->_astate=ST_PARSE_QUERY_NAME; |
| nyatla | 2:b96c1e90d120 | 232 | NyLPC_cStr_clear(&(out->_tstr)); |
| nyatla | 2:b96c1e90d120 | 233 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 234 | default: |
| nyatla | 2:b96c1e90d120 | 235 | break; |
| nyatla | 2:b96c1e90d120 | 236 | } |
| nyatla | 2:b96c1e90d120 | 237 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 238 | default: |
| nyatla | 2:b96c1e90d120 | 239 | NyLPC_OnErrorGoto(ERROR); |
| nyatla | 2:b96c1e90d120 | 240 | } |
| nyatla | 2:b96c1e90d120 | 241 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 242 | ERROR: |
| nyatla | 2:b96c1e90d120 | 243 | return NyLPC_TBool_FALSE; |
| nyatla | 2:b96c1e90d120 | 244 | } |
| nyatla | 2:b96c1e90d120 | 245 | /** |
| nyatla | 2:b96c1e90d120 | 246 | * デフォルトハンドラ |
| nyatla | 2:b96c1e90d120 | 247 | */ |
| nyatla | 2:b96c1e90d120 | 248 | static const struct NyLPC_TcHttpBasicHeaderParser_Handler handler= |
| nyatla | 2:b96c1e90d120 | 249 | { |
| nyatla | 2:b96c1e90d120 | 250 | messageHandler, |
| nyatla | 2:b96c1e90d120 | 251 | urlHandler |
| nyatla | 2:b96c1e90d120 | 252 | }; |
| nyatla | 2:b96c1e90d120 | 253 | |
| nyatla | 2:b96c1e90d120 | 254 | |
| nyatla | 2:b96c1e90d120 | 255 | /** |
| nyatla | 2:b96c1e90d120 | 256 | * コンストラクタ。 |
| nyatla | 2:b96c1e90d120 | 257 | */ |
| nyatla | 2:b96c1e90d120 | 258 | void NyLPC_cModMiMicSetting_initialize(NyLPC_TcModMiMicSetting_t* i_inst,const NyLPC_TChar* i_ref_root_path) |
| nyatla | 2:b96c1e90d120 | 259 | { |
| nyatla | 2:b96c1e90d120 | 260 | NyLPC_cModRomFiles_initialize(&i_inst->super,i_ref_root_path,NULL,0); |
| nyatla | 2:b96c1e90d120 | 261 | } |
| nyatla | 2:b96c1e90d120 | 262 | void NyLPC_cModMiMicSetting_finalize(NyLPC_TcModMiMicSetting_t* i_inst) |
| nyatla | 2:b96c1e90d120 | 263 | { |
| nyatla | 2:b96c1e90d120 | 264 | NyLPC_cModRomFiles_finalize(&i_inst->super); |
| nyatla | 2:b96c1e90d120 | 265 | } |
| nyatla | 2:b96c1e90d120 | 266 | /** |
| nyatla | 2:b96c1e90d120 | 267 | * モジュールがコネクションをハンドリングできるかを返します。 |
| nyatla | 2:b96c1e90d120 | 268 | */ |
| nyatla | 2:b96c1e90d120 | 269 | NyLPC_TBool NyLPC_cModMiMicSetting_canHandle(NyLPC_TcModMiMicSetting_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection) |
| nyatla | 2:b96c1e90d120 | 270 | { |
| nyatla | 2:b96c1e90d120 | 271 | return NyLPC_cModRomFiles_canHandle(&i_inst->super,i_connection); |
| nyatla | 2:b96c1e90d120 | 272 | } |
| nyatla | 2:b96c1e90d120 | 273 | |
| nyatla | 2:b96c1e90d120 | 274 | |
| nyatla | 2:b96c1e90d120 | 275 | |
| nyatla | 2:b96c1e90d120 | 276 | static void setup_proc(NyLPC_TcHttpdConnection_t* i_connection,struct TModMiMicSettingRequest* i_req); |
| nyatla | 2:b96c1e90d120 | 277 | |
| nyatla | 2:b96c1e90d120 | 278 | /** |
| nyatla | 2:b96c1e90d120 | 279 | * モジュールを実行します。 |
| nyatla | 2:b96c1e90d120 | 280 | */ |
| nyatla | 2:b96c1e90d120 | 281 | NyLPC_TBool NyLPC_cModMiMicSetting_execute(NyLPC_TcModMiMicSetting_t* i_inst,NyLPC_TcHttpdConnection_t* i_connection) |
| nyatla | 2:b96c1e90d120 | 282 | { |
| nyatla | 19:33b9ba0859ee | 283 | NyLPC_TUInt8 method_type; |
| nyatla | 2:b96c1e90d120 | 284 | struct TModMiMicSettingRequest header; |
| nyatla | 2:b96c1e90d120 | 285 | NyLPC_TcHttpBasicHeaderParser_t parser; |
| nyatla | 19:33b9ba0859ee | 286 | |
| nyatla | 2:b96c1e90d120 | 287 | //リクエストParse済へ遷移(この関数の後はModが責任を持ってリクエストを返却) |
| nyatla | 2:b96c1e90d120 | 288 | NyLPC_cHttpdConnection_setReqStatusParsed(i_connection); |
| nyatla | 2:b96c1e90d120 | 289 | |
| nyatla | 2:b96c1e90d120 | 290 | //URL解析の準備 |
| nyatla | 7:2b33a8d84eb3 | 291 | header._prefix_len=-((NyLPC_TInt16)strlen(i_inst->super._ref_root_path)+2); |
| nyatla | 2:b96c1e90d120 | 292 | header._astate=ST_PARSE_PATH; |
| nyatla | 2:b96c1e90d120 | 293 | NyLPC_cStr_initialize(&header._tstr,header._tstr_buf,16); |
| nyatla | 2:b96c1e90d120 | 294 | NyLPC_cMiMicDbCompiler_initialize(&header._binparser); |
| nyatla | 2:b96c1e90d120 | 295 | |
| nyatla | 2:b96c1e90d120 | 296 | NyLPC_cHttpBasicHeaderParser_initialize(&parser,&handler); |
| nyatla | 2:b96c1e90d120 | 297 | //プリフェッチしたデータを流す |
| nyatla | 2:b96c1e90d120 | 298 | NyLPC_cHttpBasicHeaderParser_parseInit(&parser,&(header.super)); |
| nyatla | 2:b96c1e90d120 | 299 | NyLPC_cHttpdConnection_pushPrefetchInfo(i_connection,&parser,&header.super); |
| nyatla | 2:b96c1e90d120 | 300 | //後続をストリームから取り込む |
| nyatla | 2:b96c1e90d120 | 301 | if(!NyLPC_cHttpBasicHeaderParser_parseStream(&parser,NyLPC_cHttpdConnection_refStream(i_connection),&(header.super))){ |
| nyatla | 19:33b9ba0859ee | 302 | NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); |
| nyatla | 2:b96c1e90d120 | 303 | NyLPC_OnErrorGoto(Error2); |
| nyatla | 2:b96c1e90d120 | 304 | } |
| nyatla | 2:b96c1e90d120 | 305 | if(!NyLPC_cHttpBasicHeaderParser_parseFinish(&parser,&(header.super))){ |
| nyatla | 19:33b9ba0859ee | 306 | NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); |
| nyatla | 2:b96c1e90d120 | 307 | NyLPC_OnErrorGoto(Error2); |
| nyatla | 2:b96c1e90d120 | 308 | } |
| nyatla | 19:33b9ba0859ee | 309 | //GETかHEADに制限 |
| nyatla | 19:33b9ba0859ee | 310 | method_type=NyLPC_cHttpdConnection_getMethod(i_connection); |
| nyatla | 19:33b9ba0859ee | 311 | if(method_type!=NyLPC_THttpMethodType_GET && method_type!=NyLPC_THttpMethodType_HEAD) |
| nyatla | 2:b96c1e90d120 | 312 | { |
| nyatla | 19:33b9ba0859ee | 313 | NyLPC_cHttpdUtils_sendErrorResponse(i_connection,405); |
| nyatla | 19:33b9ba0859ee | 314 | NyLPC_OnErrorGoto(Error2); |
| nyatla | 2:b96c1e90d120 | 315 | } |
| nyatla | 2:b96c1e90d120 | 316 | //Connection Modeの設定 1.1 && !closeの場合はCONTINUE |
| nyatla | 2:b96c1e90d120 | 317 | if(header.super.connection!=NyLPC_THttpMessgeHeader_Connection_CLOSE && header.super.startline.req.version==NyLPC_THttpVersion_11) |
| nyatla | 2:b96c1e90d120 | 318 | { |
| nyatla | 2:b96c1e90d120 | 319 | NyLPC_cHttpdConnection_setConnectionMode(i_connection,NyLPC_TcHttpdConnection_CONNECTION_MODE_CONTINUE); |
| nyatla | 2:b96c1e90d120 | 320 | } |
| nyatla | 2:b96c1e90d120 | 321 | //CGIの実行 |
| nyatla | 2:b96c1e90d120 | 322 | switch(header._content_id) |
| nyatla | 2:b96c1e90d120 | 323 | { |
| nyatla | 2:b96c1e90d120 | 324 | case CONTENT_ID_SETUP: |
| nyatla | 2:b96c1e90d120 | 325 | setup_proc(i_connection,&header); |
| nyatla | 2:b96c1e90d120 | 326 | break; |
| nyatla | 2:b96c1e90d120 | 327 | case CONTENT_ID_UNKNOWN: |
| nyatla | 2:b96c1e90d120 | 328 | default: |
| nyatla | 19:33b9ba0859ee | 329 | NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); |
| nyatla | 2:b96c1e90d120 | 330 | NyLPC_OnErrorGoto(Error2); |
| nyatla | 2:b96c1e90d120 | 331 | } |
| nyatla | 2:b96c1e90d120 | 332 | NyLPC_cHttpBasicHeaderParser_finalize(&parser); |
| nyatla | 2:b96c1e90d120 | 333 | NyLPC_cMiMicDbCompiler_finalize(&header._binparser); |
| nyatla | 2:b96c1e90d120 | 334 | NyLPC_cStr_finalize(&(header._tstr)); |
| nyatla | 2:b96c1e90d120 | 335 | return NyLPC_TBool_TRUE; |
| nyatla | 2:b96c1e90d120 | 336 | Error2: |
| nyatla | 2:b96c1e90d120 | 337 | NyLPC_cHttpBasicHeaderParser_finalize(&parser); |
| nyatla | 2:b96c1e90d120 | 338 | NyLPC_cMiMicDbCompiler_finalize(&header._binparser); |
| nyatla | 2:b96c1e90d120 | 339 | NyLPC_cStr_finalize(&(header._tstr)); |
| nyatla | 19:33b9ba0859ee | 340 | |
| nyatla | 2:b96c1e90d120 | 341 | return NyLPC_TBool_FALSE; |
| nyatla | 2:b96c1e90d120 | 342 | } |
| nyatla | 2:b96c1e90d120 | 343 | |
| nyatla | 2:b96c1e90d120 | 344 | |
| nyatla | 2:b96c1e90d120 | 345 | static void setup_proc(NyLPC_TcHttpdConnection_t* i_connection,struct TModMiMicSettingRequest* i_req) |
| nyatla | 2:b96c1e90d120 | 346 | { |
| nyatla | 2:b96c1e90d120 | 347 | NyLPC_TBool ret; |
| nyatla | 2:b96c1e90d120 | 348 | const struct NyLPC_TMimicConfigulation* config; |
| nyatla | 2:b96c1e90d120 | 349 | struct NyLPC_TMimicConfigulation cfg_image; |
| nyatla | 21:f2a70f15301f | 350 | const NyLPC_TcIPv4Config_t* currebt_cfg; |
| nyatla | 19:33b9ba0859ee | 351 | NyLPC_Assert( |
| nyatla | 19:33b9ba0859ee | 352 | (NyLPC_cHttpdConnection_getMethod(i_connection)==NyLPC_THttpMethodType_GET)|| |
| nyatla | 19:33b9ba0859ee | 353 | (NyLPC_cHttpdConnection_getMethod(i_connection)==NyLPC_THttpMethodType_HEAD)); |
| nyatla | 2:b96c1e90d120 | 354 | |
| nyatla | 2:b96c1e90d120 | 355 | switch(i_req->content.setup.cval){ |
| nyatla | 2:b96c1e90d120 | 356 | case QVAL_C_GET: |
| nyatla | 14:4618692ec239 | 357 | if(!NyLPC_cHttpdUtils_sendJsonHeader(i_connection)){ |
| nyatla | 2:b96c1e90d120 | 358 | NyLPC_OnErrorGoto(Error); |
| nyatla | 2:b96c1e90d120 | 359 | } |
| nyatla | 19:33b9ba0859ee | 360 | if(NyLPC_cHttpdConnection_getMethod(i_connection)==NyLPC_THttpMethodType_GET){ |
| nyatla | 19:33b9ba0859ee | 361 | config=NyLPC_cMiMicConfiglation_loadFromFlash(); |
| nyatla | 19:33b9ba0859ee | 362 | //JSONを書く。 |
| nyatla | 19:33b9ba0859ee | 363 | if(!NyLPC_cHttpdConnection_sendResponseBodyF(i_connection, |
| nyatla | 21:f2a70f15301f | 364 | "{" |
| nyatla | 21:f2a70f15301f | 365 | "\"application\":\""MOD_VERSION";"NyLPC_cMiMicEnv_VERSION";%s\"," |
| nyatla | 21:f2a70f15301f | 366 | "\"mac00010203\":%u," |
| nyatla | 21:f2a70f15301f | 367 | "\"mac0405xxxx\":%u," |
| nyatla | 21:f2a70f15301f | 368 | "\"ip\":%u," |
| nyatla | 21:f2a70f15301f | 369 | "\"mask\":%u," |
| nyatla | 21:f2a70f15301f | 370 | "\"droute\":%u," |
| nyatla | 21:f2a70f15301f | 371 | "\"port\":%u," |
| nyatla | 21:f2a70f15301f | 372 | "\"access\":%u,", |
| nyatla | 19:33b9ba0859ee | 373 | NyLPC_cNet_PlatformName, |
| nyatla | 19:33b9ba0859ee | 374 | config->mac_00_01_02_03, |
| nyatla | 19:33b9ba0859ee | 375 | config->mac_04_05_xx_xx, |
| nyatla | 19:33b9ba0859ee | 376 | config->ipv4_addr_net, |
| nyatla | 19:33b9ba0859ee | 377 | config->ipv4_mask_net, |
| nyatla | 19:33b9ba0859ee | 378 | config->ipv4_drut_net, |
| nyatla | 19:33b9ba0859ee | 379 | config->ipv4_port, |
| nyatla | 19:33b9ba0859ee | 380 | config->accessmode |
| nyatla | 19:33b9ba0859ee | 381 | )){ |
| nyatla | 19:33b9ba0859ee | 382 | NyLPC_OnErrorGoto(Error); |
| nyatla | 19:33b9ba0859ee | 383 | } |
| nyatla | 27:eb66b517efe6 | 384 | //write current status |
| nyatla | 21:f2a70f15301f | 385 | currebt_cfg=NyLPC_cUipService_refCurrentConfig(); |
| nyatla | 21:f2a70f15301f | 386 | if(!NyLPC_cHttpdConnection_sendResponseBodyF(i_connection, |
| nyatla | 27:eb66b517efe6 | 387 | "\"info\":{" |
| nyatla | 27:eb66b517efe6 | 388 | "\"landev\":\"%s\"," |
| nyatla | 21:f2a70f15301f | 389 | "\"mac00010203\":%u," |
| nyatla | 21:f2a70f15301f | 390 | "\"mac0405xxxx\":%u," |
| nyatla | 21:f2a70f15301f | 391 | "\"ip\":%u," |
| nyatla | 21:f2a70f15301f | 392 | "\"mask\":%u," |
| nyatla | 21:f2a70f15301f | 393 | "\"droute\":%u" |
| nyatla | 21:f2a70f15301f | 394 | "}}", |
| nyatla | 27:eb66b517efe6 | 395 | NyLPC_cUipService_refDeviceName(), |
| nyatla | 21:f2a70f15301f | 396 | (currebt_cfg->eth_mac.addr[0]<<24)|(currebt_cfg->eth_mac.addr[1]<<16)|(currebt_cfg->eth_mac.addr[2]<<8)|currebt_cfg->eth_mac.addr[3], |
| nyatla | 21:f2a70f15301f | 397 | (currebt_cfg->eth_mac.addr[4]<<24)|(currebt_cfg->eth_mac.addr[5]<<16), |
| nyatla | 21:f2a70f15301f | 398 | NyLPC_ntohl(currebt_cfg->ip_addr.v), |
| nyatla | 21:f2a70f15301f | 399 | NyLPC_ntohl(currebt_cfg->netmask.v), |
| nyatla | 21:f2a70f15301f | 400 | NyLPC_ntohl(currebt_cfg->dr_addr.v) |
| nyatla | 21:f2a70f15301f | 401 | )){ |
| nyatla | 21:f2a70f15301f | 402 | NyLPC_OnErrorGoto(Error); |
| nyatla | 21:f2a70f15301f | 403 | } |
| nyatla | 2:b96c1e90d120 | 404 | } |
| nyatla | 2:b96c1e90d120 | 405 | break; |
| nyatla | 2:b96c1e90d120 | 406 | case QVAL_C_UPDATE: |
| nyatla | 2:b96c1e90d120 | 407 | //check parameter length |
| nyatla | 2:b96c1e90d120 | 408 | if(i_req->content.setup.param_len!=SIZE_OF_SETUP_PARAM) |
| nyatla | 2:b96c1e90d120 | 409 | { |
| nyatla | 19:33b9ba0859ee | 410 | NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); |
| nyatla | 2:b96c1e90d120 | 411 | }else{ |
| nyatla | 2:b96c1e90d120 | 412 | //パラメータ→ROMイメージ変換 |
| nyatla | 2:b96c1e90d120 | 413 | cfg_image.fast_boot=0xffffffff; |
| nyatla | 2:b96c1e90d120 | 414 | cfg_image.mac_00_01_02_03=(i_req->content.setup.param_buf[0]); |
| nyatla | 2:b96c1e90d120 | 415 | cfg_image.mac_04_05_xx_xx=(i_req->content.setup.param_buf[1]&0xffff0000); |
| nyatla | 2:b96c1e90d120 | 416 | cfg_image.ipv4_addr_net =i_req->content.setup.param_buf[2]; |
| nyatla | 2:b96c1e90d120 | 417 | cfg_image.ipv4_mask_net =i_req->content.setup.param_buf[3]; |
| nyatla | 2:b96c1e90d120 | 418 | cfg_image.ipv4_drut_net =i_req->content.setup.param_buf[4]; |
| nyatla | 2:b96c1e90d120 | 419 | cfg_image.ipv4_port =(NyLPC_TUInt16)(i_req->content.setup.param_buf[5]>>16); |
| nyatla | 2:b96c1e90d120 | 420 | cfg_image.accessmode=(i_req->content.setup.param_buf[6]); |
| nyatla | 2:b96c1e90d120 | 421 | //一応確認。 |
| nyatla | 2:b96c1e90d120 | 422 | if((cfg_image.ipv4_port==0)|| (cfg_image.accessmode & 0xFEFE0000)!=0x00000000){ |
| nyatla | 19:33b9ba0859ee | 423 | NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); |
| nyatla | 2:b96c1e90d120 | 424 | }else{ |
| nyatla | 2:b96c1e90d120 | 425 | //FreeRTOSの停止 |
| nyatla | 2:b96c1e90d120 | 426 | NyLPC_cIsr_enterCritical(); |
| nyatla | 2:b96c1e90d120 | 427 | //Flashへの書き込み |
| nyatla | 2:b96c1e90d120 | 428 | ret=NyLPC_cMiMicConfiglation_updateConfigulation(&cfg_image); |
| nyatla | 2:b96c1e90d120 | 429 | //FreeRTOSの復帰 |
| nyatla | 2:b96c1e90d120 | 430 | NyLPC_cIsr_exitCritical(); |
| nyatla | 2:b96c1e90d120 | 431 | if(!ret){ |
| nyatla | 19:33b9ba0859ee | 432 | NyLPC_cHttpdUtils_sendErrorResponse(i_connection,500); |
| nyatla | 2:b96c1e90d120 | 433 | }else{ |
| nyatla | 14:4618692ec239 | 434 | if(!NyLPC_cHttpdUtils_sendJsonHeader(i_connection)){ |
| nyatla | 2:b96c1e90d120 | 435 | NyLPC_OnErrorGoto(Error); |
| nyatla | 2:b96c1e90d120 | 436 | } |
| nyatla | 19:33b9ba0859ee | 437 | if(NyLPC_cHttpdConnection_getMethod(i_connection)==NyLPC_THttpMethodType_GET){ |
| nyatla | 19:33b9ba0859ee | 438 | NyLPC_cHttpdConnection_sendResponseBodyF(i_connection, |
| nyatla | 19:33b9ba0859ee | 439 | "{\"application\":\""MOD_VERSION";%s\",\"result\":%u}", |
| nyatla | 19:33b9ba0859ee | 440 | NyLPC_cNet_PlatformName,ret?0x00000000:0x80000000); |
| nyatla | 19:33b9ba0859ee | 441 | } |
| nyatla | 2:b96c1e90d120 | 442 | } |
| nyatla | 2:b96c1e90d120 | 443 | } |
| nyatla | 2:b96c1e90d120 | 444 | } |
| nyatla | 2:b96c1e90d120 | 445 | //JSONを書く。 |
| nyatla | 2:b96c1e90d120 | 446 | break; |
| nyatla | 2:b96c1e90d120 | 447 | default: |
| nyatla | 19:33b9ba0859ee | 448 | NyLPC_cHttpdUtils_sendErrorResponse(i_connection,400); |
| nyatla | 2:b96c1e90d120 | 449 | NyLPC_OnErrorGoto(Error); |
| nyatla | 2:b96c1e90d120 | 450 | break; |
| nyatla | 2:b96c1e90d120 | 451 | } |
| nyatla | 2:b96c1e90d120 | 452 | return; |
| nyatla | 2:b96c1e90d120 | 453 | Error: |
| nyatla | 2:b96c1e90d120 | 454 | return; |
| nyatla | 2:b96c1e90d120 | 455 | } |
MiMic Webservice library