Exemple #1
0
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);
}
Exemple #3
0
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(&currentTime, 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;
}