a1rwval.c,v
来自「TCP-IP红宝书源代码」· C,V 代码 · 共 115 行
C,V
115 行
head 1.1;
access;
symbols;
locks
dls:1.1; strict;
comment @ * @;
1.1
date 97.09.21.19.29.17; author dls; state Dist;
branches;
next ;
desc
@@
1.1
log
@pre-3e code
@
text
@/* a1rwval.c - a1readval, a1writeval */
#include <conf.h>
#include <kernel.h>
#include <network.h>
#ifdef SNMP
#include <snmp.h>
#include <asn1.h>
/*------------------------------------------------------------------------
* a1readval - convert object in ASN.1 encoded form into internal form
*------------------------------------------------------------------------
*/
int a1readval(val, type, vallen, pack)
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:
blkcopy(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(bl, bp) /* Return number of bytes required. */
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));
blkcopy(bp, SVSTR(bl), SVSTRLEN(bl));
bp += SVSTRLEN(bl);
freemem(SVSTR(bl), SVSTRLEN(bl));
break;
case ASN1_IPADDR:
*bp++ = IP_ALEN;
blkcopy(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 + -
显示快捷键?