mirror of
https://github.com/YGGverse/aquatic.git
synced 2026-04-01 18:25:30 +00:00
http_private: use CanonicalSocketAddr when calling DB
This commit is contained in:
parent
96e128bb90
commit
5d4f30bb7b
2 changed files with 11 additions and 14 deletions
|
|
@ -1,5 +1,6 @@
|
||||||
use std::net::{IpAddr, SocketAddr};
|
use std::net::IpAddr;
|
||||||
|
|
||||||
|
use aquatic_common::CanonicalSocketAddr;
|
||||||
use aquatic_http_protocol::{
|
use aquatic_http_protocol::{
|
||||||
common::AnnounceEvent, request::AnnounceRequest, response::FailureResponse,
|
common::AnnounceEvent, request::AnnounceRequest, response::FailureResponse,
|
||||||
};
|
};
|
||||||
|
|
@ -30,14 +31,14 @@ struct AnnounceProcedureParameters {
|
||||||
|
|
||||||
impl AnnounceProcedureParameters {
|
impl AnnounceProcedureParameters {
|
||||||
fn new(
|
fn new(
|
||||||
source_addr: SocketAddr,
|
source_addr: CanonicalSocketAddr,
|
||||||
user_agent: Option<String>,
|
user_agent: Option<String>,
|
||||||
user_token: String, // FIXME: length
|
user_token: String, // FIXME: length
|
||||||
request: &AnnounceRequest,
|
request: &AnnounceRequest,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
source_ip: source_addr.ip(),
|
source_ip: source_addr.get().ip(),
|
||||||
source_port: source_addr.port(),
|
source_port: source_addr.get().port(),
|
||||||
user_agent,
|
user_agent,
|
||||||
user_token,
|
user_token,
|
||||||
info_hash: hex::encode(request.info_hash.0),
|
info_hash: hex::encode(request.info_hash.0),
|
||||||
|
|
@ -59,7 +60,7 @@ struct AnnounceProcedureResults {
|
||||||
|
|
||||||
pub async fn validate_announce_request(
|
pub async fn validate_announce_request(
|
||||||
pool: &Pool<MySql>,
|
pool: &Pool<MySql>,
|
||||||
source_addr: SocketAddr,
|
source_addr: CanonicalSocketAddr,
|
||||||
user_agent: Option<String>,
|
user_agent: Option<String>,
|
||||||
user_token: String,
|
user_token: String,
|
||||||
request: AnnounceRequest,
|
request: AnnounceRequest,
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ pub async fn announce(
|
||||||
Extension(config): Extension<Arc<Config>>,
|
Extension(config): Extension<Arc<Config>>,
|
||||||
Extension(pool): Extension<MySqlPool>,
|
Extension(pool): Extension<MySqlPool>,
|
||||||
Extension(request_sender): Extension<Arc<ChannelRequestSender>>,
|
Extension(request_sender): Extension<Arc<ChannelRequestSender>>,
|
||||||
ConnectInfo(peer_addr): ConnectInfo<SocketAddr>,
|
ConnectInfo(source_addr): ConnectInfo<SocketAddr>,
|
||||||
opt_user_agent: Option<TypedHeader<UserAgent>>,
|
opt_user_agent: Option<TypedHeader<UserAgent>>,
|
||||||
Path(user_token): Path<String>,
|
Path(user_token): Path<String>,
|
||||||
RawQuery(query): RawQuery,
|
RawQuery(query): RawQuery,
|
||||||
|
|
@ -38,19 +38,15 @@ pub async fn announce(
|
||||||
let request_worker_index = RequestWorkerIndex::from_info_hash(&config, request.info_hash);
|
let request_worker_index = RequestWorkerIndex::from_info_hash(&config, request.info_hash);
|
||||||
let opt_user_agent = opt_user_agent.map(|header| header.as_str().to_owned());
|
let opt_user_agent = opt_user_agent.map(|header| header.as_str().to_owned());
|
||||||
|
|
||||||
|
let source_addr = CanonicalSocketAddr::new(source_addr);
|
||||||
|
|
||||||
let validated_request =
|
let validated_request =
|
||||||
db::validate_announce_request(&pool, peer_addr, opt_user_agent, user_token, request)
|
db::validate_announce_request(&pool, source_addr, opt_user_agent, user_token, request)
|
||||||
.await
|
.await
|
||||||
.map_err(|r| create_response(Response::Failure(r)))?;
|
.map_err(|r| create_response(Response::Failure(r)))?;
|
||||||
|
|
||||||
let canonical_socket_addr = CanonicalSocketAddr::new(peer_addr);
|
|
||||||
|
|
||||||
let response_receiver = request_sender
|
let response_receiver = request_sender
|
||||||
.send_to(
|
.send_to(request_worker_index, validated_request, source_addr)
|
||||||
request_worker_index,
|
|
||||||
validated_request,
|
|
||||||
canonical_socket_addr,
|
|
||||||
)
|
|
||||||
.await
|
.await
|
||||||
.map_err(|err| internal_error(format!("Sending request over channel failed: {:#}", err)))?;
|
.map_err(|err| internal_error(format!("Sending request over channel failed: {:#}", err)))?;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue