use std::io::{self, Error, ErrorKind};
use std::net::{SocketAddr, ToSocketAddrs};
use net::{I2pAddr, I2pSocketAddr, ToI2pSocketAddrs};
use sam::DEFAULT_API;
pub struct I2pDatagramSocket {}
impl I2pDatagramSocket {
pub fn bind<A: ToI2pSocketAddrs>(addr: A) -> io::Result<I2pDatagramSocket> {
I2pDatagramSocket::bind_via(DEFAULT_API, addr)
}
pub fn bind_via<A: ToSocketAddrs, B: ToI2pSocketAddrs>(sam_addr: A, addr: B) -> io::Result<I2pDatagramSocket> {
super::each_addr(sam_addr, addr, I2pDatagramSocket::bind_addr)
}
fn bind_addr(sam_addr: &SocketAddr, addr: &I2pSocketAddr) -> io::Result<I2pDatagramSocket> {
unimplemented!();
}
pub fn recv_from(&self, buf: &mut [u8]) -> io::Result<(usize, I2pSocketAddr)> {
unimplemented!()
}
pub fn peek_from(&self, buf: &mut [u8]) -> io::Result<(usize, I2pSocketAddr)> {
unimplemented!()
}
pub fn send_to<A: ToI2pSocketAddrs>(&self, buf: &[u8], addr: A)
-> io::Result<usize> {
match addr.to_socket_addrs()?.next() {
Some(addr) => unimplemented!(),
None => Err(Error::new(ErrorKind::InvalidInput,
"no addresses to send data to")),
}
}
pub fn local_addr(&self) -> io::Result<I2pSocketAddr> {
unimplemented!()
}
pub fn try_clone(&self) -> io::Result<I2pDatagramSocket> {
unimplemented!()
}
pub fn connect<A: ToI2pSocketAddrs>(&self, addr: A) -> io::Result<()> {
self.connect_via(DEFAULT_API, addr)
}
pub fn connect_via<A: ToSocketAddrs, B: ToI2pSocketAddrs>(&self, sam_addr: A, addr: B) -> io::Result<()> {
super::each_addr(sam_addr, addr, |sam_addr, addr| unimplemented!())
}
pub fn send(&self, buf: &[u8]) -> io::Result<usize> {
unimplemented!()
}
pub fn recv(&self, buf: &mut [u8]) -> io::Result<usize> {
unimplemented!()
}
pub fn peek(&self, buf: &mut [u8]) -> io::Result<usize> {
unimplemented!()
}
}