def encode( self ) : directList = [loc.addr for loc in self.directLocations] routedList = [(loc.routerAddr,loc.routerId) for loc in self.routedLocations] data = { 'direct' : directList, 'routed' : routedList, 'publicIP' : self.publicIP } return encode( data )
def acceptIncoming(acceptFlag, sslConn, reactor, callback=None): def doCancel(): stream.close() def onError(*args): doCancel() op.notify(None) def onWriteComplete(): stream.shutdown() op.notify(sslConn) stream = SSLMessageStream(sslConn, reactor) stream.setCloseCallback(onError) stream.setErrorCallback(onError) stream.setInvalidMessageCallback(onError) stream.setInputCallback(onError) stream.setWriteCompleteCallback(onWriteComplete) if acceptFlag: data = 0 else: data = -1 stream.sendMessage(encode(data)) op = AsyncOp(callback, doCancel) return op
def _serviceConnect( sslConn, serviceName, reactor, callback=None ) : def doCancel() : ms.shutdown() sslAbort( sslConn ) def onClose( *args ) : doCancel() op.notify( None ) def onInput( data ) : try : result = decode( data ) assert type(result) is int assert result == 0 except : doCancel() op.notify( None ) return ms.shutdown() op.notify( sslConn ) ms = SSLMessageStream( sslConn, reactor ) ms.setCloseCallback( onClose ) ms.setErrorCallback( onClose ) ms.setInvalidMessageCallback( onClose ) ms.setInputCallback( onInput ) ms.sendMessage( encode(serviceName) ) ms.enableRead( True ) op = AsyncOp( callback, doCancel ) return op
def encode(self): directList = [loc.addr for loc in self.directLocations] routedList = [(loc.routerAddr, loc.routerId) for loc in self.routedLocations] data = { 'direct': directList, 'routed': routedList, 'publicIP': self.publicIP } return encode(data)
def request( self, payload, callback=None ) : requestId = self.nextRequestId self.nextRequestId += 1 msg = (0,requestId,payload) s = encode( msg ) def cancelRequest() : del self.pending[requestId] op = RPCOp( requestId, callback, cancelRequest ) self.pending[requestId] = op self.msgStream.sendMessage( s ) return op
def request( self, data, destaddr, callback=None ) : while 1 : id = rand_bytes( 20 ) if not self.pending.has_key(id) : break msg = (0, id, data) s = encode( msg ) def cancelRequest() : del self.pending[id] op = RPCOp( id, callback, cancelRequest ) self.pending[id] = op self._sendData( s, destaddr ) return op
def request(self, payload, callback=None): requestId = self.nextRequestId self.nextRequestId += 1 msg = (0, requestId, payload) s = encode(msg) def cancelRequest(): del self.pending[requestId] op = RPCOp(requestId, callback, cancelRequest) self.pending[requestId] = op self.msgStream.sendMessage(s) return op
def request(self, data, destaddr, callback=None): while 1: id = rand_bytes(20) if not self.pending.has_key(id): break msg = (0, id, data) s = encode(msg) def cancelRequest(): del self.pending[id] op = RPCOp(id, callback, cancelRequest) self.pending[id] = op self._sendData(s, destaddr) return op
def verifySignature( publicKey, data, updateLevel, signature ) : payload = encode( ('DHT-DATA',data,updateLevel) ) if type(publicKey) is str : k = RSAKey() try : k.fromDER_PublicKey( publicKey ) except RSAError : return False else : k = publicKey try : digest = Digest(digestType).digest( payload ) k.verify( signature, digest, digestType ) return True except RSAError : return False
def verifySignature(publicKey, data, updateLevel, signature): payload = encode(('DHT-DATA', data, updateLevel)) if type(publicKey) is str: k = RSAKey() try: k.fromDER_PublicKey(publicKey) except RSAError: return False else: k = publicKey try: digest = Digest(digestType).digest(payload) k.verify(signature, digest, digestType) return True except RSAError: return False
def acceptIncoming( acceptFlag, sslConn, reactor, callback=None ) : def doCancel() : stream.close() def onError( *args ) : doCancel() op.notify( None ) def onWriteComplete() : stream.shutdown() op.notify( sslConn ) stream = SSLMessageStream( sslConn, reactor ) stream.setCloseCallback( onError ) stream.setErrorCallback( onError ) stream.setInvalidMessageCallback( onError ) stream.setInputCallback( onError ) stream.setWriteCompleteCallback( onWriteComplete ) if acceptFlag : data = 0 else : data = -1 stream.sendMessage( encode(data) ) op = AsyncOp( callback, doCancel ) return op
def oneway(self, payload): requestId = self.nextRequestId self.nextRequestId += 1 msg = (2, requestId, payload) s = encode(msg) self.msgStream.sendMessage(s)
def response( self, payload, requestId ) : msg = (1,requestId,payload) s = encode( msg ) self.msgStream.sendMessage( s )
def response( self, data, ctx ) : assert ctx.rpcSocket is self msg = (1, ctx.id, data ) s = encode( msg ) self._sendData( s, ctx.addr )
def oneway( self, payload ) : requestId = self.nextRequestId self.nextRequestId += 1 msg = (2,requestId,payload) s = encode( msg ) self.msgStream.sendMessage( s )
def computeSignature(rsaKey, data, updateLevel): payload = encode(('DHT-DATA', data, updateLevel)) digest = Digest(digestType).digest(payload) return rsaKey.sign(digest, digestType)
def retry( self, id, data, destaddr ) : assert id in self.pending msg = (0, id, data) s = encode( msg ) self._sendData( s, destaddr )
def computeSignature( rsaKey, data, updateLevel ) : payload = encode( ('DHT-DATA',data,updateLevel) ) digest = Digest(digestType).digest( payload ) return rsaKey.sign( digest, digestType )
def response(self, payload, requestId): msg = (1, requestId, payload) s = encode(msg) self.msgStream.sendMessage(s)
def retry(self, id, data, destaddr): assert id in self.pending msg = (0, id, data) s = encode(msg) self._sendData(s, destaddr)
def response(self, data, ctx): assert ctx.rpcSocket is self msg = (1, ctx.id, data) s = encode(msg) self._sendData(s, ctx.addr)