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