Okay. So we have an active domain bit.bit (I am not the owner). It has some history:
[pentarh@pentbook src]$ ./namecoind name_history d/bit
[
{
"name" : "d/bit",
"value" : "support@kiellimited.com",
"txid" : "c584be36a35b152c87c356b9efe4499d5e6e00bc26fed5d3324ce1582fa5cc9a",
"address" : "N4u9f2h52Ft44Qe5bfo91xxMNLn1VC82au",
"expires_in" : -27256,
"expired" : 1
},
{
"name" : "d/bit",
"value" : "Krecovery",
"txid" : "f7331a599cf4e59dbe30172822889ea87057ee75f1a3a48dcafe0621be10b4dc",
"address" : "NG8iqBEqX85odxxjJCcFqyAGfVzF38TobT",
"expires_in" : -26589,
"expired" : 1
},
{
"name" : "d/bit",
"value" : "{\"map\": {\"\": \"78.47.86.43\", \"www\": \"78.47.86.43\"}}",
"txid" : "988e3a9805fc60f1fbe30fbdb061a79bd6e73f5cbff039dbdd4cde1925cef855",
"address" : "N32tEoKFnrtsbKBredM56BjxD4KmGtTdfH",
"expires_in" : -17393,
"expired" : 1
},
{
"name" : "d/bit",
"value" : "{\"ip\": \"78.47.86.43\", \"email\": \"gtempns1@san.gs\", \"info\": { \"status\": \"For sale.\" }, \"map\": {\"\": \"78.47.86.43\", \"www\": \"78.47.86.43\"}}",
"txid" : "bb12684745370c4d785a640fdb1d2dfbe1f6a0ef41ff55f5b18b9c1f331ce614",
"address" : "MzMm4F3mRA9hMpa7ABN9nZCZAq3JWd4UWA",
"expires_in" : 11258
},
{
"name" : "d/bit",
"value" : "{\"ip\": \"78.47.86.43\", \"email\": \"gtempns1@san.gs\", \"info\": { \"status\": \"For sale.\" }, \"map\": {\"\": \"78.47.86.43\", \"www\": \"78.47.86.43\"}}",
"txid" : "9b091fbb236b59de79f926c32b77b0348e34db5c6de3fe69dc2edd252e757d61",
"address" : "N4yKKfvMjF9NX4PNzPguiPbegMmzjhiLJ1",
"expires_in" : 22440
}
]
The only two last records are valid, all others expired.
Native namecoind has no methods for suppressing such expired records. So I make a small patch, which is implementing direct name resolution in namecoind
Method: name_resolve
Args: <name>
Example:
[pentarh@pentbook src]$ ./namecoind name_resolve d/bit
[
{
"name" : "d/bit",
"value" : "{\"ip\": \"78.47.86.43\", \"email\": \"gtempns1@san.gs\", \"info\": { \"status\": \"For sale.\" }, \"map\": {\"\": \"78.47.86.43\", \"www\": \"78.47.86.43\"}}",
"txid" : "bb12684745370c4d785a640fdb1d2dfbe1f6a0ef41ff55f5b18b9c1f331ce614",
"address" : "MzMm4F3mRA9hMpa7ABN9nZCZAq3JWd4UWA",
"expires_in" : 11258
},
{
"name" : "d/bit",
"value" : "{\"ip\": \"78.47.86.43\", \"email\": \"gtempns1@san.gs\", \"info\": { \"status\": \"For sale.\" }, \"map\": {\"\": \"78.47.86.43\", \"www\": \"78.47.86.43\"}}",
"txid" : "9b091fbb236b59de79f926c32b77b0348e34db5c6de3fe69dc2edd252e757d61",
"address" : "N4yKKfvMjF9NX4PNzPguiPbegMmzjhiLJ1",
"expires_in" : 22440
}
]
Actually I dont know what to do with two active records

