http: support per-tx file accounting

pull/6324/head
Victor Julien 4 years ago
parent 56d3e28a3a
commit d74c18ee28

@ -76,9 +76,8 @@
* \retval -1 error
* \retval -2 not handling files on this flow
*/
int HTPFileOpen(HtpState *s, const uint8_t *filename, uint16_t filename_len,
const uint8_t *data, uint32_t data_len,
uint64_t txid, uint8_t direction)
int HTPFileOpen(HtpState *s, HtpTxUserData *tx, const uint8_t *filename, uint16_t filename_len,
const uint8_t *data, uint32_t data_len, uint64_t txid, uint8_t direction)
{
int retval = 0;
uint16_t flags = 0;
@ -145,6 +144,7 @@ int HTPFileOpen(HtpState *s, const uint8_t *filename, uint16_t filename_len,
}
FileSetTx(files->tail, txid);
tx->tx_data.files_opened++;
end:
SCReturnInt(retval);

@ -31,7 +31,8 @@ typedef struct HtpContentRange_ {
int64_t size;
} HtpContentRange;
int HTPFileOpen(HtpState *, const uint8_t *, uint16_t, const uint8_t *, uint32_t, uint64_t, uint8_t);
int HTPFileOpen(HtpState *, HtpTxUserData *, const uint8_t *, uint16_t, const uint8_t *, uint32_t,
uint64_t, uint8_t);
int HTPParseContentRange(bstr * rawvalue, HtpContentRange *range);
int HTPFileSetRange(HtpState *, bstr *rawvalue);
int HTPFileStoreChunk(HtpState *, const uint8_t *, uint32_t, uint8_t);

@ -1536,9 +1536,8 @@ static int HtpRequestBodyHandleMultipart(HtpState *hstate, HtpTxUserData *htud,
printf("FILEDATA END: \n");
#endif
result = HTPFileOpen(hstate, filename, filename_len,
filedata, filedata_len, HtpGetActiveRequestTxID(hstate),
STREAM_TOSERVER);
result = HTPFileOpen(hstate, htud, filename, filename_len, filedata, filedata_len,
HtpGetActiveRequestTxID(hstate), STREAM_TOSERVER);
if (result == -1) {
goto end;
} else if (result == -2) {
@ -1589,9 +1588,8 @@ static int HtpRequestBodyHandleMultipart(HtpState *hstate, HtpTxUserData *htud,
filedata = NULL;
filedata_len = 0;
}
result = HTPFileOpen(hstate, filename, filename_len,
filedata, filedata_len, HtpGetActiveRequestTxID(hstate),
STREAM_TOSERVER);
result = HTPFileOpen(hstate, htud, filename, filename_len, filedata,
filedata_len, HtpGetActiveRequestTxID(hstate), STREAM_TOSERVER);
if (result == -1) {
goto end;
} else if (result == -2) {
@ -1605,9 +1603,8 @@ static int HtpRequestBodyHandleMultipart(HtpState *hstate, HtpTxUserData *htud,
filedata_len = header_next - filedata - 2;
SCLogDebug("filedata_len %u", filedata_len);
result = HTPFileOpen(hstate, filename, filename_len,
filedata, filedata_len, HtpGetActiveRequestTxID(hstate),
STREAM_TOSERVER);
result = HTPFileOpen(hstate, htud, filename, filename_len, filedata,
filedata_len, HtpGetActiveRequestTxID(hstate), STREAM_TOSERVER);
if (result == -1) {
goto end;
} else if (result == -2) {
@ -1678,7 +1675,7 @@ static int HtpRequestBodyHandlePOSTorPUT(HtpState *hstate, HtpTxUserData *htud,
}
if (filename != NULL) {
result = HTPFileOpen(hstate, filename, (uint32_t)filename_len, data, data_len,
result = HTPFileOpen(hstate, htud, filename, (uint32_t)filename_len, data, data_len,
HtpGetActiveRequestTxID(hstate), STREAM_TOSERVER);
if (result == -1) {
goto end;
@ -1749,8 +1746,8 @@ static int HtpResponseBodyHandle(HtpState *hstate, HtpTxUserData *htud,
}
if (filename != NULL) {
result = HTPFileOpen(hstate, filename, (uint32_t)filename_len,
data, data_len, HtpGetActiveResponseTxID(hstate), STREAM_TOCLIENT);
result = HTPFileOpen(hstate, htud, filename, (uint32_t)filename_len, data, data_len,
HtpGetActiveResponseTxID(hstate), STREAM_TOCLIENT);
SCLogDebug("result %d", result);
if (result == -1) {
goto end;

Loading…
Cancel
Save