Example #1
0
    def __init__(self, conn):
        """
        Create new session
        :param Protocol conn: connection protocol implementation that this
                              session should enhance
        :return None:
        """
        BasicSafeSession.__init__(self, conn)
        self.p2p_service = self.conn.server

        # Information about peer
        self.degree = 0
        self.node_name = ""
        self.node_info = None
        self.client_ver = None
        self.listen_port = None
        self.conn_id = None
        self.metadata = None

        # Verification by challenge not a random value
        self.solve_challenge = False
        self.challenge = None
        self.difficulty = 0

        self.can_be_unverified.extend([
            message.base.Hello,
            message.base.RandVal,
            message.base.ChallengeSolution,
        ])
        self.can_be_not_encrypted.append(message.base.Hello)

        self.__set_msg_interpretations()
Example #2
0
 def interpret(self, msg):
     """React to specific message. Disconnect, if message type is unknown
        for that session.
     Inform p2p service about last message.
     :param Message msg: Message to interpret and react to.
     :return None:
     """
     self.p2p_service.set_last_message("<-", self.key_id, time.localtime(),
                                       msg, self.address, self.port)
     BasicSafeSession.interpret(self, msg)
Example #3
0
 def send(self, msg, send_unverified=False):
     """Send given message if connection was verified or send_unverified
        option is set to True.
     :param Message message: message to be sent.
     :param boolean send_unverified: should message be sent even if
                                     the connection hasn't been
                                     verified yet?
     """
     BasicSafeSession.send(self, msg, send_unverified)
     self.p2p_service.set_last_message("->", self.key_id, time.localtime(),
                                       msg, self.address, self.port)
Example #4
0
 def send(self, msg, send_unverified=False):
     """Send given message if connection was verified or send_unverified
        option is set to True. Collect other
     message in the list (they should be send after verification).
     :param Message msg: message to be sent.
     :param boolean send_unverified: should message be sent even if
                                     the connection hasn't been
                                     verified yet?
     """
     if not self.verified and not send_unverified:
         self.msgs_to_send.append(msg)
         return
     BasicSafeSession.send(self, msg, send_unverified=send_unverified)
Example #5
0
    def __init__(self, conn):
        """
        Create new session
        :param FilesProtocol conn: connection protocol implementation that
                                   this session should enhance
        :return None:
        """
        BasicSafeSession.__init__(self, conn)
        self.resource_server = self.conn.server

        self.file_name = None  # file to send right now
        # should it send confirmation after receiving current file?
        self.confirmation = False
        # how many copies of current file should be pushed into network
        self.copies = 0
        # messages waiting to be send (because connection hasn't been
        # verified yet)
        self.msgs_to_send = []
        self.conn_id = None

        # set_msg_interpretations

        self._interpretation.update({
            message.MessagePushResource.TYPE: self._react_to_push_resource,
            message.MessageHasResource.TYPE: self._react_to_has_resource,
            message.MessageWantsResource.TYPE: self._react_to_wants_resource,
            message.MessagePullResource.TYPE: self._react_to_pull_resource,
            message.MessagePullAnswer.TYPE: self._react_to_pull_answer,
            message.MessageHello.TYPE: self._react_to_hello,
            message.MessageRandVal.TYPE: self._react_to_rand_val
        })

        self.can_be_not_encrypted.append(message.MessageHello.TYPE)
        self.can_be_unsigned.append(message.MessageHello.TYPE)
        self.can_be_unverified.extend(
            [
                message.MessageHello.TYPE,
                message.MessageRandVal.TYPE
            ]
        )
Example #6
0
 def dropped(self):
     """
     Close connection and inform p2p service about disconnection
     """
     BasicSafeSession.dropped(self)
     self.p2p_service.remove_peer(self)
Example #7
0
 def dropped(self):
     """ Close connection """
     BasicSafeSession.dropped(self)
     self.resource_server.remove_session(self)