예제 #1
0
 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
예제 #2
0
파일: VNCClient.py 프로젝트: hj91/cspace
 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
예제 #3
0
 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()
예제 #4
0
 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 )
예제 #5
0
파일: noderunner.py 프로젝트: hj91/cspace
 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)
예제 #6
0
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
예제 #7
0
파일: node.py 프로젝트: vesellov/datahaven
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
예제 #8
0
파일: node.py 프로젝트: hj91/cspace
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
예제 #9
0
 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()
예제 #10
0
 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
예제 #11
0
 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
예제 #12
0
파일: listener.py 프로젝트: hj91/cspace
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