/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* * pkix_resourcelimits.c * * Resourcelimits Params Object Functions * */ #include "pkix_resourcelimits.h" /* --Private-Functions-------------------------------------------- */ /* * FUNCTION: pkix_ResourceLimits_Destroy * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h) */ static PKIX_Error * pkix_ResourceLimits_Destroy( PKIX_PL_Object *object, void *plContext) { PKIX_ResourceLimits *rLimits = NULL; PKIX_ENTER(RESOURCELIMITS, "pkix_ResourceLimits_Destroy"); PKIX_NULLCHECK_ONE(object); /* Check that this object is a ResourceLimits object */ PKIX_CHECK(pkix_CheckType(object, PKIX_RESOURCELIMITS_TYPE, plContext), PKIX_OBJECTNOTRESOURCELIMITS); rLimits = (PKIX_ResourceLimits *)object; rLimits->maxTime = 0; rLimits->maxFanout = 0; rLimits->maxDepth = 0; rLimits->maxCertsNumber = 0; rLimits->maxCrlsNumber = 0; cleanup: PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: pkix_ResourceLimits_Equals * (see comments for PKIX_PL_EqualsCallback in pkix_pl_system.h) */ static PKIX_Error * pkix_ResourceLimits_Equals( PKIX_PL_Object *first, PKIX_PL_Object *second, PKIX_Boolean *pResult, void *plContext) { PKIX_UInt32 secondType; PKIX_Boolean cmpResult; PKIX_ResourceLimits *firstRLimits = NULL; PKIX_ResourceLimits *secondRLimits = NULL; PKIX_ENTER(RESOURCELIMITS, "pkix_ResourceLimits_Equals"); PKIX_NULLCHECK_THREE(first, second, pResult); PKIX_CHECK(pkix_CheckType(first, PKIX_RESOURCELIMITS_TYPE, plContext), PKIX_FIRSTOBJECTNOTRESOURCELIMITS); PKIX_CHECK(PKIX_PL_Object_GetType(second, &secondType, plContext), PKIX_COULDNOTGETTYPEOFSECONDARGUMENT); *pResult = PKIX_FALSE; if (secondType != PKIX_RESOURCELIMITS_TYPE) goto cleanup; firstRLimits = (PKIX_ResourceLimits *)first; secondRLimits = (PKIX_ResourceLimits *)second; cmpResult = (firstRLimits->maxTime == secondRLimits->maxTime) && (firstRLimits->maxFanout == secondRLimits->maxFanout) && (firstRLimits->maxDepth == secondRLimits->maxDepth) && (firstRLimits->maxCertsNumber == secondRLimits->maxCertsNumber) && (firstRLimits->maxCrlsNumber == secondRLimits->maxCrlsNumber); *pResult = cmpResult; cleanup: PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: pkix_ResourceLimits_Hashcode * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h) */ static PKIX_Error * pkix_ResourceLimits_Hashcode( PKIX_PL_Object *object, PKIX_UInt32 *pHashcode, void *plContext) { PKIX_ResourceLimits *rLimits = NULL; PKIX_UInt32 hash = 0; PKIX_ENTER(RESOURCELIMITS, "pkix_ResourceLimits_Hashcode"); PKIX_NULLCHECK_TWO(object, pHashcode); PKIX_CHECK(pkix_CheckType(object, PKIX_RESOURCELIMITS_TYPE, plContext), PKIX_OBJECTNOTRESOURCELIMITS); rLimits = (PKIX_ResourceLimits*)object; hash = 31 * rLimits->maxTime + (rLimits->maxFanout << 1) + (rLimits->maxDepth << 2) + (rLimits->maxCertsNumber << 3) + rLimits->maxCrlsNumber; *pHashcode = hash; cleanup: PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: pkix_ResourceLimits_ToString * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h) */ static PKIX_Error * pkix_ResourceLimits_ToString( PKIX_PL_Object *object, PKIX_PL_String **pString, void *plContext) { PKIX_ResourceLimits *rLimits = NULL; char *asciiFormat = NULL; PKIX_PL_String *formatString = NULL; PKIX_PL_String *rLimitsString = NULL; PKIX_ENTER(RESOURCELIMITS, "pkix_ResourceLimits_ToString"); PKIX_NULLCHECK_TWO(object, pString); PKIX_CHECK(pkix_CheckType(object, PKIX_RESOURCELIMITS_TYPE, plContext), PKIX_OBJECTNOTRESOURCELIMITS); /* maxCertsNumber and maxCrlsNumber are not supported */ asciiFormat = "[\n" "\tMaxTime: \t\t%d\n" "\tMaxFanout: \t\t%d\n" "\tMaxDepth: \t\t%d\n" "]\n"; PKIX_CHECK(PKIX_PL_String_Create (PKIX_ESCASCII, asciiFormat, 0, &formatString, plContext), PKIX_STRINGCREATEFAILED); rLimits = (PKIX_ResourceLimits*)object; PKIX_CHECK(PKIX_PL_Sprintf (&rLimitsString, plContext, formatString, rLimits->maxTime, rLimits->maxFanout, rLimits->maxDepth), PKIX_SPRINTFFAILED); *pString = rLimitsString; cleanup: PKIX_DECREF(formatString); PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: pkix_ResourceLimits_RegisterSelf * DESCRIPTION: * Registers PKIX_RESOURCELIMITS_TYPE and its related functions with * systemClasses[] * THREAD SAFETY: * Not Thread Safe - for performance and complexity reasons * * Since this function is only called by PKIX_PL_Initialize, which should * only be called once, it is acceptable that this function is not * thread-safe. */ PKIX_Error * pkix_ResourceLimits_RegisterSelf(void *plContext) { extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES]; pkix_ClassTable_Entry entry; PKIX_ENTER(RESOURCELIMITS, "pkix_ResourceLimits_RegisterSelf"); entry.description = "ResourceLimits"; entry.objCounter = 0; entry.typeObjectSize = sizeof(PKIX_ResourceLimits); entry.destructor = pkix_ResourceLimits_Destroy; entry.equalsFunction = pkix_ResourceLimits_Equals; entry.hashcodeFunction = pkix_ResourceLimits_Hashcode; entry.toStringFunction = pkix_ResourceLimits_ToString; entry.comparator = NULL; entry.duplicateFunction = NULL; systemClasses[PKIX_RESOURCELIMITS_TYPE] = entry; PKIX_RETURN(RESOURCELIMITS); } /* --Public-Functions--------------------------------------------- */ /* * FUNCTION: PKIX_ResourceLimits_Create (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_Create( PKIX_ResourceLimits **pResourceLimits, void *plContext) { PKIX_ResourceLimits *rLimits = NULL; PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_Create"); PKIX_NULLCHECK_ONE(pResourceLimits); PKIX_CHECK(PKIX_PL_Object_Alloc (PKIX_RESOURCELIMITS_TYPE, sizeof (PKIX_ResourceLimits), (PKIX_PL_Object **)&rLimits, plContext), PKIX_COULDNOTCREATERESOURCELIMITOBJECT); /* initialize fields */ rLimits->maxTime = 0; rLimits->maxFanout = 0; rLimits->maxDepth = 0; rLimits->maxCertsNumber = 0; rLimits->maxCrlsNumber = 0; *pResourceLimits = rLimits; cleanup: PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_GetMaxTime * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_GetMaxTime( PKIX_ResourceLimits *rLimits, PKIX_UInt32 *pMaxTime, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_GetMaxTime"); PKIX_NULLCHECK_TWO(rLimits, pMaxTime); *pMaxTime = rLimits->maxTime; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_SetMaxTime * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_SetMaxTime( PKIX_ResourceLimits *rLimits, PKIX_UInt32 maxTime, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_SetMaxTime"); PKIX_NULLCHECK_ONE(rLimits); rLimits->maxTime = maxTime; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_GetMaxFanout * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_GetMaxFanout( PKIX_ResourceLimits *rLimits, PKIX_UInt32 *pMaxFanout, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_GetMaxFanout"); PKIX_NULLCHECK_TWO(rLimits, pMaxFanout); *pMaxFanout = rLimits->maxFanout; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_SetMaxFanout * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_SetMaxFanout( PKIX_ResourceLimits *rLimits, PKIX_UInt32 maxFanout, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_SetMaxFanout"); PKIX_NULLCHECK_ONE(rLimits); rLimits->maxFanout = maxFanout; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_GetMaxDepth * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_GetMaxDepth( PKIX_ResourceLimits *rLimits, PKIX_UInt32 *pMaxDepth, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_GetMaxDepth"); PKIX_NULLCHECK_TWO(rLimits, pMaxDepth); *pMaxDepth = rLimits->maxDepth; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_SetMaxDepth * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_SetMaxDepth( PKIX_ResourceLimits *rLimits, PKIX_UInt32 maxDepth, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_SetMaxDepth"); PKIX_NULLCHECK_ONE(rLimits); rLimits->maxDepth = maxDepth; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_GetMaxNumberOfCerts * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_GetMaxNumberOfCerts( PKIX_ResourceLimits *rLimits, PKIX_UInt32 *pMaxNumber, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_GetMaxNumberOfCerts"); PKIX_NULLCHECK_TWO(rLimits, pMaxNumber); *pMaxNumber = rLimits->maxCertsNumber; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_SetMaxNumberOfCerts * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_SetMaxNumberOfCerts( PKIX_ResourceLimits *rLimits, PKIX_UInt32 maxNumber, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_SetMaxNumberOfCerts"); PKIX_NULLCHECK_ONE(rLimits); rLimits->maxCertsNumber = maxNumber; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_GetMaxNumberOfCRLs * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_GetMaxNumberOfCRLs( PKIX_ResourceLimits *rLimits, PKIX_UInt32 *pMaxNumber, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_GetMaxNumberOfCRLs"); PKIX_NULLCHECK_TWO(rLimits, pMaxNumber); *pMaxNumber = rLimits->maxCrlsNumber; PKIX_RETURN(RESOURCELIMITS); } /* * FUNCTION: PKIX_ResourceLimits_SetMaxNumberOfCRLs * (see comments in pkix_params.h) */ PKIX_Error * PKIX_ResourceLimits_SetMaxNumberOfCRLs( PKIX_ResourceLimits *rLimits, PKIX_UInt32 maxNumber, void *plContext) { PKIX_ENTER(RESOURCELIMITS, "PKIX_ResourceLimits_SetMaxNumberOfCRLs"); PKIX_NULLCHECK_ONE(rLimits); rLimits->maxCrlsNumber = maxNumber; PKIX_RETURN(RESOURCELIMITS); }