From 01a35bb604fa05bd38265230ebe6da1a3bdac9e9 Mon Sep 17 00:00:00 2001 From: Anoop Saldanha Date: Sun, 27 Nov 2011 14:18:46 +0530 Subject: [PATCH] introduce app layer local storage api support --- src/app-layer-detect-proto.c | 4 ++++ src/app-layer-parser.c | 9 +++++++++ src/app-layer-parser.h | 2 ++ src/decode.h | 2 ++ 4 files changed, 17 insertions(+) diff --git a/src/app-layer-detect-proto.c b/src/app-layer-detect-proto.c index 37a6da04f4..af8dc6faed 100644 --- a/src/app-layer-detect-proto.c +++ b/src/app-layer-detect-proto.c @@ -282,6 +282,10 @@ void AlpProtoFinalizeThread(AlpProtoDetectCtx *ctx, AlpProtoDetectThreadCtx *tct PmqSetup(&tctx->toserver.pmq, sig_maxid, pat_maxid); } + int i; + for (i = 0; i < ALPROTO_MAX; i++) { + tctx->alproto_local_storage[i] = AppLayerGetProtocolParserLocalStorage(i); + } } void AlpProtoDeFinalize2Thread(AlpProtoDetectThreadCtx *tctx) { diff --git a/src/app-layer-parser.c b/src/app-layer-parser.c index 02f373588c..b9bd8ab774 100644 --- a/src/app-layer-parser.c +++ b/src/app-layer-parser.c @@ -596,6 +596,15 @@ void AppLayerRegisterTransactionIdFuncs(uint16_t proto, al_proto_table[proto].StateTransactionFree = StateTransactionFree; } +void *AppLayerGetProtocolParserLocalStorage(uint16_t proto) +{ + if (al_proto_table[proto].LocalStorageAlloc != NULL) { + return al_proto_table[proto].LocalStorageAlloc(); + } + + return NULL; +} + /** \brief Indicate to the app layer parser that a logger is active * for this protocol. */ diff --git a/src/app-layer-parser.h b/src/app-layer-parser.h index 3e2c486ce9..bd5b656877 100644 --- a/src/app-layer-parser.h +++ b/src/app-layer-parser.h @@ -48,6 +48,7 @@ typedef struct AppLayerProto_ { void (*StateFree)(void *); void (*StateUpdateTransactionId)(void *, uint16_t *); void (*StateTransactionFree)(void *, uint16_t); + void *(*LocalStorageAlloc)(void); } AppLayerProto; @@ -235,6 +236,7 @@ void AppLayerRegisterStateFuncs(uint16_t proto, void *(*StateAlloc)(void), void AppLayerRegisterTransactionIdFuncs(uint16_t proto, void (*StateTransactionId)(void *, uint16_t *), void (*StateTransactionFree)(void *, uint16_t id)); +void *AppLayerGetProtocolParserLocalStorage(uint16_t); void AppLayerRegisterLogger(uint16_t proto); uint16_t AppLayerGetProtoByName(const char *); diff --git a/src/decode.h b/src/decode.h index 5e18d71946..dda5f38d57 100644 --- a/src/decode.h +++ b/src/decode.h @@ -490,6 +490,8 @@ typedef struct AlpProtoDetectThreadCtx_ { AlpProtoDetectDirectionThread toserver; AlpProtoDetectDirectionThread toclient; + void *alproto_local_storage[ALPROTO_MAX]; + #ifdef PROFILING uint64_t ticks_start; uint64_t ticks_end;