This commit is contained in:
2025-09-04 01:21:44 +09:00
parent e4ab06de26
commit 344e383a18
3 changed files with 34 additions and 4 deletions

View File

@@ -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<HttpSwardArray<Box<[SimpleHttpSward]>>>,
}
impl IntegratedHttpSward {
pub async fn oneshot(&mut self) -> Result<reqwest::Response, HttpSwardError> {
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<reqwest::Error>),
#[error(transparent)]
BadUrl(#[from] url::ParseError)
}

View File

@@ -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;

View File

@@ -64,7 +64,7 @@ where
/// Error that can occur when multiplexing requests.
#[derive(Debug, thiserror::Error)]
pub enum MultiplexedSwardError<E> {
#[error("{0}")]
#[error(transparent)]
Inner(E),
#[error("Semaphore is closed.")]