]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Clear warnings and clean interfaces
authorhuica <huica@cisco.com>
Tue, 22 Sep 2015 16:20:07 +0000 (12:20 -0400)
committerhuica <huica@cisco.com>
Tue, 22 Sep 2015 16:20:07 +0000 (12:20 -0400)
25 files changed:
src/file_api/file_flows.cc
src/file_api/file_flows.h
src/mime/decode_base.cc
src/mime/decode_qp.cc
src/mime/decode_uu.cc
src/mime/file_mime_log.cc
src/mime/file_mime_process.cc
src/mime/file_mime_process.h
src/service_inspectors/ftp_telnet/ftp_data.cc
src/service_inspectors/http_inspect/hi_main.cc
src/service_inspectors/imap/imap.cc
src/service_inspectors/imap/imap.h
src/service_inspectors/imap/imap_paf.cc
src/service_inspectors/imap/imap_paf.h
src/service_inspectors/nhttp_inspect/nhttp_msg_body.cc
src/service_inspectors/nhttp_inspect/nhttp_stream_splitter.cc
src/service_inspectors/pop/pop.cc
src/service_inspectors/pop/pop.h
src/service_inspectors/pop/pop_paf.cc
src/service_inspectors/pop/pop_paf.h
src/service_inspectors/smtp/smtp.cc
src/service_inspectors/smtp/smtp.h
src/service_inspectors/smtp/smtp_paf.cc
src/service_inspectors/smtp/smtp_paf.h
src/stream/file/file_session.cc

index 26fb9fbfb2a2b6d682ea2b23361fb94953ef46a6..af8633373f3f3560cbbf129bf873354ccdcc670b 100644 (file)
@@ -224,7 +224,7 @@ bool FileFlows::file_process(FileContext* context, const uint8_t* file_data,
  *    false: ignore this file
  */
 bool FileFlows::file_process(const uint8_t* file_data, int data_size,
-    FilePosition position, bool upload, bool suspend_block_verdict)
+    FilePosition position, bool upload)
 {
     FileContext* context;
     FileDirection direction = upload ? FILE_UPLOAD:FILE_DOWNLOAD;
index 98db6fed82773b000c14cac290a784e5f8ce17d0..5c49e4a7245ba3534cb21379fd59540248716b84 100644 (file)
@@ -50,7 +50,7 @@ public:
 
     // This is used when there is only one file per session
     bool file_process(const uint8_t* file_data, int data_size,
-        FilePosition position, bool upload, bool suspend_block_verdict);
+        FilePosition position, bool upload);
 
     // This is used for each file context. Support multiple files per session
     bool file_process(FileContext* context, const uint8_t* file_data, int data_size,
index 0ee4bd6adf9f0b616a64b0afd53df91822983bf6..b422476de1d85fd95ed21dbb09a111d2fc9b5bd4 100644 (file)
@@ -39,14 +39,14 @@ int DataDecode::get_detection_depth()
     if (!decode_depth)
         return decoded_bytes;
     // exceeded depth before (decode_bytes_read has been updated)
-    else if (decode_depth < decode_bytes_read - decoded_bytes)
+    else if (decode_depth < (int64_t)decode_bytes_read - decoded_bytes)
         return 0;
     // lower than depth
-    else if (decode_depth > decode_bytes_read)
+    else if (decode_depth > (int64_t)decode_bytes_read)
         return decoded_bytes;
     // cut off
     else
-        return (decode_depth + decoded_bytes - decode_bytes_read);
+        return (decode_depth + (int64_t )decoded_bytes - decode_bytes_read);
 }
 
 int DataDecode::get_decoded_data(uint8_t** buf,  uint32_t* size)
@@ -60,6 +60,8 @@ int DataDecode::get_decoded_data(uint8_t** buf,  uint32_t* size)
         *buf = decodePtr;
     else
         return 0;
+
+    return (*size);
 }
 
 #define MAX_DEPTH       65536
