Exemple #1
0
    def conn_is_alive(self):
        if self.sock == NC.INVALID_SOCKET:
            return False

        data,err,msg = nyamuk_net.read(self.sock, 1)
        if err in (errno.ECONNRESET, errno.ETIMEDOUT) :
            return False

        return True
Exemple #2
0
    def conn_is_alive(self):
        if self.sock == NC.INVALID_SOCKET:
            return False

        data, err, msg = nyamuk_net.read(self.sock, 1)
        if err in (errno.ECONNRESET, errno.ETIMEDOUT):
            return False

        return True
Exemple #3
0
    def packet_read(self):
        """Read packet from network."""
        bytes_received = 0

        if self.sock == NC.INVALID_SOCKET:
            return NC.ERR_NO_CONN

        if self.in_packet.command == 0:
            ba_data, errnum, errmsg = nyamuk_net.read(self.sock, 1)
            if errnum == 0 and len(ba_data) == 1:
                bytes_received += 1
                byte = ba_data[0]
                self.in_packet.command = byte

                if self.as_broker:
                    if self.bridge is None and self.state == NC.CS_NEW and (
                            byte & 0xF0) != NC.CMD_CONNECT:
                        print "RETURN ERR_PROTOCOL"
                        return NC.ERR_PROTOCOL, bytes_received
            else:
                if errnum == errno.EAGAIN or errnum == errno.EWOULDBLOCK:
                    return NC.ERR_SUCCESS, bytes_received
                elif errnum == 0 and len(
                        ba_data) == 0 or errnum == errno.ECONNRESET:
                    return NC.ERR_CONN_LOST, bytes_received
                else:
                    evt = event.EventNeterr(errnum, errmsg)
                    self.push_event(evt)
                    return NC.ERR_UNKNOWN, bytes_received

        if not self.in_packet.have_remaining:
            loop_flag = True
            while loop_flag:
                ba_data, errnum, errmsg = nyamuk_net.read(self.sock, 1)

                if errnum == 0 and len(ba_data) == 1:
                    byte = ba_data[0]
                    bytes_received += 1
                    self.in_packet.remaining_count += 1
                    if self.in_packet.remaining_count > 4:
                        return NC.ERR_PROTOCOL, bytes_received

                    self.in_packet.remaining_length += (
                        byte & 127) * self.in_packet.remaining_mult
                    self.in_packet.remaining_mult *= 128
                else:
                    if errnum == errno.EAGAIN or errnum == errno.EWOULDBLOCK:
                        return NC.ERR_SUCCESS, bytes_received
                    elif errnum == 0 and len(
                            ba_data) == 0 or errnum == errno.ECONNRESET:
                        return NC.ERR_CONN_LOST, bytes_received
                    else:
                        evt = event.EventNeterr(errnum, errmsg)
                        self.push_event(evt)
                        return NC.ERR_UNKNOWN, bytes_received

                if (byte & 128) == 0:
                    loop_flag = False

            if self.in_packet.remaining_length > 0:
                self.in_packet.payload = bytearray(
                    self.in_packet.remaining_length)
                if self.in_packet.payload is None:
                    return NC.ERR_NO_MEM, bytes_received
                self.in_packet.to_process = self.in_packet.remaining_length

            self.in_packet.have_remaining = True

        if self.in_packet.to_process > 0:
            ba_data, errnum, errmsg = nyamuk_net.read(
                self.sock, self.in_packet.to_process)
            if errnum == 0 and len(ba_data) > 0:
                readlen = len(ba_data)
                bytes_received += readlen
                for idx in xrange(0, readlen):
                    self.in_packet.payload[self.in_packet.pos] = ba_data[idx]
                    self.in_packet.pos += 1
                    self.in_packet.to_process -= 1
            else:
                if errnum == errno.EAGAIN or errnum == errno.EWOULDBLOCK:
                    return NC.ERR_SUCCESS, bytes_received
                elif errnum == 0 and len(
                        ba_data) == 0 or errnum == errno.ECONNRESET:
                    return NC.ERR_CONN_LOST, bytes_received
                else:
                    evt = event.EventNeterr(errnum, errmsg)
                    self.push_event(evt)
                    return NC.ERR_UNKNOWN, bytes_received

        #all data for this packet is read
        self.in_packet.pos = 0

        ret = self.packet_handle()

        self.in_packet.packet_cleanup()

        self.last_msg_in = time.time()

        return ret, bytes_received
