Handle session creation error

This commit is contained in:
arkpar 2016-02-14 12:11:18 +01:00
parent 7503d6695a
commit dee375bfac
2 changed files with 14 additions and 3 deletions

View File

@ -643,8 +643,15 @@ impl<Message> Host<Message> where Message: Send + Sync + Clone {
} }
} }
let h = Arc::try_unwrap(h).ok().unwrap().into_inner().unwrap(); let h = Arc::try_unwrap(h).ok().unwrap().into_inner().unwrap();
let mut session = match Session::new(h, &self.info.read().unwrap()) {
Ok(s) => s,
Err(e) => {
warn!("Session creation error: {:?}", e);
return;
}
};
let result = sessions.insert_with(move |session_token| { let result = sessions.insert_with(move |session_token| {
let session = Session::new(h, session_token, &self.info.read().unwrap()).expect("Session creation error"); session.set_token(session_token);
io.update_registration(session_token).expect("Error updating session registration"); io.update_registration(session_token).expect("Error updating session registration");
self.stats.inc_sessions(); self.stats.inc_sessions();
Arc::new(Mutex::new(session)) Arc::new(Mutex::new(session))

View File

@ -108,7 +108,7 @@ const PACKET_LAST: u8 = 0x7f;
impl Session { impl Session {
/// Create a new session out of comepleted handshake. Consumes handshake object. /// Create a new session out of comepleted handshake. Consumes handshake object.
pub fn new(h: Handshake, token: StreamToken, host: &HostInfo) -> Result<Session, UtilError> { pub fn new(h: Handshake, host: &HostInfo) -> Result<Session, UtilError> {
let id = h.id.clone(); let id = h.id.clone();
let connection = try!(EncryptedConnection::new(h)); let connection = try!(EncryptedConnection::new(h));
let mut session = Session { let mut session = Session {
@ -124,7 +124,6 @@ impl Session {
ping_time_ns: 0, ping_time_ns: 0,
pong_time_ns: None, pong_time_ns: None,
}; };
session.connection.set_token(token);
try!(session.write_hello(host)); try!(session.write_hello(host));
try!(session.send_ping()); try!(session.send_ping());
Ok(session) Ok(session)
@ -140,6 +139,11 @@ impl Session {
self.had_hello self.had_hello
} }
/// Replace socket token
pub fn set_token(&mut self, token: StreamToken) {
self.connection.set_token(token);
}
/// Readable IO handler. Returns packet data if available. /// Readable IO handler. Returns packet data if available.
pub fn readable<Message>(&mut self, io: &IoContext<Message>, host: &HostInfo) -> Result<SessionData, UtilError> where Message: Send + Sync + Clone { pub fn readable<Message>(&mut self, io: &IoContext<Message>, host: &HostInfo) -> Result<SessionData, UtilError> where Message: Send + Sync + Clone {
match try!(self.connection.readable(io)) { match try!(self.connection.readable(io)) {