// Copyright (C) 2003 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #ifndef DLIB_SERVER_KERNEl_C_ #define DLIB_SERVER_KERNEl_C_ #include "server_kernel_abstract.h" #include "../algs.h" #include "../assert.h" #include <string> #include <sstream> namespace dlib { template < typename server_base > class server_kernel_c : public server_base { public: void start ( ); void set_listening_port ( int port ); void set_listening_ip ( const std::string& ip ); void set_max_connections ( int max ); private: bool is_dotted_quad ( std::string ip ) const; /*! ensures returns true if ip is a valid dotted quad ip address else returns false !*/ }; // ---------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- // member function definitions // ---------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- template < typename server_base > void server_kernel_c<server_base>:: start ( ) { // make sure requires clause is not broken DLIB_CASSERT( this->is_running() == false, "\tvoid server::start" << "\n\tis_running() == " << this->is_running() << "\n\tthis: " << this ); // call the real function server_base::start(); } // ---------------------------------------------------------------------------------------- template < typename server_base > void server_kernel_c<server_base>:: set_max_connections ( int max ) { // make sure requires clause is not broken DLIB_CASSERT( max >= 0 , "\tvoid server::set_max_connections" << "\n\tmax == " << max << "\n\tthis: " << this ); // call the real function server_base::set_max_connections(max); } // ---------------------------------------------------------------------------------------- template < typename server_base > void server_kernel_c<server_base>:: set_listening_port ( int port ) { // make sure requires clause is not broken DLIB_CASSERT( ( port >= 0 && this->is_running() == false ), "\tvoid server::set_listening_port" << "\n\tport == " << port << "\n\tis_running() == " << this->is_running() << "\n\tthis: " << this ); // call the real function server_base::set_listening_port(port); } // ---------------------------------------------------------------------------------------- template < typename server_base > void server_kernel_c<server_base>:: set_listening_ip ( const std::string& ip ) { // make sure requires clause is not broken DLIB_CASSERT( ( ( is_dotted_quad(ip) || ip == "" ) && this->is_running() == false ), "\tvoid server::set_listening_ip" << "\n\tip == " << ip << "\n\tis_running() == " << this->is_running() << "\n\tthis: " << this ); // call the real function server_base::set_listening_ip(ip); } // ---------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- // private member function definitions // ---------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- template < typename server_base > bool server_kernel_c<server_base>:: is_dotted_quad ( std::string ip ) const { int num; char dot; std::istringstream sin(ip); for (int i = 0; i < 3; ++i) { sin >> num; if (!sin) return false; if (num < 0 || num > 255) return false; sin >> dot; if (!sin) return false; if (dot != '.') return false; } sin >> num; if (!sin) return false; if (num < 0 || num > 255) return false; if (sin.get() != EOF) return false; return true; } // ---------------------------------------------------------------------------------------- } #endif // DLIB_SERVER_KERNEl_C_