diff options
author | vvaltman <vvaltman@neon> | 2014-11-27 21:46:48 +0300 |
---|---|---|
committer | vvaltman <vvaltman@neon> | 2014-11-27 21:46:48 +0300 |
commit | cebe2822a2620961692ac45b0ea2ee99d396c5fb (patch) | |
tree | 68c250578c6c1f45b35e7050d6866138ccb42dfd | |
parent | e7406512754547f89af0ef36ed7f818e6974ad62 (diff) |
Fix for failed connections
-rw-r--r-- | mtproto-client.c | 8 | ||||
-rw-r--r-- | tgl-net.c | 4 |
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 ++; @@ -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; + } } } |