diff --git a/ice-server/src/IceServer.cpp b/ice-server/src/IceServer.cpp index ee610edce4..9a47a483f9 100644 --- a/ice-server/src/IceServer.cpp +++ b/ice-server/src/IceServer.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -39,9 +40,45 @@ IceServer::IceServer(int argc, char* argv[]) : _serverSocket(0, false), _activePeers() { - // start the ice-server socket - qDebug() << "ice-server socket is listening on" << ICE_SERVER_DEFAULT_PORT; - _serverSocket.bind(SocketType::UDP, QHostAddress::AnyIPv4, ICE_SERVER_DEFAULT_PORT); + // parse command-line + QCommandLineParser parser; + + const QCommandLineOption helpOption = parser.addHelpOption(); + + const QCommandLineOption addressOption("address", "Ice listen address.", "address"); + parser.addOption(addressOption); + + const QCommandLineOption portOption("port", "Port for the ICE server to listen on", "port"); + parser.addOption(portOption); + + if (!parser.parse(QCoreApplication::arguments())) { + qCritical() << parser.errorText() << Qt::endl; + parser.showHelp(); + Q_UNREACHABLE(); + } + + if (parser.isSet(helpOption)) { + parser.showHelp(); + Q_UNREACHABLE(); + } + + QHostAddress address = QHostAddress::AnyIPv4; + if (parser.isSet(addressOption)) { + if (parser.value(addressOption) == "0.0.0.0") { + QHostAddress address = QHostAddress::AnyIPv4; + } else { + address.setAddress(parser.value(addressOption)); + } + } + + // set the port + quint16 port = ICE_SERVER_DEFAULT_PORT; + if (parser.isSet(portOption)) { + port = parser.value(portOption).toInt(); + } + + _serverSocket.bind(SocketType::UDP, address, port); + qDebug() << "ice-server socket is listening on address: " << address.toString() << ":" << port; // set processPacket as the verified packet callback for the udt::Socket _serverSocket.setPacketHandler([this](std::unique_ptr packet) { processPacket(std::move(packet)); });