#include "strutils.h"
int loglevel_mask;
+//0 do not trace packet
+//1 trace packet with MAX_DUMP_HEX_LEN
+//2 trace full packet
+int trace_packet = 0;
static struct {
char* name;
{ NULL, 0 }
};
+//logging full packet
void logging_hex(char* hex, char* asci) {
+ sdb_mutex_lock(&D_lock, NULL);
int hex_len = s_strnlen(hex, 4096);
char* hex_ptr = hex;
}
fprintf(stderr, "%s\n", asci_ptr);
-
-
+ fprintf(stderr, "--------------LOGGING HEX END--------------\n\n");
+ fflush(stderr);
+ sdb_mutex_unlock(&D_lock, NULL);
}
void logging(LogLevel level, const char *filename, const char *funcname, int line_number, const char *fmt, ...) {
{
char* sdb_debug = NULL;
+
if ((sdb_debug = getenv(DEBUG_ENV))) {
log_parse(sdb_debug);
}
+
+ char* trace_packet;
+ trace_packet = getenv(TRACE_PACKET);
+ if(!strcmp(trace_packet, "true")) {
+ trace_packet = 2;
+ }
+ else if ((loglevel_mask & (1 << SDBLOG_INFO)) != 0) {
+ trace_packet = 1;
+ }
}
#define SDB_TRACE 1
#define DEBUG_ENV "SDB_DEBUG"
+#define TRACE_PACKET "SDB_TRACE_PACKET"
extern int loglevel_mask;
+extern int trace_packet;
typedef enum {
SDBLOG_FATAL = 1,
do { if ((loglevel_mask & (1 << SDBLOG_FIXME)) != 0) { \
logging(SDBLOG_FIXME, __FILE__, __FUNCTION__, __LINE__, args); } } while(0)
-#define LOG_HEX(hex, asci) \
- do { \
- logging_hex(hex, asci); } while(0)
-
-
+#define LOG_PACKET(args...) \
+ do { if ((loglevel_mask & (1 << SDBLOG_INFO)) != 0 || trace_packet) { \
+ logging(SDBLOG_INFO, __FILE__, __FUNCTION__, __LINE__, args); } } while(0)
void log_init(void);
void logging(LogLevel level, const char *filename, const char *funcname, int line_number, const char *fmt, ...);
p->len = MAX_PAYLOAD - avail;
//TODO HOT PATCH FOR 2048.
- if(p->len > 0 && p->len % 512 == 0) {
- s->char_2048 = p->data[--p->len];
- s->check_2048 = 1;
- }
if(peer_enqueue(s, p) < 0) {
//local socket is already closed by peer or should not close the socket.
//#define MAX_DUMP_HEX_LEN 4096
static void dump_hex( const unsigned char* ptr, size_t len)
{
- if(SDB_TRACING) {
+ if(trace_packet) {
char hex_str[]= "0123456789abcdef";
- if(len > MAX_DUMP_HEX_LEN) {
- len = MAX_DUMP_HEX_LEN;
+ if(trace_packet == 1) {
+ if(len > MAX_DUMP_HEX_LEN) {
+ len = MAX_DUMP_HEX_LEN;
+ }
}
int i;
}
asci[len] = '\0';
- DR("HEX:'%s', ASCI:'%s'\n", hex, asci);
-// LOG_HEX(hex, asci);
+ if(trace_packet == 1) {
+ LOG_PACKET("HEX:'%s', ASCI:'%s'\n", hex, asci);
+ }
+ else {
+ logging_hex(hex, asci);
+ }
}
}
void dump_packet(const char* name, const char* func, PACKET* p)
{
- if(SDB_TRACING) {
+ if(trace_packet) {
unsigned cmd = p->msg.command;
char command[9];
snprintf(command, sizeof command, "%08x", cmd);
}
- D("T(%s) %s: [%s] arg0=%X arg1=%X (len=%d) (total_msg_len=%d)\n",
- name, func, command, p->msg.arg0, p->msg.arg1, p->msg.data_length, p->len);
+ LOG_PACKET("T(%s) %s: [%s] arg0=%X arg1=%X (len=%d) (total_msg_len=%d)\n",
+ name, func, command, p->msg.arg0, p->msg.arg1, p->msg.data_length, p->len);
dump_hex(p->data, p->msg.data_length);
}
}
static void _start_logging(void)
{
const char* p = getenv(DEBUG_ENV);
- if (p == NULL) {
+ if (p == NULL && !getenv(TRACE_PACKET)) {
return;
}
int fd;