use std::io::{self};
use std::net::{UdpSocket, ToSocketAddrs};
use hyper::error::{self};
use hyper::net::{NetworkConnector};
use net::{self};
use net::sender::{UdpSender};
pub struct UdpConnector(UdpSocket);
impl UdpConnector {
pub fn new<A: ToSocketAddrs>(local_addr: A, _: Option<i32>) -> io::Result<UdpConnector> {
let udp = try!(UdpSocket::bind(local_addr));
Ok(UdpConnector(udp))
}
pub fn deconstruct(self) -> UdpSocket {
self.0
}
}
impl NetworkConnector for UdpConnector {
type Stream = UdpSender;
fn connect(&self, host: &str, port: u16, _: &str) -> error::Result<<Self as NetworkConnector>::Stream> {
let udp_sock = try!(self.0.try_clone());
let sock_addr = try!(net::addr_from_trait((host, port)));
Ok(UdpSender::new(udp_sock, sock_addr))
}
}