📄 dcasnberdecoder.h
字号:
/****************************************************************************************
* Copyrights 2006,深圳天源迪科信息技术股份有限公司
*
* All rights reserved.
*
* Filename: DCAsnBerDecoder.h
* Indentifier:
* Description:
* Version: V1.0
* Author: wangbin
* Finished: 2007年6月20日
* History:
******************************************************************************************/
#ifndef _DIC_DCAsnBerDecoder_h_
#define _DIC_DCAsnBerDecoder_h_
#include "dicasnutil/DCAsnParser.h"
#include <list>
#include <vector>
#include <string>
namespace dicasn1p
{
/*******************************************************************************************/
void tlv_tree_fix(arg_t *arg,DCTreeNode<DCBerTlv> *root);
asn1p_expr_t *find_child_member_by_tag(asn1p_expr_t* node,int tag);
DCTreeNode<DCBerTlv> * find_child_member_by_name(DCTreeNode<DCBerTlv> *node,const char *childName);
DCTreeNode<DCBerTlv> * find_sibling_member_by_name(DCTreeNode<DCBerTlv> *node,const char *siblingName);
DCTreeNode<DCBerTlv> * find_child_member_by_path(DCTreeNode<DCBerTlv> *node,const char *path);
DCTreeNode<DCBerTlv> * match_member_name(DCTreeNode<DCBerTlv> *node,const char *name);
enum asn_tag_class asn_tag_class_to_ber(enum asn1p_tag_class_e v_asn_class);
/*******************************************************************************************/
class DCAsnBerValue
{
public:
typedef enum {
TYPE_BASIC,
TYPE_STRUCT
} T_valueType;
T_valueType value_type;
asn1p_expr_t *reference;
asn1p_t *asn;
std::string name;
int tag;
enum asn_tag_class tag_class;
int depth;
virtual ~DCAsnBerValue();
virtual int fromNode( DCBerTlvNode* first ) =0;
virtual int fromRoot( DCBerTlvNode* root );
virtual void clear() =0;
//************************************
// Method: fromExpr
// FullName: dicasn1p::DCAsnBerValue::fromExpr
// Access: public static
// Returns: DCAsnBerValue*
// Qualifier:
// Parameter: arg_t *arg
// Parameter: int depth
//************************************
static DCAsnBerValue* fromExpr(arg_t *arg,int depth = 0);
protected:
DCAsnBerValue();
};
/*******************************************************************************************/
//基本类型,如 integer,boolean,object identifier ,utc time ,string 等
class DCBasicValue :public DCAsnBerValue
{
public:
typedef enum {
TYPE_INT,
TYPE_STRING,
TYPE_UTCTIME,
TYPE_OBJID,
TYPE_ANY
} T_basicType;
char *buf;
size_t size;
T_basicType type;
DCBasicValue( T_basicType type );
virtual int fromNode( DCBerTlvNode* first );
virtual void clear() ;
private:
};
/*******************************************************************************************/
//构造类型,主要是 sequence 和 set
class DCStructValue :public DCAsnBerValue
{
public:
typedef enum {
TYPE_SEQUENCE,
TYPE_SEQUENCE_OF,
TYPE_SET,
TYPE_SET_OF,
TYPE_CHOICE
} T_structType;
std::vector<DCAsnBerValue*> members;
T_structType type;
DCStructValue( T_structType type );
virtual int fromNode( DCBerTlvNode* first );
virtual void clear() ;
protected:
private:
};
/*******************************************************************************************/
//set of 和 sequence of
class DCArrayValue :public DCStructValue
{
public:
DCAsnBerValue *member_type;
DCArrayValue( T_structType type );
virtual int fromNode( DCBerTlvNode* first );
virtual void clear() ;
private:
};
/*******************************************************************************************/
//choice 类型
class DCChoiceValue :public DCStructValue
{
public:
std::vector<DCAsnBerValue*> member_types;
DCChoiceValue( T_structType type );
virtual int fromNode( DCBerTlvNode* first );
virtual void clear() ;
private:
};
/*******************************************************************************************/
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -