⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testmib.c

📁 windows的snmp api源码
💻 C
📖 第 1 页 / 共 2 页
字号:
	    goto Exit;
	    }

         // Setup var bind name of NEXT MIB variable
         SnmpUtilOidFree( &VarBind->name );
         SnmpUtilOidCpy( &VarBind->name, &MIB_OidPrefix );
         SnmpUtilOidAppend( &VarBind->name, &MibPtr->MibNext->Oid );

         // Call function to process request.  Each MIB entry has a function
	 // pointer that knows how to process its MIB variable.
         ErrStat = (*MibPtr->MibNext->MibFunc)( MIB_ACTION_GET,
	                                        MibPtr->MibNext, VarBind );
         break;

      case MIB_ACTION_GET:
         // Make sure that this variable's ACCESS is GET'able
	 if ( MibPtr->Access != MIB_ACCESS_READ &&
	      MibPtr->Access != MIB_ACCESS_READWRITE )
	    {
	    ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
	    goto Exit;
	    }

	 // Setup varbind's return value
	 VarBind->value.asnType = MibPtr->Type;
	 switch ( VarBind->value.asnType )
	    {
            case ASN_RFC1155_COUNTER:
            case ASN_RFC1155_GAUGE:
            case ASN_INTEGER:
               VarBind->value.asnValue.number = *(AsnInteger *)(MibPtr->Storage);
	       break;

            case ASN_OCTETSTRING: // This entails ASN_RFC1213_DISPSTRING also
	       VarBind->value.asnValue.string.length =
                                 strlen( (LPSTR)MibPtr->Storage );

	       if ( NULL == 
                    (VarBind->value.asnValue.string.stream =
                    SnmpUtilMemAlloc(VarBind->value.asnValue.string.length *
                           sizeof(char))) )
	          {
	          ErrStat = SNMP_ERRORSTATUS_GENERR;
	          goto Exit;
	          }

	       memcpy( VarBind->value.asnValue.string.stream,
	               (LPSTR)MibPtr->Storage,
	               VarBind->value.asnValue.string.length );
	       VarBind->value.asnValue.string.dynamic = TRUE;

	       break;

	    default:
	       ErrStat = SNMP_ERRORSTATUS_GENERR;
	       goto Exit;
	    }

	 break;

      case MIB_ACTION_SET:
         // Make sure that this variable's ACCESS is SET'able
	 if ( MibPtr->Access != MIB_ACCESS_READWRITE &&
	      MibPtr->Access != MIB_ACCESS_WRITE )
	    {
	    ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
            goto Exit;
	    }

         // Check for proper type before setting
         if ( MibPtr->Type != VarBind->value.asnType )
	    {
	    ErrStat = SNMP_ERRORSTATUS_BADVALUE;
	    goto Exit;
	    }

	 // Save value in MIB
	 switch ( VarBind->value.asnType )
	    {
            case ASN_RFC1155_COUNTER:
            case ASN_RFC1155_GAUGE:
            case ASN_INTEGER:
               *(AsnInteger *)(MibPtr->Storage) = VarBind->value.asnValue.number;
	       break;

            case ASN_OCTETSTRING: // This entails ASN_RFC1213_DISPSTRING also
               // The storage must be adequate to contain the new string
               // including a NULL terminator.
               memcpy( (LPSTR)MibPtr->Storage,
                       VarBind->value.asnValue.string.stream,
                       VarBind->value.asnValue.string.length );

	       ((LPSTR)MibPtr->Storage)[VarBind->value.asnValue.string.length] =
                                                                          '\0';
	       break;

	    default:
	       ErrStat = SNMP_ERRORSTATUS_GENERR;
	       goto Exit;
	    }

         break;

      default:
	 ErrStat = SNMP_ERRORSTATUS_GENERR;
	 goto Exit;
      } // switch

   // Signal no error occurred
   ErrStat = SNMP_ERRORSTATUS_NOERROR;

Exit:
   return ErrStat;
} // MIB_leaf_func



//
// MIB_control_func
//    Performs specific actions on the toasterControl MIB variable
//
// Notes:
//
// Return Codes:
//    Standard PDU error codes.
//
// Error Codes:
//    None.
//
UINT MIB_control_func(
        IN UINT Action,
	IN MIB_ENTRY *MibPtr,
	IN RFC1157VarBind *VarBind
	)

{
UINT   ErrStat;

   switch ( Action )
      {
      case MIB_ACTION_SET:
         // Make sure that this variable's ACCESS is SET'able
	 if ( MibPtr->Access != MIB_ACCESS_READWRITE &&
	      MibPtr->Access != MIB_ACCESS_WRITE )
	    {
	    ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
            goto Exit;
	    }

         // Check for proper type before setting
         if ( MibPtr->Type != VarBind->value.asnType )
	    {
	    ErrStat = SNMP_ERRORSTATUS_BADVALUE;
	    goto Exit;
	    }

         // Make sure the value is valid
         if ( MIB_TOASTER_UP > VarBind->value.asnValue.number ||
              MIB_TOASTER_DOWN < VarBind->value.asnValue.number )
            {
	    ErrStat = SNMP_ERRORSTATUS_BADVALUE;
	    goto Exit;
            }

         // Let fall through purposefully for further processing by
         // generic leaf function.

      case MIB_ACTION_GETNEXT:
      case MIB_ACTION_GET:
	 // Call the more generic function to perform the action
         ErrStat = MIB_leaf_func( Action, MibPtr, VarBind );
         break;

      default:
	 ErrStat = SNMP_ERRORSTATUS_GENERR;
	 goto Exit;
      } // switch

Exit:
   return ErrStat;
} // MIB_control_func



//
// MIB_doneness_func
//    Performs specific actions on the toasterDoneness MIB variable
//
// Notes:
//
// Return Codes:
//    Standard PDU error codes.
//
// Error Codes:
//    None.
//
UINT MIB_doneness_func(
        IN UINT Action,
	IN MIB_ENTRY *MibPtr,
	IN RFC1157VarBind *VarBind
	)

{
UINT   ErrStat;

   switch ( Action )
      {
      case MIB_ACTION_SET:
         // Make sure that this variable's ACCESS is SET'able
	 if ( MibPtr->Access != MIB_ACCESS_READWRITE &&
	      MibPtr->Access != MIB_ACCESS_WRITE )
	    {
	    ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
            goto Exit;
	    }

         // Check for proper type before setting
         if ( MibPtr->Type != VarBind->value.asnType )
	    {
	    ErrStat = SNMP_ERRORSTATUS_BADVALUE;
	    goto Exit;
	    }

         // Make sure the value is valid
         if ( MIB_TOASTER_LIGHTLYWARM > VarBind->value.asnValue.number ||
              MIB_TOASTER_BURNT < VarBind->value.asnValue.number )
            {
	    ErrStat = SNMP_ERRORSTATUS_BADVALUE;
	    goto Exit;
            }

         // Let fall through purposefully for further processing by
         // generic leaf function.

      case MIB_ACTION_GETNEXT:
      case MIB_ACTION_GET:
	 // Call the more generic function to perform the action
         ErrStat = MIB_leaf_func( Action, MibPtr, VarBind );
         break;

      default:
	 ErrStat = SNMP_ERRORSTATUS_GENERR;
	 goto Exit;
      } // switch

Exit:
   return ErrStat;
} // MIB_doneness_func



//
// MIB_toasttype_func
//    Performs specific actions on the toasterToastType MIB variable
//
// Notes:
//
// Return Codes:
//    Standard PDU error codes.
//
// Error Codes:
//    None.
//
UINT MIB_toasttype_func(
        IN UINT Action,
	IN MIB_ENTRY *MibPtr,
	IN RFC1157VarBind *VarBind
	)

{
UINT   ErrStat;

   switch ( Action )
      {
      case MIB_ACTION_SET:
         // Make sure that this variable's ACCESS is SET'able
	 if ( MibPtr->Access != MIB_ACCESS_READWRITE &&
	      MibPtr->Access != MIB_ACCESS_WRITE )
	    {
	    ErrStat = SNMP_ERRORSTATUS_NOSUCHNAME;
            goto Exit;
	    }

         // Check for proper type before setting
         if ( MibPtr->Type != VarBind->value.asnType )
	    {
	    ErrStat = SNMP_ERRORSTATUS_BADVALUE;
	    goto Exit;
	    }

         // Make sure the value is valid
         if ( MIB_TOASTER_WHITEBREAD > VarBind->value.asnValue.number ||
              MIB_TOASTER_OTHERBREAD < VarBind->value.asnValue.number )
            {
	    ErrStat = SNMP_ERRORSTATUS_BADVALUE;
	    goto Exit;
            }

         // Let fall through purposefully for further processing by
         // generic leaf function.

      case MIB_ACTION_GETNEXT:
      case MIB_ACTION_GET:
	 // Call the more generic function to perform the action
         ErrStat = MIB_leaf_func( Action, MibPtr, VarBind );
         break;

      default:
	 ErrStat = SNMP_ERRORSTATUS_GENERR;
	 goto Exit;
      } // switch

Exit:
   return ErrStat;
} // MIB_toasttype_func

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -