📄 appltable.c
字号:
/* ==================================================================== * The Vovida Software License, Version 1.0 * * Copyright (c) 2000 Vovida Networks, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The names "VOCAL", "Vovida Open Communication Application Library", * and "Vovida Open Communication Application Library (VOCAL)" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact vocal\@vovida.org. * * 4. Products derived from this software may not be called "VOCAL", nor * may "VOCAL" appear in their name, without prior written * permission of Vovida Networks, Inc. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL VOVIDA * NETWORKS, INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT DAMAGES * IN EXCESS OF $1,000, NOR FOR ANY INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * * ==================================================================== * * This software consists of voluntary contributions made by Vovida * Networks, Inc. and many individuals on behalf of Vovida Networks, * Inc. For more information on Vovida Networks, Inc., please see * <http://www.vovida.org/>. * */#include <config.h>/* minimal include directives */#include "mibincl.h"#include "util_funcs.h"#include <sys/time.h>#include <unistd.h>#include "AgentApi.hxx"#include "VovidaSnmpUtil.h"#include "applTable.h"#include "TrapAgentC.hxx"#include "TrapAgent.hxx"#include "Common.h"oid applTable_variables_oid[] = { 1,3,6,1,2,1,27,1 };struct variable2 applTable_variables[] = {/* magic number , variable type , ro/rw , callback fn , L, oidsuffix */ {applIndex , ASN_INTEGER , RONLY , var_applTable, 2, { 1,1 } }, {applName , ASN_OCTET_STR , RONLY , var_applTable, 2, { 1,2 } }, {applDirectoryName , ASN_OCTET_STR , RONLY , var_applTable, 2, { 1,3 } }, {applVersion , ASN_OCTET_STR , RONLY , var_applTable, 2, { 1,4 } }, {applUpTime , ASN_TIMETICKS , RONLY , var_applTable, 2, { 1,5 } }, {applOperStatus , ASN_INTEGER , RONLY , var_applTable, 2, { 1,6 } }, {applLastChange , ASN_TIMETICKS , RONLY , var_applTable, 2, { 1,7 } },};/* (L = length of the oidsuffix) *//* * init_applTable(): * Find which applications are running on the server and construct * the table of information */void init_applTable(void) { /* register ourselves with the agent to handle our mib tree */ REGISTER_MIB("applTable", applTable_variables, variable2, applTable_variables_oid);}/* * var_applTable(): * Handle this table separately from the scalar value case. * The workings of this are basically the same as for var_applTable above. */unsigned char *var_applTable(struct variable *vp, oid *name, size_t *length, int exact, size_t *var_len, WriteMethod **write_method){ static long long_ret; static unsigned char string[SPRINT_MAX_LEN]; static oid objid[MAX_OID_LEN]; static struct counter64 c64; int i, oidIndex; applInfoT anApplication; struct timeval tv; struct timezone tz; ulong deltaTime; int tableSize = TrapAgent_GetNumOfApps((void *)trapAgent); if (header_simple_table(vp,name,length,exact,var_len,write_method, tableSize) == MATCH_FAILED ) return 0; oidIndex = name[*length-1]; anApplication = TrapAgent_GetApplication((void *)trapAgent, oidIndex); if (anApplication.index == 0) return 0; /* * this is where we do the value assignments for the mib results. */ switch(vp->magic) { case applIndex: long_ret = oidIndex; return (unsigned char *) &long_ret; case applName: *string = 0; strcpy(string, anApplication.name); *var_len = strlen(string); return (unsigned char *) string; case applDirectoryName: *string = 0; *var_len = strlen(string); return (unsigned char *) string; case applVersion: *string = 0; *var_len = strlen(string); return (unsigned char *) string; case applUpTime: tz.tz_minuteswest = 0; tz.tz_dsttime = 0; timerclear(&tv); if (gettimeofday(&tv,&tz) > 0 ) { perror("applTable:gettimeofday 2 failed:"); timerclear(&tv); } long_ret = tv.tv_sec - anApplication.startTime.tv_sec; return (unsigned char *) &long_ret; case applOperStatus: long_ret = anApplication.status; return (unsigned char *) &long_ret; case applLastChange: tz.tz_minuteswest = 0; tz.tz_dsttime = 0; timerclear(&tv); if (gettimeofday(&tv,&tz) > 0 ) { perror("applTable:gettimeofday 2 failed:"); timerclear(&tv); } long_ret = tv.tv_sec - anApplication.lastUpdateTime.tv_sec; return (unsigned char *) &long_ret; default: ERROR_MSG(""); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -