summaryrefslogtreecommitdiff
path: root/src/checker/errors/settings/port_number.cpp
diff options
context:
space:
mode:
authorclaiff <claiff@mail.ru>2022-09-21 16:05:06 +0300
committerclaiff <claiff@mail.ru>2022-09-21 16:05:06 +0300
commitee8c175e9eae4faccdf913578fb30d09c200204f (patch)
treec2244021130919d5360d130fd3b38954a096687b /src/checker/errors/settings/port_number.cpp
parenta282ae6418c85db1aae5a2823dd37d56e56e5249 (diff)
parent641c95dcf8c6585caaa6e79d4bec9b53fd666369 (diff)
downloadobmc-sila-smtp-ee8c175e9eae4faccdf913578fb30d09c200204f.tar.xz
Merge branch 'master' into feature/logger
# Conflicts: # CMakeLists.txt # src/file/mail.cpp # src/file/settings.cpp # src/management/logger.cpp # src/management/logger.hpp # src/message/sender.cpp # src/message/sender.hpp
Diffstat (limited to 'src/checker/errors/settings/port_number.cpp')
-rw-r--r--src/checker/errors/settings/port_number.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/checker/errors/settings/port_number.cpp b/src/checker/errors/settings/port_number.cpp
new file mode 100644
index 0000000..b02eec4
--- /dev/null
+++ b/src/checker/errors/settings/port_number.cpp
@@ -0,0 +1,48 @@
+#include <stdexcept>
+
+#include "port_number.hpp"
+#include "management/logger.hpp"
+
+namespace smtp::checker::errors::settings
+{
+ bool PortNumber::Check( const manage::SettingsFileDataType& line ) const
+ {
+ static const std::string PORT_FIELD = "port";
+ static constexpr int MIN_PORT_NUMBER = 0;
+ static constexpr int MAX_PORT_NUMBER = 65535;
+
+ //TODO общее использование полей
+ auto find = line.find( PORT_FIELD );
+ if( find == line.end() )
+ {
+ manage::Logger::LogError( "Port doesn't found" );
+ return false;
+ }
+ auto host_as_string = find->second;
+ if( host_as_string.empty())
+ {
+ return true;
+ }
+ int host_as_int{};
+ try
+ {
+ host_as_int = std::stoi( host_as_string );
+ }
+ catch( std::invalid_argument const& ex )
+ {
+ manage::Logger::LogError( "Port doesn't entered by numbers" );
+ return false;
+ }
+ catch( std::out_of_range const& ex )
+ {
+ manage::Logger::LogError( "Port out of range" );
+ return false;
+ }
+ catch( ... )
+ {
+ manage::Logger::LogError( "Port doesn't entered by numbers" );
+ return false;
+ }
+ return host_as_int >= MIN_PORT_NUMBER && host_as_int <= MAX_PORT_NUMBER;
+ }
+}