객체별 주요 메소드들에 대해 설명합니다.
CGI 프로그램의 실행시간이 길어지면 Gateway Timeout 에러로 판단합니다. 그러려면 CGI 프로그램 실행시 시간을 저장해놓고, CGI 프로그램과 입출력을 주고받으며 overtime을 체크하는 작업이 필요합니다.
Copy std :: string getString () const ;
getter와 setter를 제외하면 response의 핵심 메소드는 멤버 변수들을 응답 메시지로 취합하는 getString입니다. str로 네이밍하는 것도 직관적입니다.
Copy void set_m_wbuf_for_execute ();
void set_m_wbuf_for_send (std :: string wbuf_string = "" );
bool sendFromWbuf ( int fd);
bool isOverTime () const ;
void clear ();
cgi program이나 client에게 보낼 data를 write 버프에 세팅합니다. 전자는 단순히 body를 세팅하면 되고, 후자는 response의 getString 함수를 호출하면 됩니다.
Copy int getUnuseConnectionFd ();
bool parseStartLine ( Connection & connection , Request & request);
bool parseHeader ( Connection & connection , Request & request);
bool parseBody ( Connection & connection , Request & request);
bool hasRequest ( Connection & connection);
bool runRecvAndSolve ( Connection & connection);
bool hasExecuteWork ( Connection & connection);
bool runExecute ( Connection & connection)
bool hasSendWork ( Connection & connection);
bool runSend ( Connection & connection);
void run ();
void solveRequest ( Connection & connection , const Request & request);
void executeAutoindex ( Connection & connection , const Request & request);
void executeGet ( Connection & connection , const Request & request);
void executeHead ( Connection & connection , const Request & request);
void executePost ( Connection & connection , const Request & request);
void executePut ( Connection & connection , const Request & request);
void executeDelete ( Connection & connection , const Request & request);
void executeOptions ( Connection & connection , const Request & request);
void executeTrace ( Connection & connection , const Request & request);
void executeCGI ( Connection & connection , const Request & request);
void createResponse ( Connection & connection , int status , headers_t headers = headers_t () , std :: string body = "" );
서버에는 위에 정리한 것 이외에도 매우 많은 함수들이 있습니다. 파싱 함수들, 새로운 커넥션을 받아들일 fd가 부족할 때 닫아도 괜찮은 커넥션 fd를 가져오는 함수, 각 operation이 가능한지 확인하고 실행하는 함수들 등이 있습니다.
Copy void fdSet ( int fd , SetType fdset);
void fdZero ( SetType fdset);
void fdClear ( int fd , SetType fdset);
bool fdIsset ( int fd , SetType fdset);
void fdCopy ( SetType fdset);
void createServer ( const std :: string & configuration_file_path , char ** env);
void runServer ();
void exitServer ( const std :: string & error_msg);
fd 유틸들은 libft에 구현합니다. 그러나 fd_set이 서버매니저의 변수로 있기 때문에, 서버에서 서버매니저의 fd_set을 getter로 호출하여 다시 넘기려면 코드가 길어집니다. 그래서 서버가 매크로를 인자로 서버매니저의 함수를 호출하고, 서버매니저로 하여금 자신의 멤버변수로 libft의 fd 함수들을 실행하도록 처리하면 편합니다.