Back to index

lightning-sunbird  0.9+nobinonly
Classes | Functions
find.c File Reference
#include "ck.h"

Go to the source code of this file.

Classes

struct  NSSCKFWFindObjectsStr

Functions

NSS_EXTERN NSSCKFWFindObjects * nssCKFWFindObjects_Create (NSSCKFWSession *fwSession, NSSCKFWToken *fwToken, NSSCKFWInstance *fwInstance, NSSCKMDFindObjects *mdFindObjects1, NSSCKMDFindObjects *mdFindObjects2, CK_RV *pError)
NSS_EXTERN void nssCKFWFindObjects_Destroy (NSSCKFWFindObjects *fwFindObjects)
NSS_EXTERN NSSCKMDFindObjects * nssCKFWFindObjects_GetMDFindObjects (NSSCKFWFindObjects *fwFindObjects)
NSS_EXTERN NSSCKFWObject * nssCKFWFindObjects_Next (NSSCKFWFindObjects *fwFindObjects, NSSArena *arenaOpt, CK_RV *pError)
NSS_EXTERN NSSCKMDFindObjects * NSSCKFWFindObjects_GetMDFindObjects (NSSCKFWFindObjects *fwFindObjects)

Class Documentation

struct NSSCKFWFindObjectsStr

Definition at line 70 of file find.c.

Class Members
NSSCKFWInstance * fwInstance
NSSCKFWSession * fwSession
NSSCKFWToken * fwToken
NSSCKMDFindObjects * mdFindObjects
NSSCKMDFindObjects * mdfo1
NSSCKMDFindObjects * mdfo2
NSSCKMDInstance * mdInstance
NSSCKMDSession * mdSession
NSSCKMDToken * mdToken
NSSCKFWMutex * mutex

Function Documentation

NSS_EXTERN NSSCKFWFindObjects* nssCKFWFindObjects_Create ( NSSCKFWSession *  fwSession,
NSSCKFWToken *  fwToken,
NSSCKFWInstance *  fwInstance,
NSSCKMDFindObjects *  mdFindObjects1,
NSSCKMDFindObjects *  mdFindObjects2,
CK_RV pError 
)

Definition at line 131 of file find.c.

{
  NSSCKFWFindObjects *fwFindObjects = NULL;
  NSSCKMDSession *mdSession;
  NSSCKMDToken *mdToken;
  NSSCKMDInstance *mdInstance;

  mdSession = nssCKFWSession_GetMDSession(fwSession);
  mdToken = nssCKFWToken_GetMDToken(fwToken);
  mdInstance = nssCKFWInstance_GetMDInstance(fwInstance);

  fwFindObjects = nss_ZNEW(NULL, NSSCKFWFindObjects);
  if( (NSSCKFWFindObjects *)NULL == fwFindObjects ) {
    *pError = CKR_HOST_MEMORY;
    goto loser;
  }

  fwFindObjects->mdfo1 = mdFindObjects1;
  fwFindObjects->mdfo2 = mdFindObjects2;
  fwFindObjects->fwSession = fwSession;
  fwFindObjects->mdSession = mdSession;
  fwFindObjects->fwToken = fwToken;
  fwFindObjects->mdToken = mdToken;
  fwFindObjects->fwInstance = fwInstance;
  fwFindObjects->mdInstance = mdInstance;

  fwFindObjects->mutex = nssCKFWInstance_CreateMutex(fwInstance, NULL, pError);
  if( (NSSCKFWMutex *)NULL == fwFindObjects->mutex ) {
    goto loser;
  }

#ifdef DEBUG
  *pError = findObjects_add_pointer(fwFindObjects);
  if( CKR_OK != *pError ) {
    goto loser;
  }
#endif /* DEBUG */

  return fwFindObjects;

 loser:
  if( fwFindObjects ) {
    if( NULL != mdFindObjects1 ) {
      if( NULL != mdFindObjects1->Final ) {
        fwFindObjects->mdFindObjects = mdFindObjects1;
        mdFindObjects1->Final(mdFindObjects1, fwFindObjects, mdSession, 
          fwSession, mdToken, fwToken, mdInstance, fwInstance);
      }
    }

    if( NULL != mdFindObjects2 ) {
      if( NULL != mdFindObjects2->Final ) {
        fwFindObjects->mdFindObjects = mdFindObjects2;
        mdFindObjects2->Final(mdFindObjects2, fwFindObjects, mdSession, 
          fwSession, mdToken, fwToken, mdInstance, fwInstance);
      }
    }

    nss_ZFreeIf(fwFindObjects);
  }

  if( CKR_OK == *pError ) {
    *pError = CKR_GENERAL_ERROR;
  }

  return (NSSCKFWFindObjects *)NULL;
}

