@@ -357,46 +357,38 @@ namespace HttpServer
357357 /* *
358358 * Парсинг переданных параметров (URI)
359359 */
360- bool Server::parseIncomingVars (std::unordered_multimap<std::string, std::string> &map , const std::string &uriParams) const
360+ bool Server::parseIncomingVars (std::unordered_multimap<std::string, std::string> ¶ms , const std::string &uriParams) const
361361 {
362362 if (uriParams.length () )
363363 {
364- for (size_t var_pos = 0 , var_end; std::string::npos != var_pos ; var_pos = var_end)
364+ for (size_t var_pos = 0 , var_end = 0 ; std::string::npos != var_end ; var_pos = var_end + 1 )
365365 {
366366 // Поиск следующего параметра
367367 var_end = uriParams.find (' &' , var_pos);
368368
369369 // Поиск значения параметра
370370 size_t delimiter = uriParams.find (' =' , var_pos);
371371
372- if (std::string::npos == delimiter || delimiter > var_end)
372+ if (delimiter >= var_end)
373373 {
374- return false ;
375- }
376-
377- // Получить имя параметра
378- std::string var_name = uriParams.substr (var_pos, delimiter - var_pos);
379-
380- ++delimiter;
374+ // Получить имя параметра
375+ std::string var_name = Utils::urlDecode (uriParams.substr (var_pos, std::string::npos != var_end ? var_end - var_pos : std::string::npos) );
381376
382- std::string var_value;
383-
384- // Если последний параметр
385- if (std::string::npos == var_end)
386- {
387- var_value = Utils::urlDecode (uriParams.substr (delimiter) );
377+ // Сохранить параметр с пустым значением
378+ params.emplace (std::move (var_name), " " );
388379 }
389- else // Если не последний параметр
380+ else
390381 {
391- var_value = Utils::urlDecode (uriParams. substr (delimiter, var_end - delimiter) );
392- }
382+ // Получить имя параметра
383+ std::string var_name = Utils::urlDecode (uriParams. substr (var_pos, delimiter - var_pos) );
393384
394- // Сохранить параметр и значение
395- map.emplace (std::move (var_name), std::move (var_value) );
385+ ++delimiter;
396386
397- if (std::string::npos != var_end)
398- {
399- ++var_end;
387+ // Получить значение параметра
388+ std::string var_value = Utils::urlDecode (uriParams.substr (delimiter, std::string::npos != var_end ? var_end - delimiter : std::string::npos) );
389+
390+ // Сохранить параметр и значение
391+ params.emplace (std::move (var_name), std::move (var_value) );
400392 }
401393 }
402394
@@ -420,7 +412,7 @@ namespace HttpServer
420412 {
421413 const std::string &status = it->second ;
422414
423- std::string headers (" HTTP/1.1 " + std::to_string (statusCode) + status + " \r\n\r\n " );
415+ std::string headers (" HTTP/1.1 " + std::to_string (statusCode) + ' ' + status + " \r\n\r\n " );
424416
425417 clientSocket.nonblock_send (headers, timeout);
426418 }
0 commit comments