Lines Matching defs:state
154 } state;
178 static ares_bool_t ares__init_rand_engine(ares_rand_state *state)
180 state->cache_remaining = 0;
183 if (!(state->bad_backends & ARES_RAND_OS)) {
184 state->type = ARES_RAND_OS;
190 if (!(state->bad_backends & ARES_RAND_FILE)) {
191 state->type = ARES_RAND_FILE;
192 state->state.rand_file = fopen(CARES_RANDOM_FILE, "rb");
193 if (state->state.rand_file) {
194 setvbuf(state->state.rand_file, NULL, _IONBF, 0);
201 state->type = ARES_RAND_RC4;
202 ares_rc4_init(&state->state.rc4);
210 ares_rand_state *state = NULL;
212 state = ares_malloc_zero(sizeof(*state));
213 if (!state) {
217 if (!ares__init_rand_engine(state)) {
218 ares_free(state);
222 return state;
225 static void ares__clear_rand_state(ares_rand_state *state)
227 if (!state) {
231 switch (state->type) {
235 fclose(state->state.rand_file);
242 static void ares__reinit_rand(ares_rand_state *state)
244 ares__clear_rand_state(state);
245 ares__init_rand_engine(state);
248 void ares__destroy_rand_state(ares_rand_state *state)
250 if (!state) {
254 ares__clear_rand_state(state);
255 ares_free(state);
258 static void ares__rand_bytes_fetch(ares_rand_state *state, unsigned char *buf,
264 switch (state->type) {
282 state->bad_backends |= ARES_RAND_OS;
302 state->state.rand_file);
304 break; /* critical error, will reinit rand state */
315 ares_rc4_prng(&state->state.rc4, buf, len);
321 ares__reinit_rand(state);
325 void ares__rand_bytes(ares_rand_state *state, unsigned char *buf, size_t len)
329 if (len > state->cache_remaining && len < sizeof(state->cache)) {
330 size_t fetch_size = sizeof(state->cache) - state->cache_remaining;
331 ares__rand_bytes_fetch(state, state->cache, fetch_size);
332 state->cache_remaining = sizeof(state->cache);
336 if (len <= state->cache_remaining) {
337 size_t offset = sizeof(state->cache) - state->cache_remaining;
338 memcpy(buf, state->cache + offset, len);
339 state->cache_remaining -= len;
344 ares__rand_bytes_fetch(state, buf, len);
347 unsigned short ares__generate_new_id(ares_rand_state *state)
351 ares__rand_bytes(state, (unsigned char *)&r, sizeof(r));