Here is the call graph for this function:

Here is the caller graph for this function:

NSS_EXTERN void nssCKFWFindObjects_Destroy ( NSSCKFWFindObjects *  fwFindObjects)

Definition at line 213 of file find.c.

{
#ifdef NSSDEBUG
  if( CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects) ) {
    return;
  }
#endif /* NSSDEBUG */

  (void)nssCKFWMutex_Destroy(fwFindObjects->mutex);

  if( (NSSCKMDFindObjects *)NULL != fwFindObjects->mdfo1 ) {
    if( (void *)NULL != (void *)fwFindObjects->mdfo1->Final ) {
      fwFindObjects->mdFindObjects = fwFindObjects->mdfo1;
      fwFindObjects->mdfo1->Final(fwFindObjects->mdfo1, fwFindObjects,
        fwFindObjects->mdSession, fwFindObjects->fwSession, 
        fwFindObjects->mdToken, fwFindObjects->fwToken,
        fwFindObjects->mdInstance, fwFindObjects->fwInstance);
    }
  }

  if( (NSSCKMDFindObjects *)NULL != fwFindObjects->mdfo2 ) {
    if( (void *)NULL != (void *)fwFindObjects->mdfo2->Final ) {
      fwFindObjects->mdFindObjects = fwFindObjects->mdfo2;
      fwFindObjects->mdfo2->Final(fwFindObjects->mdfo2, fwFindObjects,
        fwFindObjects->mdSession, fwFindObjects->fwSession, 
        fwFindObjects->mdToken, fwFindObjects->fwToken,
        fwFindObjects->mdInstance, fwFindObjects->fwInstance);
    }
  }

  nss_ZFreeIf(fwFindObjects);

#ifdef DEBUG
  (void)findObjects_remove_pointer(fwFindObjects);
#endif /* DEBUG */

  return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

NSS_EXTERN NSSCKMDFindObjects* nssCKFWFindObjects_GetMDFindObjects ( NSSCKFWFindObjects *  fwFindObjects)

Definition at line 260 of file find.c.

{
#ifdef NSSDEBUG
  if( CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects) ) {
    return (NSSCKMDFindObjects *)NULL;
  }
#endif /* NSSDEBUG */

  return fwFindObjects->mdFindObjects;
}

Here is the caller graph for this function:

NSS_EXTERN NSSCKMDFindObjects* NSSCKFWFindObjects_GetMDFindObjects ( NSSCKFWFindObjects *  fwFindObjects)

Definition at line 396 of file find.c.

{
#ifdef DEBUG
  if( CKR_OK != nssCKFWFindObjects_verifyPointer(fwFindObjects) ) {
    return (NSSCKMDFindObjects *)NULL;
  }
#endif /* DEBUG */

  return nssCKFWFindObjects_GetMDFindObjects(fwFindObjects);
}

Here is the call graph for this function:

NSS_EXTERN NSSCKFWObject* nssCKFWFindObjects_Next ( NSSCKFWFindObjects *  fwFindObjects,
NSSArena *  arenaOpt,
CK_RV pError 
)

Definition at line 279 of file find.c.

