Fixed work with updates
This commit is contained in:
parent
918694278a
commit
1602a33b45
14
binlog.c
14
binlog.c
@ -53,6 +53,7 @@ static int binlog_buffer[BINLOG_BUFFER_SIZE];
|
|||||||
static int *rptr;
|
static int *rptr;
|
||||||
static int *wptr;
|
static int *wptr;
|
||||||
static int binlog_fd;
|
static int binlog_fd;
|
||||||
|
static int in_replay_log; // should be used ONLY for DEBUG
|
||||||
|
|
||||||
|
|
||||||
#define MAX_LOG_EVENT_SIZE (1 << 17)
|
#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) {
|
static int fetch_comb_binlog_set_pts (void *extra) {
|
||||||
int new_pts = fetch_int ();
|
int new_pts = fetch_int ();
|
||||||
assert (new_pts >= tgl_state.pts);
|
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;
|
tgl_state.pts = new_pts;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int fetch_comb_binlog_set_qts (void *extra) {
|
static int fetch_comb_binlog_set_qts (void *extra) {
|
||||||
int new_qts = fetch_int ();
|
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;
|
tgl_state.qts = new_qts;
|
||||||
return 0;
|
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);
|
vlogprintf (E_ERROR, "Error: old_seq = %d, new_seq = %d\n", tgl_state.seq, new_seq);
|
||||||
}
|
}
|
||||||
assert (new_seq >= tgl_state.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;
|
tgl_state.seq = new_seq;
|
||||||
return 0;
|
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 ());
|
struct tgl_message *M = tgl_message_get (fetch_long ());
|
||||||
assert (M);
|
assert (M);
|
||||||
tgl_state.seq ++;
|
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) {
|
if (tgl_state.callback.msg_receive) {
|
||||||
tgl_state.callback.msg_receive (M);
|
tgl_state.callback.msg_receive (M);
|
||||||
@ -1234,6 +1239,7 @@ void tgl_replay_log (void) {
|
|||||||
exit (2);
|
exit (2);
|
||||||
}
|
}
|
||||||
int end = 0;
|
int end = 0;
|
||||||
|
in_replay_log = 1;
|
||||||
while (1) {
|
while (1) {
|
||||||
if (!end && wptr - rptr < MAX_LOG_EVENT_SIZE / 4) {
|
if (!end && wptr - rptr < MAX_LOG_EVENT_SIZE / 4) {
|
||||||
if (wptr == rptr) {
|
if (wptr == rptr) {
|
||||||
@ -1259,6 +1265,7 @@ void tgl_replay_log (void) {
|
|||||||
if (wptr == rptr) { break; }
|
if (wptr == rptr) { break; }
|
||||||
replay_log_event ();
|
replay_log_event ();
|
||||||
}
|
}
|
||||||
|
in_replay_log = 0;
|
||||||
close (fd);
|
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) {
|
void bl_do_set_pts (int pts) {
|
||||||
if (tgl_state.locks & TGL_LOCK_DIFF) { return; }
|
if (tgl_state.locks & TGL_LOCK_DIFF) { return; }
|
||||||
|
if (pts == tgl_state.pts) { return; }
|
||||||
int *ev = alloc_log_event (8);
|
int *ev = alloc_log_event (8);
|
||||||
ev[0] = CODE_binlog_set_pts;
|
ev[0] = CODE_binlog_set_pts;
|
||||||
ev[1] = pts;
|
ev[1] = pts;
|
||||||
@ -1580,6 +1588,8 @@ void bl_do_set_pts (int pts) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void bl_do_set_qts (int qts) {
|
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);
|
int *ev = alloc_log_event (8);
|
||||||
ev[0] = CODE_binlog_set_qts;
|
ev[0] = CODE_binlog_set_qts;
|
||||||
ev[1] = qts;
|
ev[1] = qts;
|
||||||
@ -1588,6 +1598,7 @@ void bl_do_set_qts (int qts) {
|
|||||||
|
|
||||||
void bl_do_set_date (int date) {
|
void bl_do_set_date (int date) {
|
||||||
if (tgl_state.locks & TGL_LOCK_DIFF) { return; }
|
if (tgl_state.locks & TGL_LOCK_DIFF) { return; }
|
||||||
|
if (date == tgl_state.date) { return; }
|
||||||
int *ev = alloc_log_event (8);
|
int *ev = alloc_log_event (8);
|
||||||
ev[0] = CODE_binlog_set_date;
|
ev[0] = CODE_binlog_set_date;
|
||||||
ev[1] = date;
|
ev[1] = date;
|
||||||
@ -1596,6 +1607,7 @@ void bl_do_set_date (int date) {
|
|||||||
|
|
||||||
void bl_do_set_seq (int seq) {
|
void bl_do_set_seq (int seq) {
|
||||||
if (tgl_state.locks & TGL_LOCK_DIFF) { return; }
|
if (tgl_state.locks & TGL_LOCK_DIFF) { return; }
|
||||||
|
if (seq == tgl_state.seq) { return; }
|
||||||
int *ev = alloc_log_event (8);
|
int *ev = alloc_log_event (8);
|
||||||
ev[0] = CODE_binlog_set_seq;
|
ev[0] = CODE_binlog_set_seq;
|
||||||
ev[1] = seq;
|
ev[1] = seq;
|
||||||
|
12
loop.c
12
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)) {
|
void net_loop (int flags, int (*is_end)(void)) {
|
||||||
delete_stdin_event = 0;
|
delete_stdin_event = 0;
|
||||||
if (verbosity) {
|
if (verbosity >= E_DEBUG) {
|
||||||
logprintf ("Starting netloop\n");
|
logprintf ("Starting netloop\n");
|
||||||
}
|
}
|
||||||
struct event *ev = 0;
|
struct event *ev = 0;
|
||||||
@ -184,7 +184,7 @@ void net_loop (int flags, int (*is_end)(void)) {
|
|||||||
event_free (ev);
|
event_free (ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (verbosity) {
|
if (verbosity >= E_DEBUG) {
|
||||||
logprintf ("End of netloop\n");
|
logprintf ("End of netloop\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -474,9 +474,13 @@ int loop (void) {
|
|||||||
|
|
||||||
if (binlog_enabled) {
|
if (binlog_enabled) {
|
||||||
double t = tglt_get_double_time ();
|
double t = tglt_get_double_time ();
|
||||||
|
if (verbosity >= E_DEBUG) {
|
||||||
logprintf ("replay log start\n");
|
logprintf ("replay log start\n");
|
||||||
|
}
|
||||||
tgl_replay_log ();
|
tgl_replay_log ();
|
||||||
|
if (verbosity >= E_DEBUG) {
|
||||||
logprintf ("replay log end in %lf seconds\n", tglt_get_double_time () - t);
|
logprintf ("replay log end in %lf seconds\n", tglt_get_double_time () - t);
|
||||||
|
}
|
||||||
tgl_reopen_binlog_for_writing ();
|
tgl_reopen_binlog_for_writing ();
|
||||||
} else {
|
} else {
|
||||||
read_auth_file ();
|
read_auth_file ();
|
||||||
@ -497,7 +501,7 @@ int loop (void) {
|
|||||||
tgl_do_help_get_config (on_get_config, 0);
|
tgl_do_help_get_config (on_get_config, 0);
|
||||||
net_loop (0, got_config);
|
net_loop (0, got_config);
|
||||||
|
|
||||||
if (verbosity) {
|
if (verbosity >= E_DEBUG) {
|
||||||
logprintf ("DC_info: %d new DC got\n", new_dc_num);
|
logprintf ("DC_info: %d new DC got\n", new_dc_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -525,7 +529,9 @@ int loop (void) {
|
|||||||
tgl_do_send_code (default_username, sign_in_callback, 0);
|
tgl_do_send_code (default_username, sign_in_callback, 0);
|
||||||
net_loop (0, sent_code);
|
net_loop (0, sent_code);
|
||||||
|
|
||||||
|
if (verbosity >= E_DEBUG) {
|
||||||
logprintf ("%s\n", should_register ? "phone not registered" : "phone registered");
|
logprintf ("%s\n", should_register ? "phone not registered" : "phone registered");
|
||||||
|
}
|
||||||
if (!should_register) {
|
if (!should_register) {
|
||||||
char *code = 0;
|
char *code = 0;
|
||||||
size_t size = 0;
|
size_t size = 0;
|
||||||
|
@ -2917,7 +2917,7 @@ void tgl_do_get_difference (int sync_from_start, void (*callback)(void *callback
|
|||||||
tgl_do_insert_header ();
|
tgl_do_insert_header ();
|
||||||
if (tgl_state.seq > 0 || sync_from_start) {
|
if (tgl_state.seq > 0 || sync_from_start) {
|
||||||
if (tgl_state.pts == 0) { tgl_state.pts = 1; }
|
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; }
|
if (tgl_state.date == 0) { tgl_state.date = 1; }
|
||||||
out_int (CODE_updates_get_difference);
|
out_int (CODE_updates_get_difference);
|
||||||
out_int (tgl_state.pts);
|
out_int (tgl_state.pts);
|
||||||
|
2
tgl.h
2
tgl.h
@ -110,7 +110,7 @@ struct tgl_net_methods {
|
|||||||
#define E_ERROR 0
|
#define E_ERROR 0
|
||||||
#define E_WARNING 1
|
#define E_WARNING 1
|
||||||
#define E_NOTICE 2
|
#define E_NOTICE 2
|
||||||
#define E_DEBUG 3
|
#define E_DEBUG 6
|
||||||
|
|
||||||
#define TGL_LOCK_DIFF 1
|
#define TGL_LOCK_DIFF 1
|
||||||
|
|
||||||
|
@ -29,13 +29,13 @@
|
|||||||
void tglu_fetch_pts (void) {
|
void tglu_fetch_pts (void) {
|
||||||
int p = fetch_int ();
|
int p = fetch_int ();
|
||||||
if (p <= tgl_state.pts) { return; }
|
if (p <= tgl_state.pts) { return; }
|
||||||
bl_do_set_pts (tgl_state.pts);
|
bl_do_set_pts (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tglu_fetch_qts (void) {
|
void tglu_fetch_qts (void) {
|
||||||
int p = fetch_int ();
|
int p = fetch_int ();
|
||||||
if (p <= tgl_state.qts) { return; }
|
if (p <= tgl_state.qts) { return; }
|
||||||
bl_do_set_qts (tgl_state.qts);
|
bl_do_set_qts (p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tglu_fetch_date (void) {
|
void tglu_fetch_date (void) {
|
||||||
|
Loading…
Reference in New Issue
Block a user