void wise_free_item(WiseItem_t *wi) { int i; HASH_REMOVE(wih_, itemHash[(int)wi->type], wi); if (wi->sessions) { for (i = 0; i < wi->numSessions; i++) { moloch_nids_decr_outstanding(wi->sessions[i]); } g_free(wi->sessions); } g_free(wi->key); wise_free_ops(wi); MOLOCH_TYPE_FREE(WiseItem_t, wi); }
void wise_free_item_unlocked(WiseItem_t *wi) { int i; HASH_REMOVE(wih_, itemHash[(int)wi->type], wi); if (wi->sessions) { for (i = 0; i < wi->numSessions; i++) { moloch_session_add_cmd(wi->sessions[i], MOLOCH_SES_CMD_FUNC, NULL, NULL, wise_session_cmd_cb); } g_free(wi->sessions); } g_free(wi->key); wise_free_ops(wi); MOLOCH_TYPE_FREE(WiseItem_t, wi); }
void wise_lookup(MolochSession_t *session, WiseRequest_t *request, char *value, int type) { static int lookups = 0; if (*value == 0) return; if (request->numItems >= 256) return; lookups++; if ((lookups % 10000) == 0) wise_print_stats(); stats[type][INTEL_STAT_LOOKUP]++; WiseItem_t *wi; HASH_FIND(wih_, itemHash[type], value, wi); if (wi) { // Already being looked up if (wi->sessions) { if (wi->numSessions < wi->sessionsSize) { wi->sessions[wi->numSessions++] = session; moloch_nids_incr_outstanding(session); } stats[type][INTEL_STAT_INPROGRESS]++; return; } struct timeval currentTime; gettimeofday(¤tTime, NULL); if (wi->loadTime + cacheSecs > currentTime.tv_sec) { wise_process_ops(session, wi); stats[type][INTEL_STAT_CACHE]++; return; } /* Had it in cache, but it is too old */ DLL_REMOVE(wil_, &itemList[type], wi); wise_free_ops(wi); } else { // Know nothing about it wi = MOLOCH_TYPE_ALLOC0(WiseItem_t); wi->key = g_strdup(value); wi->type = type; wi->sessionsSize = 20; HASH_ADD(wih_, itemHash[type], wi->key, wi); } wi->sessions = malloc(sizeof(MolochSession_t *) * wi->sessionsSize); wi->sessions[wi->numSessions++] = session; moloch_nids_incr_outstanding(session); stats[type][INTEL_STAT_REQUEST]++; BSB_EXPORT_u08(request->bsb, type); int len = strlen(value); BSB_EXPORT_u16(request->bsb, len); BSB_EXPORT_ptr(request->bsb, value, len); request->items[request->numItems++] = wi; }