AppLayerDecoderEventsFreeEvents(&tx->decoder_events);
+ if (tx->de_state != NULL)
+ DetectEngineStateFree(tx->de_state);
+
DNSDecrMemcap(sizeof(DNSTransaction), state);
SCFree(tx);
SCReturn;
return NULL;
}
+DetectEngineState *DNSGetTxDetectState(void *vtx)
+{
+ DNSTransaction *tx = (DNSTransaction *)vtx;
+ return tx->de_state;
+}
+
+int DNSSetTxDetectState(void *vtx, DetectEngineState *s)
+{
+ DNSTransaction *tx = (DNSTransaction *)vtx;
+ tx->de_state = s;
+ return 0;
+}
+
void *DNSStateAlloc(void)
{
void *s = SCMalloc(sizeof(DNSState));
AppLayerDecoderEvents *decoder_events; /**< per tx events */
TAILQ_ENTRY(DNSTransaction_) next;
+ DetectEngineState *de_state;
} DNSTransaction;
/** \brief Per flow DNS state container */
void DNSStateTransactionFree(void *state, uint64_t tx_id);
DNSTransaction *DNSTransactionFindByTxId(const DNSState *dns_state, const uint16_t tx_id);
+DetectEngineState *DNSGetTxDetectState(void *vtx);
+int DNSSetTxDetectState(void *vtx, DetectEngineState *s);
+
void DNSSetEvent(DNSState *s, uint8_t e);
void *DNSStateAlloc(void);
void DNSStateFree(void *s);
AppLayerParserRegisterGetEventsFunc(IPPROTO_TCP, ALPROTO_DNS, DNSGetEvents);
AppLayerParserRegisterHasEventsFunc(IPPROTO_TCP, ALPROTO_DNS, DNSHasEvents);
+ AppLayerParserRegisterDetectStateFuncs(IPPROTO_TCP, ALPROTO_DNS,
+ DNSGetTxDetectState, DNSSetTxDetectState);
AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_DNS, DNSGetTx);
AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_DNS, DNSGetTxCnt);
AppLayerParserRegisterGetEventsFunc(IPPROTO_UDP, ALPROTO_DNS, DNSGetEvents);
AppLayerParserRegisterHasEventsFunc(IPPROTO_UDP, ALPROTO_DNS, DNSHasEvents);
+ AppLayerParserRegisterDetectStateFuncs(IPPROTO_UDP, ALPROTO_DNS,
+ DNSGetTxDetectState, DNSSetTxDetectState);
AppLayerParserRegisterGetTx(IPPROTO_UDP, ALPROTO_DNS,
DNSGetTx);