//
// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
// YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
// All rights reserved.
// 
// Redistribution and use of this software in source and binary forms, with 
// or without modification, are permitted provided that the following 
// conditions and disclaimer are agreed and accepted by the user:
// 
// 1. Redistributions of source code must retain the above copyright 
// notice, this list of conditions and the following disclaimer.
// 
// 2. Redistributions in binary form must reproduce the above copyright 
// notice, this list of conditions and the following disclaimer in the 
// documentation and/or other materials provided with the distribution.
// 
// 3. Neither the names of the copyrighters, the name of the project which 
// is related to this software (hereinafter referred to as "project") nor 
// the names of the contributors may be used to endorse or promote products 
// derived from this software without specific prior written permission.
// 
// 4. No merchantable use may be permitted without prior written 
// notification to the copyrighters. However, using this software for the 
// purpose of testing or evaluating any products including merchantable 
// products may be permitted without any notification to the copyrighters.
// 
// 
// 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
// CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
// BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
// FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
// COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
// CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
// THE POSSIBILITY OF SUCH DAMAGE.
//
// $TAHI: v6eval/lib/Pz/McVRRP.h,v 1.2 2004/09/22 08:54:13 akisada Exp $
//

#ifndef __McVRRP_h__
#define __McVRRP_h__

#include "McSub.h"
#include "MmHeader.h"
#include "MmObject.h"
#include "PControl.h"
#include "ItPosition.h"

class McUpp_VRRP_ONE: public McUpper {
	private:
		static McUpp_VRRP_ONE *instance_;
		McUpp_VRRP_ONE(CSTR);
	public:
		virtual ~McUpp_VRRP_ONE();
		static McUpp_VRRP_ONE *instance();
		int32_t headerType() const { return(TP_Upp_VRRP); }
		bool containsMc(const MObject *mc) const;
		virtual uint32_t length_for_reverse(RControl &,
			ItPosition &, OCTBUF &) const;
		virtual RObject *reverse(RControl &,
			RObject *, ItPosition &, OCTBUF &) const;
};

class McUpp_VRRP: public McHeader {
	protected:
		MmUint *version_;
		void common_member();
		McUpp_VRRP(CSTR);

		void version_member(MmUint *meta) {
			version_ = meta; member(meta); }

	public:
		virtual ~McUpp_VRRP();
		int32_t headerType() const { return(TP_Upp_VRRP); }
		virtual uint32_t length_for_reverse(RControl &,
			ItPosition &, OCTBUF &) const;
		bool overwrite_DictType(RControl &,
			ItPosition &, OCTBUF &) const;
		virtual int32_t token() const;
		virtual RObject *reverse(RControl &,
			RObject *, ItPosition &, OCTBUF &) const;
		virtual bool generate(WControl &, WObject *, OCTBUF &) const;
};

class McUpp_VRRPvX: public McUpp_VRRP {
	protected:
		McUpp_VRRPvX(CSTR);

	public:
		virtual ~McUpp_VRRPvX();
		static McUpp_VRRPvX *create(CSTR);
};

class McUpp_VRRPv2: public McUpp_VRRP {
	protected:
		McUpp_VRRPv2(CSTR);

	public:
		virtual ~McUpp_VRRPv2();
		static McUpp_VRRPv2 *create(CSTR);
                int32_t vrrpVersion() const { return(2); }
		DEC_HC_MLC(Address);
};

class McUpp_VRRPv3: public McUpp_VRRP {
	protected:
		McUpp_VRRPv3(CSTR);

	public:
		virtual ~McUpp_VRRPv3();
		static McUpp_VRRPv3 *create(CSTR);
                int32_t vrrpVersion() const { return(3); }
		DEC_HC_MLC(Address);
};

class MmHeader_onVRRP: public MmReference_Must1 {
	static TypevsMcDict dict_;

	public:
		MmHeader_onVRRP(CSTR);
		virtual ~MmHeader_onVRRP();

		int32_t token() const { return(metaToken(tkn_header_ref_)); }
		const TypevsMcDict *get_dict() const { return(&dict_); }
		static void add(McUpp_VRRP *mc);
		static void add_other(McUpp_VRRP *mc);
		bool overwrite_DictType(RControl &,
			ItPosition &, OCTBUF &) const;
};
#endif	// __McVRRP_h__


syntax highlighted by Code2HTML, v. 0.9.1