Is the only last valid, or both (split brain)? Current patch is:
--- namecoin.cpp.old 2012-01-25 04:34:52.000000000 +0200
+++ namecoin.cpp.new 2012-01-25 02:01:06.000000000 +0200
@@ -677,6 +677,61 @@
return oRes;
}
+
+Value name_resolve(const Array& params, bool fHelp)
+{
+ if (fHelp || params.size() < 1)
+ throw runtime_error(
+ "name_resolve <name>\n"
+ "Return an active name record.\n");
+
+ Array oRes;
+ vector<unsigned char> vchName = vchFromValue(params[0]);
+ string name = stringFromVch(vchName);
+ CRITICAL_BLOCK(cs_main)
+ {
+ vector<CDiskTxPos> vtxPos;
+ CNameDB dbName("r");
+ if (!dbName.ReadName(vchName, vtxPos))
+ throw JSONRPCError(-4, "failed to read from name DB");
+
+ CDiskTxPos txPos;
+ BOOST_FOREACH(txPos, vtxPos)
+ {
+ CTransaction tx;
+ if (!tx.ReadFromDisk(txPos))
+ {
+ error("could not read txpos %s", txPos.ToString().c_str());
+ continue;
+ }
+
+ Object oName;
+ vector<unsigned char> vchValue;
+ int nHeight;
+ uint256 hash;
+ if (!txPos.IsNull() && GetValueOfTxPos(txPos, vchValue, hash, nHeight))
+ {
+ if(nHeight + GetDisplayExpirationDepth(nHeight) - pindexBest->nHeight <= 0)
+ {
+ / Not returning expired record
+ continue;
+ }
+ oName.push_back(Pair("name", name));
+ string value = stringFromVch(vchValue);
+ oName.push_back(Pair("value", value));
+ oName.push_back(Pair("txid", tx.GetHash().GetHex()));
+ string strAddress = "";
+ GetNameAddress(txPos, strAddress);
+ oName.push_back(Pair("address", strAddress));
+ oName.push_back(Pair("expires_in", nHeight + GetDisplayExpirationDepth(nHeight) - pindexBest->nHeight));
+ oRes.push_back(oName);
+ }
+ }
+ }
+ return oRes;
+}
+
+
Value name_scan(const Array& params, bool fHelp)
{
if (fHelp || params.size() > 2)
@@ -1197,6 +1252,7 @@
mapCallTable.insert(make_pair("name_list", &name_list));
mapCallTable.insert(make_pair("name_scan", &name_scan));
mapCallTable.insert(make_pair("name_history", &name_history));
+ mapCallTable.insert(make_pair("name_resolve", &name_resolve));
mapCallTable.insert(make_pair("name_debug", &name_debug));
mapCallTable.insert(make_pair("name_debug1", &name_debug1));
mapCallTable.insert(make_pair("name_clean", &name_clean));
And I'm in the way to resolve in java this mess into i2p network address

[pentarh@pentbook src]$ ./namecoind name_resolve d/pent
[
{
"name" : "d/pent",
"value" : "{ \"ip\" : \"192.168.1.1\", \"ip6\" : \"2001:4860:0:1001::68\", \"i2p\": { \"destination\": \"s2bzxafMCmDEujaZF44c558MBqYKC95YvoTqNaqMVGIoV68BUlCQu4Z6pjmuxSptHWo38LPx55nEqLLaKFljX7yr30o-iRBwsIev5M1HeX62YVJYxTP5acUxTKaG15dLwKLXRsqeHES8g21vwbz9LsHYsDR9IOYaJFnsBIOfLK4H5GYgcdogazZcuSvVrvX7jdpleGI7g6I81vzuGD0X0NZ~tpj~gypQsomwIZUYknTiaZ37X9TV7DpRbeYkevX7qnSX3odnk007Lhgrt2vN07-DpUHQLmTgr-GbYUVT0Xq-PB5Q2Oi5Rfl1MKQGQ7WXQyVW7MwmQpwgFMMqzQM8SDHqpqrxpsv3VHZ~GIkcKU4rlPazOzxan6PLmvaPigtbKJ0MCHUwD~zHAU~26DuSkRLvquCtxKqfOWE5z8JyaN~zxHivj7X8J7YpibXJdD53RcQ7ozsz9bvOTi0kQItuLR9ROlrxEfReUmWr0VKaCgmV4OvLfyi8~034nj7NAdKeAAAA\", \"name\" : \"example.i2p\", \"b32\" : \"b4szsgxsqgzqg76y3gcxolir54pwjokjjkbane645myukzqrbyoq.b32.i2p\" }, \"map\" : { \"www\": { \"ip\" : \"192.168.1.2\", \"ip6\" : \"2001:4860:0:1001::69\", \"i2p\": { \"name\" : \"example.i2p\", \"b32\" : \"b4szsgxsqgzqg76y3gcxolir54pwjokjjkbane645myukzqrbyoq.b32.i2p\" } } } }",
"txid" : "f4d4b0849517767b2ef820a513902ee8dde87bd4794a2599198ed4f0b68a36f0",
"address" : "N7t7sLxHzA7tiXYMExKtBgb4jGX12cHiYN",
"expires_in" : 36000
}
]