/** * Create a new session structure * @param id - the session id string, already allocated in shm * @param type - the session type * @returns the new cdp_session_t on success or 0 on failure */ cdp_session_t* new_session(str id,cdp_session_type_t type) { cdp_session_t *x=0; x = shm_malloc(sizeof(cdp_session_t)); if (!x){ LOG_NO_MEM("shm",sizeof(cdp_session_t)); goto error; } memset(x,0,sizeof(cdp_session_t)); x->id = id; x->type = type; x->hash = get_str_hash(x->id,sessions_hash_size); return x; error: return 0; }
/** * Finds a session in the session hash table. * \note Returns with a lock on the sessions[x->hash].lock!!! * @param id - the id of the session * @returns the session if found or 0 if not */ cdp_session_t* get_session(str id) { unsigned int hash; cdp_session_t *x; hash = get_str_hash(id,sessions_hash_size); LOG(L_DBG,"calling get session with id %.*s and hash %u\n",id.len,id.s,hash); sessions_lock(hash); for(x = sessions[hash].head;x;x=x->next) { LOG(L_DBG,"looking for |%.*s| in |%.*s|\n",id.len,id.s,x->id.len,x->id.s); if (x->id.len == id.len && strncasecmp(x->id.s,id.s,id.len)==0) return x; } sessions_unlock(hash); return 0; }
/** * Finds a session in the session hash table. * \note Returns with a lock on the sessions[x->hash].lock!!! * @param id - the id of the session * @returns the session if found or 0 if not */ cdp_session_t* cdp_get_session(str id) { unsigned int hash; cdp_session_t *x; if (!id.len) return 0; hash = get_str_hash(id,sessions_hash_size); LM_DBG("called get session with id %.*s and hash %u\n",id.len,id.s,hash); AAASessionsLock(hash); for(x = sessions[hash].head;x;x=x->next){ LM_DBG("looking for |%.*s| in |%.*s|\n",id.len,id.s,x->id.len,x->id.s); if (x->id.len == id.len && strncasecmp(x->id.s,id.s,id.len)==0) return x; } AAASessionsUnlock(hash); LM_DBG("no session found\n"); return 0; }