Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/majn/tgl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvvaltman <vvaltman@neon>2014-11-27 21:46:48 +0300
committervvaltman <vvaltman@neon>2014-11-27 21:46:48 +0300
commitcebe2822a2620961692ac45b0ea2ee99d396c5fb (patch)
tree68c250578c6c1f45b35e7050d6866138ccb42dfd
parente7406512754547f89af0ef36ed7f818e6974ad62 (diff)
Fix for failed connections
-rw-r--r--mtproto-client.c8
-rw-r--r--tgl-net.c4
2 files changed, 7 insertions, 5 deletions
diff --git a/mtproto-client.c b/mtproto-client.c
index baff32d..5a7f36f 100644
--- a/mtproto-client.c
+++ b/mtproto-client.c
@@ -1082,7 +1082,7 @@ static int process_rpc_message (struct tgl_state *TLS, struct connection *c, str
if (len < MINSZ || (len & 15) != (UNENCSZ & 15)) {
vlogprintf (E_WARNING, "Incorrect packet from server. Closing connection\n");
fail_connection (TLS, c);
- return 0;
+ return -1;
}
assert (len >= MINSZ && (len & 15) == (UNENCSZ & 15));
struct tgl_dc *DC = TLS->net_methods->get_dc (c);
@@ -1107,7 +1107,7 @@ static int process_rpc_message (struct tgl_state *TLS, struct connection *c, str
if (!(!(enc->msg_len & 3) && enc->msg_len > 0 && enc->msg_len <= len - MINSZ && len - MINSZ - enc->msg_len <= 12)) {
vlogprintf (E_WARNING, "Incorrect packet from server. Closing connection\n");
fail_connection (TLS, c);
- return 0;
+ return -1;
}
assert (!(enc->msg_len & 3) && enc->msg_len > 0 && enc->msg_len <= len - MINSZ && len - MINSZ - enc->msg_len <= 12);
@@ -1122,7 +1122,7 @@ static int process_rpc_message (struct tgl_state *TLS, struct connection *c, str
if (memcmp (&enc->msg_key, sha1_buffer + 4, 16)) {
vlogprintf (E_WARNING, "Incorrect packet from server. Closing connection\n");
fail_connection (TLS, c);
- return 0;
+ return -1;
}
assert (!memcmp (&enc->msg_key, sha1_buffer + 4, 16));
@@ -1140,7 +1140,7 @@ static int process_rpc_message (struct tgl_state *TLS, struct connection *c, str
if (this_server_time < st - 300 || this_server_time > st + 30) {
vlogprintf (E_WARNING, "bad msg time: salt = %lld, session_id = %lld, msg_id = %lld, seq_no = %d, st = %lf, now = %lf\n", enc->server_salt, enc->session_id, enc->msg_id, enc->seq_no, st, get_utime (CLOCK_REALTIME));
fail_session (TLS, S);
- return 0;
+ return -1;
}
S->received_messages ++;
diff --git a/tgl-net.c b/tgl-net.c
index 5dddfb1..067ac80 100644
--- a/tgl-net.c
+++ b/tgl-net.c
@@ -481,7 +481,9 @@ static void try_rpc_read (struct connection *c) {
len *= 4;
int op;
assert (tgln_read_in_lookup (c, &op, 4) == 4);
- c->methods->execute (TLS, c, op, len);
+ if (c->methods->execute (TLS, c, op, len) < 0) {
+ return;
+ }
}
}