From df1b563b1f14443d685f3b035f749090b764d63d Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 6 Sep 2014 17:26:33 -0400 Subject: better default for hostname --- src/client.rs | 37 +++++++++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/client.rs b/src/client.rs index 4c063f6..2824df2 100644 --- a/src/client.rs +++ b/src/client.rs @@ -17,6 +17,7 @@ pub struct ClientBuilder { pub struct Client { conn: io::BufferedStream, + socket_name: Option, } impl ClientBuilder { @@ -62,19 +63,24 @@ impl ClientBuilder { pub fn connect (self) -> Client { let nick = self.nick.clone(); let pass = self.pass.clone(); - let hostname = match self.hostname { - Some(ref host) => host.clone(), - None => { - // XXX get the name of the local end of the connection - "localhost".to_string() - }, - }; + let hostname = self.hostname.clone(); let username = self.username.clone(); let servername = self.servername.clone(); let realname = self.realname.clone(); let mut client = self.connect_raw(); + let hostname = match hostname { + Some(host) => host, + None => { + match client.socket_name() { + Some(host) => host.to_string(), + // XXX something better here? + None => "localhost".to_string(), + } + }, + }; + match pass { Some(pass) => { client.write(Message::new(None, Pass, vec![pass])); @@ -94,7 +100,15 @@ impl ClientBuilder { pub fn connect_raw (self) -> Client { let mut stream = io::TcpStream::connect(self.servername.as_slice(), self.port); - Client { conn: io::BufferedStream::new(stream.unwrap()) } + let mut stream = stream.unwrap(); + let socket_name = match stream.socket_name() { + Ok(addr) => Some(addr.ip.to_string()), + Err(_) => None, + }; + Client { + conn: io::BufferedStream::new(stream), + socket_name: socket_name, + } } } @@ -112,4 +126,11 @@ impl Client { pub fn write (&mut self, msg: Message) { msg.write_protocol_string(&mut self.conn); } + + pub fn socket_name (&self) -> Option<&str> { + match self.socket_name { + Some(ref name) => Some(name.as_slice()), + None => None, + } + } } -- cgit v1.2.3-54-g00ecf