index 6a80e99644c9609cfdb8e251bb04829455ec5268..897971b07a150ee90ce913ebb412a176b881c37e 100644 (file)
@@ -35,7 +35,6 @@ void QPDecode::reset_decode_state()
 DecodeResult QPDecode::decode_data(const uint8_t* start, const uint8_t* end)
 {
     uint32_t act_encode_size = 0, act_decode_size = 0, bytes_read = 0;
-    uint32_t i = 0;
 
     if (!buffer->check_restore_buffer())
     {
index 95f7b35cdb01177c4ad560cd44137e1b2054455d..b0e571c523bd7accb00fa4753b1cc49095b6990d 100644 (file)
@@ -39,7 +39,6 @@ void UUDecode::reset_decode_state()
 DecodeResult UUDecode::decode_data(const uint8_t* start, const uint8_t* end)
 {
     uint32_t act_encode_size = 0, act_decode_size = 0, bytes_read = 0;
-    uint32_t i = 0;
 
     if (!buffer->check_restore_buffer())
     {
index 26d1ecc1a363fde15ee58ea3095f0d5016595c5e..3680917447e461b6ae47d5089ad6263c75c8b5a3 100644 (file)
@@ -195,14 +195,12 @@ int MailLogState::log_email_hdrs(const uint8_t* start, int length)
 {
     int log_avail = 0;
     uint8_t* log_buf;
-    uint32_t logged;
     int ret = 0;
 
     if (length <= 0)
         return -1;
 
     log_avail = log_depth - hdrs_logged;
-    logged = hdrs_logged;
     log_buf = (uint8_t*)emailHdrs;
 
     if (log_avail <= 0)
index 3157c1ddb46772004126f7ee3d3bb099f83eb5ed..7bf2dc6ce7eb6e6067a45e26dd458965c9b22d5b 100644 (file)
@@ -316,7 +316,7 @@ const uint8_t* MimeSession::process_mime_header(const uint8_t* ptr,
             state_flags &= ~MIME_FLAG_DATA_HEADER_CONT;
         }
 
-        int ret = handle_header_line(config, ptr, eol, max_header_name_len);
+        int ret = handle_header_line(ptr, eol, max_header_name_len);
         if (ret < 0)
             return NULL;
         else if (ret > 0)
@@ -467,7 +467,7 @@ const uint8_t* MimeSession::process_mime_body(const uint8_t* ptr,
         {
             if (decode_state->decode_data(attach_start, attach_end) == DECODE_FAIL )
             {
-                decode_alert(decode_state);
+                decode_alert();
             }
         }
     }
@@ -514,7 +514,7 @@ const uint8_t* MimeSession::process_mime_data_paf(Flow* flow, const uint8_t* sta
             {
                 /* if we're normalizing and not ignoring data copy data end marker
                  * and dot to alt buffer */
-                if (normalize_data(config, start, end) < 0)
+                if (normalize_data(start, end) < 0)
                     return NULL;
 
                 reset_mime_state();
@@ -561,7 +561,7 @@ const uint8_t* MimeSession::process_mime_data_paf(Flow* flow, const uint8_t* sta
             return NULL;
     }
 
-    if (normalize_data(config, start, end) < 0)
+    if (normalize_data(start, end) < 0)
         return NULL;
     /* now we shouldn't have to worry about copying any data to the alt buffer
      *      * only mime headers if we find them and only if we're ignoring data */
@@ -599,7 +599,7 @@ const uint8_t* MimeSession::process_mime_data_paf(Flow* flow, const uint8_t* sta
 
         /*Process file type/file signature*/
         FileFlows* file_flows = FileFlows::get_file_flows(flow);
-        if (file_flows && file_flows->file_process(buffer, buf_size, position, upload, false)
+        if (file_flows && file_flows->file_process(buffer, buf_size, position, upload)
             && (isFileStart(position)) && log_state)
         {
             log_state->set_file_name_from_log(flow);
index 57f73ea0806ace9cc655048053cc2c37351c7e4d..73202e4b099089829eb3f33832e2d5a7e050ee87 100644 (file)
@@ -64,10 +64,12 @@ public:
     void set_data_state(int);
     MailLogState* get_log_state();
 
+protected:
+    MimeDecode* decode_state = NULL;
+
 private:
     int data_state = STATE_DATA_INIT;
     int state_flags = 0;
-    MimeDecode* decode_state = NULL;
     MimeDataPafInfo mime_boundary;
     DecodeConfig* decode_conf = NULL;
     MailLogConfig* log_config = NULL;
@@ -75,17 +77,11 @@ private:
 
     // SMTP, IMAP, POP might have different implementation for this
     void* config = NULL;
-    virtual int handle_header_line(void* conf, const uint8_t* ptr, const uint8_t* eol,
-        int max_header_len)
-    { return 0; }
-    virtual int normalize_data(void* conf, const uint8_t* ptr, const uint8_t* data_end)
-    { return 0; }
-    virtual void decode_alert(MimeDecode* decode_state)
-    { }
-    virtual void reset_state(void* ssn)
-    { }
-    virtual bool is_end_of_data(void* ssn)
-    { return false; }
+    virtual int handle_header_line(const uint8_t*, const uint8_t*, int) { return 0; }
+    virtual int normalize_data(const uint8_t* , const uint8_t* ) { return 0; }
+    virtual void decode_alert() {}
+    virtual void reset_state(Flow* ) {}
+    virtual bool is_end_of_data(Flow* ) { return false; }
 
     void reset_mime_state();
     void setup_decode(const char* data, int size, bool cnt_xf);
index 927a39bd78d9e5dc98fe4fdf7fa1b9112534cccb..f1cf5e47b083b3b421c0130faf697d5e0ae00ff2 100644 (file)
@@ -78,7 +78,7 @@ static void FTPDataProcess(
         return;
 
     status = file_flows->file_process(file_data, data_length,
-        data_ssn->position, data_ssn->direction, false);
+        data_ssn->position, data_ssn->direction);
 
     /* Filename needs to be set AFTER the first call to file_process( ) */
     if (data_ssn->filename && !(data_ssn->packet_flags & FTPDATA_FLG_FILENAME_SET))
index 018ddaf70e146c18584a0cc86138b4b63d71acb9..fabb52bfb9526597f2b24371d497331e2501be1e 100644 (file)
@@ -666,7 +666,7 @@ int HttpInspectMain(HTTPINSPECT_CONF* conf, Packet* p)
                 {
                     FileFlows* file_flows = FileFlows::get_file_flows(p->flow);
                     file_flows->file_process((uint8_t*)p->data, p->dsize,
-                        getFilePoistion(p), true, false);
+                        getFilePoistion(p), true);
                 }
             }
             return iRet;
@@ -792,7 +792,7 @@ int HttpInspectMain(HTTPINSPECT_CONF* conf, Packet* p)
                         if (file_flows && file_flows->file_process(
                             (uint8_t*)session->client.request.post_raw,
                             (uint16_t)session->client.request.post_raw_size,
-                            getFilePoistion(p), true, false))
+                            getFilePoistion(p), true))
                         {
                             setFileName(p);
                         }
@@ -828,8 +828,7 @@ int HttpInspectMain(HTTPINSPECT_CONF* conf, Packet* p)
                 {
                     FileFlows* file_flows = FileFlows::get_file_flows(p->flow);
                     file_flows->file_process((uint8_t*)p->data, p->dsize,
-                        getFilePoistion(p),
-                        true, false);
+                        getFilePoistion(p), true);
                 }
             }
 
@@ -1081,7 +1080,7 @@ int HttpInspectMain(HTTPINSPECT_CONF* conf, Packet* p)
                     && file_flows &&  file_flows->file_process(
                     (uint8_t*)session->server.response.body,
                     (uint16_t)session->server.response.body_size,
-                    getFilePoistion(p), false, false))
+                    getFilePoistion(p), false))
                 {
                     setFileName(p);
                 }
index 14d463e4aba02f6257927126151a9b7e8f573a4e..971ed6e25d0bdf910ba3b4c419c379080eaad7bb 100644 (file)
@@ -128,8 +128,6 @@ IMAPSearch imap_cmd_search[CMD_LAST];
 THREAD_LOCAL const IMAPSearch* imap_current_search = NULL;
 THREAD_LOCAL IMAPSearchInfo imap_search_info;
 
-static void POP_ResetState(void*);
-
 ImapFlowData::ImapFlowData() : FlowData(flow_id)
 { memset(&session, 0, sizeof(session)); }
 
@@ -211,9 +209,9 @@ void IMAP_SearchFree(void)
         delete imap_resp_search_mpse;
 }
 
