Skip to content

Commit ca2e1d1

Browse files
committed
feat: clippy
1 parent d970421 commit ca2e1d1

19 files changed

+123
-148
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "rsipstack"
3-
version = "0.2.56"
3+
version = "0.2.57"
44
edition = "2021"
55
description = "SIP Stack Rust library for building SIP applications"
66
license = "MIT"

src/bin/bench_ua.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ async fn process_dialog_state(
275275
},
276276
None => {}
277277
},
278-
DialogState::Confirmed(id) => {
278+
DialogState::Confirmed(id, _) => {
279279
stats
280280
.active_calls
281281
.lock()

src/dialog/client_dialog.rs

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use super::dialog::DialogInnerRef;
22
use super::DialogId;
33
use crate::dialog::dialog::DialogInner;
4-
use crate::rsip_ext::RsipResponseExt;
54
use crate::transaction::transaction::Transaction;
65
use crate::Result;
76
use crate::{
@@ -108,6 +107,10 @@ impl ClientInviteDialog {
108107
self.inner.id.lock().unwrap().clone()
109108
}
110109

110+
pub fn state(&self) -> DialogState {
111+
self.inner.state.lock().unwrap().clone()
112+
}
113+
111114
/// Get the cancellation token for this dialog
112115
///
113116
/// Returns a reference to the CancellationToken that can be used to
@@ -558,27 +561,17 @@ impl ClientInviteDialog {
558561
*self.inner.route_set.lock().unwrap() = route_set;
559562

560563
self.inner
561-
.transition(DialogState::Confirmed(dialog_id.clone()))?;
564+
.transition(DialogState::Confirmed(dialog_id.clone(), resp))?;
562565
DialogInner::serve_keepalive_options(self.inner.clone());
563-
break;
564566
}
565567
_ => {
566-
let reason = if let Some(reason_phrase) = resp.reason_phrase() {
567-
format!("{reason_phrase}")
568-
} else {
569-
format!("{}", resp.status_code)
570-
};
571568
self.inner.transition(DialogState::Terminated(
572569
self.id(),
573570
TerminatedReason::UasOther(resp.status_code.clone()),
574571
))?;
575-
return Err(crate::Error::DialogError(
576-
reason,
577-
self.id(),
578-
resp.status_code,
579-
));
580572
}
581573
}
574+
break;
582575
}
583576
}
584577
}

src/dialog/dialog.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ use tracing::{debug, info, warn};
6161
/// # from_tag: "from-tag".to_string(),
6262
/// # to_tag: "to-tag".to_string(),
6363
/// # };
64-
/// let state = DialogState::Confirmed(dialog_id);
64+
/// let state = DialogState::Confirmed(dialog_id, rsip::Response::default());
6565
/// if state.is_confirmed() {
6666
/// println!("Dialog is established");
6767
/// }
@@ -73,7 +73,7 @@ pub enum DialogState {
7373
Trying(DialogId),
7474
Early(DialogId, rsip::Response),
7575
WaitAck(DialogId, rsip::Response),
76-
Confirmed(DialogId),
76+
Confirmed(DialogId, rsip::Response),
7777
Updated(DialogId, rsip::Request),
7878
Notify(DialogId, rsip::Request),
7979
Info(DialogId, rsip::Request),
@@ -198,7 +198,7 @@ impl DialogState {
198198
)
199199
}
200200
pub fn is_confirmed(&self) -> bool {
201-
matches!(self, DialogState::Confirmed(_))
201+
matches!(self, DialogState::Confirmed(_, _))
202202
}
203203
pub fn is_terminated(&self) -> bool {
204204
matches!(self, DialogState::Terminated(_, _))
@@ -401,12 +401,12 @@ impl DialogInner {
401401
}
402402
};
403403

