Files
svc.ems/plat/public_bak/src/include/asn1.h
2024-09-27 15:39:34 +08:00

77 lines
3.2 KiB
C

/********************************************************************/
/*Title: asn1.h */
/*Descr: ASN.1 Encoding/Decoding Module(Head file) */
/*Author: Liang Hanxi */
/*Create: 2002-1-15 */
/*Version: R3V03_01 */
/*Modify: 2002-10-22 */
/********************************************************************/
#ifndef _ASN_1_HEAD
#define _ASN_1_HEAD
#include <sys/types.h>
#include <netinet/in.h>
typedef struct ASN_TLV
{
u_char tagtype;
u_short tagcode;
int length;
u_char *pvalue;
struct ASN_TLV *pnext;
struct ASN_TLV *psub;
}ASN_TLV;
typedef struct _ASN_BUFFER
{
u_char *msgbuf; //store pointer of buffer
int maxlen;
int msglen; //totallength of message
int pos;
ASN_TLV heap[256];
char errmsg[1024];
short tlvcount;
}ASN_BUF;
//interface======>
void AsnEncode(u_char *msg_buf,u_int maxlen,ASN_BUF *asnbuf);
int AsnDecode(u_char *msg_buf,int msglen,int maxtlv,int *errpos,ASN_BUF *asnbuf);
int GetTLV(const char *tag_seq,int maxlen,u_char *pvalue,u_char flag,ASN_BUF *asnbuf);
int GetAnyTLV(const char *tag_seq,int maxlen,u_char *pvalue,u_char *pflag,u_short *ptagcode,ASN_BUF *asnbuf);
int AddTLV(const char *tag_seq,u_int length,u_char *pvalue,u_char tlv_type,ASN_BUF *asnbuf);
int GetInteger(const char *tag_seq,int *rtn,u_char flag,ASN_BUF *asnbuf);
int AddInteger(const char *tag_seq,int value,u_char tlv_type,ASN_BUF *asnbuf);
void asn_encode(u_char *asn_buf,ASN_BUF *asnbuf);
void asn_encode_v3(u_char *msg_buf,u_int maxlen,ASN_BUF *asnbuf);
int add_tlv(const char *tag_seq,u_int length,u_char *pvalue,u_char tlv_type,ASN_BUF *asnbuf);
int asn_decode(u_char *asn_buf,int ntlv,ASN_BUF *asnbuf);
int asn_decode_v2(u_char *msg_buf,int ntlv,int *plen,ASN_BUF *asnbuf);
int asn_decode_v3(u_char *msg_buf,int msglen,int *errpos,ASN_BUF *asnbuf);
int get_tlv(const char *tag_seq,u_char *pvalue,ASN_BUF *asnbuf);
int get_tlv_v2(const char *tag_seq,u_char *pvalue,u_char *flag,ASN_BUF *asnbuf);
int parse_tlv(ASN_TLV **pnode,ASN_BUF *asnbuf);
//int parse_tlv2(u_char *asn_buf,int rest,u_short (*tags)[2],int order,ASN_BUF *asnbuf);
int findtlv(u_char *pasn,u_int tagcode,u_char **pnext,int rest);
int findtlv2(u_char *pasn,int index,u_char **pnext,int rest);
int gettagcode(u_char *asnbuf,u_int *tagcode,u_char *type);
int getlength(u_char *asnbuf,int *len);
int addtagcode(u_char *asn_buf,u_int tagcode,u_char type);
int addlength(u_char *asn_buf,u_int len);
int parse_tags(const char *tag_seq,u_short (*tags)[2]);
int modifylength(u_char *ptr[],int level,int addval);
void showbuf(u_char *buf,int len);
int add_bool(const char *tag_seq,u_char value,u_char tlv_type,ASN_BUF *asnbuf);
u_char get_bool(const char *tag_seq,ASN_BUF *asnbuf);
int add_int(const char *tag_seq,int value,u_char tlv_type,ASN_BUF *asnbuf);
int get_int(const char *tag_seq,ASN_BUF *asnbuf);
int get_int_v2(const char *tag_seq,int *rtn,ASN_BUF *asnbuf);
int add_oid(const char *tag_seq,const char *oidstr,u_char tlv_type,ASN_BUF *asnbuf);
int get_oid(const char *tag_seq,char *oid,ASN_BUF *asnbuf);
int add_null(const char *tag_seq,u_char tlv_type,ASN_BUF *asnbuf);
int get_null(const char *tag_seq,ASN_BUF *asnbuf);
int DecodeInteger(u_char *buf, u_char len);
#endif