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
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
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
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
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