ReqLine_t parseRequestLine (int fd) { enum ReqKind_t kind; ReqLine_t reqline; switch(token.kind){ case TOKEN_HEAD: kind = REQ_KIND_HEAD; break; case TOKEN_GET: kind = REQ_KIND_GET; break; default: parseError(fd); break; } advance(fd, 1); eatToken(TOKEN_SPACE, fd, 1); char *uri = eatToken(TOKEN_STR, fd, 1); eatToken(TOKEN_SPACE, fd, 1); eatToken(TOKEN_HTTP_ONE_ONE, fd, 1); eatToken(TOKEN_CRLF, fd, 1); if (DEBUG){ fprintf (stderr, "uri=%s\n", uri); } reqline = ReqLine_new (0 , uri , HTTP_ONE_ONE); ReqLine_print (1, reqline); return reqline; }
void Http_print (int fd, Http_t http) { assert (http); assert (http->reqLine || http->respLine); if (http->reqLine) ReqLine_print(fd, http->reqLine); else RespLine_print (fd, http->respLine); // more code ... return; }
ReqLine_t Parse_reqLine (int fd) { enum ReqKind_t kind; ReqLine_t reqline; getToken(fd, 1); //modify //printf("parse(F) uri = %s; kind = %d; n = %d\n", token.lexeme, token.kind, TOKEN_POST); switch(token.kind){ case TOKEN_HEAD: kind = REQ_KIND_HEAD; break; case TOKEN_GET: kind = REQ_KIND_GET; break; case TOKEN_POST: kind = REQ_KIND_POST; break; default: parseError(fd); break; } advance(fd, 1); eatToken(TOKEN_SPACE, fd, 1); advance (fd, 1); //modify char *uri = eatToken(TOKEN_STR, fd, 1); //eatToken(TOKEN_SPACE, fd, 1); advance (fd, 1); eatToken(TOKEN_SPACE, fd , 1); advance(fd, 1); eatToken(TOKEN_HTTP_ONE_ONE, fd, 1); advance(fd, 1); eatToken(TOKEN_CRLF, fd, 1); ///no more eat token if (DEBUG){ fprintf (stderr, "uri=%s\n", uri); } reqline = ReqLine_new ( kind , uri , HTTP_ONE_ONE); ReqLine_print (1, reqline); return reqline; }