Example #1
0
 def doHandshake(self, event, *args, **kwargs):
     """
     Action method.
     """
     channel = kwargs.get('channel', None)
     ack_timeout = kwargs.get('ack_timeout', 15)
     ping_retries = kwargs.get('ping_retries', 2)
     original_idurl = kwargs.get('original_idurl', self.idurl.to_bin())
     d = None
     if event == 'ping-now':
         d = handshaker.ping(
             idurl=original_idurl,
             ack_timeout=ack_timeout,
             ping_retries=ping_retries,
             channel=channel or 'ping',
             cancel_running=True,
         )
     elif event == 'handshake':
         d = handshaker.ping(
             idurl=original_idurl,
             ack_timeout=ack_timeout,
             ping_retries=ping_retries,
             force_cache=True,
             channel=channel or 'handshake',
             cancel_running=True,
         )
     elif event == 'offline-ping':
         if self.keep_alive:
             d = handshaker.ping(
                 idurl=original_idurl,
                 ack_timeout=ack_timeout,
                 cache_timeout=10,
                 ping_retries=ping_retries,
                 force_cache=True,
                 channel='offline_ping',
             )
     else:
         if self.keep_alive:
             d = handshaker.ping(
                 idurl=original_idurl,
                 ack_timeout=ack_timeout,
                 cache_timeout=10,
                 ping_retries=ping_retries,
                 force_cache=True,
                 channel='idle_ping',
             )
     if d:
         d.addCallback(self._on_ping_success)
         d.addErrback(self._on_ping_failed)
Example #2
0
def handshake(idurl, channel=None, ack_timeout=15, ping_retries=2, keep_alive=False):
    """
    Immediately doing handshake with remote node by fetching remote identity file and then
    sending my own Identity() to remote peer and wait for an Ack() packet.
    Returns Deferred object. 
    """
    idurl = strng.to_bin(idurl)
    if _Debug:
        lg.args(_DebugLevel, idurl=idurl, keep_alive=keep_alive, channel=channel, ack_timeout=ack_timeout, ping_retries=ping_retries)
    result = Deferred()
    result.addErrback(on_ping_failed, idurl=idurl, channel=channel)
    if id_url.is_empty(idurl):
        result.errback(Exception('empty idurl provided'))
        return result
    if not id_url.is_cached(idurl):
        if _Debug:
            lg.dbg(_DebugLevel, 'user identity %r not cached yet, executing clean handshake' % idurl)
        return handshaker.ping(
            idurl=idurl,
            ack_timeout=ack_timeout,
            ping_retries=ping_retries,
            channel=channel or 'clean_handshake',
            keep_alive=keep_alive,
        )
    idurl = id_url.field(idurl)
    if not isKnown(idurl):
        if not check_create(idurl, keep_alive=keep_alive):
            raise Exception('can not create instance')
    A(idurl, 'handshake', result, channel=channel, ack_timeout=ack_timeout, ping_retries=ping_retries, original_idurl=idurl.to_original())
    return result
Example #3
0
def ping(idurl, channel=None, ack_timeout=15, ping_retries=0, keep_alive=False):
    """
    Doing handshake with remote node only if it is currently not connected.
    Returns Deferred object.
    """
    idurl = strng.to_bin(idurl)
    if _Debug:
        lg.args(_DebugLevel, idurl=idurl, keep_alive=keep_alive, channel=channel)
    result = Deferred()
    result.addErrback(on_ping_failed, idurl=idurl, channel=channel)
    if id_url.is_empty(idurl):
        result.errback(Exception('empty idurl provided'))
        return result
    if not id_url.is_cached(idurl):
        if _Debug:
            lg.dbg(_DebugLevel, 'user identity %r not cached yet, executing clean handshake' % idurl)
        return handshaker.ping(
            idurl=idurl,
            ack_timeout=ack_timeout,
            ping_retries=ping_retries,
            channel=channel or 'clean_ping',
            keep_alive=keep_alive,
        )
    idurl = id_url.field(idurl)
    if not isKnown(idurl):
        if not check_create(idurl, keep_alive=keep_alive):
            raise Exception('can not create instance')
    A(idurl, 'ping-now', result, channel=channel, ack_timeout=ack_timeout, ping_retries=ping_retries, original_idurl=idurl.to_original())
    return result
Example #4
0
 def doHandshake(self, *args, **kwargs):
     """
     Action method.
     """
     d = handshaker.ping(
         idurl=self.remote_idurl,
         channel='group_access_donor',
         keep_alive=True,
         force_cache=True,
     )
     d.addCallback(lambda ok: self.automat('shook-hands'))
     if _Debug:
         d.addErrback(lg.errback, debug=_Debug, debug_level=_DebugLevel, method='group_access_donor.doHandshake')
     d.addErrback(lambda err: self.automat('fail'))
Example #5
0
 def doHandshake(self, *args, **kwargs):
     """
     Action method.
     """
     d = handshaker.ping(
         idurl=self.target_idurl,
         channel='p2p_service_seeker',
         keep_alive=True,
         force_cache=False,
     )
     d.addCallback(lambda ok: self.automat('shook-hands'))
     if _Debug:
         d.addErrback(lg.errback,
                      debug=_Debug,
                      debug_level=_DebugLevel,
                      method='p2p_service_seeker.doHandshake')
     d.addErrback(lambda err: self.automat('fail'))
 def doHandshake(self, *args, **kwargs):
     """
     Action method.
     """
     if _Debug:
         lg.args(_DebugLevel, target_idurl=self.target_idurl)
     d = handshaker.ping(
         idurl=self.target_idurl,
         channel='p2p_service_seeker',
         keep_alive=True,
         force_cache=False,
         ping_retries=(1
                       if self.ping_retries is None else self.ping_retries),
         ack_timeout=(15 if self.ack_timeout is None else self.ack_timeout),
         cancel_running=self.force_handshake,
     )
     d.addCallback(lambda ok: self.automat('shook-hands'))
     if _Debug:
         d.addErrback(lg.errback,
                      debug=_Debug,
                      debug_level=_DebugLevel,
                      method='p2p_service_seeker.doHandshake')
     d.addErrback(
         lambda err: self.automat('fail', reason='handshake-failed'))