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
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