#define RPC_FRAG_HDR_SIZE sizeof(uint32_t)
#define RPC_FRAG_LEN(ptr) (ntohl(*((const uint32_t*)(ptr))) & 0x7FFFFFFF)
-struct RpcDecodeConfig
-{
- int dummy;
-};
-
struct RpcBuffer
{
uint8_t* data;
THREAD_LOCAL ProfileStats rpcdecodePerfStats;
THREAD_LOCAL RpcStats rdstats;
-static int ConvertRPC(RpcDecodeConfig*, RpcSsnData*, Packet*);
+static int ConvertRPC(RpcSsnData*, Packet*);
static RpcSsnData* RpcSsnDataNew(Packet*);
static inline void RpcSsnClean(RpcSsnData*);
static inline void RpcSsnSetInactive(RpcSsnData*, Packet*);
static inline int RpcSsnIsActive(RpcSsnData*);
-static RpcStatus RpcStatefulInspection(RpcDecodeConfig*, RpcSsnData*, Packet*);
-static inline void RpcPreprocEvent(RpcDecodeConfig*, RpcSsnData*, int);
-static RpcStatus RpcHandleFrag(RpcDecodeConfig*, RpcSsnData*, const uint8_t*);
+static RpcStatus RpcStatefulInspection(RpcSsnData*, Packet*);
+static inline void RpcPreprocEvent(RpcSsnData*, int);
+static RpcStatus RpcHandleFrag(RpcSsnData*, const uint8_t*);
static RpcStatus RpcPrepRaw(const uint8_t*, uint32_t, Packet*);
static RpcStatus RpcPrepFrag(RpcSsnData*, Packet*);
static RpcStatus RpcPrepSeg(RpcSsnData*, Packet*);
static RpcStatus RpcBufAdd(RpcBuffer*, const uint8_t*, uint32_t);
static inline void RpcBufClean(RpcBuffer*);
-static inline void RpcPreprocEvent(
- RpcDecodeConfig* rconfig, RpcSsnData* rsdata, int event)
+static inline void RpcPreprocEvent(RpcSsnData* rsdata, int event)
{
- if (rconfig == nullptr)
- return;
-
if (rsdata != nullptr)
{
/* Only log one event of the same type per session */
}
}
-static RpcStatus RpcStatefulInspection(RpcDecodeConfig* rconfig,
- RpcSsnData* rsdata, Packet* p)
+static RpcStatus RpcStatefulInspection(RpcSsnData* rsdata, Packet* p)
{
const uint8_t* data = p->data;
uint16_t dsize = p->dsize;
{
if (dsize < RPC_FRAG_HDR_SIZE)
{
- RpcPreprocEvent(rconfig, rsdata, RPC_INCOMPLETE_SEGMENT);
+ RpcPreprocEvent(rsdata, RPC_INCOMPLETE_SEGMENT);
if (RpcBufAdd(&rsdata->seg, data, dsize) != RPC_STATUS__SUCCESS)
return RPC_STATUS__ERROR;
rsdata->frag_len = RPC_FRAG_LEN(data);
if (dsize < (RPC_FRAG_HDR_SIZE + rsdata->frag_len))
{
- RpcPreprocEvent(rconfig, rsdata, RPC_INCOMPLETE_SEGMENT);
+ RpcPreprocEvent(rsdata, RPC_INCOMPLETE_SEGMENT);
if (RpcBufAdd(&rsdata->seg, data, dsize) != RPC_STATUS__SUCCESS)
return RPC_STATUS__ERROR;
dsize -= (RPC_FRAG_HDR_SIZE + rsdata->frag_len);
- status = RpcHandleFrag(rconfig, rsdata, data);
+ status = RpcHandleFrag(rsdata, data);
if (status == RPC_STATUS__ERROR)
return RPC_STATUS__ERROR;
}
if ( (dsize > 0) )
- RpcPreprocEvent(rconfig, rsdata, RPC_MULTIPLE_RECORD);
+ RpcPreprocEvent(rsdata, RPC_MULTIPLE_RECORD);
}
data += (RPC_FRAG_HDR_SIZE + rsdata->frag_len);
need = RPC_FRAG_HDR_SIZE - RpcBufLen(&rsdata->seg);
if (dsize < need)
{
- RpcPreprocEvent(rconfig, rsdata, RPC_INCOMPLETE_SEGMENT);
+ RpcPreprocEvent(rsdata, RPC_INCOMPLETE_SEGMENT);
if (RpcBufAdd(&rsdata->seg, data, dsize) != RPC_STATUS__SUCCESS)
return RPC_STATUS__ERROR;
need = rsdata->frag_len - (RpcBufLen(&rsdata->seg) - RPC_FRAG_HDR_SIZE);
if (dsize < need)
{
- RpcPreprocEvent(rconfig, rsdata, RPC_INCOMPLETE_SEGMENT);
+ RpcPreprocEvent(rsdata, RPC_INCOMPLETE_SEGMENT);
if (RpcBufAdd(&rsdata->seg, data, dsize) != RPC_STATUS__SUCCESS)
return RPC_STATUS__ERROR;
data += need;
dsize -= need;
- status = RpcHandleFrag(rconfig, rsdata, RpcBufData(&rsdata->seg));
+ status = RpcHandleFrag(rsdata, RpcBufData(&rsdata->seg));
if (status == RPC_STATUS__ERROR)
return RPC_STATUS__ERROR;
}
if ( (dsize > 0) )
- RpcPreprocEvent(rconfig, rsdata, RPC_MULTIPLE_RECORD);
+ RpcPreprocEvent(rsdata, RPC_MULTIPLE_RECORD);
DataBus::publish(PACKET_EVENT, p);
RpcBufClean(&rsdata->frag);
return RPC_STATUS__SUCCESS;
}
-static RpcStatus RpcHandleFrag(RpcDecodeConfig* rconfig,
- RpcSsnData* rsdata, const uint8_t* fragment)
+static RpcStatus RpcHandleFrag(RpcSsnData* rsdata, const uint8_t* fragment)
{
int last_frag = fragment[0] & 0x80;
uint32_t frag_len = RPC_FRAG_LEN(fragment);
if (frag_len == 0)
- RpcPreprocEvent(rconfig, rsdata, RPC_ZERO_LENGTH_FRAGMENT);
+ RpcPreprocEvent(rsdata, RPC_ZERO_LENGTH_FRAGMENT);
if (!last_frag)
- RpcPreprocEvent(rconfig, rsdata, RPC_FRAG_TRAFFIC);
+ RpcPreprocEvent(rsdata, RPC_FRAG_TRAFFIC);
if ((RpcBufLen(&rsdata->frag) == 0) && last_frag)
return RPC_STATUS__DEFRAG;
#define MIN_CALL_BODY_SZ 32
-static int ConvertRPC(RpcDecodeConfig* rconfig, RpcSsnData* rsdata, Packet* p)
+static int ConvertRPC(RpcSsnData* rsdata, Packet* p)
{
const uint8_t* data = p->data;
uint32_t psize = p->dsize;
}
else
{
- RpcPreprocEvent(rconfig, rsdata, RPC_FRAG_TRAFFIC);
+ RpcPreprocEvent(rsdata, RPC_FRAG_TRAFFIC);
}
norm_index = buf.data;
StreamSplitter* get_splitter(bool c2s) override
{ return c2s ? new RpcSplitter(c2s) : nullptr; }
-
-private:
- RpcDecodeConfig config;
};
RpcDecode::RpcDecode(RpcDecodeModule*)
if ( RpcSsnIsActive(rsdata) and (p->packet_flags & PKT_REBUILT_STREAM) )
{
- RpcStatus ret = RpcStatefulInspection(&config, rsdata, p);
+ RpcStatus ret = RpcStatefulInspection(rsdata, p);
if (ret == RPC_STATUS__SUCCESS)
return;
if (ret == RPC_STATUS__ERROR)
RpcSsnSetInactive(rsdata, p);
}
- RpcPreprocEvent(&config, rsdata, ConvertRPC(&config, rsdata, p));
+ RpcPreprocEvent(rsdata, ConvertRPC(rsdata, p));
}
bool RpcDecode::get_buf(InspectionBuffer::Type ibt, Packet* p, InspectionBuffer& b)