Go to the source code of this file.
Data Structures | |
struct | ast_db_entry |
Functions | |
int | ast_db_get (const char *family, const char *key, char *out, int outlen) |
int | ast_db_put (const char *family, const char *key, char *value) |
int | ast_db_del (const char *family, const char *key) |
int | ast_db_deltree (const char *family, const char *keytree) |
ast_db_entry * | ast_db_gettree (const char *family, const char *keytree) |
void | ast_db_freetree (struct ast_db_entry *entry) |
|
Definition at line 177 of file db.c. References ast_log(), ast_mutex_lock, ast_mutex_unlock, key(), and LOG_DEBUG. Referenced by ast_privacy_set().
00178 { 00179 char fullkey[256]; 00180 DBT key; 00181 int res; 00182 00183 ast_mutex_lock(&dblock); 00184 if (dbinit()) { 00185 ast_mutex_unlock(&dblock); 00186 return -1; 00187 } 00188 00189 snprintf(fullkey, sizeof(fullkey), "/%s/%s", family, keys); 00190 memset(&key, 0, sizeof(key)); 00191 key.data = fullkey; 00192 key.size = strlen(fullkey) + 1; 00193 00194 res = astdb->del(astdb, &key, 0); 00195 astdb->sync(astdb, 0); 00196 00197 ast_mutex_unlock(&dblock); 00198 00199 if (res) 00200 ast_log(LOG_DEBUG, "Unable to find key '%s' in family '%s'\n", keys, family); 00201 return res; 00202 } |
|
Definition at line 69 of file db.c. References ast_mutex_lock, ast_mutex_unlock, and key(). Referenced by ast_privacy_reset().
00070 { 00071 char prefix[256]; 00072 DBT key, data; 00073 char *keys; 00074 int res; 00075 int pass; 00076 00077 if (family) { 00078 if (keytree) 00079 snprintf(prefix, sizeof(prefix), "/%s/%s", family, keytree); 00080 else 00081 snprintf(prefix, sizeof(prefix), "/%s", family); 00082 } else if (keytree) 00083 return -1; 00084 else 00085 strcpy(prefix, ""); 00086 00087 ast_mutex_lock(&dblock); 00088 if (dbinit()) 00089 return -1; 00090 00091 memset(&key, 0, sizeof(key)); 00092 memset(&data, 0, sizeof(data)); 00093 pass = 0; 00094 while(!(res = astdb->seq(astdb, &key, &data, pass++ ? R_NEXT : R_FIRST))) { 00095 if (key.size) { 00096 keys = key.data; 00097 keys[key.size - 1] = '\0'; 00098 } else 00099 keys = "<bad key>"; 00100 if (keymatch(keys, prefix)) { 00101 astdb->del(astdb, &key, 0); 00102 } 00103 } 00104 astdb->sync(astdb, 0); 00105 ast_mutex_unlock(&dblock); 00106 return 0; 00107 } |
|
Definition at line 365 of file db.c. References free, and ast_db_entry::next.
00366 { 00367 struct ast_db_entry *last; 00368 while(dbe) { 00369 last = dbe; 00370 dbe = dbe->next; 00371 free(last); 00372 } 00373 } |
|
Definition at line 136 of file db.c. References ast_log(), ast_mutex_lock, ast_mutex_unlock, key(), LOG_DEBUG, and LOG_NOTICE. Referenced by ast_privacy_check().
00137 { 00138 char fullkey[256]=""; 00139 DBT key, data; 00140 int res; 00141 00142 ast_mutex_lock(&dblock); 00143 if (dbinit()) { 00144 ast_mutex_unlock(&dblock); 00145 return -1; 00146 } 00147 00148 snprintf(fullkey, sizeof(fullkey), "/%s/%s", family, keys); 00149 memset(&key, 0, sizeof(key)); 00150 memset(&data, 0, sizeof(data)); 00151 memset(value, 0, valuelen); 00152 key.data = fullkey; 00153 key.size = strlen(fullkey) + 1; 00154 00155 res = astdb->get(astdb, &key, &data, 0); 00156 00157 ast_mutex_unlock(&dblock); 00158 00159 /* Be sure to NULL terminate our data either way */ 00160 if (res) { 00161 ast_log(LOG_DEBUG, "Unable to find key '%s' in family '%s'\n", keys, family); 00162 } else { 00163 #if 0 00164 printf("Got value of size %d\n", data.size); 00165 #endif 00166 if (data.size) { 00167 ((char *)data.data)[data.size - 1] = '\0'; 00168 /* Make sure that we don't write too much to the dst pointer or we don't read too much from the source pointer */ 00169 strncpy(value, data.data, (valuelen > data.size) ? data.size : valuelen); 00170 } else { 00171 ast_log(LOG_NOTICE, "Strange, empty value for /%s/%s\n", family, keys); 00172 } 00173 } 00174 return res; 00175 } |
|
Definition at line 307 of file db.c. References ast_log(), ast_mutex_lock, ast_mutex_unlock, key(), LOG_WARNING, and malloc.
00308 { 00309 char prefix[256]; 00310 DBT key, data; 00311 char *keys, *values; 00312 int res; 00313 int pass; 00314 struct ast_db_entry *last = NULL; 00315 struct ast_db_entry *cur, *ret=NULL; 00316 00317 if (family && strlen(family)) { 00318 if (keytree && strlen(keytree)) 00319 /* Family and key tree */ 00320 snprintf(prefix, sizeof(prefix), "/%s/%s", family, prefix); 00321 else 00322 /* Family only */ 00323 snprintf(prefix, sizeof(prefix), "/%s", family); 00324 } else 00325 strcpy(prefix, ""); 00326 ast_mutex_lock(&dblock); 00327 if (dbinit()) { 00328 ast_mutex_unlock(&dblock); 00329 ast_log(LOG_WARNING, "Database unavailable\n"); 00330 return NULL; 00331 } 00332 memset(&key, 0, sizeof(key)); 00333 memset(&data, 0, sizeof(data)); 00334 pass = 0; 00335 while(!(res = astdb->seq(astdb, &key, &data, pass++ ? R_NEXT : R_FIRST))) { 00336 if (key.size) { 00337 keys = key.data; 00338 keys[key.size - 1] = '\0'; 00339 } else 00340 keys = "<bad key>"; 00341 if (data.size) { 00342 values = data.data; 00343 values[data.size - 1]='\0'; 00344 } else 00345 values = "<bad value>"; 00346 if (keymatch(keys, prefix)) { 00347 cur = malloc(sizeof(struct ast_db_entry) + strlen(keys) + strlen(values) + 2); 00348 if (cur) { 00349 cur->next = NULL; 00350 cur->key = cur->data + strlen(values) + 1; 00351 strcpy(cur->data, values); 00352 strcpy(cur->key, keys); 00353 if (last) 00354 last->next = cur; 00355 else 00356 ret = cur; 00357 last = cur; 00358 } 00359 } 00360 } 00361 ast_mutex_unlock(&dblock); 00362 return ret; 00363 } |
|
Definition at line 109 of file db.c. References ast_log(), ast_mutex_lock, ast_mutex_unlock, key(), and LOG_WARNING. Referenced by ast_privacy_set().
00110 { 00111 char fullkey[256]; 00112 DBT key, data; 00113 int res; 00114 00115 ast_mutex_lock(&dblock); 00116 if (dbinit()) { 00117 ast_mutex_unlock(&dblock); 00118 return -1; 00119 } 00120 00121 snprintf(fullkey, sizeof(fullkey), "/%s/%s", family, keys); 00122 memset(&key, 0, sizeof(key)); 00123 memset(&data, 0, sizeof(data)); 00124 key.data = fullkey; 00125 key.size = strlen(fullkey) + 1; 00126 data.data = value; 00127 data.size = strlen(value) + 1; 00128 res = astdb->put(astdb, &key, &data, 0); 00129 astdb->sync(astdb, 0); 00130 ast_mutex_unlock(&dblock); 00131 if (res) 00132 ast_log(LOG_WARNING, "Unable to put value '%s' for key '%s' in family '%s'\n", value, keys, family); 00133 return res; 00134 } |