@@ -357,25 +357,25 @@ namespace HttpServer
357357 /* *
358358 * Парсинг переданных параметров (URI)
359359 */
360- bool Server::parseIncomingVars (std::unordered_multimap<std::string, std::string> &map, const std::string &str, const size_t start, const size_t end ) const
360+ bool Server::parseIncomingVars (std::unordered_multimap<std::string, std::string> &map, const std::string &uriParams ) const
361361 {
362- if (str .length () > start )
362+ if (uriParams .length () )
363363 {
364- for (size_t var_pos = start , var_end; std::string::npos != var_pos; var_pos = var_end)
364+ for (size_t var_pos = 0 , var_end; std::string::npos != var_pos; var_pos = var_end)
365365 {
366366 // Поиск следующего параметра
367- var_end = str .find (' &' , var_pos);
367+ var_end = uriParams .find (' &' , var_pos);
368368
369369 // Поиск значения параметра
370- size_t delimiter = str .find (' =' , var_pos);
370+ size_t delimiter = uriParams .find (' =' , var_pos);
371371
372372 if (std::string::npos == delimiter || delimiter > var_end)
373373 {
374374 return false ;
375375 }
376376
377377 // Получить имя параметра
378- std::string var_name = str .substr (var_pos, delimiter - var_pos);
378+ std::string var_name = uriParams .substr (var_pos, delimiter - var_pos);
379379
380380 ++delimiter;
381381
@@ -384,11 +384,11 @@ namespace HttpServer
384384 // Если последний параметр
385385 if (std::string::npos == var_end)
386386 {
387- var_value = str .substr (delimiter, end - delimiter );
387+ var_value = Utils::urlDecode (uriParams .substr (delimiter) );
388388 }
389389 else // Если не последний параметр
390390 {
391- var_value = str .substr (delimiter, var_end - delimiter);
391+ var_value = Utils::urlDecode (uriParams .substr (delimiter, var_end - delimiter) );
392392 }
393393
394394 // Сохранить параметр и значение
@@ -530,13 +530,13 @@ namespace HttpServer
530530 // Поиск именованных параметров запросов (переменных ?)
531531 size_t params_pos = str_buf.find (' ?' , delimiter);
532532
533- // Сохранить полную ссылку URI (с параметрами )
533+ // Сохранить полную ссылку URI (без параметров )
534534 uri_reference = (std::string::npos == params_pos) ? str_buf.substr (delimiter) : str_buf.substr (delimiter, params_pos - delimiter);
535535
536536 if (std::string::npos != params_pos)
537537 {
538538 // Извлекаем параметры запроса из URI
539- if (false == parseIncomingVars (incoming_params, str_buf, params_pos + 1 , uri_end) )
539+ if (false == parseIncomingVars (incoming_params, str_buf. substr ( params_pos + 1 , uri_end) ) )
540540 {
541541 // HTTP 400 Bad Request
542542 sendStatus (clientSocket, timeout, 400 );
0 commit comments