diff --git a/jmclient/jmclient/client_protocol.py b/jmclient/jmclient/client_protocol.py index 63fde89..4e87c57 100644 --- a/jmclient/jmclient/client_protocol.py +++ b/jmclient/jmclient/client_protocol.py @@ -1,26 +1,17 @@ #! /usr/bin/env python from __future__ import print_function -from twisted.python.log import startLogging, err from twisted.internet import protocol, reactor, task -from twisted.internet.task import LoopingCall from twisted.internet.error import (ConnectionLost, ConnectionAborted, ConnectionClosed, ConnectionDone) -from twisted.python import failure from twisted.protocols import amp -from twisted.internet.protocol import ClientFactory -from twisted.internet.endpoints import TCP4ClientEndpoint try: from twisted.internet.ssl import ClientContextFactory from twisted.internet import ssl except ImportError: pass from jmbase import commands -from sys import stdout import json -import random -import string -import time import hashlib import os import sys @@ -473,7 +464,7 @@ def start_reactor(host, port, factory, ish=True, daemon=False, rs=True, gui=Fals usessl = True if jm_single().config.get("DAEMON", "use_ssl") != 'false' else False if daemon: try: - from jmdaemon import JMDaemonServerProtocolFactory + from jmdaemon import JMDaemonServerProtocolFactory, start_daemon except ImportError: jlog.error("Cannot start daemon without jmdaemon package; " "either install it, and restart, or, if you want " @@ -484,13 +475,8 @@ def start_reactor(host, port, factory, ish=True, daemon=False, rs=True, gui=Fals orgport = port while True: try: - if usessl: - reactor.listenSSL(port, dfactory, - ssl.DefaultOpenSSLContextFactory( - "./ssl/key.pem", "./ssl/cert.pem"), - interface=host) - else: - reactor.listenTCP(port, dfactory, interface=host) + start_daemon(host, port, dfactory, usessl, + './ssl/key.pem', './ssl/cert.pem') jlog.info("Listening on port " + str(port)) break except Exception: diff --git a/jmdaemon/jmdaemon/__init__.py b/jmdaemon/jmdaemon/__init__.py index 0b5ce8c..a08a7be 100644 --- a/jmdaemon/jmdaemon/__init__.py +++ b/jmdaemon/jmdaemon/__init__.py @@ -9,7 +9,8 @@ from jmbase.support import get_log from .message_channel import MessageChannel, MessageChannelCollection from .orderbookwatch import OrderbookWatch from jmbase import commands -from .daemon_protocol import JMDaemonServerProtocolFactory, JMDaemonServerProtocol +from .daemon_protocol import (JMDaemonServerProtocolFactory, JMDaemonServerProtocol, + start_daemon) from .protocol import (COMMAND_PREFIX, ORDER_KEYS, NICK_HASH_LENGTH, NICK_MAX_ENCODED, JM_VERSION, JOINMARKET_NICK_HEADER) from .message_channel import MessageChannelCollection diff --git a/jmdaemon/jmdaemon/daemon_protocol.py b/jmdaemon/jmdaemon/daemon_protocol.py index 08bd253..6451559 100644 --- a/jmdaemon/jmdaemon/daemon_protocol.py +++ b/jmdaemon/jmdaemon/daemon_protocol.py @@ -13,13 +13,12 @@ from .irc import IRCMessageChannel from jmbase.commands import * from jmbase import _byteify from twisted.protocols import amp -from twisted.internet import reactor +from twisted.internet import reactor, ssl from twisted.internet.protocol import ServerFactory from twisted.internet.error import (ConnectionLost, ConnectionAborted, ConnectionClosed, ConnectionDone) from twisted.python import failure, log import json -import time import threading import os import copy @@ -597,4 +596,15 @@ class JMDaemonServerProtocolFactory(ServerFactory): protocol = JMDaemonServerProtocol def buildProtocol(self, addr): - return JMDaemonServerProtocol(self) \ No newline at end of file + return JMDaemonServerProtocol(self) + + +def start_daemon(host, port, factory, usessl=False, sslkey=None, sslcert=None): + if usessl: + assert sslkey + assert sslcert + reactor.listenSSL( + port, factory, ssl.DefaultOpenSSLContextFactory(sslkey, sslcert), + interface=host) + else: + reactor.listenTCP(port, factory, interface=host) diff --git a/scripts/joinmarketd.py b/scripts/joinmarketd.py index c05f4dd..aaa7a76 100644 --- a/scripts/joinmarketd.py +++ b/scripts/joinmarketd.py @@ -3,7 +3,7 @@ from twisted.internet import reactor, ssl from twisted.python.log import startLogging, err import jmdaemon -def startup_joinmarketd(port, usessl, finalizer=None, finalizer_args=None): +def startup_joinmarketd(host, port, usessl, finalizer=None, finalizer_args=None): """Start event loop for joinmarket daemon here. Args: port : port over which to serve the daemon @@ -12,11 +12,8 @@ def startup_joinmarketd(port, usessl, finalizer=None, finalizer_args=None): """ startLogging(sys.stdout) factory = jmdaemon.JMDaemonServerProtocolFactory() - if usessl: - reactor.listenSSL(port, factory, ssl.DefaultOpenSSLContextFactory( - "./ssl/key.pem", "./ssl/cert.pem")) - else: - reactor.listenTCP(port, factory) + jmdaemon.start_daemon(host, port, factory, usessl, + './ssl/key.pem', './ssl/cert.pem') if finalizer: reactor.addSystemEventTrigger("after", "shutdown", finalizer, finalizer_args) @@ -32,4 +29,8 @@ if __name__ == "__main__": if len(sys.argv) > 2: if int(sys.argv[2]) != 0: usessl = True - startup_joinmarketd(port, usessl) + if len(sys.argv) > 3: + host = sys.argv[3] + else: + host = 'localhost' + startup_joinmarketd(host, port, usessl)