{
  NSSCKMDObject *mdObject;
  NSSCKFWObject *fwObject = (NSSCKFWObject *)NULL;
  NSSArena *objArena;

#ifdef NSSDEBUG
  if( (CK_RV *)NULL == pError ) {
    return (NSSCKFWObject *)NULL;
  }

  *pError = nssCKFWFindObjects_verifyPointer(fwFindObjects);
  if( CKR_OK != *pError ) {
    return (NSSCKFWObject *)NULL;
  }
#endif /* NSSDEBUG */

  *pError = nssCKFWMutex_Lock(fwFindObjects->mutex);
  if( CKR_OK != *pError ) {
    return (NSSCKFWObject *)NULL;
  }

  if( (NSSCKMDFindObjects *)NULL != fwFindObjects->mdfo1 ) {
    if( (void *)NULL != (void *)fwFindObjects->mdfo1->Next ) {
      fwFindObjects->mdFindObjects = fwFindObjects->mdfo1;
      mdObject = fwFindObjects->mdfo1->Next(fwFindObjects->mdfo1,
        fwFindObjects, fwFindObjects->mdSession, fwFindObjects->fwSession,
        fwFindObjects->mdToken, fwFindObjects->fwToken, 
        fwFindObjects->mdInstance, fwFindObjects->fwInstance,
        arenaOpt, pError);
      if( (NSSCKMDObject *)NULL == mdObject ) {
        if( CKR_OK != *pError ) {
          goto done;
        }

        /* All done. */
        fwFindObjects->mdfo1->Final(fwFindObjects->mdfo1, fwFindObjects,
          fwFindObjects->mdSession, fwFindObjects->fwSession,
          fwFindObjects->mdToken, fwFindObjects->fwToken, 
          fwFindObjects->mdInstance, fwFindObjects->fwInstance);
        fwFindObjects->mdfo1 = (NSSCKMDFindObjects *)NULL;
      } else {
        goto wrap;
      }
    }
  }

  if( (NSSCKMDFindObjects *)NULL != fwFindObjects->mdfo2 ) {
    if( (void *)NULL != (void *)fwFindObjects->mdfo2->Next ) {
      fwFindObjects->mdFindObjects = fwFindObjects->mdfo2;
      mdObject = fwFindObjects->mdfo2->Next(fwFindObjects->mdfo2,
        fwFindObjects, fwFindObjects->mdSession, fwFindObjects->fwSession,
        fwFindObjects->mdToken, fwFindObjects->fwToken, 
        fwFindObjects->mdInstance, fwFindObjects->fwInstance,
        arenaOpt, pError);
      if( (NSSCKMDObject *)NULL == mdObject ) {
        if( CKR_OK != *pError ) {
          goto done;
        }

        /* All done. */
        fwFindObjects->mdfo2->Final(fwFindObjects->mdfo2, fwFindObjects,
          fwFindObjects->mdSession, fwFindObjects->fwSession,
          fwFindObjects->mdToken, fwFindObjects->fwToken, 
          fwFindObjects->mdInstance, fwFindObjects->fwInstance);
        fwFindObjects->mdfo2 = (NSSCKMDFindObjects *)NULL;
      } else {
        goto wrap;
      }
    }
  }
  
  /* No more objects */
  *pError = CKR_OK;
  goto done;

 wrap:
  /*
   * This is less than ideal-- we should determine if it's a token
   * object or a session object, and use the appropriate arena.
   * But that duplicates logic in nssCKFWObject_IsTokenObject.
   * Worry about that later.  For now, be conservative, and use
   * the token arena.
   */
  objArena = nssCKFWToken_GetArena(fwFindObjects->fwToken, pError);
  if( (NSSArena *)NULL == objArena ) {
    if( CKR_OK == *pError ) {
      *pError = CKR_HOST_MEMORY;
    }
    goto done;
  }

  fwObject = nssCKFWObject_Create(objArena, mdObject,
               fwFindObjects->fwSession, fwFindObjects->fwToken, 
               fwFindObjects->fwInstance, pError);
  if( (NSSCKFWObject *)NULL == fwObject ) {
    if( CKR_OK == *pError ) {
      *pError = CKR_GENERAL_ERROR;
    }
  }

 done:
  (void)nssCKFWMutex_Unlock(fwFindObjects->mutex);
  return fwObject;
}

Here is the call graph for this function:

Here is the caller graph for this function: