diff --git a/binlog.c b/binlog.c index 2f5a742..30f536f 100644 --- a/binlog.c +++ b/binlog.c @@ -53,6 +53,7 @@ static int binlog_buffer[BINLOG_BUFFER_SIZE]; static int *rptr; static int *wptr; static int binlog_fd; +static int in_replay_log; // should be used ONLY for DEBUG #define MAX_LOG_EVENT_SIZE (1 << 17) @@ -140,13 +141,15 @@ static int fetch_comb_binlog_set_dh_params (void *extra) { static int fetch_comb_binlog_set_pts (void *extra) { int new_pts = fetch_int (); assert (new_pts >= tgl_state.pts); + vlogprintf (E_DEBUG - 1 + 2 * in_replay_log, "pts %d=>%d\n", tgl_state.pts, new_pts); tgl_state.pts = new_pts; return 0; } static int fetch_comb_binlog_set_qts (void *extra) { int new_qts = fetch_int (); - //assert (new_qts >= qts); + assert (new_qts >= tgl_state.qts); + vlogprintf (E_DEBUG - 1 + 2 * in_replay_log, "qts %d=>%d\n", tgl_state.qts, new_qts); tgl_state.qts = new_qts; return 0; } @@ -164,6 +167,7 @@ static int fetch_comb_binlog_set_seq (void *extra) { vlogprintf (E_ERROR, "Error: old_seq = %d, new_seq = %d\n", tgl_state.seq, new_seq); } assert (new_seq >= tgl_state.seq); + vlogprintf (E_DEBUG - 1 + 2 * in_replay_log, "seq %d=>%d\n", tgl_state.seq, new_seq); tgl_state.seq = new_seq; return 0; } @@ -1087,6 +1091,7 @@ static int fetch_comb_binlog_msg_seq_update (void *extra) { struct tgl_message *M = tgl_message_get (fetch_long ()); assert (M); tgl_state.seq ++; + vlogprintf (E_DEBUG - 1 + 2 * in_replay_log, "seq %d=>%d\n", tgl_state.seq - 1, tgl_state.seq); if (tgl_state.callback.msg_receive) { tgl_state.callback.msg_receive (M); @@ -1234,6 +1239,7 @@ void tgl_replay_log (void) { exit (2); } int end = 0; + in_replay_log = 1; while (1) { if (!end && wptr - rptr < MAX_LOG_EVENT_SIZE / 4) { if (wptr == rptr) { @@ -1259,6 +1265,7 @@ void tgl_replay_log (void) { if (wptr == rptr) { break; } replay_log_event (); } + in_replay_log = 0; close (fd); } @@ -1573,6 +1580,7 @@ void bl_do_encr_chat_init (int id, int user_id, unsigned char random[], unsigned void bl_do_set_pts (int pts) { if (tgl_state.locks & TGL_LOCK_DIFF) { return; } + if (pts == tgl_state.pts) { return; } int *ev = alloc_log_event (8); ev[0] = CODE_binlog_set_pts; ev[1] = pts; @@ -1580,6 +1588,8 @@ void bl_do_set_pts (int pts) { } void bl_do_set_qts (int qts) { + if (tgl_state.locks & TGL_LOCK_DIFF) { return; } + if (qts == tgl_state.qts) { return; } int *ev = alloc_log_event (8); ev[0] = CODE_binlog_set_qts; ev[1] = qts; @@ -1588,6 +1598,7 @@ void bl_do_set_qts (int qts) { void bl_do_set_date (int date) { if (tgl_state.locks & TGL_LOCK_DIFF) { return; } + if (date == tgl_state.date) { return; } int *ev = alloc_log_event (8); ev[0] = CODE_binlog_set_date; ev[1] = date; @@ -1596,6 +1607,7 @@ void bl_do_set_date (int date) { void bl_do_set_seq (int seq) { if (tgl_state.locks & TGL_LOCK_DIFF) { return; } + if (seq == tgl_state.seq) { return; } int *ev = alloc_log_event (8); ev[0] = CODE_binlog_set_seq; ev[1] = seq; diff --git a/loop.c b/loop.c index 32eda8f..ade71a7 100644 --- a/loop.c +++ b/loop.c @@ -138,7 +138,7 @@ static void stdin_read_callback_line (evutil_socket_t fd, short what, void *arg) void net_loop (int flags, int (*is_end)(void)) { delete_stdin_event = 0; - if (verbosity) { + if (verbosity >= E_DEBUG) { logprintf ("Starting netloop\n"); } struct event *ev = 0; @@ -184,7 +184,7 @@ void net_loop (int flags, int (*is_end)(void)) { event_free (ev); } - if (verbosity) { + if (verbosity >= E_DEBUG) { logprintf ("End of netloop\n"); } } @@ -474,9 +474,13 @@ int loop (void) { if (binlog_enabled) { double t = tglt_get_double_time (); - logprintf ("replay log start\n"); + if (verbosity >= E_DEBUG) { + logprintf ("replay log start\n"); + } tgl_replay_log (); - logprintf ("replay log end in %lf seconds\n", tglt_get_double_time () - t); + if (verbosity >= E_DEBUG) { + logprintf ("replay log end in %lf seconds\n", tglt_get_double_time () - t); + } tgl_reopen_binlog_for_writing (); } else { read_auth_file (); @@ -497,7 +501,7 @@ int loop (void) { tgl_do_help_get_config (on_get_config, 0); net_loop (0, got_config); - if (verbosity) { + if (verbosity >= E_DEBUG) { logprintf ("DC_info: %d new DC got\n", new_dc_num); } @@ -524,8 +528,10 @@ int loop (void) { } tgl_do_send_code (default_username, sign_in_callback, 0); net_loop (0, sent_code); - - logprintf ("%s\n", should_register ? "phone not registered" : "phone registered"); + + if (verbosity >= E_DEBUG) { + logprintf ("%s\n", should_register ? "phone not registered" : "phone registered"); + } if (!should_register) { char *code = 0; size_t size = 0; diff --git a/queries.c b/queries.c index b9ec4dc..da85e19 100644 --- a/queries.c +++ b/queries.c @@ -2917,7 +2917,7 @@ void tgl_do_get_difference (int sync_from_start, void (*callback)(void *callback tgl_do_insert_header (); if (tgl_state.seq > 0 || sync_from_start) { if (tgl_state.pts == 0) { tgl_state.pts = 1; } - if (tgl_state.qts == 0) { tgl_state.qts = 1; } + //if (tgl_state.qts == 0) { tgl_state.qts = 1; } if (tgl_state.date == 0) { tgl_state.date = 1; } out_int (CODE_updates_get_difference); out_int (tgl_state.pts); diff --git a/tgl.h b/tgl.h index e546503..2444a89 100644 --- a/tgl.h +++ b/tgl.h @@ -110,7 +110,7 @@ struct tgl_net_methods { #define E_ERROR 0 #define E_WARNING 1 #define E_NOTICE 2 -#define E_DEBUG 3 +#define E_DEBUG 6 #define TGL_LOCK_DIFF 1 diff --git a/updates.c b/updates.c index de35a61..a2e2977 100644 --- a/updates.c +++ b/updates.c @@ -29,13 +29,13 @@ void tglu_fetch_pts (void) { int p = fetch_int (); if (p <= tgl_state.pts) { return; } - bl_do_set_pts (tgl_state.pts); + bl_do_set_pts (p); } void tglu_fetch_qts (void) { int p = fetch_int (); if (p <= tgl_state.qts) { return; } - bl_do_set_qts (tgl_state.qts); + bl_do_set_qts (p); } void tglu_fetch_date (void) {