예제 #1
0
파일: lookupapplet.py 프로젝트: hj91/cspace
def getLocation( publicKey ) :
    reactor = SelectReactor()
    udpSock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
    udpSock.bind( ('',0) )
    rpcSocket = RPCSocket( udpSock, reactor )
    dhtClient = DHTClient( rpcSocket )
    nodeAddr = ('210.210.1.102',10001)
    nodeTable = NodeTable( [nodeAddr] )
    locList = []
    def onLookup( location ) :
        locList.append( location )
        reactor.stop()
    lookupUser( publicKey, dhtClient, nodeTable, onLookup )
    reactor.run()
    rpcSocket.close()
    return locList[0]
예제 #2
0
class NodeRunner( object ) :
    def __init__( self, nodeTable, reactor ) :
        self.nodeTable = nodeTable
        self.reactor = reactor
        self.timerOp = None
        self.firewallOp = None
        self.rpcSock = None
        self.tcpListener = None
        self.router = None
        self.dhtNode = None
        self._initTimer()

    def close( self ) :
        if self.timerOp :
            self.timerOp.cancel()
            self.timerOp = None
        if self.firewallOp :
            self.firewallOp.cancel()
            self.firewallOp = None
        if self.rpcSock :
            self.rpcSock.close()
            self.rpcSock = None
        if self.tcpListener :
            self.tcpListener.close()
            self.tcpListener = None
        if self.router is not None :
            self.router.close()
            self.router = None
        if self.dhtNode is not None :
            self.dhtNode.close()
            self.dhtNode = None

    def _initTimer( self ) :
        timeout = NODE_CHECK_TIME_DELAY
        self.timerOp = self.reactor.callLater( timeout, self._onTimer )

    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 _onFirewallCheck( self, result ) :
        self.firewallOp = None
        if not result :
            self.rpcSock.close()
            self.rpcSock = None
            self.tcpListener.close()
            self.tcpListener = None
            self._initTimer()
            return
        self.router = Router( self.tcpListener, self.reactor )
        self.dhtNode = DHTNode( self.rpcSock, self.reactor,
                self.nodeTable.getLiveNodes() )
        self.tcpListener = None
        self.rpcSock = None
예제 #3
0
파일: noderunner.py 프로젝트: hj91/cspace
class NodeRunner(object):
    def __init__(self, nodeTable, reactor):
        self.nodeTable = nodeTable
        self.reactor = reactor
        self.timerOp = None
        self.firewallOp = None
        self.rpcSock = None
        self.tcpListener = None
        self.router = None
        self.dhtNode = None
        self._initTimer()

    def close(self):
        if self.timerOp:
            self.timerOp.cancel()
            self.timerOp = None
        if self.firewallOp:
            self.firewallOp.cancel()
            self.firewallOp = None
        if self.rpcSock:
            self.rpcSock.close()
            self.rpcSock = None
        if self.tcpListener:
            self.tcpListener.close()
            self.tcpListener = None
        if self.router is not None:
            self.router.close()
            self.router = None
        if self.dhtNode is not None:
            self.dhtNode.close()
            self.dhtNode = None

    def _initTimer(self):
        timeout = NODE_CHECK_TIME_DELAY
        self.timerOp = self.reactor.callLater(timeout, self._onTimer)

    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 _onFirewallCheck(self, result):
        self.firewallOp = None
        if not result:
            self.rpcSock.close()
            self.rpcSock = None
            self.tcpListener.close()
            self.tcpListener = None
            self._initTimer()
            return
        self.router = Router(self.tcpListener, self.reactor)
        self.dhtNode = DHTNode(self.rpcSock, self.reactor,
                               self.nodeTable.getLiveNodes())
        self.tcpListener = None
        self.rpcSock = None