diff options
author | metamuffin <metamuffin@disroot.org> | 2025-02-23 13:00:52 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-02-23 13:00:52 +0100 |
commit | c8698d101a202055669c54b18cfa7261e19dcbf2 (patch) | |
tree | 67cfb2369c0428525599ae89d4883ce57c95e677 | |
parent | beab67b2e38808f91ecd390190d527fc7db5499d (diff) | |
download | sip-rs-c8698d101a202055669c54b18cfa7261e19dcbf2.tar sip-rs-c8698d101a202055669c54b18cfa7261e19dcbf2.tar.bz2 sip-rs-c8698d101a202055669c54b18cfa7261e19dcbf2.tar.zst |
-rw-r--r-- | tools/src/main.rs | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/tools/src/main.rs b/tools/src/main.rs index c24f366..467b368 100644 --- a/tools/src/main.rs +++ b/tools/src/main.rs @@ -1,6 +1,6 @@ #![feature(random)] use anyhow::Result; -use log::{info, warn}; +use log::info; use rtp::{ rtcp::{Application, ReceiverReport, RtcpPacket, RtcpPart, SdesType, SourceDescription}, rtp::SSRC, @@ -66,17 +66,6 @@ async fn main() -> Result<()> { }; let tu = Arc::new(TransactionUser::new(transport)); - { - let tu = tu.clone(); - spawn(async move { - loop { - if let Err(e) = tu.process_incoming().await { - warn!("error processing responses: {e}"); - } - } - }); - } - let branch = hex::encode([(); 12].map(|()| random::<u8>())); let call_id = hex::encode([(); 12].map(|()| random::<u8>())); let tag = hex::encode([(); 12].map(|()| random::<u8>())); @@ -108,20 +97,32 @@ async fn main() -> Result<()> { body: String::new(), }; + { + let tu = tu.clone(); + let username = username.clone(); + let handler = move || async move { + loop { + let req = tu.process_incoming().await?; + if req.method == Method::Invite { + handle_call(req, tu, local_addr, &username, &self_contact).await?; + break; + } + } + anyhow::Ok(()) + }; + spawn(async move { + if let Err(e) = handler().await { + log::error!("handler error: {e:#}") + } + }); + } + let fail_resp = tu.transact(req.clone()).await?.recv().await.unwrap(); req.headers.insert(Authorization::construct( &req, &fail_resp, &username, &password, )?); let _resp = tu.transact(req.clone()).await?.recv().await.unwrap(); - loop { - let req = tu.process_incoming().await?; - if req.method == Method::Invite { - handle_call(req, tu, local_addr, &username, &self_contact).await?; - break; - } - } - ctrl_c().await?; Ok(()) } @@ -156,6 +157,7 @@ async fn handle_call( rtcp_sock.connect(remote_control_addr).await?; let own_ssrc = SSRC(random()); + let own_cname = format!("sip:{username}@{local_addr}"); let sess_id = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) @@ -181,7 +183,7 @@ async fn handle_call( "rtpmap:101 telephone-event/8000".to_string(), "fmtp:101 0-15".to_string(), "sendrecv".to_string(), - format!("ssrc:{} cname:blub", own_ssrc.0), + format!("ssrc:{} cname:{}", own_ssrc.0, &own_cname), "minptime:20".to_string(), "ptime:20".to_string(), "label:1".to_string(), @@ -226,15 +228,12 @@ async fn handle_call( reports: vec![], }), RtcpPart::SourceDescription(SourceDescription { - sources: vec![(own_ssrc, vec![( - SdesType::CanonicalName, - format!("sip:{username}@{local_addr}"), - )])], + sources: vec![(own_ssrc, vec![(SdesType::CanonicalName, own_cname)])], }), RtcpPart::Application(Application { ssrc: own_ssrc, subtype: 0, - name: [b'P', b'I', b'N', b'G'], + name: *b"PING", data: b"PONG", }), ], |