示例#1
0
文件: oricmd.cpp 项目: ailidani/dfs
string OriCommand::cmd_remote(strstream &str)
{
    FUSE_PLOG("Command: remote");

    string subcmd;
    strwstream resp;
    LocalRepo *repo = priv->getRepo();

    // Parse Command
    str.readPStr(subcmd);

    RWKey::sp lock = priv->nsLock.writeLock();
    if (subcmd == "list") {
        map<string, Peer> peers = repo->getPeers();
        map<string, Peer>::iterator it;
        strwstream resp;

        // System variables
        resp.writeUInt32(peers.size());
        for (it = peers.begin(); it != peers.end(); it++) {
            resp.writeLPStr(it->first);
            resp.writeLPStr(it->second.getBlob());
        }

        return resp.str();
    }
    if (subcmd == "add") {
        string name, url;
        strwstream resp;

        str.readLPStr(name);
        str.readLPStr(url);

        repo->addPeer(name, url);

        resp.writeLPStr("");
        return resp.str();
    }
    if (subcmd == "del") {
        string name;
        strwstream resp;

        str.readLPStr(name);

        repo->removePeer(name);

        resp.writeLPStr("");
        return resp.str();
    }

    return "Unknown remote subcommand";
}