• R/O
  • SSH
  • HTTPS

bchan: 提交


Commit MetaInfo

修訂365 (tree)
時間2012-01-26 00:42:16
作者ornse01

Log Message

add FIELDVALUE_END to lexer result.

Change Summary

差異

--- bchanf/trunk/src/http/test_http_headerlexer.c (revision 364)
+++ bchanf/trunk/src/http/test_http_headerlexer.c (revision 365)
@@ -77,6 +77,9 @@
7777 case HTTP_HEADERLEXER_RESULT_LWS:
7878 printf("LWS\n");
7979 break;
80+ case HTTP_HEADERLEXER_RESULT_FIELDVALUE_END:
81+ printf("FIELDVALUE_END\n");
82+ break;
8083 case HTTP_HEADERLEXER_RESULT_MESSAGEHEADER_END:
8184 printf("MESSAGEHEADER_END\n");
8285 break;
@@ -181,6 +184,7 @@
181184 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'a'},
182185 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'b'},
183186 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'c'},
187+ {HTTP_HEADERLEXER_RESULT_FIELDVALUE_END, '\0'},
184188 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'D'},
185189 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'E'},
186190 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'F'},
@@ -191,6 +195,7 @@
191195 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'b'},
192196 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'b'},
193197 {HTTP_HEADERLEXER_RESULT_LWS, ' '},
198+ {HTTP_HEADERLEXER_RESULT_FIELDVALUE_END, '\0'},
194199 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'X'},
195200 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'Y'},
196201 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'Z'},
@@ -202,6 +207,7 @@
202207 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'A'},
203208 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'A'},
204209 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'A'},
210+ {HTTP_HEADERLEXER_RESULT_FIELDVALUE_END, '\0'},
205211 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'L'},
206212 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'M'},
207213 {HTTP_HEADERLEXER_RESULT_FIELDNAME, 'N'},
@@ -210,6 +216,7 @@
210216 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'l'},
211217 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'm'},
212218 {HTTP_HEADERLEXER_RESULT_FIELDCONTENT, 'n'},
219+ {HTTP_HEADERLEXER_RESULT_FIELDVALUE_END, '\0'},
213220 {HTTP_HEADERLEXER_RESULT_MESSAGEHEADER_END, '\0'},
214221 {-1, '\0'}
215222 };
--- bchanf/trunk/src/http/http_headerlexer.c (revision 364)
+++ bchanf/trunk/src/http/http_headerlexer.c (revision 365)
@@ -51,10 +51,25 @@
5151 *result_len = 0;
5252
5353 switch (lexer->state) {
54+ case HTTP_HEADERLEXER_STATE_START:
55+ DP_STATE(("state = START: %c[%02x]\n", ch, ch));
56+ if (ch == '\r') {
57+ lexer->state = HTTP_HEADERLEXER_STATE_SEARCH_HEADER_CR;
58+ break;
59+ }
60+ /* TODO: handling error charactors for "token" */
61+ lexer->state = HTTP_HEADERLEXER_STATE_READ_HEADER_FIELDNAME;
62+ lexer->buf[0].type = HTTP_HEADERLEXER_RESULT_FIELDNAME;
63+ lexer->buf[0].ch = ch;
64+ *result_len = 1;
65+ break;
5466 case HTTP_HEADERLEXER_STATE_SEARCH_HEADER:
5567 DP_STATE(("state = SEARCH_HEADER: %c[%02x]\n", ch, ch));
5668 if (ch == '\r') {
5769 lexer->state = HTTP_HEADERLEXER_STATE_SEARCH_HEADER_CR;
70+ lexer->buf[0].type = HTTP_HEADERLEXER_RESULT_FIELDVALUE_END;
71+ lexer->buf[0].ch = '\0';
72+ *result_len = 1;
5873 break;
5974 }
6075 if ((ch == ' ')&&(ch = '\t')) {
@@ -66,9 +81,11 @@
6681 }
6782 /* TODO: handling error charactors for "token" */
6883 lexer->state = HTTP_HEADERLEXER_STATE_READ_HEADER_FIELDNAME;
69- lexer->buf[0].type = HTTP_HEADERLEXER_RESULT_FIELDNAME;
70- lexer->buf[0].ch = ch;
71- *result_len = 1;
84+ lexer->buf[0].type = HTTP_HEADERLEXER_RESULT_FIELDVALUE_END;
85+ lexer->buf[0].ch = '\0';
86+ lexer->buf[1].type = HTTP_HEADERLEXER_RESULT_FIELDNAME;
87+ lexer->buf[1].ch = ch;
88+ *result_len = 2;
7289 break;
7390 case HTTP_HEADERLEXER_STATE_SEARCH_HEADER_CR:
7491 DP_STATE(("state = SEARCH_HEADER_CR: %c[%02x]\n", ch, ch));
@@ -152,7 +169,7 @@
152169
153170 EXPORT W http_headerlexer_initialize(http_headerlexer_t *lexer)
154171 {
155- lexer->state = HTTP_HEADERLEXER_STATE_SEARCH_HEADER;
172+ lexer->state = HTTP_HEADERLEXER_STATE_START;
156173 return 0;
157174 }
158175
--- bchanf/trunk/src/http/http_headerlexer.h (revision 364)
+++ bchanf/trunk/src/http/http_headerlexer.h (revision 365)
@@ -47,6 +47,7 @@
4747 HTTP_HEADERLEXER_RESULT_FIELDNAME_END,
4848 HTTP_HEADERLEXER_RESULT_FIELDCONTENT,
4949 HTTP_HEADERLEXER_RESULT_LWS,
50+ HTTP_HEADERLEXER_RESULT_FIELDVALUE_END,
5051 HTTP_HEADERLEXER_RESULT_MESSAGEHEADER_END,
5152 } type;
5253 UB ch;
@@ -57,6 +58,7 @@
5758 /* Detail name: headerlexer */
5859 struct http_headerlexer_t_ {
5960 enum {
61+ HTTP_HEADERLEXER_STATE_START,
6062 HTTP_HEADERLEXER_STATE_SEARCH_HEADER,
6163 HTTP_HEADERLEXER_STATE_SEARCH_HEADER_CR,
6264 HTTP_HEADERLEXER_STATE_READ_HEADER_FIELDNAME,
Show on old repository browser