6
6
/* By: minakim <minakim@student.42berlin.de> +#+ +:+ +#+ */
7
7
/* +#+#+#+#+#+ +#+ */
8
8
/* Created: 2024/06/30 16:23:00 by sanghupa #+# #+# */
9
- /* Updated: 2024/07/12 19:20:58 by minakim ### ########.fr */
9
+ /* Updated: 2024/07/14 15:39:21 by minakim ### ########.fr */
10
10
/* */
11
11
/* ************************************************************************** */
12
12
@@ -49,6 +49,7 @@ std::string HttpRequest::getBody() const
49
49
return (_body);
50
50
}
51
51
52
+ // TODO: check for necessary initialization
52
53
bool HttpRequest::isConnectionClose () const
53
54
{
54
55
std::map<std::string, std::string>::const_iterator it = _headers.find (" Connection" );
@@ -80,38 +81,20 @@ std::string HttpRequest::_dataToBody(std::istringstream& iss)
80
81
return (" " );
81
82
return (drafts);
82
83
}
83
- // / @brief Separate the request data into request line, headers, and body.
84
- // / @param requestData The request data to be separated.
85
- // / @return A struct containing the separated request data.
86
- t_read_request HttpRequest::_separateRequestData (const std::string& requestData)
87
- {
88
- t_read_request data;
89
- std::istringstream iss (requestData);
90
- std::string readline;
91
- std::string drafts;
92
84
93
- data.iscomplete = false ;
85
+ // //////////////////////////////////////////////////////////////////////////////
86
+ // / The current parse logic for my request is to first split the syntax into
87
+ // / request, header, and body lines, and then parse the split syntax separately.
88
+ // / I've separated the 'split' and 'parse' parts so that one function does one job.
94
89
95
- if (requestData.empty ())
96
- return (data);
97
- if (!std::getline (iss, readline))
98
- return (data);
99
- data.request = readline;
100
- data.headers = _dataToHeaders (iss);
101
- if (data.headers .empty ())
102
- return (data);
103
- data.body = _dataToBody (iss);
104
- data.iscomplete = true ;
105
- return (data);
106
- }
107
90
108
91
// / @brief This function parses the request data and extracts
109
92
// / the method, path, version, headers, and body.
110
93
// / @param requestData The request data to be parsed.
111
94
// / @return bool
112
95
bool HttpRequest::parse (const std::string& requestData)
113
96
{
114
- t_read_request separatedData = _separateRequestData (requestData);
97
+ t_read_request separatedData = _splitRequestData (requestData);
115
98
if (!separatedData.iscomplete )
116
99
return (false );
117
100
if (!_parseRequestLine (separatedData.request ))
@@ -123,6 +106,29 @@ bool HttpRequest::parse(const std::string& requestData)
123
106
return (true );
124
107
}
125
108
109
+
110
+ // / @brief Separate the request data into request line, headers, and body.
111
+ // / @param requestData The request data to be separated.
112
+ // / @return A struct containing the separated request data.
113
+ t_read_request HttpRequest::_splitRequestData (const std::string& requestData)
114
+ {
115
+ t_read_request data;
116
+ std::istringstream iss (requestData);
117
+ std::string readline;
118
+ std::string drafts;
119
+ if (requestData.empty ())
120
+ return (data);
121
+ if (!std::getline (iss, readline))
122
+ return (data);
123
+ data.request = readline;
124
+ data.headers = _dataToHeaders (iss);
125
+ if (data.headers .empty ())
126
+ return (data);
127
+ data.body = _dataToBody (iss);
128
+ data.iscomplete = true ;
129
+ return (data);
130
+ }
131
+
126
132
// / @brief Parses the request line and extracts the method, path, and version.
127
133
// / @param requestLine `_method` `_uri` `_version`, example: GET /path/resource HTTP/1.1
128
134
// / @return bool
0 commit comments