404-
if status != StatusCode::Trying {
405-
if !to.params.iter().any(|p| matches!(p, Param::Tag(_))) {
406-
to.params.push(rsip::Param::Tag(
407-
self.id.lock().unwrap().to_tag.clone().into(),
408-
));
409-
}
404+
if status != StatusCode::Trying
405+
&& !to.params.iter().any(|p| matches!(p, Param::Tag(_)))
406+
{
407+
to.params.push(rsip::Param::Tag(
408+
self.id.lock().unwrap().to_tag.clone().into(),
409+
));
410410
}
411411
resp_headers.push(Header::To(to.into()));
412412
}
@@ -636,7 +636,7 @@ impl std::fmt::Display for DialogState {
636636
DialogState::Trying(id) => write!(f, "{}(Trying)", id),
637637
DialogState::Early(id, _) => write!(f, "{}(Early)", id),
638638
DialogState::WaitAck(id, _) => write!(f, "{}(WaitAck)", id),
639-
DialogState::Confirmed(id) => write!(f, "{}(Confirmed)", id),
639+
DialogState::Confirmed(id, _) => write!(f, "{}(Confirmed)", id),
640640
DialogState::Updated(id, _) => write!(f, "{}(Updated)", id),
641641
DialogState::Notify(id, _) => write!(f, "{}(Notify)", id),
642642
DialogState::Info(id, _) => write!(f, "{}(Info)", id),

src/dialog/invitation.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ impl DialogLayer {
295295
/// DialogState::Early(_, resp) => {
296296
/// println!("Ringing: {}", resp.status_code);
297297
/// },
298-
/// DialogState::Confirmed(_) => {
298+
/// DialogState::Confirmed(_,_) => {
299299
/// println!("Call established");
300300
/// },
301301
/// DialogState::Terminated(_, code) => {

src/dialog/server_dialog.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ impl ServerInviteDialog {
100100
self.inner.id.lock().unwrap().clone()
101101
}
102102

103+
pub fn state(&self) -> DialogState {
104+
self.inner.state.lock().unwrap().clone()
105+
}
106+
103107
/// Get the cancellation token for this dialog
104108
///
105109
/// Returns a reference to the CancellationToken that can be used to
@@ -686,7 +690,11 @@ impl ServerInviteDialog {
686690
}
687691
_ => {}
688692
}
689-
self.inner.transition(DialogState::Confirmed(self.id()))?;
693+
694+
self.inner.transition(DialogState::Confirmed(
695+
self.id(),
696+
tx.last_response.clone().unwrap_or_default(),
697+
))?;
690698
DialogInner::serve_keepalive_options(self.inner.clone());
691699
break;
692700
}

