typedef void (*InspectDtorFunc)(Inspector*);
typedef void (*InspectFunc)();
typedef class Session* (*InspectSsnFunc)(class Flow*);
+typedef struct ContentBuffer* (*InspectBufFunc)(unsigned);
// FIXIT ensure all provide stats
struct InspectApi
{
BaseApi base;
InspectorType type;
- const char* service; // nullptr when type != IT_SERVICE
uint16_t proto_bits;
+ const char* service; // nullptr when type != IT_SERVICE
+
+ // list of thread local detection buffers captured by inspector
+ const char* contents; // space separated, eg "foo_a foo_b foo_c"
// main thread funcs - parse time data only
InspectFunc init; // allocate process static data
InspectFunc sum; // accumulate stats
InspectFunc stats; // output stats
InspectFunc reset; // clear stats
+ InspectBufFunc getbuf; // 0-based, eg getbuf(1) means foo_b above
};
#endif
/****************************************************************************
*
-** Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
+ * Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved.
* Copyright (C) 2003-2013 Sourcefire, Inc.
*
* This program is free software; you can redistribute it and/or modify
{
if(*p == '\n')
{
- if( (p - offset) >= session->server_conf->max_hdr_len )
+ if ( session->server_conf->max_hdr_len &&
+ (p - offset) >= session->server_conf->max_hdr_len )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_LONG_HDR);
}
}
/* Never observed an end-of-field. Maybe it's not there, but the header is long anyway: */
- if( (p - start) >= session->server_conf->max_hdr_len )
+ if ( session->server_conf->max_hdr_len &&
+ (p - start) >= session->server_conf->max_hdr_len )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_LONG_HDR);
}
return end;
}
- if(num_spaces >= session->server_conf->max_spaces)
+ if ( session->server_conf->max_spaces &&
+ num_spaces >= session->server_conf->max_spaces )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_EXCEEDS_SPACES);
}
return end;
}
- if(num_spaces >= session->server_conf->max_spaces)
+ if ( session->server_conf->max_spaces &&
+ num_spaces >= session->server_conf->max_spaces )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_EXCEEDS_SPACES);
}
}
if ( space_present )
{
- if(num_spaces >= session->server_conf->max_spaces)
+ if ( session->server_conf->max_spaces &&
+ num_spaces >= session->server_conf->max_spaces )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_EXCEEDS_SPACES);
}
return p;
}
-
num_spaces = SkipBlankSpace(start,end,&p);
- if(num_spaces >= session->server_conf->max_spaces)
+
+ if ( session->server_conf->max_spaces &&
+ num_spaces >= session->server_conf->max_spaces )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_EXCEEDS_SPACES);
}
{
header_count++;
- if( (p - offset) >= session->server_conf->max_hdr_len )
+ if ( session->server_conf->max_hdr_len &&
+ (p - offset) >= session->server_conf->max_hdr_len )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_LONG_HDR);
}
p++;
num_spaces = SkipBlankSpace(start,end,&p);
- if(num_spaces >= session->server_conf->max_spaces)
+
+ if ( session->server_conf->max_spaces &&
+ num_spaces >= session->server_conf->max_spaces )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_EXCEEDS_SPACES);
}
}
/* Never observed an end-of-field. Maybe it's not there, but the header is long anyway: */
- if( (p - start) >= session->server_conf->max_hdr_len )
+ if ( session->server_conf->max_hdr_len &&
+ (p - start) >= session->server_conf->max_hdr_len )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_LONG_HDR);
}
/* Check if the URI exceeds the max header field length */
/* Only check if we succesfully observed a GET or POST method, otherwise,
* this may very well be a POST body */
- if ( iRet == URI_END &&
+ if ( iRet == URI_END && ServerConf->max_hdr_len &&
((uri_ptr.uri_end - uri_ptr.uri) >= ServerConf->max_hdr_len) )
{
SnortEventqAdd(GID_HTTP_CLIENT, HI_CLIENT_LONG_HDR);