Пример #1
0
 def sendto(self, msg, ip, disable_extended=False):
     """ sends a message to an IP on the configured port, 
 
     @long If only message and IP are given and the message string is shorter than 
     the maximum length, it will be sent as is.    
     If the message is longer or encryption/signatures are enabled, the message
     will be send as HELOX call.
     
     Split messages will be hashed and the hash becomes the messages identifier 
     for the receiver.
     If the message is split and signed, the signature will be used instead of the hash.
     
     @param msg messge as unicode object
     @type msg: unicode
     @param ip IP or hostname of receiver
     @param disable_split automatic message splitting can be disabled by setting to True 
     """  
     
     if not self._s:
         raise Exception("Cannot send. There is no open lunch socket")
     
     ip = ip.strip()
     
     if len(msg) > self._max_msg_length:                     
         if disable_extended:
             getCoreLogger().warning("Message to peer %s is too long and should be compressed/split, " + \
              "but extended message is disabled for this call", ip)   
         elif self._peers:
             peerversion = self._peers.getPeerCommitCount(pIP = ip)
             peerversion = peerversion if peerversion else 0
             if peerversion < self.EXT_MSG_VERSION:                
                 getCoreLogger().warning("Message to peer %s is too long and should be compressed/split, " + \
                  "but peer has version %d and cannot receive extended messages", ip, peerversion) 
                 disable_extended = True
     else:
         disable_extended = True
                 
     if disable_extended:
         if len(msg) > self.LEGACY_MAX_LEN:
             raise Exception("Message too large to be send over socket in one piece")
         else:
             self._s.sendto(msg.encode('utf-8'), (ip, self._port))
     else:
         getCoreLogger().debug("Sending as extended Message")
         xmsg = extMessageOutgoing(msg, self._max_msg_length)
         for f in xmsg.getFragments():
             self._s.sendto(f, (ip, self._port))
Пример #2
0
 def broadcast(self, msg):
     """
     @type msg: unicode
     """
      
     try:
         self._s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
         self._s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
         
         if len(msg) > self.LEGACY_MAX_LEN:
             getCoreLogger().debug("Broadcasting as extended Message")
             xmsg = extMessageOutgoing(msg, self._max_msg_length)
             for f in xmsg.getFragments():
                 self._s.sendto(f, ('255.255.255.255', self._port))
         else:
             getCoreLogger().debug("Broadcasting")
             self._s.sendto(msg.encode('utf-8'), ('255.255.255.255', self._port))
     except:
         getCoreLogger().warning("Problem while broadcasting", exc_info=1)