@@ -58,9 +58,9 @@ void AdnlPeerTableImpl::receive_packet(td::IPAddress addr, td::BufferSlice data)
5858 AdnlNodeIdShort dst{data.as_slice ().truncate (32 )};
5959 data.confirm_read (32 );
6060
61- auto it = local_ids_own_ .find (dst);
62- if (it != local_ids_own_ .end ()) {
63- td::actor::send_closure (it->second , &AdnlLocalId::receive, addr, std::move (data));
61+ auto it = local_ids_ .find (dst);
62+ if (it != local_ids_ .end ()) {
63+ td::actor::send_closure (it->second . first , &AdnlLocalId::receive, addr, std::move (data));
6464 return ;
6565 }
6666
@@ -103,21 +103,22 @@ void AdnlPeerTableImpl::receive_decrypted_packet(AdnlNodeIdShort dst, AdnlPacket
103103 CHECK (it != peers_.end ());
104104 }
105105
106- auto it2 = local_ids_own_ .find (dst);
107- if (it2 == local_ids_own_ .end ()) {
106+ auto it2 = local_ids_ .find (dst);
107+ if (it2 == local_ids_ .end ()) {
108108 VLOG (ADNL_ERROR) << this << " : dropping IN message [" << packet.from_short () << " ->" << dst
109109 << " ]: unknown dst (but how did we decrypt message?)" ;
110110 return ;
111111 }
112- td::actor::send_closure (it->second , &AdnlPeer::receive_packet, dst, it2->second .get (), std::move (packet));
112+ td::actor::send_closure (it->second , &AdnlPeer::receive_packet, dst, it2->second .second , it2->second .first .get (),
113+ std::move (packet));
113114}
114115
115116void AdnlPeerTableImpl::add_peer (AdnlNodeIdShort local_id, AdnlNodeIdFull id, AdnlAddressList addr_list) {
116117 auto id_short = id.compute_short_id ();
117118 VLOG (ADNL_DEBUG) << this << " : adding peer " << id_short << " for local id " << local_id;
118119
119- auto it2 = local_ids_own_ .find (local_id);
120- CHECK (it2 != local_ids_own_ .end ());
120+ auto it2 = local_ids_ .find (local_id);
121+ CHECK (it2 != local_ids_ .end ());
121122
122123 auto it = peers_.find (id_short);
123124 if (it == peers_.end ()) {
@@ -126,7 +127,8 @@ void AdnlPeerTableImpl::add_peer(AdnlNodeIdShort local_id, AdnlNodeIdFull id, Ad
126127 }
127128 td::actor::send_closure (it->second , &AdnlPeer::update_id, std::move (id));
128129 if (!addr_list.empty ()) {
129- td::actor::send_closure (it->second , &AdnlPeer::update_addr_list, local_id, it2->second .get (), std::move (addr_list));
130+ td::actor::send_closure (it->second , &AdnlPeer::update_addr_list, local_id, it2->second .second ,
131+ it2->second .first .get (), std::move (addr_list));
130132 }
131133}
132134
@@ -143,13 +145,14 @@ void AdnlPeerTableImpl::send_message_in(AdnlNodeIdShort src, AdnlNodeIdShort dst
143145 it = peers_.emplace (dst, AdnlPeer::create (network_manager_, actor_id (this ), dht_node_, dst)).first ;
144146 }
145147
146- auto it2 = local_ids_own_ .find (src);
147- if (it2 == local_ids_own_ .end ()) {
148+ auto it2 = local_ids_ .find (src);
149+ if (it2 == local_ids_ .end ()) {
148150 LOG (ERROR) << this << " : dropping OUT message [" << src << " ->" << dst << " ]: unknown src" ;
149151 return ;
150152 }
151153
152- td::actor::send_closure (it->second , &AdnlPeer::send_one_message, src, it2->second .get (), std::move (message));
154+ td::actor::send_closure (it->second , &AdnlPeer::send_one_message, src, it2->second .second , it2->second .first .get (),
155+ std::move (message));
153156}
154157
155158void AdnlPeerTableImpl::answer_query (AdnlNodeIdShort src, AdnlNodeIdShort dst, AdnlQueryId query_id,
@@ -175,59 +178,61 @@ void AdnlPeerTableImpl::send_query(AdnlNodeIdShort src, AdnlNodeIdShort dst, std
175178 it = peers_.emplace (dst, AdnlPeer::create (network_manager_, actor_id (this ), dht_node_, dst)).first ;
176179 }
177180
178- auto it2 = local_ids_own_ .find (src);
179- if (it2 == local_ids_own_ .end ()) {
181+ auto it2 = local_ids_ .find (src);
182+ if (it2 == local_ids_ .end ()) {
180183 LOG (ERROR) << this << " : dropping OUT message [" << src << " ->" << dst << " ]: unknown src" ;
181184 return ;
182185 }
183186
184- td::actor::send_closure (it->second , &AdnlPeer::send_query, src, it2->second .get (), name, std::move (promise ), timeout ,
185- std::move (data));
187+ td::actor::send_closure (it->second , &AdnlPeer::send_query, src, it2->second .second , it2-> second . first . get ( ), name ,
188+ std::move (promise), timeout, std::move ( data));
186189}
187190
188- void AdnlPeerTableImpl::add_id (AdnlNodeIdFull id, AdnlAddressList addr_list) {
191+ void AdnlPeerTableImpl::add_id_ex (AdnlNodeIdFull id, AdnlAddressList addr_list, td::uint32 mode ) {
189192 auto a = id.compute_short_id ();
190193 VLOG (ADNL_INFO) << " adnl: adding local id " << a;
191194
192- auto it = local_ids_own_ .find (a);
195+ auto it = local_ids_ .find (a);
193196
194- if (it != local_ids_own_ .end ()) {
195- td::actor::send_closure (it->second , &AdnlLocalId::update_address_list, std::move (addr_list));
197+ if (it != local_ids_ .end ()) {
198+ td::actor::send_closure (it->second . first , &AdnlLocalId::update_address_list, std::move (addr_list));
196199 } else {
197- local_ids_own_[a] = td::actor::create_actor<AdnlLocalId>(" localid" , std::move (id), std::move (addr_list),
198- actor_id (this ), keyring_, dht_node_);
200+ local_ids_.emplace (
201+ a, std::make_pair (td::actor::create_actor<AdnlLocalId>(" localid" , std::move (id), std::move (addr_list), mode,
202+ actor_id (this ), keyring_, dht_node_),
203+ mode));
199204 }
200205}
201206
202207void AdnlPeerTableImpl::del_id (AdnlNodeIdShort id, td::Promise<td::Unit> promise) {
203208 VLOG (ADNL_INFO) << " adnl: deleting local id " << id;
204- local_ids_own_ .erase (id);
209+ local_ids_ .erase (id);
205210 promise.set_value (td::Unit ());
206211}
207212
208213void AdnlPeerTableImpl::subscribe (AdnlNodeIdShort dst, std::string prefix, std::unique_ptr<Callback> callback) {
209- auto it = local_ids_own_ .find (dst);
210- LOG_CHECK (it != local_ids_own_ .end ()) << " dst=" << dst;
214+ auto it = local_ids_ .find (dst);
215+ LOG_CHECK (it != local_ids_ .end ()) << " dst=" << dst;
211216
212- td::actor::send_closure (it->second , &AdnlLocalId::subscribe, prefix, std::move (callback));
217+ td::actor::send_closure (it->second . first , &AdnlLocalId::subscribe, prefix, std::move (callback));
213218}
214219
215220void AdnlPeerTableImpl::unsubscribe (AdnlNodeIdShort dst, std::string prefix) {
216- auto it = local_ids_own_ .find (dst);
221+ auto it = local_ids_ .find (dst);
217222
218- if (it != local_ids_own_ .end ()) {
219- td::actor::send_closure (it->second , &AdnlLocalId::unsubscribe, prefix);
223+ if (it != local_ids_ .end ()) {
224+ td::actor::send_closure (it->second . first , &AdnlLocalId::unsubscribe, prefix);
220225 }
221226}
222227
223228void AdnlPeerTableImpl::register_dht_node (td::actor::ActorId<dht::Dht> dht_node) {
224229 dht_node_ = dht_node;
225230
226- for (auto it = peers_. begin (); it != peers_. end (); it++ ) {
227- td::actor::send_closure (it-> second , &AdnlPeer::update_dht_node, dht_node_);
231+ for (auto &peer : peers_) {
232+ td::actor::send_closure (peer. second , &AdnlPeer::update_dht_node, dht_node_);
228233 }
229- for (auto it = local_ids_own_. begin (); it != local_ids_own_. end (); it++ ) {
230- td::actor::send_closure (it-> second , &AdnlLocalId::update_dht_node, dht_node_);
234+ for (auto &local_id : local_ids_ ) {
235+ td::actor::send_closure (local_id. second . first , &AdnlLocalId::update_dht_node, dht_node_);
231236 }
232237}
233238
@@ -251,21 +256,21 @@ void AdnlPeerTableImpl::register_network_manager(td::actor::ActorId<AdnlNetworkM
251256}
252257
253258void AdnlPeerTableImpl::get_addr_list (AdnlNodeIdShort id, td::Promise<AdnlAddressList> promise) {
254- auto it = local_ids_own_ .find (id);
255- if (it == local_ids_own_ .end ()) {
259+ auto it = local_ids_ .find (id);
260+ if (it == local_ids_ .end ()) {
256261 promise.set_error (td::Status::Error (ErrorCode::notready));
257262 return ;
258263 }
259- td::actor::send_closure (it->second , &AdnlLocalId::get_addr_list_async, std::move (promise));
264+ td::actor::send_closure (it->second . first , &AdnlLocalId::get_addr_list_async, std::move (promise));
260265}
261266
262267void AdnlPeerTableImpl::get_self_node (AdnlNodeIdShort id, td::Promise<AdnlNode> promise) {
263- auto it = local_ids_own_ .find (id);
264- if (it == local_ids_own_ .end ()) {
268+ auto it = local_ids_ .find (id);
269+ if (it == local_ids_ .end ()) {
265270 promise.set_error (td::Status::Error (ErrorCode::notready));
266271 return ;
267272 }
268- td::actor::send_closure (it->second , &AdnlLocalId::get_self_node, std::move (promise));
273+ td::actor::send_closure (it->second . first , &AdnlLocalId::get_self_node, std::move (promise));
269274}
270275
271276void AdnlPeerTableImpl::register_channel (AdnlChannelIdShort id, td::actor::ActorId<AdnlChannel> channel) {
@@ -309,16 +314,16 @@ AdnlPeerTableImpl::AdnlPeerTableImpl(std::string db_root, td::actor::ActorId<key
309314}
310315
311316void AdnlPeerTableImpl::deliver (AdnlNodeIdShort src, AdnlNodeIdShort dst, td::BufferSlice data) {
312- auto it = local_ids_own_ .find (dst);
313- if (it != local_ids_own_ .end ()) {
314- td::actor::send_closure (it->second , &AdnlLocalId::deliver, src, std::move (data));
317+ auto it = local_ids_ .find (dst);
318+ if (it != local_ids_ .end ()) {
319+ td::actor::send_closure (it->second . first , &AdnlLocalId::deliver, src, std::move (data));
315320 }
316321}
317322void AdnlPeerTableImpl::deliver_query (AdnlNodeIdShort src, AdnlNodeIdShort dst, td::BufferSlice data,
318323 td::Promise<td::BufferSlice> promise) {
319- auto it = local_ids_own_ .find (dst);
320- if (it != local_ids_own_ .end ()) {
321- td::actor::send_closure (it->second , &AdnlLocalId::deliver_query, src, std::move (data), std::move (promise));
324+ auto it = local_ids_ .find (dst);
325+ if (it != local_ids_ .end ()) {
326+ td::actor::send_closure (it->second . first , &AdnlLocalId::deliver_query, src, std::move (data), std::move (promise));
322327 } else {
323328 LOG (WARNING) << " deliver query: unknown dst " << dst;
324329 promise.set_error (td::Status::Error (ErrorCode::notready, " cannot deliver: unknown DST" ));
@@ -327,9 +332,9 @@ void AdnlPeerTableImpl::deliver_query(AdnlNodeIdShort src, AdnlNodeIdShort dst,
327332
328333void AdnlPeerTableImpl::decrypt_message (AdnlNodeIdShort dst, td::BufferSlice data,
329334 td::Promise<td::BufferSlice> promise) {
330- auto it = local_ids_own_ .find (dst);
331- if (it != local_ids_own_ .end ()) {
332- td::actor::send_closure (it->second , &AdnlLocalId::decrypt_message, std::move (data), std::move (promise));
335+ auto it = local_ids_ .find (dst);
336+ if (it != local_ids_ .end ()) {
337+ td::actor::send_closure (it->second . first , &AdnlLocalId::decrypt_message, std::move (data), std::move (promise));
333338 } else {
334339 LOG (WARNING) << " decrypt message: unknown dst " << dst;
335340 promise.set_error (td::Status::Error (ErrorCode::notready, " cannot decrypt: unknown DST" ));
0 commit comments