Advertisement
Guest User

Untitled

a guest
Jul 17th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. pub struct Connection {
  2. socket: TcpStream,
  3. session: rustls::ClientSession,
  4. }
  5.  
  6. impl ::std::io::Write for Connection {
  7. fn write(&mut self, bytes: &[u8]) -> ::std::io::Result<usize> {
  8. let mut tls = rustls::Stream::new(&mut self.session, &mut self.socket);
  9. tls.write(bytes)
  10. }
  11.  
  12. fn flush(&mut self) -> ::std::io::Result<()> {
  13. let mut tls = rustls::Stream::new(&mut self.session, &mut self.socket);
  14. tls.flush()
  15. }
  16. }
  17.  
  18. impl ::std::io::Read for Connection {
  19. fn read(&mut self, bytes: &mut [u8]) -> ::std::io::Result<usize> {
  20. let mut tls = rustls::Stream::new(&mut self.session, &mut self.socket);
  21. tls.read(bytes)
  22. }
  23.  
  24. fn read_to_end(&mut self, bytes: &mut Vec<u8>) -> ::std::io::Result<usize> {
  25. let mut tls = rustls::Stream::new(&mut self.session, &mut self.socket);
  26. tls.read_to_end(bytes)
  27. }
  28. }
  29.  
  30. fn send_http_call(conn: &mut Connection) -> Result<()> {
  31. let message = format!(concat!("POST /api HTTP/1.1\r\n",
  32. "Content-Length: 4\r\n",
  33. "Content-Type: text/plain; charset=utf-8\r\n",
  34. "Connection: Keep-Alive\r\n",
  35. "Accept-Encoding: identity\r\n",
  36. "\r\ntest"));
  37. if let Err(e) = conn.write(message.as_bytes()) {
  38. bail!("Could not request to the server: {}", e);
  39. }
  40. let mut response = Vec::new();
  41. loop {
  42. let mut buffer = [0; 1];
  43. let size = conn.read(&mut buffer).unwrap_or(0);
  44. if size == 0 {
  45. break;
  46. }
  47. response.append(&mut buffer.to_vec());
  48. }
  49. let response = String::from_utf8_lossy(&response);
  50. log::warn!("response: {}", response);
  51.  
  52. Ok(())
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement