diff --git a/ubw-sward/src/http/integrated.rs b/ubw-sward/src/http/integrated.rs index 642dda8..eef7292 100644 --- a/ubw-sward/src/http/integrated.rs +++ b/ubw-sward/src/http/integrated.rs @@ -1,12 +1,14 @@ use crate::http::header_config::HeadersConfig; use crate::http::simple::HttpSwardArray; -use crate::http::{RandomUrlGenerator, SimpleHttpSward}; -use crate::utils::multiplexed::MultiplexedSward; +use crate::http::{RandomUrlGenerator, SimpleHttpRequest, SimpleHttpSward}; +use crate::utils::multiplexed::{MultiplexedSward, MultiplexedSwardError}; use rand::Rng; use reqwest::Method; use std::net::{IpAddr, SocketAddr}; use std::sync::Arc; use thiserror::Error; +use tower::ServiceExt; +use tower::Service; use url::Url; use wyrand::WyRand; @@ -21,6 +23,22 @@ pub struct IntegratedHttpSward { request_sender: MultiplexedSward>>, } +impl IntegratedHttpSward { + pub async fn oneshot(&mut self) -> Result { + let url = match &mut self.attack_target { + AttackTarget::Random(random) => random.generate_url()?, + AttackTarget::Fixed(url) => url.clone() + }; + let request = SimpleHttpRequest { + body: None, + url + }; + let res = self.request_sender.ready()?.call(request); + + todo!() + } +} + impl IntegratedHttpSward { pub fn builder() -> IntegratedHttpSwardBuilder { IntegratedHttpSwardBuilder::new() @@ -180,3 +198,15 @@ pub enum HttpSwardBuildError { #[error("Failed to build reqwest client {0}")] ReqwestBuildError(#[from] reqwest::Error), } + +#[derive(Debug, Error)] +pub enum HttpSwardError { + #[error("Http Response: {0}")] + HttpCode(u8), + + #[error(transparent)] + MultiplexError(#[from] MultiplexedSwardError), + + #[error(transparent)] + BadUrl(#[from] url::ParseError) +} \ No newline at end of file diff --git a/ubw-sward/src/http/simple.rs b/ubw-sward/src/http/simple.rs index f2c5ae3..62659fb 100644 --- a/ubw-sward/src/http/simple.rs +++ b/ubw-sward/src/http/simple.rs @@ -3,7 +3,7 @@ use reqwest::header::HeaderMap; use reqwest::{Client, Method}; use std::pin::Pin; use std::task::{Context, Poll}; -use tower::Service; +use tower::{Service, ServiceExt}; use tower::balance::p2c::Balance; use tower::discover::ServiceList; use url::Url; diff --git a/ubw-sward/src/utils/multiplexed.rs b/ubw-sward/src/utils/multiplexed.rs index a7145cd..50804b8 100644 --- a/ubw-sward/src/utils/multiplexed.rs +++ b/ubw-sward/src/utils/multiplexed.rs @@ -64,7 +64,7 @@ where /// Error that can occur when multiplexing requests. #[derive(Debug, thiserror::Error)] pub enum MultiplexedSwardError { - #[error("{0}")] + #[error(transparent)] Inner(E), #[error("Semaphore is closed.")]