예제 #1
0
파일: proxy.c 프로젝트: fxiang/proxylab
void parse_request_header(int client_fd, Request *request) {
    size_t  n;
    rio_t   client_rio;
    char buffer[MAXLINE];

    rio_readinitb(&client_rio, client_fd);
    copy_single_line_str(&client_rio, request->request_str);
    copy_single_line_str(&client_rio, request->host_str);

    #ifdef DEBUG
    printf("request str:%s", request->request_str);
    printf("host str: %s", request->host_str);
    #endif
    
    while ((n = rio_readlineb(&client_rio, buffer, MAXLINE)) != 0) { 
        #ifdef DEBUG
        printf("%s", buffer); 
        #endif
        if (!strcmp(buffer, "\r\n")) {
            break;
        }
    }
}
예제 #2
0
파일: proxy.c 프로젝트: yuguess/ProxyLabNew
/* 
 * parse_request_header - parse request header extract useful information 
 */
void parse_request_header(int client_fd, Request *request) {
    size_t  n;
    rio_t   client_rio;
    char buffer[MAXLINE];

    rio_readinitb(&client_rio, client_fd);
    copy_single_line_str(&client_rio, request->request_str);
    copy_single_line_str(&client_rio, request->host_str);

    #ifdef DEBUG
    printf("request str:%s", request->request_str);
    printf("host str: %s", request->host_str);
    #endif
     
    request->cookie_size = 0;
    request->user_agent_size = 0;
    while ((n = rio_readlineb(&client_rio, buffer, MAXLINE)) != 0) { 
        /* store cookie info for later use */
        if (strstr(buffer, "Cookie:") != NULL) {
            strncpy(request->cookie, buffer, n);
            request->cookie_size = n;        
        }
        /* store user-agent info for later use */
        if (strstr(buffer, "User-Agent:") != NULL) {
            strncpy(request->user_agent, buffer, n);
            request->user_agent_size = n;        
        }
        #ifdef DEBUG
        printf("%s", buffer); 
        #endif
        
        if (!strcmp(buffer, "\r\n")) {
            break;
        }
    }
}