src/dialog/tests/test_client_dialog.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -178,16 +178,18 @@ async fn test_client_dialog_state_transitions() -> crate::Result<()> {
178178

179179
client_dialog
180180
.inner
181-
.transition(DialogState::Early(dialog_id.clone(), ringing_resp))?;
181+
.transition(DialogState::Early(dialog_id.clone(), ringing_resp.clone()))?;
182182
let state = client_dialog.inner.state.lock().unwrap().clone();
183183
assert!(matches!(state, DialogState::Early(_, _)));
184184

185+
let mut final_resp = ringing_resp.clone();
186+
final_resp.status_code = StatusCode::OK;
185187
// Transition to Confirmed (after receiving 200 OK and sending ACK)
186188
client_dialog
187189
.inner
188-
.transition(DialogState::Confirmed(dialog_id.clone()))?;
190+
.transition(DialogState::Confirmed(dialog_id.clone(), final_resp))?;
189191
let state = client_dialog.inner.state.lock().unwrap().clone();
190-
assert!(matches!(state, DialogState::Confirmed(_)));
192+
assert!(matches!(state, DialogState::Confirmed(_, _)));
191193
assert!(client_dialog.inner.is_confirmed());
192194

193195
Ok(())
@@ -259,11 +261,11 @@ async fn test_client_dialog_termination_scenarios() -> crate::Result<()> {
259261
let client_dialog_2 = ClientInviteDialog {
260262
inner: Arc::new(dialog_inner_2),
261263
};
262-
263264
// Confirm dialog first
264-
client_dialog_2
265-
.inner
266-
.transition(DialogState::Confirmed(dialog_id_2.clone()))?;
265+
client_dialog_2.inner.transition(DialogState::Confirmed(
266+
dialog_id_2.clone(),
267+
Response::default(),
268+
))?;
267269
assert!(client_dialog_2.inner.is_confirmed());
268270

269271
// Then terminate normally

src/dialog/tests/test_dialog_states.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,12 @@ async fn test_dialog_state_transitions() -> crate::Result<()> {
147147
assert!(matches!(state, DialogState::Early(_, _)));
148148

149149
// Test transition to Confirmed
150-
dialog_inner.transition(DialogState::Confirmed(dialog_id.clone()))?;
150+
dialog_inner.transition(DialogState::Confirmed(
151+
dialog_id.clone(),
152+
Response::default(),
153+
))?;
151154
let state = dialog_inner.state.lock().unwrap().clone();
152-
assert!(matches!(state, DialogState::Confirmed(_)));
155+
assert!(matches!(state, DialogState::Confirmed(_, _)));
153156
assert!(dialog_inner.is_confirmed());
154157

155158
// Test transition to Terminated
@@ -207,14 +210,14 @@ async fn test_server_dialog_state_transitions() -> crate::Result<()> {
207210
"bob-tag-789",
208211
"test-call-id-server-123",
209212
);
210-
dialog_inner.transition(DialogState::WaitAck(dialog_id.clone(), ok_resp))?;
213+
dialog_inner.transition(DialogState::WaitAck(dialog_id.clone(), ok_resp.clone()))?;
211214
let state = dialog_inner.state.lock().unwrap().clone();
212215
assert!(matches!(state, DialogState::WaitAck(_, _)));
213216

214217
// Test transition to Confirmed (after receiving ACK)
215-
dialog_inner.transition(DialogState::Confirmed(dialog_id.clone()))?;
218+
dialog_inner.transition(DialogState::Confirmed(dialog_id.clone(), ok_resp))?;
216219
let state = dialog_inner.state.lock().unwrap().clone();
217-
assert!(matches!(state, DialogState::Confirmed(_)));
220+
assert!(matches!(state, DialogState::Confirmed(_, _)));
218221
assert!(dialog_inner.is_confirmed());
219222

220223
Ok(())
@@ -250,7 +253,10 @@ async fn test_dialog_in_dialog_requests() -> crate::Result<()> {
250253
)?;
251254

252255
// Set dialog to confirmed state
253-
dialog_inner.transition(DialogState::Confirmed(dialog_id.clone()))?;
256+
dialog_inner.transition(DialogState::Confirmed(
257+
dialog_id.clone(),
258+
Response::default(),
259+
))?;
254260
assert!(dialog_inner.is_confirmed());
255261

256262
// Test INFO request in dialog
@@ -369,7 +375,10 @@ async fn test_dialog_termination_scenarios() -> crate::Result<()> {
369375
)?;
370376

371377
// First confirm the dialog
372-
dialog_inner_2.transition(DialogState::Confirmed(dialog_id_2.clone()))?;
378+
dialog_inner_2.transition(DialogState::Confirmed(
379+
dialog_id_2.clone(),
380+
Response::default(),
381+
))?;
373382
assert!(dialog_inner_2.is_confirmed());
374383

375384
// Then terminate normally
@@ -435,7 +444,7 @@ async fn test_dialog_state_display() -> crate::Result<()> {
435444
let trying_state = DialogState::Trying(dialog_id.clone());
436445
assert!(trying_state.to_string().contains("Trying"));
437446

438-
let confirmed_state = DialogState::Confirmed(dialog_id.clone());
447+
let confirmed_state = DialogState::Confirmed(dialog_id.clone(), Response::default());
439448
assert!(confirmed_state.to_string().contains("Confirmed"));
440449
assert!(confirmed_state.is_confirmed());
441450

src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub enum Error {
1818
#[error("Endpoint error: {0}")]
1919
EndpointError(String),
2020

21-
#[error("Dialog error: {0}: {1}(Status code: {2})")]
21+
#[error("Dialog error:{2}({0})")]
2222
DialogError(String, DialogId, rsip::StatusCode),
2323

2424
#[error("I/O error: {0}")]

src/rsip_ext.rs

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
use crate::transport::SipConnection;
2+
use crate::{Error, Result};
13
use rsip::{
24
message::HasHeaders,
35
prelude::{HeadersExt, UntypedHeader},
46
};
5-
6-
use crate::transport::SipConnection;
77
pub trait RsipResponseExt {
88
fn reason_phrase(&self) -> Option<&str>;
99
fn via_received(&self) -> Option<rsip::HostWithPort>;
@@ -20,7 +20,7 @@ impl RsipResponseExt for rsip::Response {
2020
}
2121
}
2222
if let rsip::Header::ErrorInfo(reason) = header {
23-
return Some(&reason.value());
23+
return Some(reason.value());
2424
}
2525
}
2626
None
@@ -38,11 +38,8 @@ impl RsipResponseExt for rsip::Response {
3838
fn content_type(&self) -> Option<rsip::headers::ContentType> {
3939
let headers = self.headers();
4040
for header in headers.iter() {
41-
match header {
42-
rsip::Header::ContentType(content_type) => {
43-
return Some(content_type.clone());
44-
}
45-
_ => {}
41+
if let rsip::Header::ContentType(content_type) = header {
42+
return Some(content_type.clone());
4643
}
4744
}
4845
None
@@ -76,24 +73,16 @@ macro_rules! header_pop {
7673
};
7774
}
7875

79-
pub fn extract_uri_from_contact(line: &str) -> crate::Result<rsip::Uri> {
80-
match rsip::headers::Contact::try_from(line) {
81-
Ok(contact) => {
82-
match contact.uri() {
83-
Ok(mut uri) => {
84-
uri.params
85-
.retain(|p| matches!(p, rsip::Param::Transport(_)));
86-
return Ok(uri);
87-
}
88-
Err(_) => {}
89-
};
90-
}
91-
Err(_) => {}
92-
};
76+
pub fn extract_uri_from_contact(line: &str) -> Result<rsip::Uri> {
77+
if let Ok(mut uri) = rsip::headers::Contact::from(line).uri() {
78+
uri.params
79+
.retain(|p| matches!(p, rsip::Param::Transport(_)));
80+
return Ok(uri);
81+
}
9382

9483
match line.split('<').nth(1).and_then(|s| s.split('>').next()) {
9584
Some(uri) => rsip::Uri::try_from(uri).map_err(Into::into),
96-
None => Err(crate::Error::Error(format!("no uri found: {}", line))),
85+
None => Err(Error::Error("no uri found".to_string())),
9786
}
9887
}
9988

0 commit comments

Comments
 (0)