Exemple #4
0
 def packet_read(self):
     """Read packet from network."""
     bytes_received = 0
     
     if self.sock == NC.INVALID_SOCKET:
         return NC.ERR_NO_CONN
     
     if self.in_packet.command == 0:
         readlen, ba,status = nyamuk_net.read(self.sock, 1)
         if readlen == 1:
             bytes_received += 1
             byte = ba[0]
             self.in_packet.command = byte
             
             if self.as_broker == True:
                 if self.bridge is None and self.state == NC.CS_NEW and (byte & 0xF0) != NC.CMD_CONNECT:
                     print "RETURN ERR_PROTOCOL"
                     return NC.ERR_PROTOCOL, bytes_received
         else:
             if readlen == 0:
                 return NC.ERR_CONN_LOST, bytes_received
             if status == errno.EAGAIN or status == errno.EWOULDBLOCK:
                 return NC.ERR_SUCCESS, bytes_received
             else:
                 if status == errno.ECONNRESET:
                     return NC.ERR_CONN_LOST, bytes_received
                 else:
                     return NC.ERR_UNKNOWN, bytes_received
     
     if self.in_packet.have_remaining == False:
         loop_flag = True
         while loop_flag == True:
             readlen, ba,status = nyamuk_net.read(self.sock, 1)
             byte = ba[0]
             if readlen == 1:
                 bytes_received += 1
                 self.in_packet.remaining_count += 1
                 if self.in_packet.remaining_count > 4:
                     return NC.ERR_PROTOCOL, bytes_received
                 
                 self.in_packet.remaining_length += (byte & 127) * self.in_packet.remaining_mult
                 self.in_packet.remaining_mult *= 128
             else:
                 if readlen == 0:
                     return NC.ERR_CONN_LOST, bytes_received
             
             if (byte & 128) == 0:
                 loop_flag = False
         
         if self.in_packet.remaining_length > 0:
             self.in_packet.payload = bytearray(self.in_packet.remaining_length)
             if self.in_packet.payload is None:
                 return NC.ERR_NO_MEM, bytes_received
             self.in_packet.to_process = self.in_packet.remaining_length
         
         self.in_packet.have_remaining = True
     
     if self.in_packet.to_process > 0:
         readlen, ba, status = nyamuk_net.read(self.sock, self.in_packet.to_process)
         if readlen > 0:
             bytes_received += readlen
             for x in range(0, readlen):
                 self.in_packet.payload[self.in_packet.pos] = ba[x]
                 self.in_packet.pos += 1
                 self.in_packet.to_process -= 1
         else:
             if status == errno.EAGAIN or status == errno.EWOULDBLOCK:
                 return NC.ERR_SUCCESS, bytes_received
             else:
                 if status == errno.ECONNRESET:
                     return NC.ERR_CONN_LOST, bytes_received
                 else:
                     return NC.ERR_UNKNOWN, bytes_received
     
     #all data for this packet is read
     self.in_packet.pos = 0
     
     rc = self.packet_handle()
     
     self.in_packet.packet_cleanup()
     
     self.last_msg_in = time.time()
     
     return rc, bytes_received
Exemple #5
0
    def packet_read(self):
        """Read packet from network."""
        bytes_received = 0
        
        if self.sock == NC.INVALID_SOCKET:
            return NC.ERR_NO_CONN
        
        if self.in_packet.command == 0:
            ba_data, errnum, errmsg = nyamuk_net.read(self.sock, 1)
            if errnum == 0 and len(ba_data) == 1:
                bytes_received += 1
                byte = ba_data[0]
                self.in_packet.command = byte
                
                if self.as_broker:
                    if self.bridge is None and self.state == NC.CS_NEW and (byte & 0xF0) != NC.CMD_CONNECT:
                        print "RETURN ERR_PROTOCOL"
                        return NC.ERR_PROTOCOL, bytes_received
            else:
                if errnum == errno.EAGAIN or errnum == errno.EWOULDBLOCK:
                    return NC.ERR_SUCCESS, bytes_received
                elif errnum == 0 and len(ba_data) == 0 or errnum == errno.ECONNRESET:
                    return NC.ERR_CONN_LOST, bytes_received
                else:
                    evt = event.EventNeterr(errnum, errmsg)
                    self.push_event(evt)
                    return NC.ERR_UNKNOWN, bytes_received
        
        if not self.in_packet.have_remaining:
            loop_flag = True
            while loop_flag:
                ba_data, errnum, errmsg = nyamuk_net.read(self.sock, 1)
                
                if errnum == 0 and len(ba_data) == 1:       
                    byte = ba_data[0]
                    bytes_received += 1
                    self.in_packet.remaining_count += 1
                    if self.in_packet.remaining_count > 4:
                        return NC.ERR_PROTOCOL, bytes_received
                    
                    self.in_packet.remaining_length += (byte & 127) * self.in_packet.remaining_mult
                    self.in_packet.remaining_mult *= 128
                else:
                    if errnum == errno.EAGAIN or errnum == errno.EWOULDBLOCK:
                        return NC.ERR_SUCCESS, bytes_received
                    elif errnum == 0 and len(ba_data) == 0 or errnum == errno.ECONNRESET:
                        return NC.ERR_CONN_LOST, bytes_received
                    else:
                        evt = event.EventNeterr(errnum, errmsg)
                        self.push_event(evt)
                        return NC.ERR_UNKNOWN, bytes_received
                
                if (byte & 128) == 0:
                    loop_flag = False
            
            if self.in_packet.remaining_length > 0:
                self.in_packet.payload = bytearray(self.in_packet.remaining_length)
                if self.in_packet.payload is None:
                    return NC.ERR_NO_MEM, bytes_received
                self.in_packet.to_process = self.in_packet.remaining_length
            
            self.in_packet.have_remaining = True
        
        if self.in_packet.to_process > 0:
            ba_data, errnum, errmsg = nyamuk_net.read(self.sock, self.in_packet.to_process)
            if errnum == 0 and len(ba_data) > 0:
                readlen = len(ba_data)
                bytes_received += readlen
                for idx in xrange(0, readlen):
                    self.in_packet.payload[self.in_packet.pos] = ba_data[idx]
                    self.in_packet.pos += 1
                    self.in_packet.to_process -= 1
            else:
                if errnum == errno.EAGAIN or errnum == errno.EWOULDBLOCK:
                        return NC.ERR_SUCCESS, bytes_received
                elif errnum == 0 and len(ba_data) == 0 or errnum == errno.ECONNRESET:
                    return NC.ERR_CONN_LOST, bytes_received
                else:
                    evt = event.EventNeterr(errnum, errmsg)
                    self.push_event(evt)
                    return NC.ERR_UNKNOWN, bytes_received

        #all data for this packet is read
        self.in_packet.pos = 0
        
        ret = self.packet_handle()
        
        self.in_packet.packet_cleanup()
        
        self.last_msg_in = time.time()
        
        return ret, bytes_received