Merge commit '1fa87babb32ea85ff5a97ab93525ae13f66a0eef'

This commit is contained in:
Andrea Cavalli 2020-11-10 12:42:50 +01:00
commit cbe8d94183
5 changed files with 22 additions and 9 deletions

View File

@ -7129,7 +7129,7 @@ void MessagesManager::on_user_dialog_action(DialogId dialog_id, MessageId top_th
auto dialog_type = dialog_id.get_type();
if (dialog_type == DialogType::User || dialog_type == DialogType::SecretChat) {
if (!td_->contacts_manager_->is_user_bot(user_id) && !td_->contacts_manager_->is_user_status_exact(user_id) &&
!get_dialog(dialog_id)->is_opened) {
!get_dialog(dialog_id)->is_opened && !is_canceled) {
return;
}
}
@ -29885,7 +29885,10 @@ void MessagesManager::on_active_dialog_action_timeout(DialogId dialog_id) {
CHECK(!actions_it->second.empty());
auto now = Time::now();
UserId prev_user_id;
while (actions_it->second[0].start_time + DIALOG_ACTION_TIMEOUT < now + 0.1) {
CHECK(actions_it->second[0].user_id != prev_user_id);
prev_user_id = actions_it->second[0].user_id;
on_user_dialog_action(dialog_id, actions_it->second[0].top_thread_message_id, actions_it->second[0].user_id,
DialogAction(), 0);

View File

@ -11,7 +11,8 @@
namespace td {
TcpListener::TcpListener(int port, ActorShared<Callback> callback) : port_(port), callback_(std::move(callback)) {
TcpListener::TcpListener(int port, ActorShared<Callback> callback, Slice server_address)
: port_(port), callback_(std::move(callback)), server_address_(server_address.str()) {
}
void TcpListener::hangup() {
@ -19,7 +20,7 @@ void TcpListener::hangup() {
}
void TcpListener::start_up() {
auto r_socket = ServerSocketFd::open(port_);
auto r_socket = ServerSocketFd::open(port_, server_address_);
if (r_socket.is_error()) {
LOG(ERROR) << "Can't open server socket: " << r_socket.error();
set_timeout_in(5);
@ -39,6 +40,9 @@ void TcpListener::tear_down() {
void TcpListener::loop() {
if (server_fd_.empty()) {
start_up();
if (server_fd_.empty()) {
return;
}
}
sync_with_poll(server_fd_);
while (can_read_local(server_fd_)) {

View File

@ -20,13 +20,14 @@ class TcpListener final : public Actor {
virtual void accept(SocketFd fd) = 0;
};
TcpListener(int port, ActorShared<Callback> callback);
TcpListener(int port, ActorShared<Callback> callback, Slice server_address = Slice("0.0.0.0"));
void hangup() override;
private:
int port_;
ServerSocketFd server_fd_;
ActorShared<Callback> callback_;
const string server_address_;
void start_up() override;
void tear_down() override;
void loop() override;

View File

@ -360,7 +360,7 @@ Result<IPAddress> IPAddress::get_ip_address(CSlice host) {
if (r_address.is_ok()) {
return r_address.move_as_ok();
}
return Status::Error("Not a valid IP address");
return Status::Error(PSLICE() << '"' << host << "\" is not a valid IP address");
}
Result<IPAddress> IPAddress::get_ipv4_address(CSlice host) {
@ -368,7 +368,7 @@ Result<IPAddress> IPAddress::get_ipv4_address(CSlice host) {
// like 0x12.0x34.0x56.0x78, or 0x12345678, or 0x7f.001
auto ipv4_numeric_addr = inet_addr(host.c_str());
if (ipv4_numeric_addr == INADDR_NONE) {
return Status::Error("Host is not valid IPv4 address");
return Status::Error(PSLICE() << '"' << host << "\" is not a valid IPv4 address");
}
host = ::td::get_ip_str(AF_INET, &ipv4_numeric_addr);
@ -384,7 +384,7 @@ Result<IPAddress> IPAddress::get_ipv6_address(CSlice host) {
IPAddress result;
auto status = result.init_ipv6_port(host, 1);
if (status.is_error()) {
return std::move(status);
return Status::Error(PSLICE() << '"' << host << "\" is not a valid IPv6 address");
}
return std::move(result);
}

View File

@ -315,8 +315,13 @@ bool ServerSocketFd::empty() const {
}
Result<ServerSocketFd> ServerSocketFd::open(int32 port, CSlice addr) {
IPAddress address;
TRY_STATUS(address.init_ipv4_port(addr, port));
if (port <= 0 || port >= (1 << 16)) {
return Status::Error(PSLICE() << "Invalid server port " << port << " specified");
}
TRY_RESULT(address, IPAddress::get_ip_address(addr));
address.set_port(port);
NativeFd fd{socket(address.get_address_family(), SOCK_STREAM, 0)};
if (!fd) {
return OS_SOCKET_ERROR("Failed to create a socket");