aboutsummaryrefslogtreecommitdiffstats
path: root/src/udt_extras.rs
diff options
context:
space:
mode:
authorbnewbold <bnewbold@robocracy.org>2016-06-02 17:18:44 -0400
committerbnewbold <bnewbold@robocracy.org>2016-06-02 17:18:44 -0400
commit362dbf20d6b990a092bc220d36289144e86aaa6d (patch)
tree525ca8bb8f7935c3f319cadf3682155b56e01c77 /src/udt_extras.rs
parente6fd66b7a28b51ffb74f2d4fb8617fa8d091e706 (diff)
downloaducp-362dbf20d6b990a092bc220d36289144e86aaa6d.tar.gz
ucp-362dbf20d6b990a092bc220d36289144e86aaa6d.zip
start transition to UDT transport
Diffstat (limited to 'src/udt_extras.rs')
-rw-r--r--src/udt_extras.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/udt_extras.rs b/src/udt_extras.rs
new file mode 100644
index 0000000..f4a714b
--- /dev/null
+++ b/src/udt_extras.rs
@@ -0,0 +1,44 @@
+
+extern crate udt;
+
+use std::str::{self, FromStr};
+use udt::{UdtSocket};
+use std::io;
+use std::io::{Read, Write, ErrorKind};
+
+pub struct UdtStream {
+ socket: UdtSocket,
+}
+
+impl UdtStream {
+
+ pub fn new(socket: UdtSocket) -> UdtStream {
+ UdtStream { socket: socket }
+
+ }
+}
+
+impl Read for UdtStream {
+ fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
+ let buf_len = buf.len();
+ match self.socket.recv(buf, buf_len) {
+ Ok(len) => Ok(len as usize),
+ Err(err) => Err(io::Error::new(
+ ErrorKind::Other, err.err_msg)),
+ }
+ }
+}
+
+impl Write for UdtStream {
+ fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+ match self.socket.send(buf) {
+ Ok(len) => Ok(len as usize),
+ Err(err) => Err(io::Error::new(
+ ErrorKind::Other, err.err_msg)),
+ }
+ }
+
+ fn flush(&mut self) -> io::Result<()> {
+ Ok(())
+ }
+}