Beispiel #1
0
    def sget(self, oids):
        assert self.sessp
        req = self._create_request(const.SNMP_MSG_GET, oids)
        response = ctypes.POINTER(types.netsnmp_pdu)()

        if lib.snmp_sess_synch_response(self.sessp, req, byref(response)):
            raise SnmpError("snmp_sess_synch_response")

        result = util.decode_result(response.contents)
        lib.snmp_free_pdu(response)
        return result
Beispiel #2
0
    def _callback(self, operation, sp, reqid, pdu, magic):
        try:
            if reqid not in self._requests:
                return 1

            cb, args = self._requests.pop(reqid)
            if operation == const.NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE:
                result = util.decode_result(pdu.contents)
                cb(result, *args)
            elif operation == const.NETSNMP_CALLBACK_OP_TIMED_OUT:
                cb(SnmpTimeout(), *args)
            else:
                raise Exception("Unexpected operation: %d" % operation)

        except Exception, ex:
            # This shouldn't happen, but just in case...
            # TODO: Probably should use the logging api instead.
            sys.stderr.write("Exception in _callback: %s\n" % (ex,))
            raise