Skip to content

Commit 5f65bf1

Browse files
committed
mitm: Disable TTS sink
credits: @Ioniq3 closes: #21
1 parent de4b786 commit 5f65bf1

File tree

4 files changed

+35
-1
lines changed

4 files changed

+35
-1
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Currently it is intended to run as a more-or-less drop-in replacement of the `aa
1313
- MITM (man-in-the-middle) mode support with the following features:
1414
- DPI change
1515
- Disable media sink
16+
- Disable TTS sink
1617
- Developer mode
1718

1819
## Current project status
@@ -157,6 +158,9 @@ OPTIONS:
157158
--disable-media-sink
158159
MITM: Disable media sink
159160
161+
--disable-tts-sink
162+
MITM: Disable TTS sink
163+
160164
--dpi <DPI>
161165
MITM: Force DPI (experimental)
162166

src/io_uring.rs

+3
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ pub async fn io_loop(
268268
dpi: Option<u16>,
269269
developer_mode: bool,
270270
disable_media_sink: bool,
271+
disable_tts_sink: bool,
271272
) -> Result<()> {
272273
info!("{} 🛰️ Starting TCP server...", NAME);
273274
let bind_addr = format!("0.0.0.0:{}", TCP_SERVER_PORT).parse().unwrap();
@@ -351,6 +352,7 @@ pub async fn io_loop(
351352
dpi,
352353
developer_mode,
353354
disable_media_sink,
355+
disable_tts_sink,
354356
));
355357
from_stream = tokio_uring::spawn(proxy(
356358
ProxyType::MobileDevice,
@@ -362,6 +364,7 @@ pub async fn io_loop(
362364
dpi,
363365
developer_mode,
364366
disable_media_sink,
367+
disable_tts_sink,
365368
));
366369
} else {
367370
// We need to copy in both directions...

src/main.rs

+6
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ struct Args {
102102
#[clap(long, requires("mitm"))]
103103
disable_media_sink: bool,
104104

105+
/// MITM: Disable TTS sink
106+
#[clap(long, requires("mitm"))]
107+
disable_tts_sink: bool,
108+
105109
/// MITM: Developer mode
106110
#[clap(long, requires("mitm"))]
107111
developer_mode: bool,
@@ -304,6 +308,7 @@ fn main() {
304308
let dpi = args.dpi;
305309
let developer_mode = args.developer_mode;
306310
let disable_media_sink = args.disable_media_sink;
311+
let disable_tts_sink = args.disable_tts_sink;
307312

308313
// build and spawn main tokio runtime
309314
let runtime = Builder::new_multi_thread().enable_all().build().unwrap();
@@ -320,6 +325,7 @@ fn main() {
320325
dpi,
321326
developer_mode,
322327
disable_media_sink,
328+
disable_tts_sink,
323329
));
324330

325331
info!(

src/mitm.rs

+22-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use tokio_uring::buf::BoundedBuf;
1515
// protobuf stuff:
1616
include!(concat!(env!("OUT_DIR"), "/protos/mod.rs"));
1717
use crate::mitm::protos::*;
18-
use crate::mitm::AudioStreamType::AUDIO_STREAM_MEDIA;
18+
use crate::mitm::AudioStreamType::*;
1919
use protobuf::text_format::print_to_string_pretty;
2020
use protobuf::{Enum, Message, MessageDyn};
2121
use protos::ControlMessageType::{self, *};
@@ -230,6 +230,7 @@ pub async fn pkt_modify_hook(
230230
dpi: Option<u16>,
231231
developer_mode: bool,
232232
disable_media_sink: bool,
233+
disable_tts_sink: bool,
233234
) -> Result<()> {
234235
if pkt.channel != 0 {
235236
return Ok(());
@@ -268,6 +269,24 @@ pub async fn pkt_modify_hook(
268269
);
269270
}
270271

272+
// disable tts sink
273+
if disable_tts_sink {
274+
while let Some(svc) = msg.services.iter_mut().find(|svc| {
275+
!svc.media_sink_service.audio_configs.is_empty()
276+
&& svc.media_sink_service.audio_type() == AUDIO_STREAM_GUIDANCE
277+
}) {
278+
svc.media_sink_service
279+
.as_mut()
280+
.unwrap()
281+
.set_audio_type(AUDIO_STREAM_SYSTEM_AUDIO);
282+
}
283+
info!(
284+
"{} <yellow>{:?}</>: TTS sink disabled",
285+
get_name(proxy_type),
286+
control.unwrap(),
287+
);
288+
}
289+
271290
// disable media sink
272291
if disable_media_sink {
273292
msg.services
@@ -432,6 +451,7 @@ pub async fn proxy<A: Endpoint<A> + 'static>(
432451
dpi: Option<u16>,
433452
developer_mode: bool,
434453
disable_media_sink: bool,
454+
disable_tts_sink: bool,
435455
) -> Result<()> {
436456
let ssl = ssl_builder(proxy_type).await?;
437457

@@ -511,6 +531,7 @@ pub async fn proxy<A: Endpoint<A> + 'static>(
511531
dpi,
512532
developer_mode,
513533
disable_media_sink,
534+
disable_tts_sink,
514535
)
515536
.await?;
516537
pkt.encrypt_payload(&mut mem_buf, &mut server).await?;

0 commit comments

Comments
 (0)