snprintf(am->pname, sizeof(am->pname), "%s", am->name);
am->direction = direction;
am->sm_list = sm_list;
+ am->sm_list_base = sm_list;
am->priority = priority;
am->type = DETECT_BUFFER_MPM_TYPE_APP;
am->name = t->name;
am->direction = t->direction;
am->sm_list = id; // use new id
+ am->sm_list_base = t->sm_list;
am->type = DETECT_BUFFER_MPM_TYPE_APP;
am->PrefilterRegisterWithListId = t->PrefilterRegisterWithListId;
am->app_v2.GetData = t->app_v2.GetData;
am->name = t->name;
snprintf(am->pname, sizeof(am->pname), "%s#%d", am->name, id);
am->sm_list = id; // use new id
+ am->sm_list_base = t->sm_list;
am->type = DETECT_BUFFER_MPM_TYPE_PKT;
am->PrefilterRegisterWithListId = t->PrefilterRegisterWithListId;
am->pkt_v1.GetData = t->pkt_v1.GetData;
"failed to register inspect engine %s: %s", name, strerror(errno));
}
new_engine->sm_list = sm_list;
+ new_engine->sm_list_base = sm_list;
new_engine->v1.Callback = Callback;
new_engine->v1.GetData = GetPktData;
new_engine->alproto = alproto;
new_engine->dir = direction;
new_engine->sm_list = sm_list;
+ new_engine->sm_list_base = sm_list;
new_engine->progress = progress;
new_engine->v2.Callback = Callback2;
new_engine->v2.GetData = GetData;
new_engine->alproto = t->alproto;
new_engine->dir = t->dir;
new_engine->sm_list = new_list; /* use new list id */
+ new_engine->sm_list_base = sm_list;
new_engine->progress = t->progress;
new_engine->v2 = t->v2;
new_engine->v2.transforms = transforms; /* assign transforms */
new_engine->alproto = t->alproto;
new_engine->dir = t->dir;
new_engine->sm_list = t->sm_list;
+ new_engine->sm_list_base = t->sm_list;
new_engine->progress = t->progress;
new_engine->v2 = t->v2;
exit(EXIT_FAILURE);
}
new_engine->sm_list = new_list; /* use new list id */
+ new_engine->sm_list_base = sm_list;
new_engine->v1 = t->v1;
new_engine->v1.transforms = transforms; /* assign transforms */
exit(EXIT_FAILURE);
}
new_engine->sm_list = t->sm_list;
+ new_engine->sm_list_base = t->sm_list;
new_engine->v1 = t->v1;
if (de_ctx->pkt_inspect_engines == NULL) {
new_engine->dir = direction;
new_engine->stream = true;
new_engine->sm_list = DETECT_SM_LIST_PMATCH;
+ new_engine->sm_list_base = DETECT_SM_LIST_PMATCH;
new_engine->smd = stream;
new_engine->v2.Callback = DetectEngineInspectStream;
new_engine->progress = 0;
}
new_engine->sm_list = e->sm_list;
+ new_engine->sm_list_base = e->sm_list_base;
new_engine->smd = ptrs[new_engine->sm_list];
new_engine->v1 = e->v1;
SCLogDebug("sm_list %d new_engine->v1 %p/%p/%p",
new_engine->alproto = t->alproto;
new_engine->dir = t->dir;
new_engine->sm_list = t->sm_list;
+ new_engine->sm_list_base = t->sm_list_base;
new_engine->smd = ptrs[new_engine->sm_list];
new_engine->progress = t->progress;
new_engine->v2 = t->v2;
return -1;
e->sm_list = list_id;
+ e->sm_list_base = list_id;
e->v1.Callback = Callback;
e->smd = data;
AppProto alproto;
uint8_t dir;
uint8_t id; /**< per sig id used in state keeping */
- uint16_t mpm:1;
- uint16_t stream:1;
- uint16_t sm_list:14;
+ bool mpm;
+ bool stream;
+ uint16_t sm_list;
+ uint16_t sm_list_base; /**< base buffer being transformed */
int16_t progress;
struct {
typedef struct DetectEnginePktInspectionEngine {
SigMatchData *smd;
- uint16_t mpm:1;
- uint16_t sm_list:15;
+ bool mpm;
+ uint16_t sm_list;
+ uint16_t sm_list_base;
struct {
InspectionBufferGetPktDataPtr GetData;
InspectionBufferPktInspectFunc Callback;
const char *name;
char pname[32]; /**< name used in profiling */
int direction; /**< SIG_FLAG_TOSERVER or SIG_FLAG_TOCLIENT */
- int sm_list;
+ int16_t sm_list;
+ int16_t sm_list_base;
int priority;
int id; /**< index into this array and result arrays */
enum DetectBufferMpmType type;