Browse Source

Merge #110: fix standalone joinmarketd listening on all interfaces

467053b fix standalone joinmarketd listening on all interfaces (undeath)
master
Adam Gibson 8 years ago
parent
commit
51df379391
No known key found for this signature in database
GPG Key ID: B3AE09F1E9A3197A
  1. 20
      jmclient/jmclient/client_protocol.py
  2. 3
      jmdaemon/jmdaemon/__init__.py
  3. 16
      jmdaemon/jmdaemon/daemon_protocol.py
  4. 15
      scripts/joinmarketd.py

20
jmclient/jmclient/client_protocol.py

@ -1,26 +1,17 @@
#! /usr/bin/env python #! /usr/bin/env python
from __future__ import print_function from __future__ import print_function
from twisted.python.log import startLogging, err
from twisted.internet import protocol, reactor, task from twisted.internet import protocol, reactor, task
from twisted.internet.task import LoopingCall
from twisted.internet.error import (ConnectionLost, ConnectionAborted, from twisted.internet.error import (ConnectionLost, ConnectionAborted,
ConnectionClosed, ConnectionDone) ConnectionClosed, ConnectionDone)
from twisted.python import failure
from twisted.protocols import amp from twisted.protocols import amp
from twisted.internet.protocol import ClientFactory
from twisted.internet.endpoints import TCP4ClientEndpoint
try: try:
from twisted.internet.ssl import ClientContextFactory from twisted.internet.ssl import ClientContextFactory
from twisted.internet import ssl from twisted.internet import ssl
except ImportError: except ImportError:
pass pass
from jmbase import commands from jmbase import commands
from sys import stdout
import json import json
import random
import string
import time
import hashlib import hashlib
import os import os
import sys 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 usessl = True if jm_single().config.get("DAEMON", "use_ssl") != 'false' else False
if daemon: if daemon:
try: try:
from jmdaemon import JMDaemonServerProtocolFactory from jmdaemon import JMDaemonServerProtocolFactory, start_daemon
except ImportError: except ImportError:
jlog.error("Cannot start daemon without jmdaemon package; " jlog.error("Cannot start daemon without jmdaemon package; "
"either install it, and restart, or, if you want " "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 orgport = port
while True: while True:
try: try:
if usessl: start_daemon(host, port, dfactory, usessl,
reactor.listenSSL(port, dfactory, './ssl/key.pem', './ssl/cert.pem')
ssl.DefaultOpenSSLContextFactory(
"./ssl/key.pem", "./ssl/cert.pem"),
interface=host)
else:
reactor.listenTCP(port, dfactory, interface=host)
jlog.info("Listening on port " + str(port)) jlog.info("Listening on port " + str(port))
break break
except Exception: except Exception:

3
jmdaemon/jmdaemon/__init__.py

@ -9,7 +9,8 @@ from jmbase.support import get_log
from .message_channel import MessageChannel, MessageChannelCollection from .message_channel import MessageChannel, MessageChannelCollection
from .orderbookwatch import OrderbookWatch from .orderbookwatch import OrderbookWatch
from jmbase import commands 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, from .protocol import (COMMAND_PREFIX, ORDER_KEYS, NICK_HASH_LENGTH,
NICK_MAX_ENCODED, JM_VERSION, JOINMARKET_NICK_HEADER) NICK_MAX_ENCODED, JM_VERSION, JOINMARKET_NICK_HEADER)
from .message_channel import MessageChannelCollection from .message_channel import MessageChannelCollection

16
jmdaemon/jmdaemon/daemon_protocol.py

@ -13,13 +13,12 @@ from .irc import IRCMessageChannel
from jmbase.commands import * from jmbase.commands import *
from jmbase import _byteify from jmbase import _byteify
from twisted.protocols import amp 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.protocol import ServerFactory
from twisted.internet.error import (ConnectionLost, ConnectionAborted, from twisted.internet.error import (ConnectionLost, ConnectionAborted,
ConnectionClosed, ConnectionDone) ConnectionClosed, ConnectionDone)
from twisted.python import failure, log from twisted.python import failure, log
import json import json
import time
import threading import threading
import os import os
import copy import copy
@ -597,4 +596,15 @@ class JMDaemonServerProtocolFactory(ServerFactory):
protocol = JMDaemonServerProtocol protocol = JMDaemonServerProtocol
def buildProtocol(self, addr): def buildProtocol(self, addr):
return JMDaemonServerProtocol(self) 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)

15
scripts/joinmarketd.py

@ -3,7 +3,7 @@ from twisted.internet import reactor, ssl
from twisted.python.log import startLogging, err from twisted.python.log import startLogging, err
import jmdaemon 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. """Start event loop for joinmarket daemon here.
Args: Args:
port : port over which to serve the daemon 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) startLogging(sys.stdout)
factory = jmdaemon.JMDaemonServerProtocolFactory() factory = jmdaemon.JMDaemonServerProtocolFactory()
if usessl: jmdaemon.start_daemon(host, port, factory, usessl,
reactor.listenSSL(port, factory, ssl.DefaultOpenSSLContextFactory( './ssl/key.pem', './ssl/cert.pem')
"./ssl/key.pem", "./ssl/cert.pem"))
else:
reactor.listenTCP(port, factory)
if finalizer: if finalizer:
reactor.addSystemEventTrigger("after", "shutdown", finalizer, reactor.addSystemEventTrigger("after", "shutdown", finalizer,
finalizer_args) finalizer_args)
@ -32,4 +29,8 @@ if __name__ == "__main__":
if len(sys.argv) > 2: if len(sys.argv) > 2:
if int(sys.argv[2]) != 0: if int(sys.argv[2]) != 0:
usessl = True usessl = True
startup_joinmarketd(port, usessl) if len(sys.argv) > 3:
host = sys.argv[3]
else:
host = 'localhost'
startup_joinmarketd(host, port, usessl)

Loading…
Cancel
Save