-static void IMAP_ResetState(void* ssn)
+static void IMAP_ResetState(Flow* ssn)
 {
-    IMAPData* imap_ssn = get_session_data((Flow*)ssn);
+    IMAPData* imap_ssn = get_session_data(ssn);
     imap_ssn->state = STATE_COMMAND;
     imap_ssn->state_flags = 0;
     imap_ssn->body_read = imap_ssn->body_len = 0;
@@ -684,9 +682,8 @@ static void snort_imap(IMAP_PROTO_CONF* config, Packet* p)
     }
 }
 
-void ImapMime::decode_alert(MimeDecode* ds)
+void ImapMime::decode_alert()
 {
-    MimeDecode* decode_state = (MimeDecode*)ds;
     switch ( decode_state->get_decode_type() )
     {
     case DECODE_B64:
@@ -704,13 +701,13 @@ void ImapMime::decode_alert(MimeDecode* ds)
     }
 }
 
-void ImapMime::reset_state(void* ssn)
+void ImapMime::reset_state(Flow* ssn)
 {
     IMAP_ResetState(ssn);
 }
 
 
-bool ImapMime::is_end_of_data(void* session)
+bool ImapMime::is_end_of_data(Flow* session)
 {
     return imap_is_data_end(session);
 }
index a3b49c128b7aefe9c87c299714509ef1167b2813..c172662f83fa78e9dd48705ce248bebf02b74350 100644 (file)
@@ -150,9 +150,9 @@ class ImapMime : public MimeSession
 {
     using MimeSession::MimeSession;
 private:
-    void decode_alert(MimeDecode* decode_state) override;
-    void reset_state(void* ssn) override;
-    bool is_end_of_data(void* ssn) override;
+    void decode_alert() override;
+    void reset_state(Flow* ssn) override;
+    bool is_end_of_data(Flow* ssn) override;
 };
 
 struct IMAPData
