1 #ifndef _msg_logger_h_ 2 #define _msg_logger_h_ 3 4 #include "atomic_types.h" 5 #include "AmThread.h" 6 #include "cstring.h" 7 8 #include <set> 9 #include <string> 10 using std::set; 11 using std::string; 12 13 14 struct sockaddr_storage; 15 16 class msg_logger 17 : public atomic_ref_cnt 18 { 19 public: msg_logger()20 msg_logger() {} ~msg_logger()21 virtual ~msg_logger() {} 22 virtual int log(const char* buf, int len, 23 sockaddr_storage* src_ip, 24 sockaddr_storage* dst_ip, 25 cstring method, int reply_code=0)=0; 26 }; 27 28 class exclusive_file; 29 30 class file_msg_logger 31 : public msg_logger 32 { 33 protected: 34 exclusive_file* excl_fp; 35 36 int write(const void *buf, int len); 37 int writev(const struct iovec *iov, int iovcnt); 38 39 virtual int write_file_header() = 0; 40 41 public: file_msg_logger()42 file_msg_logger() : excl_fp(NULL) {} 43 ~file_msg_logger(); 44 45 int open(const char* filename); 46 int log(const char* buf, int len, 47 sockaddr_storage* src_ip, 48 sockaddr_storage* dst_ip, 49 cstring method, int reply_code=0)=0; 50 }; 51 52 class cf_msg_logger 53 : public file_msg_logger 54 { 55 std::set<string> known_destinations; 56 57 int write_src_dst(const string& obj); 58 59 protected: write_file_header()60 int write_file_header() { return 0; } 61 62 public: 63 int log(const char* buf, int len, 64 sockaddr_storage* src_ip, 65 sockaddr_storage* dst_ip, 66 cstring method, int reply_code=0); 67 }; 68 69 70 #endif 71