private void TL_BadMsgNotification(TL.Object obj) { int error_code = obj.getInt("error_code"); Message msg = TLMessage.get(obj.getLong("bad_msg_id")); Common.logError("bad_msg: " + error_code + " " + msg.obj.name + ":" + msg.obj.type); if (error_code == 16 || error_code == 17) { time_delta = (int) ((cur_message_id >> 32) - Common.getUnixTime()); last_message_id = 0; } if (error_code == 32 || error_code == 33) { Common.logError("cur seq: " + cur_msg_seq); Common.logError("old seq: " + seqno); if (!bad_seq) { session = GEN_session_id(); seqno = 0; send_ping(); bad_seq = true; } // seqno = cur_msg_seq + (cur_msg_seq % 2) + 100; // session = GEN_session_id(); // seqno = 0; } if (obj.id == 0xedab447b) { // bad_server_salt server_salt = obj.getLong("new_server_salt"); dcState.set("server_salt", server_salt); } retry(obj.getLong("bad_msg_id")); }
private void TL_Config(TL.Object obj) { dc_date = obj.getInt("date"); MTProto.dc_this = obj.getInt("this_dc"); dcState.set("id", dc_this); updateDcStates(); TL.Vector dc_options = obj.getVector("dc_options"); ArrayList<TL.Object> new_dcStates = new ArrayList<TL.Object>(); for (int i = 0; i < dc_options.count; i++) { TL.Object dcObj = dc_options.getObject(i); int id = dcObj.getInt("id"); TL.Object state = TL.newObject( "joim.dcState", id, dcObj.getString("ip_address"), dcObj.getInt("port"), new byte[0], false, GEN_session_id(), 0L, 0); for (int j = 0; j < MTProto.dcStates.size(); j++) { TL.Object item = MTProto.dcStates.get(j); if (id == item.getInt("id") && state.getString("ip").equals(item.getString("ip"))) { state.set("auth_key", item.getBytes("auth_key")); state.set("bind", item.getBool("bind")); state.set("session", item.getLong("session")); state.set("server_salt", item.getLong("server_salt")); state.set("seqno", item.getInt("seqno")); if (state.getInt("port") == item.getInt("port")) dcState = state; break; } } new_dcStates.add(state); } dcStates = new_dcStates; send_queue(); cb.onReady(); }
private void TL_contacts_ImportedContacts(TL.Object obj) { User.addUsers(obj.getVector("users")); TL.Vector imported = obj.getVector("imported"); for (int i = 0; i < imported.count; i++) { TL.Object c = imported.getObject(i); User.getUser(c.getInt("user_id")).client_id = c.getLong("client_id"); } SyncUtils.updateContacts(Main.main); }
private void TL_RpcResult(TL.Object obj) { req_msg_id = obj.getLong("req_msg_id"); TL.Object result = obj.getObject("result"); Message msg = TLMessage.get(req_msg_id); if (msg != null && msg.result != null) msg.result.onResultRPC( result, msg.param, result.name != null && result.name.equals("rpc_error")); process(result); TLMessage.delete(req_msg_id); }
private void TL_MessageContainer(TL.Object obj) { TL.Vector v = (TL.Vector) obj; int count = v.count; Common.logDebug("msg_count: " + count); for (int i = 0; i < v.count; i++) { TL.Object message = v.getObject(i); ack_message(message.getInt("seqno"), message.getLong("msg_id")); process(message.getObject("body")); } }
private void TL_Pong(TL.Object obj) { if (obj.name.equals("ping")) send(TL.newObject("pong", 0L, obj.getLong("ping_id")), true, false); if (obj.name.equals("pong")) { /* if (!ready) { send_queue(); ready = true; } */ } }
// MTProto public MTProto(int dc_id, MTProtoListener callback, int reuseFlag) { this.reuseFlag = reuseFlag; cb = callback; for (int i = 0; i < dcStates.size(); i++) if (dcStates.get(i).getInt("id") == dc_id) { dcState = dcStates.get(i); // Common.hexStringToByteArray("23D03699CE2AB29BA2273084D95DA126EC3A1D55BE4C317615CE66609D5562BDC0EFDE5AE1F9185001C35781F622B31DF5294685559340DE7D5CC8D7F6F86AE049107D8E498EB2AC3D6FA735DF90648EEC34A6B7BE3A5075A455F5696DB39280BF68C1637E1580E1EBA3F0C12EF2C03B8E9B5ECCFD3E4885BF636863388E3EC9E9EF60C722FF9B45CD93FA5E8D0D277B45A6A9370860582A159187F2F352D418D195D8E9310B5559E170F51CB2056F6CB6DB586E9349192A1B7EAA50887C115A14F996F5A855E90E47635A81EA3048615F4FD91347D73335E5503179857D0D29132483271B28E6591172C3D94686BD96E91FDB7AD9591A526218B3DDFC7A2A09") setAuthKey(dcState.getBytes("auth_key")); bind = dcState.getBool("bind"); seqno = dcState.getInt("seqno"); session = dcState.getLong("session"); server_salt = dcState.getLong("server_salt"); Common.logError("session: " + session + " seqno: " + seqno); connected = false; Thread netThread = new Thread(transport = new TransportTCP(this, true)); netThread.setPriority(Thread.MIN_PRIORITY); netThread.start(); return; } Common.logError("dc not found: " + dc_id); }
private void TL_updateMessageID(TL.Object update) { Dialog.messageUpdateID(update.getLong("random_id"), update.getInt("id"), null); }
private void TL_NewSession(TL.Object obj) { server_salt = obj.getLong("server_salt"); bad_seq = false; send_queue(); }