Exemple #1
0
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
Exemple #2
0
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()))
Exemple #3
0
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
Exemple #4
0
class ScopedPDU(univ.Sequence):
    componentType = namedtype.NamedTypes(
        namedtype.NamedType('contextEngineId', univ.OctetString()),
        namedtype.NamedType('contextName', univ.OctetString()),
        namedtype.NamedType('data', rfc1905.PDUs()))
Exemple #5
0
class Message(univ.Sequence):
    componentType = namedtype.NamedTypes(
        namedtype.NamedType('version', _version),
        namedtype.NamedType('community', univ.OctetString()),
        namedtype.NamedType('data', rfc1905.PDUs()))