/*
*
* 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/McMobility.h,v 1.12 2005/05/09 09:35:24 akisada Exp $
*
*/
#if !defined(__McMobility_h__)
#define __McMobility_h__ 1
#include "McSub.h"
#include "MmHeader.h"
#include "McIPv6.h"
#include "WObject.h"
#include "PvObject.h"
#include "MvFunction.h"
#include "PcObject.h"
//MH Type
const int32_t TP_Ext_MH_BRR = 0;
const int32_t TP_Ext_MH_HoTI = 1;
const int32_t TP_Ext_MH_CoTI = 2;
const int32_t TP_Ext_MH_HoT = 3;
const int32_t TP_Ext_MH_CoT = 4;
const int32_t TP_Ext_MH_BU = 5;
const int32_t TP_Ext_MH_BA = 6;
const int32_t TP_Ext_MH_BE = 7;
//Option Type (MH)
const int32_t TP_Opt_MH_Pad1 = 0;
const int32_t TP_Opt_MH_PadN = 1;
const int32_t TP_Opt_MH_BindingRefreshAdvice = 2;
const int32_t TP_Opt_MH_AlternateCoA = 3;
const int32_t TP_Opt_MH_NonceIndices = 4;
const int32_t TP_Opt_MH_BindingAuthData = 5;
#ifndef TBD_OPT_MH_MOB_NETWORK_PREF
#define TBD_OPT_MH_MOB_NETWORK_PREF 6
#endif // TBD_OPT_MH_MOB_NETWORK_PREF
const int32_t TP_Opt_MH_MobNetworkPrefix = TBD_OPT_MH_MOB_NETWORK_PREF;
#undef TBD_OPT_MH_MOB_NETWORK_PREF
class LengthCtrl {
uint32_t real_length;
public:
LengthCtrl(): real_length(0) {};
virtual ~LengthCtrl() {};
void set_real_length(uint32_t);
const uint32_t get_real_length() const;
};
inline void LengthCtrl::set_real_length(uint32_t len) {real_length = len; return;}
inline const uint32_t LengthCtrl::get_real_length() const {return(real_length);}
////////////////////////////////////////////////////////////////
class RmBAstatus: public RmObject {
public:
RmBAstatus(RObject *, const MObject *, const ItPosition &, const ItPosition &, PvObject * = 0);
virtual ~RmBAstatus();
virtual void printName(uint32_t, CSTR = 0) const;
virtual void logSelf(uint32_t, CSTR = 0) const;
void printBAstatus(uint32_t) const;
};
////////////////////////////////////////////////////////////////
class MmBAstatus: public MmUint {
public:
MmBAstatus(CSTR, uint16_t, const PObject * = 0, const PObject * = 0, const ICVoverwriter * = 0, METH_HC_ForIPinfo = 0);
virtual ~MmBAstatus();
virtual RObject *reverseRm(RControl &, RObject *, const ItPosition &, const ItPosition &, PvObject *) const;
};
////////////////////////////////////////////////////////////////
class RmBEstatus: public RmObject {
public:
RmBEstatus(RObject *, const MObject *, const ItPosition &, const ItPosition &, PvObject * = 0);
virtual ~RmBEstatus();
virtual void printName(uint32_t, CSTR = 0) const;
virtual void logSelf(uint32_t, CSTR = 0) const;
void printBEstatus(uint32_t) const;
};
////////////////////////////////////////////////////////////////
class MmBEstatus: public MmUint {
public:
MmBEstatus(CSTR, uint16_t, const PObject * = 0, const PObject * = 0, const ICVoverwriter * = 0, METH_HC_ForIPinfo = 0);
virtual ~MmBEstatus();
virtual RObject *reverseRm(RControl &, RObject *, const ItPosition &, const ItPosition &, PvObject *) const;
};
//
// Mobility Header
//
////////////////////////////////////////////////////////////////////////////////
class McHdr_Ext_MH_ONE: public McHdr_Ext {
private:
static McHdr_Ext_MH_ONE *instance_;
McHdr_Ext_MH_ONE(CSTR);
public:
static McHdr_Ext_MH_ONE *instance();
virtual ~McHdr_Ext_MH_ONE();
int32_t headerType() const {
return(TP_Ext_MH);
}
bool containsMc(const MObject *) const;
virtual RObject *reverse(RControl &, RObject *, ItPosition &, OCTBUF &) const;
};
class McHdr_Ext_MH: public McHdr_Ext {
protected:
MmUint *length_;
MmUint *type_;
LengthCtrl *LengthCtrl_;
void length_member(MmUint *meta) {
length_ = meta;
member(meta);
}
void type_member(MmUint *meta) {
type_ = meta;
member(meta);
}
void common_member();
void set_LengthCtrl(uint32_t len) const {
if(LengthCtrl_) {
LengthCtrl_->set_real_length(len);
}
}
const uint32_t get_LengthCtrl() const {
if(LengthCtrl_) {
return(LengthCtrl_->get_real_length());
}
return(0);
}
McHdr_Ext_MH(CSTR);
public:
virtual ~McHdr_Ext_MH();
int32_t headerType() const {
return(TP_Ext_MH);
}
// COMPOSE/REVERSE INTERFACE --------------------------------------------------
virtual uint32_t length_for_reverse(RControl &, ItPosition &, OCTBUF &) const;
DEC_HCGENE(HeaderExtLength);
DEC_HCGENE(Type);
DEC_HCEVAL(Type);
int32_t get_mobilityType(WObject *) const;
bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
virtual RObject *reverse(RControl &, RObject *, ItPosition &, OCTBUF &) const;
virtual bool generate(WControl &, WObject *, OCTBUF &) const;
};
class McHdr_Ext_MH_ANY: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_ANY(CSTR);
virtual ~McHdr_Ext_MH_ANY();
static McHdr_Ext_MH_ANY *create(CSTR);
};
class McHdr_Ext_MH_BRR: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_BRR(CSTR);
virtual ~McHdr_Ext_MH_BRR();
static McHdr_Ext_MH_BRR *create(CSTR);
int32_t mobilityType() const {
return(TP_Ext_MH_BRR);
}
};
class McHdr_Ext_MH_HoTI: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_HoTI(CSTR);
virtual ~McHdr_Ext_MH_HoTI();
static McHdr_Ext_MH_HoTI *create(CSTR);
int32_t mobilityType() const {
return(TP_Ext_MH_HoTI);
}
};
class McHdr_Ext_MH_CoTI: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_CoTI(CSTR);
virtual ~McHdr_Ext_MH_CoTI();
static McHdr_Ext_MH_CoTI *create(CSTR);
int32_t mobilityType() const {
return(TP_Ext_MH_CoTI);
}
};
class McHdr_Ext_MH_HoT: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_HoT(CSTR);
virtual ~McHdr_Ext_MH_HoT();
static McHdr_Ext_MH_HoT *create(CSTR);
int32_t mobilityType() const {
return(TP_Ext_MH_HoT);
}
};
class McHdr_Ext_MH_CoT: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_CoT(CSTR);
virtual ~McHdr_Ext_MH_CoT();
static McHdr_Ext_MH_CoT *create(CSTR);
int32_t mobilityType() const {
return(TP_Ext_MH_CoT);
}
};
class McHdr_Ext_MH_BU: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_BU(CSTR);
virtual ~McHdr_Ext_MH_BU();
static McHdr_Ext_MH_BU *create(CSTR);
int32_t mobilityType() const {
return(TP_Ext_MH_BU);
}
};
class McHdr_Ext_MH_BA: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_BA(CSTR);
virtual ~McHdr_Ext_MH_BA();
static McHdr_Ext_MH_BA *create(CSTR);
int32_t mobilityType() const {
return(TP_Ext_MH_BA);
}
};
class McHdr_Ext_MH_BE: public McHdr_Ext_MH {
public:
McHdr_Ext_MH_BE(CSTR);
virtual ~McHdr_Ext_MH_BE();
static McHdr_Ext_MH_BE *create(CSTR);
int32_t mobilityType() const {
return(TP_Ext_MH_BE);
}
};
//
// header = xx (reference header on the McHdr_Ext_MH_ONE)
//
////////////////////////////////////////////////////////////////////////////////
class MmHeader_onMH: public MmReference_Must1 {
static TypevsMcDict dict_; // mibilytyType(MH) vs McHdr_Ext_MH
public:
MmHeader_onMH(CSTR);
virtual ~MmHeader_onMH();
int32_t token() const {
return(metaToken(tkn_extent_ref_));
}
const TypevsMcDict *get_dict() const {
return(&dict_);
}
static void add(McHdr_Ext_MH *);
static void add_other(McHdr_Ext_MH *);
// COMPOSE/REVERSE INTERFACE --------------------------------------------------
bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
//
// Option for MH
//
////////////////////////////////////////////////////////////////////////////////
//
// abstruct class
//
////////////////////////////////////////////////////////////////////////////////
class McOpt_MH: public McOption {
protected:
MmUint *type_;
void type_member(MmUint *meta) {
type_ = meta;
member(meta);
}
MmUint *length_;
void length_member(MmUint *meta) {
length_ = meta;
member(meta);
}
void common_member();
McOpt_MH(CSTR);
public:
virtual ~McOpt_MH();
// COMPOSE/REVERSE INTERFACE --------------------------------------------------
virtual uint32_t length_for_reverse(RControl &, ItPosition &, OCTBUF &) const;
bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
//HardCording action method
DEC_HCGENE(Length);
DEC_HCGENE(Type);
DEC_HCEVAL(Type);
int32_t get_mobilityOptionType(WObject *) const;
};
//
// any optionType Format (for unknown option type)
//
////////////////////////////////////////////////////////////////////////////////
class McOpt_MH_ANY: public McOpt_MH {
public:
McOpt_MH_ANY(CSTR);
virtual ~McOpt_MH_ANY();
static McOpt_MH_ANY *create(CSTR);
};
class McOpt_MH_Pad1: public McOpt_MH {
public:
McOpt_MH_Pad1(CSTR);
virtual ~McOpt_MH_Pad1();
static McOpt_MH_Pad1 *create(CSTR);
int32_t optionType() const {
return(TP_Opt_MH_Pad1);
}
};
class McOpt_MH_PadN: public McOpt_MH {
McOpt_MH_PadN(CSTR);
public:
virtual ~McOpt_MH_PadN();
static McOpt_MH_PadN *create(CSTR);
int32_t optionType() const {
return(TP_Opt_MH_PadN);
}
};
class McOpt_MH_AlternateCoA: public McOpt_MH {
public:
McOpt_MH_AlternateCoA(CSTR);
virtual ~McOpt_MH_AlternateCoA();
static McOpt_MH_AlternateCoA *create(CSTR);
int32_t optionType() const {
return(TP_Opt_MH_AlternateCoA);
}
};
class McOpt_MH_NonceIndices: public McOpt_MH {
public:
McOpt_MH_NonceIndices(CSTR);
virtual ~McOpt_MH_NonceIndices();
static McOpt_MH_NonceIndices *create(CSTR);
int32_t optionType() const {
return(TP_Opt_MH_NonceIndices);
}
};
class McOpt_MH_BindingAuthData: public McOpt_MH {
public:
McOpt_MH_BindingAuthData(CSTR);
virtual ~McOpt_MH_BindingAuthData();
static McOpt_MH_BindingAuthData *create(CSTR);
virtual PObject *tokenObject(int, CSTR) const;
int32_t optionType() const {
return(TP_Opt_MH_BindingAuthData);
}
};
class McOpt_MH_BindingRefreshAdvice: public McOpt_MH {
public:
McOpt_MH_BindingRefreshAdvice(CSTR);
virtual ~McOpt_MH_BindingRefreshAdvice();
static McOpt_MH_BindingRefreshAdvice *create(CSTR);
int32_t optionType() const {
return(TP_Opt_MH_BindingRefreshAdvice);
}
};
class McOpt_MH_MobNetworkPrefix: public McOpt_MH {
public:
McOpt_MH_MobNetworkPrefix(CSTR);
virtual ~McOpt_MH_MobNetworkPrefix();
static McOpt_MH_MobNetworkPrefix *create(CSTR);
int32_t optionType() const {
return(TP_Opt_MH_MobNetworkPrefix);
}
};
//
// option = xx (reference option(MH) on the McHdr_Ext_MH_XX)
//
////////////////////////////////////////////////////////////////////////////////
class MmOption_onMH: public MmReference_More0 {
static TypevsMcDict dict_; // optionType(MH) vs McOpt_MH_XX
public:
MmOption_onMH(CSTR);
virtual ~MmOption_onMH();
int32_t token() const {
return(metaToken(tkn_option_ref_));
}
const TypevsMcDict *get_dict() const {
return(&dict_);
}
static void add(McOpt_MH *);
static void add_other(McOpt_MH *);
// COMPOSE/REVERSE INTERFACE --------------------------------------------------
bool overwrite_DictType(RControl &, ItPosition &, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////////////////////
class MmMH_Cookie64: public MmOctets {
public:
MmMH_Cookie64(CSTR);
virtual ~MmMH_Cookie64();
// COMPOSE/REVERSE PROTECTED MmUint -------------------------------------------
virtual PvObject *reversePv(RControl &, const ItPosition &, const ItPosition &, const OCTBUF &) const;
};
////////////////////////////////////////////////////////////////////////////////
class PaBSA;
class BSAList;
class KeepBSA {
private:
// const PaBSA *bsa_;
BSAList *bsa_;
uint32_t current_;
public:
KeepBSA();
virtual ~KeepBSA();
const PaBSA *GetBSA(void);
void SetBSA(const PaBSA *);
};
////////////////////////////////////////////////////////////////////////////////
class MmMH_Auth: public MmOctets {
private:
KeepBSA *keepbsa_;
public:
MmMH_Auth(CSTR);
virtual ~MmMH_Auth();
// COMPOSE/REVERSE PROTECTED MmUint -------------------------------------------
virtual PvObject *reversePv(RControl &, const ItPosition &, const ItPosition &, const OCTBUF &) const;
virtual RObject *reverseRm(RControl &, RObject *, const ItPosition &, const ItPosition &, PvObject *) const;
virtual WObject *composeWm(WControl &, WObject *, const PObject *) const;
virtual RObject *reverse(RControl &, RObject *, ItPosition &, OCTBUF &) const;
virtual bool generate(WControl &, WObject *, OCTBUF &) const;
};
////////////////////////////////////////////////////////////////////////////////
class PfBSA: public PvFunction {
private:
const MfBSA *meta_;
OCTSTR context_;
public:
PfBSA(const MfBSA *, CSTR, int);
virtual ~PfBSA();
const MfBSA *metaClass() const;
virtual const MObject *meta() const;
void init();
void update(const OCTBUF &);
PvOctets *result();
};
inline const MfBSA *PfBSA::metaClass() const {
return(meta_);
}
////////////////////////////////////////////////////////////////////////////////
class PaBSA: public PcObject {
private:
PfBSA *bsa_;
public:
PaBSA(const MObject*, CSTR, int);
virtual ~PaBSA();
//----------------------------------------------------------------------
// YAC INTERFACE
virtual PObject *bsa_member(PObject *);
virtual OCTBUF *BSA_Calculate(const OCTBUF &) const;
virtual WObject *selfCompose(WControl &, WObject *) const;
};
////////////////////////////////////////////////////////////////////////////////
class RmBSA: public RmObject {
const PaBSA *bsa_;
PvObject *calc_pvalue_;
public:
RmBSA(RObject *, const MObject *, const ItPosition &, const ItPosition &, PvObject *, const PaBSA *);
virtual ~RmBSA();
void set_calc_pvalue(PvObject *);
PvObject *calc_pvalue() const {
return(calc_pvalue_);
}
virtual void post_reverse(Con_IPinfo &, RControl &, RObject *);
};
////////////////////////////////////////////////////////////////////////////////
class WmBSA: public WmObject {
const PaBSA *bsa_;
public:
WmBSA(WObject *, const MObject *, const PObject *, const PaBSA *);
virtual ~WmBSA();
virtual void post_generate(Con_IPinfo &, WControl &, OCTBUF &, WObject *);
virtual bool doEvaluate(WControl &, RObject &);
};
interfaceCmList(BSAList, PaBSA);
#endif
syntax highlighted by Code2HTML, v. 0.9.1