65 json_t *cjs = json_object();
71 json_t *js_resplist = NULL;
72 json_t *js_respcode_list = NULL;
74 js_resplist = json_array();
75 js_respcode_list = json_array();
77 if (
unlikely(js_resplist == NULL || js_respcode_list == NULL)) {
79 json_decref(js_resplist);
81 json_decref(js_respcode_list);
90 json_object_set_new(cjs,
"command_data",
94 json_object_set_new(cjs,
"command_data", json_string(NULL));
101 uint8_t *where = response->
str;
109 if (isdigit(where[0]) && isdigit(where[1]) && isdigit(where[2])) {
110 json_array_append_new(js_respcode_list,
117 json_array_append_new(js_resplist,
126 json_object_set_new(cjs,
"reply", js_resplist);
127 json_object_set_new(cjs,
"completion_code", js_respcode_list);
131 json_object_set_new(cjs,
"dynamic_port", json_integer(tx->
dyn_port));
136 json_object_set_new(cjs,
"mode",
137 json_string((
char *)(tx->
active ?
"active" :
"passive")));
140 json_object_set_new(cjs,
"reply_received",
141 json_string((
char *)(tx->
done ?
"yes" :
"no")));
147 static int JsonFTPLogger(
ThreadVars *tv,
void *thread_data,
154 event_type =
"ftp_data";
169 cjs = JsonFTPLogCommand(f, tx);
173 json_object_set_new(js, event_type, cjs);
179 json_object_clear(js);
185 static void OutputFTPLogDeInitCtxSub(
OutputCtx *output_ctx)
204 ftplog_ctx->
cfg = ajt->
cfg;
211 output_ctx->
data = ftplog_ctx;
212 output_ctx->
DeInit = OutputFTPLogDeInitCtxSub;
214 SCLogDebug(
"FTP log sub-module initialized.");
219 result.
ctx = output_ctx;
224 static TmEcode JsonFTPLogThreadInit(
ThreadVars *t,
const void *initdata,
void **data)
231 if (initdata == NULL) {
232 SCLogDebug(
"Error getting context for EveLogFTP. \"initdata\" is NULL.");
244 *data = (
void *)thread;
252 if (thread == NULL) {
255 if (thread->
buffer != NULL) {
268 "eve-log.ftp", OutputFTPLogInitSub,
270 JsonFTPLogThreadInit, JsonFTPLogThreadDeinit,
273 "eve-log.ftp", OutputFTPLogInitSub,
275 JsonFTPLogThreadInit, JsonFTPLogThreadDeinit,
MemBuffer * MemBufferCreateNew(uint32_t size)
#define JSON_OUTPUT_BUFFER_SIZE
struct LogFTPLogThread_ LogFTPLogThread
int OutputJSONBuffer(json_t *js, LogFileCtx *file_ctx, MemBuffer **buffer)
uint16_t JsonGetNextLineFromBuffer(const char *buffer, const uint16_t len)
OutputJsonCommonSettings cfg
#define TAILQ_FOREACH(var, head, field)
struct HtpBodyChunk_ * next
const uint8_t command_length
#define MemBufferReset(mem_buffer)
Reset the mem buffer.
json_t * CreateJSONHeaderWithTxId(const Packet *p, enum OutputJsonLogDirection dir, const char *event_type, uint64_t tx_id)
void(* DeInit)(struct OutputCtx_ *)
const char * command_name
void JsonAddCommonOptions(const OutputJsonCommonSettings *cfg, const Packet *p, const Flow *f, json_t *js)
LogFTPFileCtx * ftplog_ctx
OutputJsonCommonSettings cfg
void AppLayerParserRegisterLogger(uint8_t ipproto, AppProto alproto)
struct LogFTPFileCtx_ LogFTPFileCtx
void OutputRegisterTxSubModule(LoggerId id, const char *parent_name, const char *name, const char *conf_name, OutputInitSubFunc InitFunc, AppProto alproto, TxLogger TxLogFunc, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit, ThreadExitPrintStatsFunc ThreadExitPrintStats)
json_t * JsonFTPDataAddMetadata(const Flow *f)
json_t * JsonAddStringN(const char *string, size_t size)
Create a JSON string from a character sequence.
void JsonFTPLogRegister(void)
#define TAILQ_EMPTY(head)
Per thread variable structure.
AppProto alproto
application level protocol
const FtpCommand * command_descriptor
void MemBufferFree(MemBuffer *buffer)
FtpRequestCommand command