Exemplo n.º 1
0
    def __init__(self, ob_ctx):
        self.shutdown_mutex = Lock()
        self.ob_ctx = ob_ctx
        self.loop = tornado.ioloop.IOLoop.instance()
        db_connection = Obdb(ob_ctx.db_path, ob_ctx.disable_sqlite_crypt)
        self.transport = CryptoTransportLayer(ob_ctx, db_connection)
        self.market = Market(self.transport, db_connection)
        self.upnp_mapper = None

        Thread(target=reactor.run, args=(False, )).start()

        # Mediator is used to route messages between NAT'd peers
        #self.mediator = Mediator(self.ob_ctx.http_ip, self.ob_ctx.mediator_port)

        peers = ob_ctx.seeds if not ob_ctx.seed_mode else []
        self.transport.join_network(peers)

        handlers = [(r"/", MainHandler), (r"/main", MainHandler),
                    (r"/html/(.*)", OpenBazaarStaticHandler, {
                        'path': './html'
                    }),
                    (r"/ws", WebSocketHandler, {
                        'transport': self.transport,
                        'market_application': self,
                        'db_connection': db_connection
                    })]

        # TODO: Move debug settings to configuration location
        settings = dict(debug=True)
        super(MarketApplication, self).__init__(handlers, **settings)
Exemplo n.º 2
0
    def __init__(self, ob_ctx):
        self.shutdown_mutex = Lock()
        self.ob_ctx = ob_ctx
        db_connection = Obdb(ob_ctx.db_path, ob_ctx.disable_sqlite_crypt)
        self.transport = CryptoTransportLayer(ob_ctx, db_connection)
        self.market = Market(self.transport, db_connection)
        self.upnp_mapper = None

        Thread(target=reactor.run, args=(False,)).start()

        # Mediator is used to route messages between NAT'd peers
        #self.mediator = Mediator(self.ob_ctx.http_ip, self.ob_ctx.mediator_port)

        peers = ob_ctx.seeds if not ob_ctx.seed_mode else []
        self.transport.join_network(peers)

        handlers = [
            (r"/", MainHandler),
            (r"/main", MainHandler),
            (r"/html/(.*)", OpenBazaarStaticHandler, {'path': './html'}),
            (r"/ws", WebSocketHandler,
             {
                 'transport': self.transport,
                 'market_application': self,
                 'db_connection': db_connection
             })
        ]

        # TODO: Move debug settings to configuration location
        settings = dict(debug=True)
        super(MarketApplication, self).__init__(handlers, **settings)
Exemplo n.º 3
0
def create_layers(context, num_layers):
    layers = []

    for i in range(num_layers):
        # dev_mode is True because otherwise the layer's ip is set to the
        # public ip of the node
        ob_ctx = OpenBazaarContext.create_default_instance()
        ob_ctx.dev_mode = True
        ob_ctx.server_ip = ip_address(i)
        ob_ctx.server_port = PORT
        db_path = get_db_path(i)
        setup_db(db_path, ob_ctx.disable_sqlite_crypt)
        layers.append(CryptoTransportLayer(ob_ctx, Obdb(db_path)))
    context.layers = layers
def create_layers(context, num_layers):
    layers = []
    for i in range(num_layers):
        db_path = get_db_path(i)
        setup_db(db_path)
        # dev_mode is True because otherwise the layer's ip is set to the
        # public ip of the node
        layers.append(
            CryptoTransportLayer(ip_address(i),
                                 port,
                                 i,
                                 Obdb(db_path),
                                 dev_mode=True))
    context.layers = layers
