@@ -22,14 +22,15 @@ use std::sync::Arc;
2222
2323use ccrypto:: aes:: SymmetricCipherError ;
2424use cfinally:: finally;
25- use cio:: { IoContext , IoError as CIoError , IoHandler , IoHandlerResult , IoManager , StreamToken , TimerToken } ;
25+ use cio:: { IoChannel , IoContext , IoError as CIoError , IoHandler , IoHandlerResult , IoManager , StreamToken , TimerToken } ;
2626use ckey:: Error as KeysError ;
2727use ctypes:: Secret ;
2828use mio:: deprecated:: EventLoop ;
2929use mio:: Token ;
3030use parking_lot:: Mutex ;
3131use rlp:: DecoderError ;
3232
33+ use super :: super :: p2p;
3334use super :: super :: token_generator:: TokenGenerator ;
3435use super :: super :: RoutingTable ;
3536use super :: super :: SocketAddr ;
@@ -90,6 +91,7 @@ struct SessionInitiator {
9091
9192 routing_table : Arc < RoutingTable > ,
9293 requests : Requests ,
94+ channel_to_p2p : IoChannel < p2p:: Message > ,
9395}
9496
9597#[ derive( Debug ) ]
@@ -191,12 +193,17 @@ pub enum Message {
191193const MESSAGE_TIMEOUT_MS : u64 = 10_000 ;
192194
193195impl SessionInitiator {
194- fn bind ( socket_address : & SocketAddr , routing_table : Arc < RoutingTable > ) -> Result < Self > {
196+ fn bind (
197+ socket_address : & SocketAddr ,
198+ routing_table : Arc < RoutingTable > ,
199+ channel_to_p2p : IoChannel < p2p:: Message > ,
200+ ) -> Result < Self > {
195201 let server = Server :: bind ( socket_address) ?;
196202 Ok ( Self {
197203 server,
198204 routing_table,
199205 requests : Requests :: new ( ) ,
206+ channel_to_p2p,
200207 } )
201208 }
202209
@@ -341,7 +348,10 @@ impl SessionInitiator {
341348 return Ok ( ( ) )
342349 }
343350
344- self . requests . manually_connected_address . take ( from) ;
351+ if self . requests . manually_connected_address . take ( from) . is_some ( ) {
352+ self . channel_to_p2p
353+ . send ( p2p:: Message :: RequestConnection ( from. clone ( ) , p2p:: IgnoreConnectionLimit :: Ignore ) ) ?;
354+ }
345355
346356 if !self . routing_table . create_allowed_session ( from, & encrypted_nonce) {
347357 cwarn ! ( NET , "Cannot create session to {:?}" , from) ;
@@ -376,9 +386,14 @@ pub struct Handler {
376386}
377387
378388impl Handler {
379- pub fn new ( socket_address : SocketAddr , routing_table : Arc < RoutingTable > ) -> Self {
380- let session_initiator =
381- Mutex :: new ( SessionInitiator :: bind ( & socket_address, routing_table) . expect ( "Cannot bind UDP port" ) ) ;
389+ pub fn new (
390+ socket_address : SocketAddr ,
391+ routing_table : Arc < RoutingTable > ,
392+ channel_to_p2p : IoChannel < p2p:: Message > ,
393+ ) -> Self {
394+ let session_initiator = Mutex :: new (
395+ SessionInitiator :: bind ( & socket_address, routing_table, channel_to_p2p) . expect ( "Cannot bind UDP port" ) ,
396+ ) ;
382397 Self {
383398 session_initiator,
384399 }
0 commit comments