001package org.consensusj.namecoin.jsonrpc;
002
003import org.bitcoinj.base.Network;
004import org.bitcoinj.utils.AppDataDirectory;
005import org.consensusj.bitcoin.jsonrpc.BitcoinClient;
006import org.consensusj.jsonrpc.JsonRpcStatusException;
007import org.consensusj.bitcoin.jsonrpc.RpcConfig;
008import org.consensusj.bitcoin.jsonrpc.bitcoind.BitcoinConfFile;
009import org.consensusj.namecoin.jsonrpc.core.NMCMainNetParams;
010import org.consensusj.namecoin.jsonrpc.core.NameCoinNetwork;
011import org.consensusj.namecoin.jsonrpc.pojo.NameData;
012
013import java.io.File;
014import java.io.IOException;
015import java.net.URI;
016
017/**
018 * Namecoin RPC client
019 * See: https://wiki.namecoin.org/index.php?title=Client_API
020 */
021public class NamecoinClient extends BitcoinClient {
022    public NamecoinClient(Network network, URI server, String rpcuser, String rpcpassword) {
023        super(network, server, rpcuser, rpcpassword);
024    }
025
026    public NamecoinClient(RpcConfig config) {
027        this(config.network(), config.getURI(), config.getUsername(), config.getPassword());
028    }
029
030    /**
031     * name_show
032     *
033     * @param identifier namespace/name, e.g. 'd/beelin'
034     * @return Data object
035     * @throws IOException
036     * @throws JsonRpcStatusException
037     */
038    public NameData nameShow(String identifier) throws IOException, JsonRpcStatusException {
039        return send("name_show", NameData.class, identifier);
040    }
041
042    /**
043     * Read Namecoin conf file. Namecoin conf file uses same format as bitcoin.conf
044     * @return object containing RPC endpoint information
045     */
046    public static RpcConfig readConfig() {
047        File file = AppDataDirectory.getPath("Namecoin").resolve("namecoin.conf").toFile();
048        BitcoinConfFile conf = new BitcoinConfFile(file);
049        RpcConfig config = conf.readWithFallback().getRPCConfig();
050        // Since config is immutable we have to make a new one with NameCoin parameters
051        config = new RpcConfig(NameCoinNetwork.MAINNET,
052                config.getURI(),
053                config.getUsername(),
054                config.getPassword());
055        return config;
056    }
057
058}