object.c (4883B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #include "ckdbm.h" 6 7 static void 8 nss_dbm_mdObject_Finalize( 9 NSSCKMDObject *mdObject, 10 NSSCKFWObject *fwObject, 11 NSSCKMDSession *mdSession, 12 NSSCKFWSession *fwSession, 13 NSSCKMDToken *mdToken, 14 NSSCKFWToken *fwToken, 15 NSSCKMDInstance *mdInstance, 16 NSSCKFWInstance *fwInstance) 17 { 18 ; 19 } 20 21 static CK_RV 22 nss_dbm_mdObject_Destroy( 23 NSSCKMDObject *mdObject, 24 NSSCKFWObject *fwObject, 25 NSSCKMDSession *mdSession, 26 NSSCKFWSession *fwSession, 27 NSSCKMDToken *mdToken, 28 NSSCKFWToken *fwToken, 29 NSSCKMDInstance *mdInstance, 30 NSSCKFWInstance *fwInstance) 31 { 32 nss_dbm_object_t *object = (nss_dbm_object_t *)mdObject->etc; 33 return nss_dbm_db_delete_object(object->handle); 34 } 35 36 static CK_ULONG 37 nss_dbm_mdObject_GetAttributeCount( 38 NSSCKMDObject *mdObject, 39 NSSCKFWObject *fwObject, 40 NSSCKMDSession *mdSession, 41 NSSCKFWSession *fwSession, 42 NSSCKMDToken *mdToken, 43 NSSCKFWToken *fwToken, 44 NSSCKMDInstance *mdInstance, 45 NSSCKFWInstance *fwInstance, 46 CK_RV *pError) 47 { 48 nss_dbm_object_t *object = (nss_dbm_object_t *)mdObject->etc; 49 nss_dbm_session_t *session = (nss_dbm_session_t *)mdSession->etc; 50 return nss_dbm_db_get_object_attribute_count(object->handle, pError, 51 &session->deviceError); 52 } 53 54 static CK_RV 55 nss_dbm_mdObject_GetAttributeTypes( 56 NSSCKMDObject *mdObject, 57 NSSCKFWObject *fwObject, 58 NSSCKMDSession *mdSession, 59 NSSCKFWSession *fwSession, 60 NSSCKMDToken *mdToken, 61 NSSCKFWToken *fwToken, 62 NSSCKMDInstance *mdInstance, 63 NSSCKFWInstance *fwInstance, 64 CK_ATTRIBUTE_TYPE_PTR typeArray, 65 CK_ULONG ulCount) 66 { 67 nss_dbm_object_t *object = (nss_dbm_object_t *)mdObject->etc; 68 nss_dbm_session_t *session = (nss_dbm_session_t *)mdSession->etc; 69 return nss_dbm_db_get_object_attribute_types(object->handle, typeArray, 70 ulCount, &session->deviceError); 71 } 72 73 static CK_ULONG 74 nss_dbm_mdObject_GetAttributeSize( 75 NSSCKMDObject *mdObject, 76 NSSCKFWObject *fwObject, 77 NSSCKMDSession *mdSession, 78 NSSCKFWSession *fwSession, 79 NSSCKMDToken *mdToken, 80 NSSCKFWToken *fwToken, 81 NSSCKMDInstance *mdInstance, 82 NSSCKFWInstance *fwInstance, 83 CK_ATTRIBUTE_TYPE attribute, 84 CK_RV *pError) 85 { 86 nss_dbm_object_t *object = (nss_dbm_object_t *)mdObject->etc; 87 nss_dbm_session_t *session = (nss_dbm_session_t *)mdSession->etc; 88 return nss_dbm_db_get_object_attribute_size(object->handle, attribute, pError, 89 &session->deviceError); 90 } 91 92 static NSSItem * 93 nss_dbm_mdObject_GetAttribute( 94 NSSCKMDObject *mdObject, 95 NSSCKFWObject *fwObject, 96 NSSCKMDSession *mdSession, 97 NSSCKFWSession *fwSession, 98 NSSCKMDToken *mdToken, 99 NSSCKFWToken *fwToken, 100 NSSCKMDInstance *mdInstance, 101 NSSCKFWInstance *fwInstance, 102 CK_ATTRIBUTE_TYPE attribute, 103 CK_RV *pError) 104 { 105 nss_dbm_object_t *object = (nss_dbm_object_t *)mdObject->etc; 106 nss_dbm_session_t *session = (nss_dbm_session_t *)mdSession->etc; 107 return nss_dbm_db_get_object_attribute(object->handle, object->arena, attribute, 108 pError, &session->deviceError); 109 } 110 111 static CK_RV 112 nss_dbm_mdObject_SetAttribute( 113 NSSCKMDObject *mdObject, 114 NSSCKFWObject *fwObject, 115 NSSCKMDSession *mdSession, 116 NSSCKFWSession *fwSession, 117 NSSCKMDToken *mdToken, 118 NSSCKFWToken *fwToken, 119 NSSCKMDInstance *mdInstance, 120 NSSCKFWInstance *fwInstance, 121 CK_ATTRIBUTE_TYPE attribute, 122 NSSItem *value) 123 { 124 nss_dbm_object_t *object = (nss_dbm_object_t *)mdObject->etc; 125 nss_dbm_session_t *session = (nss_dbm_session_t *)mdSession->etc; 126 return nss_dbm_db_set_object_attribute(object->handle, attribute, value, 127 &session->deviceError); 128 } 129 130 NSS_IMPLEMENT NSSCKMDObject * 131 nss_dbm_mdObject_factory( 132 nss_dbm_object_t *object, 133 CK_RV *pError) 134 { 135 NSSCKMDObject *rv; 136 137 rv = nss_ZNEW(object->arena, NSSCKMDObject); 138 if ((NSSCKMDObject *)NULL == rv) { 139 *pError = CKR_HOST_MEMORY; 140 return (NSSCKMDObject *)NULL; 141 } 142 143 rv->etc = (void *)object; 144 rv->Finalize = nss_dbm_mdObject_Finalize; 145 rv->Destroy = nss_dbm_mdObject_Destroy; 146 /* IsTokenObject can be deferred */ 147 rv->GetAttributeCount = nss_dbm_mdObject_GetAttributeCount; 148 rv->GetAttributeTypes = nss_dbm_mdObject_GetAttributeTypes; 149 rv->GetAttributeSize = nss_dbm_mdObject_GetAttributeSize; 150 rv->GetAttribute = nss_dbm_mdObject_GetAttribute; 151 rv->SetAttribute = nss_dbm_mdObject_SetAttribute; 152 /* GetObjectSize can be deferred */ 153 154 return rv; 155 }