else:
     records = [msg]
 
 for idx in range(len(records)-1,-1,-1):
     last_rec = records[idx]
     tm = sensor_packet.read_packet_timestamp(last_rec)
     if tm:
         break;                    
 
 if tm:
     if abs(time.time() - tm) > MAX_TIMESTAMP_ERROR:
         offset = tm - time.time()
         for midx in range(len(records)):
             tm2 = sensor_packet.read_packet_timestamp(records[midx])
             if tm2:
                 records[midx] = sensor_packet.set_packet_timestamp(records[midx],tm2 - offset);                            
                 
         client.desynched = True
     else:
         if client.desynched:
             print "Client at %s synchronized"%uid
         client.desynched = False
 
 for m in records:
     if sensor_packet.read_packet_type(m) == sensor_packet.MT_DEVICE_IDENTIFIER:
         r = sensor_packet.read_packet(m)
         uid = r[3]
         
 print "%d records from %s"%(len(records),uid)
 
 for m in records:
    else:
        reconnect()
        
    return retval
       

reconnect(True);       
while True:
    # process connection to relay server
    if xbee_relay_IF.connected():
        msgs = xbee_relay_IF.tick()
    else:
        xbee_relay_IF.reconnect();
        if xbee_relay_IF.connected():
            xbee_relay_IF.register_as_relay();
        
    # process connection w/ remotes
    msgs = tick()
    for addr,chunk in msgs:
        #print "<",addr,utils.hexify(chunk)
        chunk = sensor_packet.set_packet_timestamp(chunk,time.time())
        
        if xbee_relay_IF.connected():
            xbee_relay_IF.publish(addr,chunk)
                        

    time.sleep(0.01);