a1rwval.c

来自「TCP-IP红宝书源代码」· C语言 代码 · 共 88 行

C
88
字号
/* a1rwval.c - a1readval, a1writeval */

#include <conf.h>
#include <kernel.h>
#include <network.h>
#include <mem.h>

#ifdef	SNMP

#include <snmp.h>
#include <asn1.h>

/*------------------------------------------------------------------------
 * a1readval - convert object in ASN.1 encoded form into internal form
 *------------------------------------------------------------------------
 */
int
a1readval(struct snval *val, int type, int vallen, unsigned char *pack)
{
	val->sv_type = type;
	
	switch (type) {
	case ASN1_INT:
	case ASN1_COUNTER:
	case ASN1_GAUGE:
	case ASN1_TIMETICKS:
		val->sv_val.sv_int = a1readint(pack, vallen);
		return OK;
	case ASN1_OCTSTR:
		val->sv_val.sv_str.sv_len = vallen;
		val->sv_val.sv_str.sv_str = (char *) pack;
		return OK;
	case ASN1_NULL:
		return OK;
	case ASN1_OBJID:
		return a1readoid(pack, vallen, &(val->sv_val.sv_oid));
	case ASN1_IPADDR:
		memcpy(&val->sv_val.sv_ipaddr, pack, vallen);
		return OK;
	default:
		return SYSERR;
	}
}

/*------------------------------------------------------------------------
 * a1writeval - convert the value of a variable into ASN.1 equivalent.
 *------------------------------------------------------------------------
 */
int
a1writeval(struct snbentry *bl, u_char *bp)
{
	u_char	*origbp;

	origbp = bp;
	*bp++ = SVTYPE(bl);
	
	switch(SVTYPE(bl)) {
	case ASN1_INT:
	case ASN1_COUNTER:
	case ASN1_GAUGE:
	case ASN1_TIMETICKS:
		bp += a1writeint(SVINT(bl), bp, SVTYPE(bl));
		break;
	case ASN1_NULL:
		*bp++ = (u_char) 0;
		break;
	case ASN1_OCTSTR:
		bp += a1writelen(bp, SVSTRLEN(bl));
		memcpy(bp, SVSTR(bl), SVSTRLEN(bl));
		bp += SVSTRLEN(bl);
		freemem(SVSTR(bl), SVSTRLEN(bl));
		break;
	case ASN1_IPADDR:
		*bp++ = IP_ALEN;
		memcpy(bp, &SVIPADDR(bl), IP_ALEN);
		bp += IP_ALEN;
		break;
	case ASN1_OBJID:
		bp += a1writeoid(bp, &bl->sb_val.sv_val.sv_oid);
		break;
	default:
		break;
	}
	
	return bp - origbp;
}
#endif	/* SNMP */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?