private void handleFindValueRequest(RPCMessage received)
	{
		try
		{
			FindValueRequest reqRPC = (FindValueRequest)received.getRPC();
			NodeId key = reqRPC.getLookupId();
			String type = reqRPC.getType();
			String ownerId = reqRPC.getOwner();
			boolean recent = reqRPC.getRecent();
			boolean countersOnly = reqRPC.getCountersOnly();
			
			Collection<Contact> contacts = null;
			Collection<StorageEntry> entries = null;
			HashMap<String, Integer> counters = null;

			if (countersOnly)
			{
				counters = node.getStorage().getCount(key, type, ownerId, recent);
			}
			else
			{
				entries = node.getStorage().getLimited(key, type, ownerId, recent);
			}
			
			if (entries == null && counters == null)
			{
				contacts = node.getRouteTable().select(key, Integer.parseInt(PropFinder.get(Settings.K)));
			}
			
			RPCMessageFactory messageFactory = node.getMessageFactory();
			NodeId addressee = received.getAuthNodeId().getContent().getNodeId();
			byte[] nonce = receivedNonce.getNonce();
			RPCMessage response = messageFactory.createFindValueResponse(addressee, sid, nonce, contacts, entries, counters);
			try
			{
				byte[] payload = serialize(response);
				DatagramPacket packet = new DatagramPacket(payload,payload.length,client);
				//System.out.println(node + " - SEND RESPONSE: \n"+ response);
				//System.out.println("----------------------------------------------");
				//System.out.println(node.getUserId() + " sending FV RPC message response : sid " + sid);
				
				node.getMessageDispatcher().send(packet);
			}
			catch (IOException ioe)
			{
				System.err.println(node.getNodeId()+" I/O ERROR in ServerSessionManager");
				ioe.printStackTrace();
				//gestisci eccezione
			}
		}
		catch(Exception e)
		{
			System.err.println(node +" CRITICAL ERROR in ServerSessionManager");
			e.printStackTrace();
		}
	}