index 548eb389e4addf8480fa8cc95fd2297ccc432ac8..7393d218ca8bce1d0cc2dc0706f2d47bb17c7e74 100644 (file)
@@ -521,9 +521,8 @@ StreamSplitter::Status ImapSplitter::scan(
     }
 }
 
-bool imap_is_data_end(void* session)
+bool imap_is_data_end(Flow* ssn)
 {
-    Flow* ssn = (Flow*)session;
     ImapPafData* s = get_state(ssn, true);
     return s->end_of_data;
 }
index 54576d80b9d8d72e074f172b71b1d517e01bd8d3..e8afc1614190208a72e64cae66654367cdd29a03 100644 (file)
@@ -84,7 +84,7 @@ public:
 };
 
 // Function: Check if IMAP data end is reached
-bool imap_is_data_end(void* ssn);
+bool imap_is_data_end(Flow* ssn);
 
 #endif
 
index 96f9f35fdbbbee9f96f742e3c27b4c7f07e560fb..f3516bc12951404ebf84c63512e1249ea7424572 100644 (file)
@@ -94,7 +94,7 @@ void NHttpMsgBody::do_file_processing()
         FileFlows* file_flows = FileFlows::get_file_flows(flow);
 
         if (file_flows->file_process(file_data.start, fp_length,
-            file_position, false, false))
+            file_position, false))
         {
             session_data->file_depth_remaining[source_id] -= fp_length;
 
index 6e7ed99d38b0d72ea451172d098abbde77e0d007..668c95c075ade816019ded381f3f241135947785 100644 (file)
@@ -493,7 +493,7 @@ bool NHttpStreamSplitter::finish(Flow* flow)
         if (source_id == SRC_SERVER)
         {
             FileFlows* file_flows = FileFlows::get_file_flows(flow);
-            file_flows->file_process(nullptr, 0, SNORT_FILE_END, false, false);
+            file_flows->file_process(nullptr, 0, SNORT_FILE_END, false);
         }
         else
         {
index 7c18550b1f89de2df219e31b3bbcc6eb7d6f5169..3de4a41306298d0ffb0abdc46667deec79241b42 100644 (file)
@@ -83,7 +83,7 @@ THREAD_LOCAL const POPSearch* pop_current_search = NULL;
 THREAD_LOCAL POPSearchInfo pop_search_info;
 
 static void snort_pop(POP_PROTO_CONF* GlobalConf, Packet* p);
-static void POP_ResetState(void*);
+static void POP_ResetState(Flow*);
 
 PopFlowData::PopFlowData() : FlowData(flow_id)
 { memset(&session, 0, sizeof(session)); }
@@ -164,9 +164,9 @@ void POP_SearchFree(void)
         delete pop_resp_search_mpse;
 }
 
-static void POP_ResetState(void* ssn)
+static void POP_ResetState(Flow* ssn)
 {
-    POPData* pop_ssn = get_session_data((Flow*)ssn);
+    POPData* pop_ssn = get_session_data(ssn);
     pop_ssn->state = STATE_COMMAND;
     pop_ssn->prev_response = 0;
     pop_ssn->state_flags = 0;
@@ -617,9 +617,8 @@ static void snort_pop(POP_PROTO_CONF* config, Packet* p)
     }
 }
 
