int handle_resume_delete_req(main_server_st * s, struct proc_st *proc, const SessionResumeFetchMsg * req) { tls_cache_st *cache; struct htable_iter iter; size_t key; key = hash_any(req->session_id.data, req->session_id.len, 0); cache = htable_firstval(s->tls_db.ht, &iter, key); while (cache != NULL) { if (req->session_id.len == cache->session_id_size && memcmp(req->session_id.data, cache->session_id, req->session_id.len) == 0) { cache->session_data_size = 0; cache->session_id_size = 0; htable_delval(s->tls_db.ht, &iter); talloc_free(cache); s->tls_db.entries--; return 0; } cache = htable_nextval(s->tls_db.ht, &iter, key); } return 0; }
int handle_resume_fetch_req(main_server_st * s, struct proc_st *proc, const SessionResumeFetchMsg * req, SessionResumeReplyMsg * rep) { tls_cache_st *cache; struct htable_iter iter; size_t key; rep->reply = SESSION_RESUME_REPLY_MSG__RESUME__REP__FAILED; key = hash_any(req->session_id.data, req->session_id.len, 0); cache = htable_firstval(s->tls_db.ht, &iter, key); while (cache != NULL) { if (req->session_id.len == cache->session_id_size && memcmp(req->session_id.data, cache->session_id, req->session_id.len) == 0) { if (proc->remote_addr_len == cache->remote_addr_len && ip_cmp(&proc->remote_addr, &cache->remote_addr) == 0) { rep->reply = SESSION_RESUME_REPLY_MSG__RESUME__REP__OK; rep->has_session_data = 1; rep->session_data.data = (void *)cache->session_data; rep->session_data.len = cache->session_data_size; mslog_hex(s, proc, LOG_DEBUG, "TLS session DB resuming", req->session_id.data, req->session_id.len, 0); return 0; } } cache = htable_nextval(s->tls_db.ht, &iter, key); } return 0; }
bool kmscon_hashtable_find(struct kmscon_hashtable *tbl, void **out, void *key) { struct htable_iter i; struct kmscon_hashentry *entry; size_t hash; if (!tbl) return -EINVAL; hash = tbl->hash_cb(key); for (entry = htable_firstval(&tbl->tbl, &i, hash); entry; entry = htable_nextval(&tbl->tbl, &i, hash)) { if (tbl->equal_cb(key, entry->key)) { if (out) *out = entry->value; return true; } } return false; }