Exemplo n.º 5
0
class MarketApplication(tornado.web.Application):
    def __init__(self, ob_ctx):
        self.shutdown_mutex = Lock()
        self.ob_ctx = ob_ctx
        self.loop = tornado.ioloop.IOLoop.instance()
        db_connection = Obdb(ob_ctx.db_path, ob_ctx.disable_sqlite_crypt)
        self.transport = CryptoTransportLayer(ob_ctx, db_connection)
        self.market = Market(self.transport, db_connection)
        self.upnp_mapper = None

        Thread(target=reactor.run, args=(False, )).start()

        # Mediator is used to route messages between NAT'd peers
        #self.mediator = Mediator(self.ob_ctx.http_ip, self.ob_ctx.mediator_port)

        peers = ob_ctx.seeds if not ob_ctx.seed_mode else []
        self.transport.join_network(peers)

        handlers = [(r"/", MainHandler), (r"/main", MainHandler),
                    (r"/html/(.*)", OpenBazaarStaticHandler, {
                        'path': './html'
                    }),
                    (r"/ws", WebSocketHandler, {
                        'transport': self.transport,
                        'market_application': self,
                        'db_connection': db_connection
                    })]

        # TODO: Move debug settings to configuration location
        settings = dict(debug=True)
        super(MarketApplication, self).__init__(handlers, **settings)

    def start_app(self):
        # If self.ob_ctx.http_port is 0, the kernel is queried for a port.
        sockets = tornado.netutil.bind_sockets(self.ob_ctx.http_port,
                                               address=self.ob_ctx.http_ip)
        server = tornado.httpserver.HTTPServer(self)
        server.add_sockets(sockets)

        self.ob_ctx.http_port = sockets[0].getsockname()[1]

        if not self.ob_ctx.disable_upnp:
            self.setup_upnp_port_mappings(self.ob_ctx.server_port)
        else:
            print "MarketApplication.start_app(): Disabling upnp setup"

    def setup_upnp_port_mappings(self, p2p_port):
        result = False

        if not self.ob_ctx.disable_upnp:
            upnp.PortMapper.DEBUG = False
            print "Setting up UPnP Port Map Entry..."
            self.upnp_mapper = upnp.PortMapper()
            self.upnp_mapper.clean_my_mappings(p2p_port)

            result_tcp_p2p_mapping = self.upnp_mapper.add_port_mapping(
                p2p_port, p2p_port)
            print "UPnP TCP P2P Port Map configuration done ",
            print "(%s -> %s) => %s" % (p2p_port, p2p_port,
                                        result_tcp_p2p_mapping)

            result_udp_p2p_mapping = self.upnp_mapper.add_port_mapping(
                p2p_port, p2p_port, 'UDP')
            print "UPnP UDP P2P Port Map configuration done ",
            print "(%s -> %s) => %s" % (p2p_port, p2p_port,
                                        result_udp_p2p_mapping)

            result = result_tcp_p2p_mapping and result_udp_p2p_mapping
            if not result:
                print "Warning: UPnP was not setup correctly. ",
                print "Ports could not be automatically mapped."
                print "If you only see two or three stores, here are some tips:"
                print "1. If you are using VPN, configure port forwarding or disable your VPN temporarily"
                print "2. Configure your router to forward traffic from port",
                print "%s for both TCP and UDP to your local port %s" % (
                    p2p_port, p2p_port)

        return result

    def cleanup_upnp_port_mapping(self):
        if not self.ob_ctx.disable_upnp:
            try:
                if self.upnp_mapper is not None:
                    print "Cleaning UPnP Port Mapping -> ", \
                        self.upnp_mapper.clean_my_mappings(self.transport.port)
            except AttributeError:
                print(
                    "[openbazaar] "
                    "MarketApplication.clean_upnp_port_mapping() failed!")

    def shutdown(self, x_param=None, y_param=None):
        self.shutdown_mutex.acquire()
        print "MarketApplication.shutdown!"
        log = logging.getLogger('[%s] %s' % (self.market.market_id, 'root'))
        log.info("Received TERMINATE, exiting...")

        # Send goodbye message to connected peers
        for peer in self.transport.dht.active_peers:
            peer.send_raw(
                json.dumps({
                    'type': 'goodbye',
                    'pubkey': self.transport.pubkey,
                    'senderGUID': self.transport.guid,
                    'hostname': self.transport.hostname,
                    'port': self.transport.port,
                    'senderNick': self.transport.nickname,
                    'avatar_url': self.transport.avatar_url,
                    'v': constants.VERSION
                }))

        self.cleanup_upnp_port_mapping()
        self.loop.stop()

        self.transport.shutdown()
        self.shutdown_mutex.release()
        os._exit(0)
Exemplo n.º 6
0
class MarketApplication(tornado.web.Application):
    def __init__(self, ob_ctx):
        self.shutdown_mutex = Lock()
        self.ob_ctx = ob_ctx
        db_connection = Obdb(ob_ctx.db_path, ob_ctx.disable_sqlite_crypt)
        self.transport = CryptoTransportLayer(ob_ctx, db_connection)
        self.market = Market(self.transport, db_connection)
        self.upnp_mapper = None

        Thread(target=reactor.run, args=(False,)).start()

        # Mediator is used to route messages between NAT'd peers
        #self.mediator = Mediator(self.ob_ctx.http_ip, self.ob_ctx.mediator_port)

        peers = ob_ctx.seeds if not ob_ctx.seed_mode else []
        self.transport.join_network(peers)

        handlers = [
            (r"/", MainHandler),
            (r"/main", MainHandler),
            (r"/html/(.*)", OpenBazaarStaticHandler, {'path': './html'}),
            (r"/ws", WebSocketHandler,
             {
                 'transport': self.transport,
                 'market_application': self,
                 'db_connection': db_connection
             })
        ]

        # TODO: Move debug settings to configuration location
        settings = dict(debug=True)
        super(MarketApplication, self).__init__(handlers, **settings)

    def start_app(self):
        # If self.ob_ctx.http_port is 0, the kernel is queried for a port.
        sockets = tornado.netutil.bind_sockets(
            self.ob_ctx.http_port,
            address=self.ob_ctx.http_ip
        )
        server = tornado.httpserver.HTTPServer(self)
        server.add_sockets(sockets)

        self.ob_ctx.http_port = sockets[0].getsockname()[1]

        if not self.ob_ctx.disable_upnp:
            self.setup_upnp_port_mappings(self.ob_ctx.server_port)
        else:
            print "MarketApplication.start_app(): Disabling upnp setup"

    def setup_upnp_port_mappings(self, p2p_port):
        result = False

        if not self.ob_ctx.disable_upnp:
            upnp.PortMapper.DEBUG = False
            print "Setting up UPnP Port Map Entry..."
            self.upnp_mapper = upnp.PortMapper()
            self.upnp_mapper.clean_my_mappings(p2p_port)

            result_tcp_p2p_mapping = self.upnp_mapper.add_port_mapping(
                p2p_port, p2p_port
            )
            print "UPnP TCP P2P Port Map configuration done ",
            print "(%s -> %s) => %s" % (
                p2p_port, p2p_port, result_tcp_p2p_mapping
            )

            result_udp_p2p_mapping = self.upnp_mapper.add_port_mapping(
                p2p_port, p2p_port, 'UDP'
            )
            print "UPnP UDP P2P Port Map configuration done ",
            print "(%s -> %s) => %s" % (
                p2p_port, p2p_port, result_udp_p2p_mapping
            )

            result = result_tcp_p2p_mapping and result_udp_p2p_mapping
            if not result:
                print "Warning: UPnP was not setup correctly. ",
                print "Ports could not be automatically mapped."
                print "If you only see two or three stores, here are some tips:"
                print "1. If you are using VPN, configure port forwarding or disable your VPN temporarily"
                print "2. Configure your router to forward traffic from port",
                print "%s for both TCP and UDP to your local port %s" % (p2p_port, p2p_port)

        return result

    def cleanup_upnp_port_mapping(self):
        if not self.ob_ctx.disable_upnp:
            try:
                if self.upnp_mapper is not None:
                    print "Cleaning UPnP Port Mapping -> ", \
                        self.upnp_mapper.clean_my_mappings(self.transport.port)
            except AttributeError:
                print (
                    "[openbazaar] "
                    "MarketApplication.clean_upnp_port_mapping() failed!"
                )

    def shutdown(self, x=None, y=None):
        self.shutdown_mutex.acquire()
        print "MarketApplication.shutdown!"
        log = logging.getLogger(
            '[%s] %s' % (self.market.market_id, 'root')
        )
        log.info("Received TERMINATE, exiting...")

        # Send goodbye message to connected peers
        for peer in self.transport.dht.active_peers:
            peer.send_raw(
                json.dumps({
                    'type': 'goodbye',
                    'pubkey': self.transport.pubkey,
                    'senderGUID': self.transport.guid,
                    'hostname': self.transport.hostname,
                    'port': self.transport.port,
                    'senderNick': self.transport.nickname,
                    'avatar_url': self.transport.avatar_url,
                    'v': constants.VERSION
                })
            )

        self.cleanup_upnp_port_mapping()
        tornado.ioloop.IOLoop.instance().stop()

        self.transport.shutdown()
        self.shutdown_mutex.release()
        os._exit(0)