Improve new_session_created handling.
This commit is contained in:
parent
f1a064c249
commit
83d9f84c5b
@ -303,10 +303,18 @@ Status SessionConnection::on_packet(const MsgInfo &info, const mtproto_api::rpc_
|
|||||||
}
|
}
|
||||||
|
|
||||||
Status SessionConnection::on_packet(const MsgInfo &info, const mtproto_api::new_session_created &new_session_created) {
|
Status SessionConnection::on_packet(const MsgInfo &info, const mtproto_api::new_session_created &new_session_created) {
|
||||||
VLOG(mtproto) << "NEW_SESSION_CREATED: [first_msg_id:" << format::as_hex(new_session_created.first_msg_id_)
|
auto first_message_id = new_session_created.first_msg_id_;
|
||||||
|
VLOG(mtproto) << "NEW_SESSION_CREATED: [first_msg_id:" << format::as_hex(first_message_id)
|
||||||
<< "] [unique_id:" << format::as_hex(new_session_created.unique_id_)
|
<< "] [unique_id:" << format::as_hex(new_session_created.unique_id_)
|
||||||
<< "] [server_salt:" << format::as_hex(new_session_created.server_salt_) << "]";
|
<< "] [server_salt:" << format::as_hex(new_session_created.server_salt_) << "]";
|
||||||
callback_->on_new_session_created(new_session_created.unique_id_, new_session_created.first_msg_id_);
|
|
||||||
|
auto it = service_queries_.find(first_message_id);
|
||||||
|
if (it != service_queries_.end()) {
|
||||||
|
first_message_id = it->second.container_message_id;
|
||||||
|
LOG(INFO) << "Update first_message_id to container's " << format::as_hex(first_message_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
callback_->on_new_session_created(new_session_created.unique_id_, first_message_id);
|
||||||
return Status::OK();
|
return Status::OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -609,18 +617,16 @@ void SessionConnection::on_message_failed_inner(uint64 id) {
|
|||||||
service_queries_.erase(it);
|
service_queries_.erase(it);
|
||||||
|
|
||||||
switch (query.type) {
|
switch (query.type) {
|
||||||
case ServiceQuery::ResendAnswer: {
|
case ServiceQuery::ResendAnswer:
|
||||||
for (auto message_id : query.message_ids) {
|
for (auto message_id : query.message_ids) {
|
||||||
resend_answer(message_id);
|
resend_answer(message_id);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
case ServiceQuery::GetStateInfo:
|
||||||
case ServiceQuery::GetStateInfo: {
|
|
||||||
for (auto message_id : query.message_ids) {
|
for (auto message_id : query.message_ids) {
|
||||||
get_state_info(message_id);
|
get_state_info(message_id);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
@ -1005,11 +1011,11 @@ void SessionConnection::flush_packet() {
|
|||||||
|
|
||||||
if (resend_answer_message_id) {
|
if (resend_answer_message_id) {
|
||||||
service_queries_.emplace(resend_answer_message_id,
|
service_queries_.emplace(resend_answer_message_id,
|
||||||
ServiceQuery{ServiceQuery::ResendAnswer, std::move(to_resend_answer)});
|
ServiceQuery{ServiceQuery::ResendAnswer, container_id, std::move(to_resend_answer)});
|
||||||
}
|
}
|
||||||
if (get_state_info_message_id) {
|
if (get_state_info_message_id) {
|
||||||
service_queries_.emplace(get_state_info_message_id,
|
service_queries_.emplace(get_state_info_message_id,
|
||||||
ServiceQuery{ServiceQuery::GetStateInfo, std::move(to_get_state_info)});
|
ServiceQuery{ServiceQuery::GetStateInfo, container_id, std::move(to_get_state_info)});
|
||||||
}
|
}
|
||||||
if (ping_id != 0) {
|
if (ping_id != 0) {
|
||||||
last_ping_container_id_ = container_id;
|
last_ping_container_id_ = container_id;
|
||||||
|
@ -170,6 +170,7 @@ class SessionConnection final
|
|||||||
|
|
||||||
struct ServiceQuery {
|
struct ServiceQuery {
|
||||||
enum Type { GetStateInfo, ResendAnswer } type;
|
enum Type { GetStateInfo, ResendAnswer } type;
|
||||||
|
uint64 container_message_id;
|
||||||
vector<int64> message_ids;
|
vector<int64> message_ids;
|
||||||
};
|
};
|
||||||
vector<int64> to_resend_answer_;
|
vector<int64> to_resend_answer_;
|
||||||
|
@ -698,7 +698,7 @@ void Session::on_closed(Status status) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Session::on_new_session_created(uint64 unique_id, uint64 first_message_id) {
|
void Session::on_new_session_created(uint64 unique_id, uint64 first_message_id) {
|
||||||
LOG(INFO) << "New session " << unique_id << " created with first message_id " << first_message_id;
|
LOG(INFO) << "New session " << unique_id << " created with first message_id " << format::as_hex(first_message_id);
|
||||||
if (!use_pfs_ && !auth_data_.use_pfs()) {
|
if (!use_pfs_ && !auth_data_.use_pfs()) {
|
||||||
last_success_timestamp_ = Time::now();
|
last_success_timestamp_ = Time::now();
|
||||||
}
|
}
|
||||||
@ -712,9 +712,9 @@ void Session::on_new_session_created(uint64 unique_id, uint64 first_message_id)
|
|||||||
auto first_query_it = sent_queries_.find(first_message_id);
|
auto first_query_it = sent_queries_.find(first_message_id);
|
||||||
if (first_query_it != sent_queries_.end()) {
|
if (first_query_it != sent_queries_.end()) {
|
||||||
first_message_id = first_query_it->second.container_message_id_;
|
first_message_id = first_query_it->second.container_message_id_;
|
||||||
LOG(INFO) << "Update first_message_id to container's " << first_message_id;
|
LOG(INFO) << "Update first_message_id to container's " << format::as_hex(first_message_id);
|
||||||
} else {
|
} else {
|
||||||
LOG(ERROR) << "Failed to find query " << first_message_id << " from the new session";
|
LOG(INFO) << "Failed to find query " << format::as_hex(first_message_id) << " from the new session";
|
||||||
}
|
}
|
||||||
for (auto it = sent_queries_.begin(); it != sent_queries_.end();) {
|
for (auto it = sent_queries_.begin(); it != sent_queries_.end();) {
|
||||||
Query *query_ptr = &it->second;
|
Query *query_ptr = &it->second;
|
||||||
|
Loading…
Reference in New Issue
Block a user