-void PopMime::decode_alert(MimeDecode* ds)
+void PopMime::decode_alert()
 {
-    MimeDecode* decode_state = (MimeDecode*)ds;
     switch ( decode_state->get_decode_type() )
     {
     case DECODE_B64:
@@ -637,13 +636,13 @@ void PopMime::decode_alert(MimeDecode* ds)
     }
 }
 
-void PopMime::reset_state(void* ssn)
+void PopMime::reset_state(Flow* ssn)
 {
     POP_ResetState(ssn);
 }
 
 
-bool PopMime::is_end_of_data(void* session)
+bool PopMime::is_end_of_data(Flow* session)
 {
     return pop_is_data_end(session);
 }
index 50354ac5660745f5a4c3209401625fac9dd10516..f9a4e8124607a9a093bc3632cb52af3bd911c39d 100644 (file)
@@ -105,9 +105,9 @@ class PopMime : public MimeSession
 {
     using MimeSession::MimeSession;
 private:
-    void decode_alert(MimeDecode* decode_state) override;
-    void reset_state(void* ssn) override;
-    bool is_end_of_data(void* ssn) override;
+    void decode_alert() override;
+    void reset_state(Flow* ssn) override;
+    bool is_end_of_data(Flow* ssn) override;
 };
 
 struct POPData
index 89c41b6dab1259b5f33e53549c5039cd65ea0cee..46d338ed455f691de69228202576c458ab55230b 100644 (file)
@@ -410,9 +410,8 @@ StreamSplitter::Status PopSplitter::scan(
     }
 }
 
-bool pop_is_data_end(void* session)
+bool pop_is_data_end(Flow* ssn)
 {
-    Flow* ssn = (Flow*)session;
     PopPafData* s = get_state(ssn, false);
     return s->end_of_data;
 }
index 7ecf5b71ffd1d2011b1597ea06ef4b6d4a18d6e6..6717763f9e27087239fa686456b91a655c7fc94a 100644 (file)
@@ -80,7 +80,7 @@ public:
 };
 
 // Function: Callback to check if POP data end is reached
-bool pop_is_data_end(void* ssn);
+bool pop_is_data_end(Flow* ssn);
 
 #endif
 
index f64279d07be3a3179fc63557cab0a1fceaa51b88..b175f5d78558e8eb0ffd093f043512845dc626e9 100644 (file)
@@ -161,8 +161,7 @@ THREAD_LOCAL const SMTPSearch* smtp_current_search = NULL;
 THREAD_LOCAL SMTPSearchInfo smtp_search_info;
 
 static void snort_smtp(SMTP_PROTO_CONF* GlobalConf, Packet* p);
-static void SMTP_ResetState(void*);
-void SMTP_DecodeAlert(void* ds);
+static void SMTP_ResetState(Flow*);
 
 SmtpFlowData::SmtpFlowData() : FlowData(flow_id)
 { memset(&session, 0, sizeof(session)); }
@@ -487,9 +486,9 @@ void SMTP_PrintConfig(SMTP_PROTO_CONF *config)
     }
 }
 
-static void SMTP_ResetState(void* ssn)
+static void SMTP_ResetState(Flow* ssn)
 {
-    SMTPData* smtp_ssn = get_session_data((Flow*)ssn);
+    SMTPData* smtp_ssn = get_session_data(ssn);
     smtp_ssn->state = STATE_COMMAND;
     smtp_ssn->state_flags = 0;
 }
@@ -1379,7 +1378,7 @@ static void SMTP_RegXtraDataFuncs(SMTP_PROTO_CONF* config)
     config->xtra_ehdrs_id = stream.reg_xtra_data_cb(SMTP_GetEmailHdrs);
 }
 
