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 #ifndef CKDBM_H 6 #define CKDBM_H 7 8 #include "nssckmdt.h" 9 #include "nssckfw.h" 10 11 /* 12 * I'm including this for access to the arena functions. 13 * Looks like we should publish that API. 14 */ 15 #ifndef BASE_H 16 #include "base.h" 17 #endif /* BASE_H */ 18 19 /* 20 * This is where the Netscape extensions live, at least for now. 21 */ 22 #ifndef CKT_H 23 #include "ckt.h" 24 #endif /* CKT_H */ 25 26 #include "mcom_db.h" 27 28 NSS_EXTERN_DATA NSSCKMDInstance nss_dbm_mdInstance; 29 30 typedef struct nss_dbm_db_struct nss_dbm_db_t; 31 struct nss_dbm_db_struct { 32 DB *db; 33 NSSCKFWMutex *crustylock; 34 }; 35 36 typedef struct nss_dbm_dbt_struct nss_dbm_dbt_t; 37 struct nss_dbm_dbt_struct { 38 DBT dbt; 39 nss_dbm_db_t *my_db; 40 }; 41 42 typedef struct nss_dbm_instance_struct nss_dbm_instance_t; 43 struct nss_dbm_instance_struct { 44 NSSArena *arena; 45 CK_ULONG nSlots; 46 char **filenames; 47 int *flags; /* e.g. O_RDONLY, O_RDWR */ 48 }; 49 50 typedef struct nss_dbm_slot_struct nss_dbm_slot_t; 51 struct nss_dbm_slot_struct { 52 nss_dbm_instance_t *instance; 53 char *filename; 54 int flags; 55 nss_dbm_db_t *token_db; 56 }; 57 58 typedef struct nss_dbm_token_struct nss_dbm_token_t; 59 struct nss_dbm_token_struct { 60 NSSArena *arena; 61 nss_dbm_slot_t *slot; 62 nss_dbm_db_t *session_db; 63 NSSUTF8 *label; 64 }; 65 66 struct nss_dbm_dbt_node { 67 struct nss_dbm_dbt_node *next; 68 nss_dbm_dbt_t *dbt; 69 }; 70 71 typedef struct nss_dbm_session_struct nss_dbm_session_t; 72 struct nss_dbm_session_struct { 73 NSSArena *arena; 74 nss_dbm_token_t *token; 75 CK_ULONG deviceError; 76 struct nss_dbm_dbt_node *session_objects; 77 NSSCKFWMutex *list_lock; 78 }; 79 80 typedef struct nss_dbm_object_struct nss_dbm_object_t; 81 struct nss_dbm_object_struct { 82 NSSArena *arena; /* token or session */ 83 nss_dbm_dbt_t *handle; 84 }; 85 86 typedef struct nss_dbm_find_struct nss_dbm_find_t; 87 struct nss_dbm_find_struct { 88 NSSArena *arena; 89 struct nss_dbm_dbt_node *found; 90 NSSCKFWMutex *list_lock; 91 }; 92 93 NSS_EXTERN NSSCKMDSlot * 94 nss_dbm_mdSlot_factory( 95 nss_dbm_instance_t *instance, 96 char *filename, 97 int flags, 98 CK_RV *pError); 99 100 NSS_EXTERN NSSCKMDToken * 101 nss_dbm_mdToken_factory( 102 nss_dbm_slot_t *slot, 103 CK_RV *pError); 104 105 NSS_EXTERN NSSCKMDSession * 106 nss_dbm_mdSession_factory( 107 nss_dbm_token_t *token, 108 NSSCKFWSession *fwSession, 109 NSSCKFWInstance *fwInstance, 110 CK_BBOOL rw, 111 CK_RV *pError); 112 113 NSS_EXTERN NSSCKMDObject * 114 nss_dbm_mdObject_factory( 115 nss_dbm_object_t *object, 116 CK_RV *pError); 117 118 NSS_EXTERN NSSCKMDFindObjects * 119 nss_dbm_mdFindObjects_factory( 120 nss_dbm_find_t *find, 121 CK_RV *pError); 122 123 NSS_EXTERN nss_dbm_db_t * 124 nss_dbm_db_open( 125 NSSArena *arena, 126 NSSCKFWInstance *fwInstance, 127 char *filename, 128 int flags, 129 CK_RV *pError); 130 131 NSS_EXTERN void 132 nss_dbm_db_close( 133 nss_dbm_db_t *db); 134 135 NSS_EXTERN CK_VERSION 136 nss_dbm_db_get_format_version( 137 nss_dbm_db_t *db); 138 139 NSS_EXTERN CK_RV 140 nss_dbm_db_set_label( 141 nss_dbm_db_t *db, 142 NSSUTF8 *label); 143 144 NSS_EXTERN NSSUTF8 * 145 nss_dbm_db_get_label( 146 nss_dbm_db_t *db, 147 NSSArena *arena, 148 CK_RV *pError); 149 150 NSS_EXTERN CK_RV 151 nss_dbm_db_delete_object( 152 nss_dbm_dbt_t *dbt); 153 154 NSS_EXTERN nss_dbm_dbt_t * 155 nss_dbm_db_create_object( 156 NSSArena *arena, 157 nss_dbm_db_t *db, 158 CK_ATTRIBUTE_PTR pTemplate, 159 CK_ULONG ulAttributeCount, 160 CK_RV *pError, 161 CK_ULONG *pdbrv); 162 163 NSS_EXTERN CK_RV 164 nss_dbm_db_find_objects( 165 nss_dbm_find_t *find, 166 nss_dbm_db_t *db, 167 CK_ATTRIBUTE_PTR pTemplate, 168 CK_ULONG ulAttributeCount, 169 CK_ULONG *pdbrv); 170 171 NSS_EXTERN CK_BBOOL 172 nss_dbm_db_object_still_exists( 173 nss_dbm_dbt_t *dbt); 174 175 NSS_EXTERN CK_ULONG 176 nss_dbm_db_get_object_attribute_count( 177 nss_dbm_dbt_t *dbt, 178 CK_RV *pError, 179 CK_ULONG *pdbrv); 180 181 NSS_EXTERN CK_RV 182 nss_dbm_db_get_object_attribute_types( 183 nss_dbm_dbt_t *dbt, 184 CK_ATTRIBUTE_TYPE_PTR typeArray, 185 CK_ULONG ulCount, 186 CK_ULONG *pdbrv); 187 188 NSS_EXTERN CK_ULONG 189 nss_dbm_db_get_object_attribute_size( 190 nss_dbm_dbt_t *dbt, 191 CK_ATTRIBUTE_TYPE type, 192 CK_RV *pError, 193 CK_ULONG *pdbrv); 194 195 NSS_EXTERN NSSItem * 196 nss_dbm_db_get_object_attribute( 197 nss_dbm_dbt_t *dbt, 198 NSSArena *arena, 199 CK_ATTRIBUTE_TYPE type, 200 CK_RV *pError, 201 CK_ULONG *pdbrv); 202 203 NSS_EXTERN CK_RV 204 nss_dbm_db_set_object_attribute( 205 nss_dbm_dbt_t *dbt, 206 CK_ATTRIBUTE_TYPE type, 207 NSSItem *value, 208 CK_ULONG *pdbrv); 209 210 #endif /* CKDBM_H */ 211