/** * Deserialization routine for pubdata. */ static void deserialize_pubdata(bstr_t *bs, void *valptr, size_t len) { struct pubdata *pd = valptr; g_assert(sizeof *pd == len); bstr_read_time(bs, &pd->next_enqueue); bstr_read_time(bs, &pd->expiration); /* * Temporary, until 0.96.7 is out: we cannot blindly read the version * since it was lacking in previous experimental versions. Therefore * only do it if we have unread data. * * The test will be removed in versions after 0.96.7, when we can be * certain that the new data format was serialized. * --RAM, 2009-10-18 */ if (bstr_unread_size(bs)) bstr_read_u8(bs, &pd->version); else pd->version = 0; }
/** * Deserialization routine for lifedata. */ static void deserialize_lifedata(bstr_t *bs, gpointer valptr, size_t len) { struct lifedata *ld = valptr; g_assert(sizeof *ld == len); bstr_read_u8(bs, &ld->version); bstr_read_time(bs, &ld->first_seen); bstr_read_time(bs, &ld->last_seen); }
/** * Deserialization routine for guiddata. */ static void deserialize_guiddata(bstr_t *bs, void *valptr, size_t len) { struct guiddata *gd = valptr; uint8 version; g_assert(sizeof *gd == len); bstr_read_u8(bs, &version); bstr_read_time(bs, &gd->create_time); bstr_read_time(bs, &gd->last_time); }
/** * Deserialization routine for keydata. */ static void deserialize_keydata(bstr_t *bs, void *valptr, size_t len) { struct keydata *kd = valptr; int i; uint8 version; g_assert(sizeof *kd == len); /* * Early returns will cause DBMW to complain that the value could not * be deserialized properly. We do not log anything here. */ if (!bstr_read_u8(bs, &version)) return; if (!bstr_read_u8(bs, &kd->values)) return; if (kd->values > G_N_ELEMENTS(kd->creators)) return; STATIC_ASSERT(G_N_ELEMENTS(kd->creators) == G_N_ELEMENTS(kd->dbkeys)); STATIC_ASSERT(G_N_ELEMENTS(kd->creators) == G_N_ELEMENTS(kd->expire)); for (i = 0; i < kd->values; i++) { bstr_read(bs, &kd->creators[i], sizeof(kd->creators[i])); bstr_read(bs, &kd->dbkeys[i], sizeof(kd->dbkeys[i])); bstr_read_time(bs, &kd->expire[i]); } }
/** * Deserialization routine for tokdata. */ static void deserialize_tokdata(bstr_t *bs, void *valptr, size_t len) { struct tokdata *td = valptr; g_assert(sizeof *td == len); bstr_read_time(bs, &td->last_update); bstr_read_u8(bs, &td->length); if (td->length != 0) { td->token = walloc(td->length); bstr_read(bs, td->token, td->length); } else { td->token = NULL; } }