def run_service(soledad_sessions, keymanager_sessions, sendmail_opts,
port=SMTP_PORT, factory=None):
"""
Main entry point to run the service from the client.
:param soledad_sessions: a dict-like object, containing instances
of a Store (soledad instances), indexed by userid.
:param keymanager_sessions: a dict-like object, containing instances
of Keymanager, indexed by userid.
:param sendmail_opts: a dict-like object of sendmailOptions.
:param factory: a factory for the protocol that will listen in the given
port
:returns: the port as returned by the reactor when starts listening, and
the factory for the protocol.
:rtype: tuple
"""
if not factory:
factory = SMTPFactory(soledad_sessions, keymanager_sessions,
sendmail_opts)
try:
interface = "localhost"
# don't bind just to localhost if we are running on docker since we
# won't be able to access smtp from the host
if os.environ.get("LEAP_DOCKERIZED"):
interface = ''
# TODO Use Endpoints instead --------------------------------
tport = reactor.listenTCP(port, factory, interface=interface)
emit_async(catalog.SMTP_SERVICE_STARTED, str(port))
return tport, factory
except CannotListenError:
log.error('STMP Service failed to start: '
'cannot listen in port %s' % port)
emit_async(catalog.SMTP_SERVICE_FAILED_TO_START, str(port))
except Exception as exc:
log.error('Unhandled error while launching smtp gateway service')
log.error('%r' % exc)
评论列表
文章目录