⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dcasnberdecoder.h

📁 ASN.1解析解码工具,可以解析各种ASN.1格式的文件,并对相应的BER文件解码
💻 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 + -