def client_connector(backend, local_port, tunnel_data, ready=gevent.event.Event()): while True: init = tunnel_data.pop('init', None) header = copy.copy(tunnel_data) if init: header['new'] = True ready.clear() elif not ready.isSet(): ready.wait() backend_client = create_connection(backend) backend_client.sendall("{0}\n".format(json.dumps(header))) header = recv_json(backend_client) if header and 'banner' in header: print " {0}".format(header['banner']) print " Port {0} is now accessible from http://{1} ...\n".format( local_port, header['host']) ready.set() elif header and 'error' in header: print " ERROR: {0}".format(header['error']) gevent.hub.get_hub().parent.throw(SystemExit(1)) else: try: local_client = create_connection(('0.0.0.0', local_port)) join_sockets(backend_client, local_client) except IOError: backend_client.close()
def backend_handler(socket, address): header = recv_json(socket) if not header: logging.debug("!backend: no header, closing") socket.close() return try: tunnel = Tunnel.get_by_header(header) except RuntimeError, e: socket.sendall("{0}\n".format(json.dumps({"error": str(e)}))) socket.close() return
def backend_handler(socket, address): header = recv_json(socket) if not header: logging.debug("!backend: no header, closing") socket.close() return try: tunnel = Tunnel.get_by_header(header) except RuntimeError, e: socket.sendall("{0}\n".format( json.dumps({"error": str(e)}))) socket.close() return