Ejemplo n.º 1
0
int do_http_parse_test(http_t *p_http, char *buf , int len)
{
	local_t* local = http_get_local_t(p_http);
	int head_len = 0,ret = 0;
	if (local->state == 4){
		ret=http_parse_body(buf,len,p_http);
	}
	head_len = s_http_parse(buf,len,p_http);
	if (local->state < 4) {
		DBGH("state is < 4 ,header is not end\n");
		return -1;
	} else if (local->state == 4) {
		ret = http_parse_head(buf,head_len,0,p_http,0);
		ret = http_parse_body(buf+head_len,len-head_len,p_http);
	} else {
		DBGH("state = %d error \n", local->state);
	}
	
		
//	ret=http_parse_body(buf+head_len,1,p_http);
//        http_dump_logic(p_http);
//	http_dump_int(p_http);
//	http_dump_str(p_http);
	//http_dump_arg(p_http);

	return 0;
}
Ejemplo n.º 2
0
void httpsession_read(struct event *ev,int what, void *d)
{
	size_t len=0;
	size_t conten_len=0;
	char *line=NULL;
	char *ptr=NULL;
	//ptr=buff_tail_ptr()
	HttpSession *session = (HttpSession *)d;
	len=buff_read(session->fd, session->request.buff, buff_tail_left(session->request.buff));
	if(len<=0 )
		goto fail;
	while( (line=buff_get_line( session->request.buff,EOL_CRLF)) !=NULL )
	{
		if(session->request.prase_status==HPARSE_HEAD )
		{
			if( strlen(line)==0 )
			{
				session->request.prase_status=HPARSE_CONTENT;
				break;
			}
			if(http_parse_head(&session->request, line) == -1)
			{
				TraceErr("http_parse_head fail\n");
				goto fail;
			}
			continue;
		}

		if(session->request.prase_status==HPARSE_FIRST_LINE)
		{
			if(http_parse_first_line(&session->request,line)==-1)
				goto fail;
			session->request.prase_status=HPARSE_HEAD;
			continue;
		}

	}

	if(session->request.prase_status== HPARSE_CONTENT )
	{
		if(buff_len(session->request.buff) >= session->request.content_len)
		{
			session->request.prase_status = HPARSE_DONE;
			if(httpserver_route_request(session)!=200)goto fail;
			//if(session->server->request_callback(session,session->server->arg) != 0 )
			//	goto fail;
			//event_fd_setflags(session->ev,EPOLLIN|EPOLLOUT);
			//event_fd_setcallback(session->ev,httpsession_write);
			event_fd_setcallback(session->ev,httpsession_file_write);
			event_fd_setflags(session->ev,EPOLLOUT);
		}
	}
	return;	

fail:
	TraceErr("httpsession_read fail\n");
	httpserver_session_free(session);
	return;
}