def prepareDataElements(octets, secret): try: msg, octets = decoder.decode(octets, asn1Spec=Message()) except SubstrateUnderrunError: return None, None, None, octets if msg['version'] != PROTOCOL_VERSION: raise SnmpfwdError('Unsupported protocol versions %s/%s' % (msg['version'], PROTOCOL_VERSION)) r, _ = decoder.decode( secret and crypto.decrypt(secret, msg['payload'].asOctets()) or msg['payload'].asOctets(), asn1Spec=pduMap.get(msg['content-id'])) rsp = {} if msg['content-id'] == MSG_TYPE_REQUEST: rsp['callflow-id'] = r['callflow-id'] for k in ('snmp-engine-id', 'snmp-transport-domain', 'snmp-peer-address', 'snmp-peer-port', 'snmp-bind-address', 'snmp-bind-port', 'snmp-security-model', 'snmp-security-level', 'snmp-security-name', 'snmp-context-engine-id', 'snmp-context-name', 'snmp-credentials-id', 'snmp-context-id', 'snmp-content-id', 'snmp-peer-id'): rsp[k] = r[k] pdu, _ = decoder.decode(r['snmp-pdu'], asn1Spec=rfc1905.PDUs()) rsp['snmp-pdu'] = pdu.getComponent() elif msg['content-id'] == MSG_TYPE_RESPONSE: rsp['error-indication'] = r['error-indication'] if not r['error-indication'] and r['snmp-pdu']: pdu, _ = decoder.decode(r['snmp-pdu'], asn1Spec=rfc1905.PDUs()) rsp['snmp-pdu'] = pdu.getComponent() elif msg['content-id'] == MSG_TYPE_ANNOUNCEMENT: rsp['trunk-id'] = r['trunk-id'] elif msg['content-id'] == MSG_TYPE_PING: rsp['serial'] = r['serial'] elif msg['content-id'] == MSG_TYPE_PONG: rsp['serial'] = r['serial'] return msg['msg-id'], msg['content-id'], rsp, octets
class Message(v1.Message): componentType = namedtype.NamedTypes( namedtype.NamedType( 'version', univ.Integer(namedValues=namedval.NamedValues(('version-2', 1)))), namedtype.NamedType('community', univ.OctetString()), namedtype.NamedType('data', rfc1905.PDUs()))
def prepareDataElements(octets, secret): try: msg, octets = decoder.decode(octets, asn1Spec=Message()) except SubstrateUnderrunError: return None, None, None, octets if msg['version'] > 0: raise SnmpfwdError('Unsupported protocol version: %s' % msg['version']) r, _ = decoder.decode( secret and crypto.decrypt(secret, msg['payload'].asOctets()) or msg['payload'].asOctets(), asn1Spec=pduMap.get(msg['content-id'])) rsp = {} if msg['content-id'] == 0: # request for k in 'snmp-engine-id', \ 'snmp-transport-domain', \ 'snmp-peer-address', 'snmp-peer-port', \ 'snmp-bind-address', 'snmp-bind-port', \ 'snmp-security-model', 'snmp-security-level', \ 'snmp-security-name', \ 'snmp-context-engine-id', 'snmp-context-name': rsp[k] = r[k] rsp['snmp-pdu'], _ = decoder.decode(r['snmp-pdu'], asn1Spec=rfc1905.PDUs()) elif msg['content-id'] == 1: # response rsp['error-indication'] = r['error-indication'] if not r['error-indication']: rsp['snmp-pdu'], _ = decoder.decode(r['snmp-pdu'], asn1Spec=rfc1905.PDUs()) elif msg['content-id'] == 2: # announcement rsp['trunk-id'] = r['trunk-id'] if 'snmp-pdu' in rsp: rsp['snmp-pdu'] = rsp['snmp-pdu'].getComponent() return msg['msg-id'], msg['content-id'], rsp, octets
class ScopedPDU(univ.Sequence): componentType = namedtype.NamedTypes( namedtype.NamedType('contextEngineId', univ.OctetString()), namedtype.NamedType('contextName', univ.OctetString()), namedtype.NamedType('data', rfc1905.PDUs()))
class Message(univ.Sequence): componentType = namedtype.NamedTypes( namedtype.NamedType('version', _version), namedtype.NamedType('community', univ.OctetString()), namedtype.NamedType('data', rfc1905.PDUs()))