From f80e2f7b370c3a6dfa8a78c9665a8eaf43a05f03 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 27 Apr 2017 15:07:21 +0100 Subject: [PATCH] Move ports around to allow master/server to coexist (#962). --- ChangeLog | 4 ++++ src/lib/dcp_video.cc | 2 +- src/lib/encode_server.cc | 6 +++--- src/lib/encode_server_finder.cc | 6 +++--- src/lib/types.h | 9 +++++++++ src/tools/dcpomatic.cc | 2 +- src/tools/dcpomatic_batch.cc | 2 +- 7 files changed, 22 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index b1ffde15b..b1fcbb37e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2017-04-27 Carl Hetherington + + * Stop master and server instances fighting over ports, allowing them to coexist (#962). + 2017-04-26 Carl Hetherington * Make a copy of the configuration, if it fails to load, before making new defaults. diff --git a/src/lib/dcp_video.cc b/src/lib/dcp_video.cc index ba8057be0..916563b85 100644 --- a/src/lib/dcp_video.cc +++ b/src/lib/dcp_video.cc @@ -156,7 +156,7 @@ DCPVideo::encode_remotely (EncodeServerDescription serv, int timeout) { boost::asio::io_service io_service; boost::asio::ip::tcp::resolver resolver (io_service); - boost::asio::ip::tcp::resolver::query query (serv.host_name(), raw_convert (Config::instance()->server_port_base ())); + boost::asio::ip::tcp::resolver::query query (serv.host_name(), raw_convert (ENCODE_FRAME_PORT)); boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve (query); shared_ptr socket (new Socket (timeout)); diff --git a/src/lib/encode_server.cc b/src/lib/encode_server.cc index 442ce3d6f..4f27ee421 100644 --- a/src/lib/encode_server.cc +++ b/src/lib/encode_server.cc @@ -67,7 +67,7 @@ using dcp::Data; using dcp::raw_convert; EncodeServer::EncodeServer (shared_ptr log, bool verbose, int num_threads) - : Server (Config::instance()->server_port_base()) + : Server (ENCODE_FRAME_PORT) , _log (log) , _verbose (verbose) , _num_threads (num_threads) @@ -237,7 +237,7 @@ EncodeServer::broadcast_thread () try { boost::asio::ip::address address = boost::asio::ip::address_v4::any (); - boost::asio::ip::udp::endpoint listen_endpoint (address, Config::instance()->server_port_base() + 1); + boost::asio::ip::udp::endpoint listen_endpoint (address, HELLO_PORT); _broadcast.socket = new boost::asio::ip::udp::socket (_broadcast.io_service); _broadcast.socket->open (listen_endpoint.protocol ()); @@ -274,7 +274,7 @@ EncodeServer::broadcast_received () } shared_ptr socket (new Socket); try { - socket->connect (boost::asio::ip::tcp::endpoint (_broadcast.send_endpoint.address(), Config::instance()->server_port_base() + 1)); + socket->connect (boost::asio::ip::tcp::endpoint (_broadcast.send_endpoint.address(), SERVER_PRESENCE_PORT)); socket->write (xml.length() + 1); socket->write ((uint8_t *) xml.c_str(), xml.length() + 1); } catch (...) { diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc index e964bb8b3..2796df8f5 100644 --- a/src/lib/encode_server_finder.cc +++ b/src/lib/encode_server_finder.cc @@ -118,7 +118,7 @@ try if (Config::instance()->use_any_servers ()) { /* Broadcast to look for servers */ try { - boost::asio::ip::udp::endpoint end_point (boost::asio::ip::address_v4::broadcast(), Config::instance()->server_port_base() + 1); + boost::asio::ip::udp::endpoint end_point (boost::asio::ip::address_v4::broadcast(), HELLO_PORT); socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point); } catch (...) { @@ -134,7 +134,7 @@ try } try { boost::asio::ip::udp::resolver resolver (io_service); - boost::asio::ip::udp::resolver::query query (*i, raw_convert (Config::instance()->server_port_base() + 1)); + boost::asio::ip::udp::resolver::query query (*i, raw_convert (HELLO_PORT)); boost::asio::ip::udp::endpoint end_point (*resolver.resolve (query)); socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point); } catch (...) { @@ -157,7 +157,7 @@ try { using namespace boost::asio::ip; try { - _listen_acceptor.reset (new tcp::acceptor (_listen_io_service, tcp::endpoint (tcp::v4(), Config::instance()->server_port_base() + 1))); + _listen_acceptor.reset (new tcp::acceptor (_listen_io_service, tcp::endpoint (tcp::v4(), SERVER_PRESENCE_PORT))); } catch (...) { boost::throw_exception (NetworkError (_("Could not listen for remote encode servers. Perhaps another instance of DCP-o-matic is running."))); } diff --git a/src/lib/types.h b/src/lib/types.h index 041db1786..0702c8734 100644 --- a/src/lib/types.h +++ b/src/lib/types.h @@ -70,6 +70,15 @@ namespace xmlpp { */ #define VIDEO_FRAME_RATE_EPSILON (1e-4) +/** Port on which EncodeServer listens for frame encoding requests */ +#define ENCODE_FRAME_PORT (Config::instance()->server_port_base()) +/** Port on which EncodeServer listens for DCPOMATIC_HELLO from masters */ +#define HELLO_PORT (Config::instance()->server_port_base()+1) +/** Port on which EncodeServerFinder listens for replies to DCPOMATIC_HELLO from servers */ +#define SERVER_PRESENCE_PORT (Config::instance()->server_port_base()+2) +/** Port on which batch converter listens for job requests */ +#define BATCH_JOB_PORT (Config::instance()->server_port_base()+3) + typedef std::vector > ContentList; typedef std::vector > FFmpegContentList; diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index f94c2ac54..e9a1f652c 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -559,7 +559,7 @@ private: try { boost::asio::io_service io_service; boost::asio::ip::tcp::resolver resolver (io_service); - boost::asio::ip::tcp::resolver::query query ("127.0.0.1", raw_convert (Config::instance()->server_port_base() + 2)); + boost::asio::ip::tcp::resolver::query query ("127.0.0.1", raw_convert (BATCH_JOB_PORT)); boost::asio::ip::tcp::resolver::iterator endpoint_iterator = resolver.resolve (query); Socket socket (5); socket.connect (*endpoint_iterator); diff --git a/src/tools/dcpomatic_batch.cc b/src/tools/dcpomatic_batch.cc index 308874354..9b6fdfd8d 100644 --- a/src/tools/dcpomatic_batch.cc +++ b/src/tools/dcpomatic_batch.cc @@ -252,7 +252,7 @@ class JobServer : public Server { public: JobServer (DOMFrame* frame) - : Server (Config::instance()->server_port_base() + 2) + : Server (BATCH_JOB_PORT) , _frame (frame) {} -- 2.30.2