-int SmtpMime::handle_header_line(void* conf, const uint8_t* ptr, const uint8_t* eol,
+int SmtpMime::handle_header_line(const uint8_t* ptr, const uint8_t* eol,
     int max_header_len)
 {
     int ret;
@@ -1418,7 +1417,7 @@ int SmtpMime::handle_header_line(void* conf, const uint8_t* ptr, const uint8_t*
     return 0;
 }
 
-int SmtpMime::normalize_data(void* conf, const uint8_t* ptr, const uint8_t* data_end)
+int SmtpMime::normalize_data(const uint8_t* ptr, const uint8_t* data_end)
 {
     /* if we're ignoring data and not already normalizing, copy everything
      * up to here into alt buffer so detection engine doesn't have
@@ -1437,9 +1436,8 @@ int SmtpMime::normalize_data(void* conf, const uint8_t* ptr, const uint8_t* data
     return 0;
 }
 
-void SmtpMime::decode_alert(MimeDecode* ds)
+void SmtpMime::decode_alert()
 {
-    MimeDecode* decode_state = (MimeDecode*)ds;
     switch ( decode_state->get_decode_type() )
     {
     case DECODE_B64:
@@ -1457,13 +1455,13 @@ void SmtpMime::decode_alert(MimeDecode* ds)
     }
 }
 
-void SmtpMime::reset_state(void* ssn)
+void SmtpMime::reset_state(Flow* ssn)
 {
     SMTP_ResetState(ssn);
 }
 
 
-bool SmtpMime::is_end_of_data(void* session)
+bool SmtpMime::is_end_of_data(Flow* session)
 {
     return smtp_is_data_end(session);
 }
index 38d736139d073e1739e366ab3253bb3bddef6767..7d8f660a6b64ddb4e8db913f671b79f700678527 100644 (file)
@@ -147,12 +147,12 @@ public:
     using MimeSession::MimeSession;
     SMTP_PROTO_CONF* config;
 private:
-    int handle_header_line(void* conf, const uint8_t* ptr, const uint8_t* eol,
+    int handle_header_line(const uint8_t* ptr, const uint8_t* eol,
         int max_header_len) override;
-    int normalize_data(void* conf, const uint8_t* ptr, const uint8_t* data_end) override;
-    void decode_alert(MimeDecode* decode_state) override;
-    void reset_state(void* ssn) override;
-    bool is_end_of_data(void* ssn) override;
+    int normalize_data(const uint8_t* ptr, const uint8_t* data_end) override;
+    void decode_alert() override;
+    void reset_state(Flow* ssn) override;
+    bool is_end_of_data(Flow* ssn) override;
 };
 
 struct SMTPData
index 91112c9bb8772e3990dbd006fce2efc71d32dafa..18002b4e0e45099b7ad58a434ed66ac1d42bc1c7 100644 (file)
@@ -369,9 +369,8 @@ StreamSplitter::Status SmtpSplitter::scan(
     }
 }
 
-bool smtp_is_data_end(void* session)
+bool smtp_is_data_end(Flow* ssn)
 {
-    Flow* ssn = (Flow*)session;
     SmtpPafData* s = get_state(ssn, true);
     return s->end_of_data;
 }
index 4ee484b946da5237399c9bfe0e2f279781378412..8eaa8124afdd48658f62b9026fc2714ff44cbbba 100644 (file)
@@ -78,6 +78,6 @@ public:
 };
 
 // Function: Check if IMAP data end is reached
-bool smtp_is_data_end(void* ssn);
+bool smtp_is_data_end(Flow* ssn);
 
 #endif
index 120e52b57af5be2a7dbbf6a7c86d5c94db68ae4d..48cf57a510f3f9e67ecdfd5ec7b8278da87ea5a7 100644 (file)
@@ -81,7 +81,7 @@ int FileSession::process(Packet* p)
     FileFlows* file_flows = FileFlows::get_file_flows(p->flow);
 
     if (file_flows)
-        file_flows->file_process((uint8_t*)p->data, p->dsize, position(p), c->upload, false);
+        file_flows->file_process((uint8_t*)p->data, p->dsize, position(p), c->upload);
     set_file_data((uint8_t*)p->data, p->dsize);
 
     MODULE_PROFILE_END(file_ssn_stats);