/* add a flowbit to the flow */ static void FlowAlertSidAdd(Flow *f, uint32_t sid) { FlowAlertSid *fb = FlowAlertSidGet(f, sid); if (fb == NULL) { fb = SCMalloc(sizeof(FlowAlertSid)); if (unlikely(fb == NULL)) return; fb->type = DETECT_FLOWALERTSID; fb->sid = sid; fb->next = NULL; SCLogDebug("fb->type %u, sid %"PRIu32"", fb->type, fb->sid); GenericVarAppend(&f->flowvar, (GenericVar *)fb); SCLogDebug("fb->type %u, sid %"PRIu32"", fb->type, fb->sid); SCLogDebug("adding flowalertsid with sid %" PRIu32 " (%"PRIu32")", sid, fb->sid); #ifdef FLOWALERTSID_STATS SCMutexLock(&flowbits_mutex); flowbits_added++; flowbits_memuse += sizeof(FlowAlertSid); if (flowbits_memuse > flowbits_memuse_max) flowbits_memuse_max = flowbits_memuse; SCMutexUnlock(&flowbits_mutex); #endif /* FLOWALERTSID_STATS */ } }
/* add a flowbit to the flow */ static void FlowBitAdd(Flow *f, uint16_t idx) { FlowBit *fb = FlowBitGet(f, idx); if (fb == NULL) { fb = SCMalloc(sizeof(FlowBit)); if (unlikely(fb == NULL)) return; fb->type = DETECT_FLOWBITS; fb->idx = idx; fb->next = NULL; GenericVarAppend(&f->flowvar, (GenericVar *)fb); } }
/* add a flowvar to the flow, or update it */ void FlowVarAddIntNoLock(Flow *f, uint16_t idx, uint32_t value) { FlowVar *fv = FlowVarGet(f, idx); if (fv == NULL) { fv = SCMalloc(sizeof(FlowVar)); if (unlikely(fv == NULL)) return; fv->type = DETECT_FLOWVAR; fv->datatype = FLOWVAR_TYPE_INT; fv->idx = idx; fv->data.fv_int.value= value; fv->next = NULL; GenericVarAppend(&f->flowvar, (GenericVar *)fv); } else { FlowVarUpdateInt(fv, value); } }
/* add a flowvar to the flow, or update it */ void FlowVarAddStrNoLock(Flow *f, uint16_t idx, uint8_t *value, uint16_t size) { FlowVar *fv = FlowVarGet(f, idx); if (fv == NULL) { fv = SCMalloc(sizeof(FlowVar)); if (unlikely(fv == NULL)) return; fv->type = DETECT_FLOWVAR; fv->datatype = FLOWVAR_TYPE_STR; fv->idx = idx; fv->data.fv_str.value = value; fv->data.fv_str.value_len = size; fv->next = NULL; GenericVarAppend(&f->flowvar, (GenericVar *)fv); } else { FlowVarUpdateStr(fv, value, size); } }
/* add a flowbit to the flow */ static void HostBitAdd(Host *h, uint16_t idx, uint32_t expire) { XBit *fb = HostBitGet(h, idx); if (fb == NULL) { fb = SCMalloc(sizeof(XBit)); if (unlikely(fb == NULL)) return; fb->type = DETECT_XBITS; fb->idx = idx; fb->next = NULL; fb->expire = expire; GenericVar *gv = HostGetStorageById(h, host_bit_id); GenericVarAppend(&gv, (GenericVar *)fb); HostSetStorageById(h, host_bit_id, gv); // bit already set, lets update it's time } else { fb->expire = expire; } }
/* add a flowbit to the flow */ static void FlowBitAdd(Flow *f, uint16_t idx) { FlowBit *fb = FlowBitGet(f, idx); if (fb == NULL) { fb = SCMalloc(sizeof(FlowBit)); if (unlikely(fb == NULL)) return; fb->type = DETECT_FLOWBITS; fb->idx = idx; fb->next = NULL; GenericVarAppend(&f->flowvar, (GenericVar *)fb); //printf("FlowBitAdd: adding flowbit with idx %" PRIu32 "\n", idx); #ifdef FLOWBITS_STATS SCMutexLock(&flowbits_mutex); flowbits_added++; flowbits_memuse += sizeof(FlowBit); if (flowbits_memuse > flowbits_memuse_max) flowbits_memuse_max = flowbits_memuse; SCMutexUnlock(&flowbits_mutex); #endif /* FLOWBITS_STATS */ } }