def _onConnectUser( self, err, sock ) : self.userConnectOp = None if err < 0 : self.setText( 'Error connecting to %s' % env.contactName ) return self.setText( 'Connected to %s' % env.contactName ) self.connectedSock = sock self.listener = tcpListen( ('127.0.0.1',0), self.reactor, self._onIncoming ) listenPort = self.listener.getSock().getsockname()[1] vncViewer = os.path.join( os.path.split(sys.argv[0])[0], vncViewerPath ) if vncViewerType == 'tightvnc' : args = [vncViewer, '127.0.0.1::%d' % listenPort ] elif vncViewerType == 'realvnc' : if sys.platform == 'win32' : args = [vncViewer, 'AutoReconnect=0', '127.0.0.1:%d' % listenPort ] else : args = [vncViewer, '127.0.0.1:%d' % listenPort ] else : raise RuntimeError, "No suitable vnc viewer found" startingDir = os.path.split( vncViewer )[0] result = spawnProcess( vncViewer, args, os.environ, startingDir, 0 ) if not result : self.connectedSock.close() self.listener.close() self.setText( 'Error starting vncviewer: %s' % vncViewer ) return
def _onConnectUser(self, err, sock): self.userConnectOp = None if err < 0: self.setText('Error connecting to %s' % env.contactName) return self.setText('Connected to %s' % env.contactName) self.connectedSock = sock self.listener = tcpListen(('127.0.0.1', 0), self.reactor, self._onIncoming) listenPort = self.listener.getSock().getsockname()[1] vncViewer = os.path.join(os.path.split(sys.argv[0])[0], vncViewerPath) if vncViewerType == 'tightvnc': args = [vncViewer, '127.0.0.1::%d' % listenPort] elif vncViewerType == 'realvnc': if sys.platform == 'win32': args = [ vncViewer, 'AutoReconnect=0', '127.0.0.1:%d' % listenPort ] else: args = [vncViewer, '127.0.0.1:%d' % listenPort] else: raise RuntimeError, "No suitable vnc viewer found" startingDir = os.path.split(vncViewer)[0] result = spawnProcess(vncViewer, args, os.environ, startingDir, 0) if not result: self.connectedSock.close() self.listener.close() self.setText('Error starting vncviewer: %s' % vncViewer) return
def __init__( self, session, actionManager, reactor ) : self.session = session self.actionManager = actionManager self.reactor = reactor self.listener = tcpListen( ('127.0.0.1',0), reactor, self._onNewConnection ) self.listenPort = self.listener.getSock().getsockname()[1] print 'listenport = %d' % self.listenPort self.serviceConfig = ServiceConfig() self.actionConfig = ActionConfig() self.listeners = {} self.incoming = IncomingConnections( self.reactor ) self.services = [] self.appletConnections = {} for (service,command) in self.serviceConfig.listActiveServices() : def doRegisterService( service, command ) : def onService( sslConn, peerKey, contactName, incomingName ) : self._onService( service, command, sslConn, peerKey, contactName, incomingName ) self.session.registerService( service, onService ) doRegisterService( service, command ) self.services.append( service ) self.actions = [] for (actionDir,action,command,order) in self.actionConfig.listActiveActions() : def doRegisterAction( actionDir, action, command, order ) : def onAction( contactName ) : self._onAction( actionDir, action, command, contactName ) return self.actionManager.registerAction( action, onAction, order ) actionId = doRegisterAction( actionDir, action, command, order ) self.actions.append( actionId ) if actionDir == 'TextChat' : self.actionManager.setDefaultAction( actionId ) self.bridgeThread = BridgeThread()
def _onTimer( self ) : self.timerOp = None localIP = getLocalIP() if localIP is None : self._initTimer() return nodeAddrList = self.nodeTable.getLiveNodes() if not nodeAddrList : self._initTimer() return tcpListener = None udpSock = None for port in xrange(10001,20000) : addr = (localIP,port) try : tcpListener = tcpListen( addr, self.reactor, None ) except sock_error : continue udpSock = socket( AF_INET, SOCK_DGRAM ) try : udpSock.bind( addr ) except sock_error : udpSock.close() tcpListener.close() udpSock = tcpListener = None continue break if tcpListener is None : self._initTimer() return self.rpcSock = RPCSocket( udpSock, self.reactor ) self.tcpListener = tcpListener self.firewallOp = _testFirewall( self.tcpListener, self.rpcSock, nodeAddrList, localIP, self.reactor, self._onFirewallCheck )
def _onTimer(self): self.timerOp = None localIP = getLocalIP() if localIP is None: self._initTimer() return nodeAddrList = self.nodeTable.getLiveNodes() if not nodeAddrList: self._initTimer() return tcpListener = None udpSock = None for port in xrange(10001, 20000): addr = (localIP, port) try: tcpListener = tcpListen(addr, self.reactor, None) except sock_error: continue udpSock = socket(AF_INET, SOCK_DGRAM) try: udpSock.bind(addr) except sock_error: udpSock.close() tcpListener.close() udpSock = tcpListener = None continue break if tcpListener is None: self._initTimer() return self.rpcSock = RPCSocket(udpSock, self.reactor) self.tcpListener = tcpListener self.firewallOp = _testFirewall(self.tcpListener, self.rpcSock, nodeAddrList, localIP, self.reactor, self._onFirewallCheck)
def _initializeListen( rsaKey, updateLevelStore, dhtClient, nodeTable, reactor, callback=None ) : obj = Dummy() def doCancel() : if obj.publishOp : obj.publishOp.cancel() obj.publishOp = None for client,rid,ip in obj.routerList : client.close() del obj.routerList[:] if obj.registerOp : obj.registerOp.cancel() obj.registerOp = None obj.listener.close() obj.listener = None def onError() : doCancel() op.notify( None ) def onPublish( result ) : obj.publishOp = None if not result : onError() return data = (obj.listener,obj.routerList,obj.publicIP,\ obj.localIP,obj.localPort) op.notify( data ) def getLocation() : directLocations = [DirectLocation((obj.localIP,obj.localPort))] routedLocations = [RoutedLocation(rc.getRouterAddr(),rid)\ for rc,rid,ip in obj.routerList] location = UserLocation( directLocations, routedLocations, obj.publicIP ) return location def onRegister( routerList ) : obj.registerOp = None if not routerList : onError() return obj.routerList = routerList obj.localIP = getLocalIP() if obj.localIP is None : onError() return ipList = [ip for client,rid,ip in obj.routerList] obj.publicIP = _getMajority( ipList ) obj.publishOp = _publishLocation( rsaKey, getLocation(), updateLevelStore, dhtClient, nodeTable, onPublish ) obj.listener = tcpListen( ('',0), reactor, None ) obj.listener.enable( False ) obj.localPort = obj.listener.getSock().getsockname()[1] obj.registerOp = _registerWithRouters( nodeTable.getLiveNodes(), reactor, onRegister ) obj.routerList = [] obj.publishOp = None op = AsyncOp( callback, doCancel ) return op
def startNetworkNode( ipAddr, reactor, knownNodes=[], startNode=10001 ) : for port in xrange(startNode,startNode+9999) : addr = (ipAddr,port) try : listener = tcpListen( addr, reactor, None ) except sock_error : continue sock = socket( AF_INET, SOCK_DGRAM ) try : sock.bind( addr ) except sock_error : sock.close() listener.close() continue rpcSock = RPCSocket( sock, reactor ) node = NetworkNode( listener, rpcSock, reactor, knownNodes ) return node
def startNetworkNode(ipAddr, reactor, knownNodes=[]): for port in xrange(10001, 20000): addr = (ipAddr, port) try: listener = tcpListen(addr, reactor, None) except sock_error: continue sock = socket(AF_INET, SOCK_DGRAM) try: sock.bind(addr) except sock_error: sock.close() listener.close() continue rpcSock = RPCSocket(sock, reactor) node = NetworkNode(listener, rpcSock, reactor, knownNodes) return node
def __init__( self, session, actionManager, reactor ) : global logger self.session = session self.actionManager = actionManager self.reactor = reactor self.listener = tcpListen( ('127.0.0.1',0), reactor, self._onNewConnection ) self.listenPort = self.listener.getSock().getsockname()[1] logger.info('appletserver listenport = %d' % self.listenPort) self.serviceConfig = ServiceConfig() self.actionConfig = ActionConfig() self.listeners = {} self.incoming = IncomingConnections( self.reactor ) self.services = [] self.actions = [] self.appletConnections = {} self.onServiceCallback = None self.onActionCallback = None self.bridgeThread = BridgeThread()
def _onAccept( self, err, sock ) : if err < 0 : self.setText( 'Error in accepting connection from %s' % env.displayName ) return self.peerSock = sock self.setText( 'Waiting for VNC Server to connect...' ) self.listener = tcpListen( ('127.0.0.1',0), self.reactor, self._onIncoming ) listenPort = self.listener.getSock().getsockname()[1] vncServer = os.path.join( os.path.split(sys.argv[0])[0], vncServerPath ) args = [vncServer] environ = dict( os.environ.items() ) environ['VNC_SERVER_PORT'] = str(listenPort) startingDir = os.path.split( vncServer )[0] result = spawnProcess( vncServer, args, environ, startingDir, 0 ) if not result : self.peerSock.close() self.listener.close() self.setText( 'Error starting vnc server: %s' % vncServer ) return
def _onAccept(self, err, sock): if err < 0: self.setText('Error in accepting connection from %s' % env.displayName) return self.peerSock = sock self.setText('Waiting for VNC Server to connect...') self.listener = tcpListen(('127.0.0.1', 0), self.reactor, self._onIncoming) listenPort = self.listener.getSock().getsockname()[1] vncServer = os.path.join(os.path.split(sys.argv[0])[0], vncServerPath) args = [vncServer] environ = dict(os.environ.items()) environ['VNC_SERVER_PORT'] = str(listenPort) startingDir = os.path.split(vncServer)[0] result = spawnProcess(vncServer, args, environ, startingDir, 0) if not result: self.peerSock.close() self.listener.close() self.setText('Error starting vnc server: %s' % vncServer) return
def _initializeListen(rsaKey, updateLevelStore, dhtClient, nodeTable, reactor, callback=None): obj = Dummy() def doCancel(): if obj.publishOp: obj.publishOp.cancel() obj.publishOp = None for client, rid, ip in obj.routerList: client.close() del obj.routerList[:] if obj.registerOp: obj.registerOp.cancel() obj.registerOp = None obj.listener.close() obj.listener = None def onError(): doCancel() op.notify(None) def onPublish(result): obj.publishOp = None if not result: onError() return data = (obj.listener,obj.routerList,obj.publicIP,\ obj.localIP,obj.localPort) op.notify(data) def getLocation(): directLocations = [DirectLocation((obj.localIP, obj.localPort))] routedLocations = [RoutedLocation(rc.getRouterAddr(),rid)\ for rc,rid,ip in obj.routerList] location = UserLocation(directLocations, routedLocations, obj.publicIP) return location def onRegister(routerList): obj.registerOp = None if not routerList: onError() return obj.routerList = routerList obj.localIP = getLocalIP() if obj.localIP is None: onError() return ipList = [ip for client, rid, ip in obj.routerList] obj.publicIP = _getMajority(ipList) obj.publishOp = _publishLocation(rsaKey, getLocation(), updateLevelStore, dhtClient, nodeTable, onPublish) obj.listener = tcpListen(('', 0), reactor, None) obj.listener.enable(False) obj.localPort = obj.listener.getSock().getsockname()[1] obj.registerOp = _registerWithRouters(nodeTable.getLiveNodes(), reactor, onRegister) obj.routerList = [] obj.publishOp = None op = AsyncOp(callback, doCancel) return op