구분 | 이름 | 자료형(리턴값) | 설명 |
---|---|---|---|
private | - | - | - |
enum | socket_type | - | 각 fd가 어떤 소켓에 해당하는지를 의미한다. |
enum | event_type | - | 이벤트 발생 시 이벤트의 종류를 의미한다. |
member | _conf | const Config& | config의 참조 멤버. |
member | _type_m | map<int, char> | 각 fd에 매핑되는 enum socket_type을 저장한다. value값으로 enum socket_type이 저장된다. |
member | _http_request_m | map<int, http_request_parser> | 각 fd에 매핑되는 http_request_parser를 저장한다. |
member | _http_response_m | map<int, http_response> | 각 fd에 매핑되는 http_response를 저장한다. |
member | _cgi_request_m | map<int, cgi_request> | 각 fd에 매핑되는 cgi_request를 저장한다. |
member | _cgi_response_m | map<int, cgi_response> | 각 fd에 매핑되는 cgi_response를 저장한다. |
member | _handler | event_handler | 이벤트 처리를 담당하는 클래스. |
method | _handle_http_request() | void | http_request를 cgi_request 혹은 http_response로 만들어주는 함수. |
method | _get_type() | int | 발생한 이벤트의 타입이 어떤지를 알려주는 함수. enum event_type이 리턴된다. |
method | _serv_listen() | void | listen 이벤트를 담당하는 함수. |
method | _serv_http_request() | void | http_request 이벤트를 담당하는 함수. |
method | _serv_http_response() | void | http_response 이벤트를 담당하는 함수. |
method | _serv_cgi_request() | void | cgi_request 이벤트를 담당하는 함수. |
method | _serv_cgi_response() | void | cgi_response 이벤트를 담당하는 함수. |
method | _serv_error() | void | error 발생 시 처리를 담당하는 함수. |
public | - | - | - |
method | operate() | void | 서버를 동작시키는 함수. |
기본 동작
굳이 queue를 만든 이유?
기존 방식: http_request 수신 event가 발생한 경우 하나의 http_request만 파싱해서 동작시켰다.
문제점:
새로운 방식:
구분 | 이름 | 자료형(리턴값) | 설명 |
---|---|---|---|
private | - | - | - |
member | _eventlist | vector<struct kevent> | 발생한 이벤트들을 저장하는 벡터. |
member | _changelist | vector<struct kevent> | event감시의 변경사항을 저장하는 벡터. |
member | _timeout | struct timespec | kevent() 함수 호출시에 사용되는 시간 구조체. 기본적으로 NONBLOCK으로 동작하므로 0으로 초기화된다. |
member | _nevents | int | kevent()함수의 리턴값이 저장됨. 발생한 이벤트의 개수를 나타낸다. |
member | _kq | int | kqueue의 fd값이 저장된다. |
public | - | - | - |
method | get_nevents() | int | 발생한 이벤트의 개수를 리턴해준다. |
method | get_eventlist() | const vector<struct kevent>& | 발생한 이벤트 벡터를 리턴해준다. |
method | ev_catch() | void | 발생한 이벤트를 catch하는 함수. 내부적으로 kevent()를 호출함. |
method | ev_update() | void | event감시의 변경사항을 적용한다. 내부적으로는 _changelist에 원소를 넣는다. |
구분 | 이름 | 자료형(리턴값) | 설명 |
---|---|---|---|
private | - | - | - |
enum | - | - | 현재 파싱 상태를 나타낸다. |
member | _buf | static char | 읽어온 값을 잠시 저장하는 버퍼이다. |
member | _fd | int | 연결된 http socket의 fd값이 저장된다. |
member | _status | char | 현재 파싱 상태를 나타낸다. enum값이 저장됨. |
member | _remain | string | 지금까지 파싱되지 않은 데이터가 저장된다. |
member | _line_v | vector<string> | 파싱 전, CRLF를 기준으로 라인별로 벡터에 데이터가 저장된다. |
member | _http_request_q | queue<http_request> | 정상적으로 파싱 완료된 http_request들이 순서대로 저장된다. |
method | _input_start() | void | _status == INPUT_READY일 때의 동작. input을 준비한다. |
method | _input_request_line() | void | _status == INPUT_REQUEST_LINE일 때의 동작. request-line을 읽어들인다. |
method | _parse_request_line() | void | _status == PARSE_REQUEST_LINE일 때의 동작. request-line을 파싱한다. |
method | _input_header_field() | void | _status == INPUT_HEADER_FIELD일 때의 동작. header-field를 읽어들인다. |
method | _parse_header_field() | void | _status == PARSE_HEADER_FIELD일 때의 동작. header-field를 파싱한다. |
method | _input_message_body() | void | _status == INPUT_MESSAGE_BODY일 때의 동작. message-body를 읽어들인다. |
method | _push_request() | void | _status == PARSE_FINISHED일 때의 동작. 파싱이 끝난 http_request를 queue에 넣는다. |
method | _push_err_request() | void | EOF가 발생했고, 파싱이 끝나지 않았을 경우 error메시지를 queue에 넣는다. |
public | - | - | - |
method | recv_request() | void | 데이터를 읽어와 _remain에 저장한다. |
method | parse_request() | void | _remain에 있는 데이터들을 파싱한다. |
method | get_queue() | queue<http_request>& | _http_request_q를 리턴한다. |
method | closed() | bool | _status == INPUT_CLOSED인 경우 true, 아닌경우 false를 리턴한다. |
구분 | 이름 | 자료형(리턴값) | 설명 |
---|
sunwsong이 구현 중..
구분 | 이름 | 자료형(리턴값) | 설명 |
---|---|---|---|
public | - | - | - |
enum | - | - | 현재 http_response 클래스의 상태를 의미한다. |
private | - | - | - |
member | _fd | int | http_response를 보낼 소켓의 fd값 |
member | _response | string | 보낼 http_response를 string으로 변환한 값 |
member | _pos | size_t | _response를 보내기 시작하는 다음 위치 |
member | _status_char | 현재 http_response 클래스의 상태. enum값으로 저장된다. | |
public | - | - | - |
method | get_status() | int | http_response의 상태를 의미한다. |
method | set_status() | void | http_response의 상태를 설정한다. |
method | send_response() | _response에 저장되어 있는 데이터를 보낸다. |
구현 중..
구현 중..
다른거 찾다 봤는데 42분이시군요 파이팅~!