@@ -148,33 +148,28 @@ impl ServerInviteDialog {
148148 /// # }
149149 /// ```
150150 pub fn accept ( & self , headers : Option < Vec < Header > > , body : Option < Vec < u8 > > ) -> Result < ( ) > {
151- if let Some ( sender) = self . inner . tu_sender . lock ( ) . unwrap ( ) . as_ref ( ) {
152- let resp = self . inner . make_response (
153- & self . inner . initial_request ,
154- rsip:: StatusCode :: OK ,
155- headers,
156- body,
157- ) ;
158- let via = self . inner . initial_request . via_header ( ) ?;
159- let via_received = SipConnection :: parse_target_from_via ( via) ?;
160- let contact = rsip:: Uri {
161- host_with_port : via_received,
162- params : vec ! [ rsip:: Param :: Transport ( via. trasnport( ) ?) ] ,
163- ..Default :: default ( )
164- } ;
165- debug ! ( id = %self . id( ) , "accepting dialog with contact: {}" , contact) ;
166- self . inner . remote_contact . lock ( ) . unwrap ( ) . replace ( contact) ;
167- sender. send ( TransactionEvent :: Respond ( resp. clone ( ) ) ) ?;
151+ let resp = self . inner . make_response (
152+ & self . inner . initial_request ,
153+ rsip:: StatusCode :: OK ,
154+ headers,
155+ body,
156+ ) ;
157+ let via = self . inner . initial_request . via_header ( ) ?;
158+ let via_received = SipConnection :: parse_target_from_via ( via) ?;
159+ let contact = rsip:: Uri {
160+ host_with_port : via_received,
161+ params : vec ! [ rsip:: Param :: Transport ( via. trasnport( ) ?) ] ,
162+ ..Default :: default ( )
163+ } ;
164+ debug ! ( id = %self . id( ) , "accepting dialog with contact: {}" , contact) ;
165+ self . inner . remote_contact . lock ( ) . unwrap ( ) . replace ( contact) ;
166+ self . inner
167+ . tu_sender
168+ . send ( TransactionEvent :: Respond ( resp. clone ( ) ) ) ?;
168169
169- self . inner
170- . transition ( DialogState :: WaitAck ( self . id ( ) , resp) ) ?;
171- Ok ( ( ) )
172- } else {
173- Err ( crate :: Error :: DialogError (
174- "transaction is already terminated" . to_string ( ) ,
175- self . id ( ) ,
176- ) )
177- }
170+ self . inner
171+ . transition ( DialogState :: WaitAck ( self . id ( ) , resp) ) ?;
172+ Ok ( ( ) )
178173 }
179174
180175 /// Accept the incoming INVITE request with NAT-aware Contact header
@@ -272,24 +267,20 @@ impl ServerInviteDialog {
272267 return Ok ( ( ) ) ;
273268 }
274269 info ! ( id=%self . id( ) , "rejecting dialog" ) ;
275- if let Some ( sender) = self . inner . tu_sender . lock ( ) . unwrap ( ) . as_ref ( ) {
276- let resp = self . inner . make_response (
277- & self . inner . initial_request ,
278- rsip:: StatusCode :: Decline ,
279- None ,
280- None ,
281- ) ;
282- sender. send ( TransactionEvent :: Respond ( resp) ) . ok ( ) ;
283- self . inner . transition ( DialogState :: Terminated (
284- self . id ( ) ,
285- TerminatedReason :: UasDecline ,
286- ) )
287- } else {
288- Err ( crate :: Error :: DialogError (
289- "transaction is already terminated" . to_string ( ) ,
290- self . id ( ) ,
291- ) )
292- }
270+ let resp = self . inner . make_response (
271+ & self . inner . initial_request ,
272+ rsip:: StatusCode :: Decline ,
273+ None ,
274+ None ,
275+ ) ;
276+ self . inner
277+ . tu_sender
278+ . send ( TransactionEvent :: Respond ( resp) )
279+ . ok ( ) ;
280+ self . inner . transition ( DialogState :: Terminated (
281+ self . id ( ) ,
282+ TerminatedReason :: UasDecline ,
283+ ) )
293284 }
294285
295286 /// Send a BYE request to terminate the dialog
@@ -551,15 +542,10 @@ impl ServerInviteDialog {
551542 } else {
552543 match tx. original . method {
553544 rsip:: Method :: Ack => {
554- if let Some ( sender) = self . inner . tu_sender . lock ( ) . unwrap ( ) . as_ref ( ) {
555- sender
556- . send ( TransactionEvent :: Received (
557- tx. original . clone ( ) . into ( ) ,
558- tx. connection . clone ( ) ,
559- ) )
560- . ok ( ) ;
561- }
562- return Ok ( ( ) ) ;
545+ self . inner . tu_sender . send ( TransactionEvent :: Received (
546+ tx. original . clone ( ) . into ( ) ,
547+ tx. connection . clone ( ) ,
548+ ) ) ?;
563549 }
564550 _ => { }
565551 }
@@ -600,16 +586,14 @@ impl ServerInviteDialog {
600586 }
601587
602588 async fn handle_invite ( & mut self , tx : & mut Transaction ) -> Result < ( ) > {
603- self . inner
604- . tu_sender
605- . lock ( )
606- . unwrap ( )
607- . replace ( tx. tu_sender . clone ( ) ) ;
608-
609589 let handle_loop = async {
610590 if !self . inner . is_confirmed ( ) {
611- self . inner . transition ( DialogState :: Calling ( self . id ( ) ) ) ?;
612- tx. send_trying ( ) . await ?;
591+ match self . inner . transition ( DialogState :: Calling ( self . id ( ) ) ) {
592+ Ok ( _) => {
593+ tx. send_trying ( ) . await . ok ( ) ;
594+ }
595+ Err ( _) => { }
596+ }
613597 }
614598
615599 while let Some ( msg) = tx. receive ( ) . await {
@@ -644,11 +628,9 @@ impl ServerInviteDialog {
644628 match handle_loop. await {
645629 Ok ( _) => {
646630 trace ! ( id = %self . id( ) , "process done" ) ;
647- self . inner . tu_sender . lock ( ) . unwrap ( ) . take ( ) ;
648631 Ok ( ( ) )
649632 }
650633 Err ( e) => {
651- self . inner . tu_sender . lock ( ) . unwrap ( ) . take ( ) ;
652634 warn ! ( id = %self . id( ) , "handle_invite error: {:?}" , e) ;
653635 Err ( e)
654636 }
0 commit comments