Source: ../../rtrmgr/slave_conf_tree.hh

 Annotated List  Files  Globals  Hierarchy  Index  Top
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-

// Copyright (c) 2001-2009 XORP, Inc.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License, Version 2, June
// 1991 as published by the Free Software Foundation. Redistribution
// and/or modification of this program under the terms of any other
// version of the GNU General Public License is not permitted.
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// see the GNU General Public License, Version 2, a copy of which can be
// found in the XORP LICENSE.gpl file.
// XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;

// $XORP: xorp/rtrmgr/slave_conf_tree.hh,v 1.32 2009/01/05 18:31:10 jtc Exp $


#include <map>
#include <list>
#include <set>

#include "conf_tree.hh"
#include "slave_conf_tree_node.hh"
#include "slave_module_manager.hh"
#include "rtrmgr_error.hh"
#include "xorp_client.hh"
#include "xorpsh_base.hh"
#include "xorpsh_main.hh"

class CommandTree;
class ConfTemplate;
class RouterCLI;

 * @short A class for storing information regarding the current phase of
 * commit operations.
class CommitStatus {
    enum Phase {

     * Default constructor.
    CommitStatus() {

     * Reset the commit status.
    void reset() {
	_success = true;
	_error_msg = "";
	_commit_phase = COMMIT_PHASE_NONE;

     * Test if the current phase has been successful.
     * @return true if the current phase has been successful, otherwise false.
    bool success() const { return _success; }

     * Get a string with the current error message.
     * @return a string with the current error message.
    const string& error_msg() const { return _error_msg; }

     * Set the commit status as being in error.
     * @param error_msg the message that describes the error.
    void set_error(const string& error_msg) {
        _success = false;
        _error_msg = error_msg;

     * Get the current commit phase.
     * @return the current commit phase.
    CommitStatus::Phase commit_phase() const { return _commit_phase; }

     * Set the current commit phase.
     * @param commit_phase the new value of the current commit phase.
    void set_commit_phase(CommitStatus::Phase commit_phase) {
	_commit_phase = commit_phase;

    bool	_success;	// True if current commit phase is successful
    string	_error_msg;	// The error message (if error)
    Phase	_commit_phase;	// The current commit phase

class SlaveConfigTree : public ConfigTree {
    typedef XorpCallback2<void, bool, string>::RefPtr CallBack;
    SlaveConfigTree(XorpClient& xclient, bool verbose);
    SlaveConfigTree(const string& configuration, TemplateTree *tt,
		    XorpClient& xclient, uint32_t clientid, 
		    bool verbose) throw (InitError);
    virtual ConfigTreeNode* create_node(const string& segment, 
					const string& path,
					const TemplateTreeNode* ttn, 
					ConfigTreeNode* parent_node, 
					const ConfigNodeId& node_id,
					uid_t user_id, bool verbose);
    virtual ConfigTree* create_tree(TemplateTree *tt, bool verbose);

    bool parse(const string& configuration, const string& config_file,
	       string& errmsg);
    bool commit_changes(string& response, XorpShellBase& xorpsh, CallBack cb);
    void commit_phase2(const XrlError& e, const bool* locked,
		       const uint32_t* lock_holder, CallBack cb,
		       XorpShellBase* xorpsh);
    void commit_phase3(const XrlError& e, CallBack cb, XorpShellBase* xorpsh);
    void commit_phase4(bool success, const string& errmsg, CallBack cb,
		       XorpShellBase* xorpsh);
    void commit_phase5(const XrlError& e, bool success, CallBack cb,
		       XorpShellBase* xorpsh);
    void save_phase4(bool success, const string& errmsg, CallBack cb,
		     XorpShellBase* xorpsh);
    void save_phase5(const XrlError& e, bool success, CallBack cb,
		     XorpShellBase* xorpsh);
    string discard_changes();
    string mark_subtree_for_deletion(const list<string>& path_segments, 
				     uid_t user_id);

    bool get_deltas(const SlaveConfigTree& main_tree);
    bool get_deletions(const SlaveConfigTree& main_tree);

    virtual ConfigTreeNode& root_node() { return _root_node; }
    virtual const ConfigTreeNode& const_root_node() const {
	return _root_node;

    SlaveConfigTreeNode& slave_root_node() { return _root_node; }
    const SlaveConfigTreeNode& const_slave_root_node() const {
	return _root_node;
    SlaveConfigTreeNode* find_node(const list<string>& path) {
	return reinterpret_cast<SlaveConfigTreeNode*>(ConfigTree::find_node(path));

    const CommitStatus& commit_status() const { return _commit_status; }

    void reset_commit_status() { _commit_status.reset(); }

    SlaveConfigTreeNode	_root_node;
    XorpClient&		_xclient;

    XorpShellBase::LOCK_CALLBACK _stage2_cb;

    string		_commit_errmsg;
    string		_save_errmsg;
    uint32_t		_clientid;
    bool		_verbose;	// Set to true if output is verbose

    CommitStatus	_commit_status;


Generated by: pavlin on on Wed Jan 7 19:11:12 2009, using kdoc 2.0a54+XORP.