source: EcnlProtoTool/trunk/ntshell/webserver/httpd.h@ 279

Last change on this file since 279 was 279, checked in by coas-nagasima, 7 years ago

ファイルを追加、更新。

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 5.7 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2017 Cores Co., Ltd. Japan
5 *
6 * 上記著作権者
7は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
8 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
9 * 変・再é…
10å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再é…
16å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
17å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
18 * 者
19マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再é…
23å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
24 * と.
25 * (a) 再é…
26å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
27マニュアルなど)に,上記の著
28 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
29 * (b) 再é…
30å¸ƒã®å½¢æ…
31‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
32 * 報告すること.
33 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
34 * 害からも,上記著作権者
35およびTOPPERSプロジェクトをå…
36è²¬ã™ã‚‹ã“と.
37 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
38 * 由に基づく請求からも,上記著作権者
39およびTOPPERSプロジェクトを
40 * å…
41è²¬ã™ã‚‹ã“と.
42 *
43 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
44お
45 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
46 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
47 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
48 * の責任を負わない.
49 *
50 * @(#) $Id: httpd.h 279 2017-04-29 07:33:37Z coas-nagasima $
51 */
52
53#ifndef __HTTPD_H__
54#define __HTTPD_H__
55
56/*
57 * ターゲット依存の定義
58 */
59#include <kernel.h>
60#include "httpd-fs.h"
61#include "http_parser.h"
62#include "websocket.h"
63
64/*
65 * 各タスクの優å…
66ˆåº¦ã®å®šç¾©
67 */
68
69#define HTTPD_PRIORITY 5 /* HTTPサーバータスクの優å…
70ˆåº¦ */
71
72#define HTTPD_STACK_SIZE 1024 /* HTTPサーバータスクのスタック領域のサイズ */
73
74 /* TCP 送受信ウィンドバッファサイズ */
75
76#define TCP_SWBUF_SIZE 512
77#define TCP_RWBUF_SIZE 512
78
79/*
80 * 関数のプロトタイプ宣言
81 */
82#ifndef TOPPERS_MACRO_ONLY
83
84 /* TCP 送受信ウィンドバッファ */
85
86extern uint8_t tcp_swbuf1[];
87extern uint8_t tcp_rwbuf1[];
88extern uint8_t tcp_swbuf2[];
89extern uint8_t tcp_rwbuf2[];
90
91/* HTTPサーバータスク */
92extern void httpd_task(intptr_t exinf);
93
94#define MAX_ELEMENT_SIZE 256
95
96struct message {
97 enum http_method method;
98 unsigned short http_major;
99 unsigned short http_minor;
100 char filename[64];
101 char request_url[MAX_ELEMENT_SIZE];
102 char response_status[64];
103 int num_headers;
104 char host[MAX_ELEMENT_SIZE];
105 char referer[MAX_ELEMENT_SIZE];
106 char upgrade[32];
107 char connection[32];
108 char sec_websocket_key[64];
109 char origin[MAX_ELEMENT_SIZE];
110 char sec_websocket_protocol[64];
111 char sec_websocket_version[4];
112 char response_key[86];
113 size_t body_size;
114 int should_keep_alive;
115 int headers_complete_cb_called;
116 int message_begin_cb_called;
117 int message_complete_cb_called;
118 int body_is_final;
119};
120
121#ifndef _MSC_VER
122size_t strnlen(const char *s, size_t maxlen);
123#endif
124size_t strlncat(char *dst, size_t len, const char *src, size_t n);
125extern http_parser_settings websvr_settings;
126
127typedef enum httpd_state_t {
128 STATE_DISCONNECTED, /* 切断中 */
129 STATE_CONNECTED, /* 接続中 */
130 STATE_WEBSOCKET, /* WebSocket通信中 */
131 STATE_CLOSING, /* 切断処理中 */
132 STATE_RESET, /* mruby起動のためのリセット */
133} httpd_state_t;
134
135typedef enum httpd_in_state_t {
136 IN_STATE_START,
137 IN_STATE_REQUEST,
138 IN_STATE_UPLOAD,
139 IN_STATE_UPLOAD_WAIT,
140 IN_STATE_RESPONSE,
141 IN_STATE_WEBSOCKET,
142 IN_STATE_END,
143} httpd_in_state_t;
144
145typedef enum httpd_out_state_t {
146 OUT_STATE_WAIT_REQUEST,
147 OUT_STATE_OPEN_GET_FILE,
148 OUT_STATE_WAIT_POST_BODY,
149 OUT_STATE_BODY_RECEIVED,
150 OUT_STATE_SEND_HEADER,
151 OUT_STATE_SEND_FILE,
152 OUT_STATE_SEND_DATA,
153 OUT_STATE_SEND_END,
154} httpd_out_state_t;
155
156struct httpd_state {
157 ID tskid;
158 ID cepid;
159 uint8_t dst[20];
160 char temp[16];
161 char addr[sizeof("0123:4567:89ab:cdef:0123:4567:89ab:cdef")];
162 httpd_state_t state;
163 int reset;
164 struct {
165 httpd_in_state_t state;
166 bool_t wait;
167 char *data;
168 SYSTIM timer;
169 } in;
170 struct {
171 httpd_out_state_t state;
172 bool_t wait;
173 const char *statushdr;
174 } out;
175 struct {
176 int parse_pos;
177 int parse_len;
178 struct http_parser parser;
179 struct http_parser_url handle;
180 struct message message;
181 };
182 union {
183 struct {
184 char *filename;
185 char *query;
186 struct httpd_fs_file file;
187 };
188 struct {
189 char *_dummy_filename;
190 const char *response_body;
191 int response_pos;
192 int response_len;
193 };
194 struct {
195 struct websocket websocket;
196 int close_req;
197 };
198 };
199};
200#define get_context(p) (struct httpd_state *)((intptr_t)p - (intptr_t)&((struct httpd_state *)0)->parser)
201
202/*
203 * ノンブロッキングコールのコールバック関数
204 */
205extern ER callback_nblk_tcp(ID cepid, FN fncd, void *p_parblk);
206
207#endif /* TOPPERS_MACRO_ONLY */
208
209#endif /* __HTTPD_H__ */
Note: See TracBrowser for help on using the repository browser.