source: EcnlProtoTool/trunk/prototool/webserver/httpd.h@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 4.2 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2017 Cores Co., Ltd. Japan
5 *
6 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
7 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
8 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
9 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
10 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
11 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
12 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
13 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
14ƒƒ“ƒgi—˜—p
15 * ŽÒƒ}ƒjƒ…
16ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
17 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
18 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
19 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
20 * ‚ƁD
21 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
22ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
23ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
24 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
25 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
26 * •ñ‚·‚邱‚ƁD
27 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
28 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
29 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
30 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
31 * –Ɛӂ·‚邱‚ƁD
32 *
33 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
34 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
35 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
36 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
37 * ‚̐ӔC‚𕉂í‚È‚¢D
38 *
39 * @(#) $Id: httpd.h 270 2017-02-09 04:03:47Z coas-nagasima $
40 */
41
42#ifndef __HTTPD_H__
43#define __HTTPD_H__
44
45#include "httpd-fs.h"
46#include "http_parser.h"
47#include "websocket.h"
48
49#define MAX_ELEMENT_SIZE 256
50
51struct message {
52 enum http_method method;
53 unsigned short http_major;
54 unsigned short http_minor;
55 char filename[64];
56 char request_url[MAX_ELEMENT_SIZE];
57 char response_status[64];
58 int num_headers;
59 char host[MAX_ELEMENT_SIZE];
60 char referer[MAX_ELEMENT_SIZE];
61 char upgrade[32];
62 char connection[32];
63 char sec_websocket_key[64];
64 char origin[MAX_ELEMENT_SIZE];
65 char sec_websocket_protocol[64];
66 char sec_websocket_version[4];
67 char response_key[86];
68 size_t body_size;
69 int should_keep_alive;
70 int headers_complete_cb_called;
71 int message_begin_cb_called;
72 int message_complete_cb_called;
73 int body_is_final;
74};
75
76#ifndef _MSC_VER
77size_t strnlen(const char *s, size_t maxlen);
78#endif
79size_t strlncat(char *dst, size_t len, const char *src, size_t n);
80extern http_parser_settings websvr_settings;
81
82typedef enum httpd_state_t {
83 STATE_DISCONNECTED, /* Ø’f’† */
84 STATE_CONNECTED, /* Ú‘±’† */
85 STATE_WEBSOCKET, /* WebSocket’ʐM’† */
86 STATE_CLOSING, /* Ø’fˆ—’† */
87 STATE_RESET, /* mruby‹N“®‚Ì‚½‚߂̃ŠƒZƒbƒg */
88} httpd_state_t;
89
90typedef enum httpd_in_state_t {
91 IN_STATE_START,
92 IN_STATE_REQUEST,
93 IN_STATE_UPLOAD,
94 IN_STATE_UPLOAD_WAIT,
95 IN_STATE_RESPONSE,
96 IN_STATE_WEBSOCKET,
97 IN_STATE_END,
98} httpd_in_state_t;
99
100typedef enum httpd_out_state_t {
101 OUT_STATE_WAIT_REQUEST,
102 OUT_STATE_OPEN_GET_FILE,
103 OUT_STATE_WAIT_POST_BODY,
104 OUT_STATE_BODY_RECEIVED,
105 OUT_STATE_SEND_HEADER,
106 OUT_STATE_SEND_FILE,
107 OUT_STATE_SEND_DATA,
108 OUT_STATE_SEND_END,
109} httpd_out_state_t;
110
111struct httpd_state {
112 ID tskid;
113 ID cepid;
114 uint8_t dst[20];
115 char temp[16];
116 char addr[sizeof("0123:4567:89ab:cdef:0123:4567:89ab:cdef")];
117 httpd_state_t state;
118 int reset;
119 struct {
120 httpd_in_state_t state;
121 bool_t wait;
122 char *data;
123 SYSTIM timer;
124 } in;
125 struct {
126 httpd_out_state_t state;
127 bool_t wait;
128 const char *statushdr;
129 } out;
130 struct {
131 int parse_pos;
132 int parse_len;
133 struct http_parser parser;
134 struct http_parser_url handle;
135 struct message message;
136 };
137 union {
138 struct {
139 char *filename;
140 char *query;
141 struct httpd_fs_file file;
142 };
143 struct {
144 char *_dummy_filename;
145 const char *response_body;
146 int response_pos;
147 int response_len;
148 };
149 struct {
150 struct websocket websocket;
151 int close_req;
152 };
153 };
154};
155#define get_context(p) (struct httpd_state *)((intptr_t)p - (intptr_t)&((struct httpd_state *)0)->parser)
156
157#endif /* __HTTPD_H__ */
Note: See TracBrowser for help on using the repository browser.