@@ -42,25 +42,16 @@ async fn test_dialog_make_request() -> crate::Result<()> {
4242 . expect ( "Failed to create dialog inner" ) ;
4343
4444 let bye = dialog_inner
45- . make_request_with_vias (
46- rsip:: Method :: Bye ,
47- None ,
48- dialog_inner
49- . build_vias_from_request ( )
50- . expect ( "Failed to build vias" ) ,
51- None ,
52- None ,
53- )
45+ . make_request ( rsip:: Method :: Bye , None , None , None , None , None )
5446 . expect ( "Failed to make request" ) ;
5547 assert_eq ! ( bye. method, rsip:: Method :: Bye ) ;
5648
57- assert_eq ! (
58- bye. via_header( )
59- . expect( "not via header" )
60- . typed( ) ?
61- . received( ) ?,
62- "172.0.0.1" . parse( ) . ok( )
63- ) ;
49+ assert ! ( bye
50+ . via_header( )
51+ . expect( "not via header" )
52+ . typed( ) ?
53+ . received( ) ?
54+ . is_none( ) ) ;
6455 assert ! (
6556 bye. via_header( ) . expect( "not via header" ) . typed( ) ?. branch( )
6657 != invite_req
@@ -159,3 +150,99 @@ async fn test_accept_with_public_contact_preserves_contact_header() -> crate::Re
159150
160151 Ok ( ( ) )
161152}
153+
154+ #[ tokio:: test]
155+ async fn test_server_dialog_bye_via ( ) -> crate :: Result < ( ) > {
156+ let dialog_id = DialogId {
157+ call_id : "server-bye-test" . to_string ( ) ,
158+ local_tag : "bob-tag" . to_string ( ) ,
159+ remote_tag : "alice-tag" . to_string ( ) ,
160+ } ;
161+
162+ let endpoint = create_test_endpoint ( ) . await ?;
163+ let ( tu_sender, _tu_receiver) = unbounded_channel ( ) ;
164+ let ( state_sender, _state_receiver) = unbounded_channel ( ) ;
165+
166+ // Create an INVITE request FROM alice (remote)
167+ // This invite has Via: SIP/2.0/UDP alice.example.com:5060;branch=...;received=172.0.0.1
168+ let invite_req = create_invite_request ( & dialog_id. remote_tag , "" , & dialog_id. call_id ) ;
169+
170+ let dialog_inner = DialogInner :: new (
171+ TransactionRole :: Server ,
172+ dialog_id. clone ( ) ,
173+ invite_req. clone ( ) ,
174+ endpoint. inner . clone ( ) ,
175+ state_sender,
176+ None ,
177+ None ,
178+ tu_sender,
179+ )
180+ . expect ( "Failed to create dialog inner" ) ;
181+
182+ let server_dialog = ServerInviteDialog {
183+ inner : Arc :: new ( dialog_inner) ,
184+ } ;
185+
186+ // Generate BYE request
187+ let bye_req =
188+ server_dialog
189+ . inner
190+ . make_request ( rsip:: Method :: Bye , None , None , None , None , None ) ?;
191+
192+ assert_eq ! ( bye_req. method, rsip:: Method :: Bye ) ;
193+ let via = bye_req. via_header ( ) . expect ( "no via" ) . typed ( ) ?;
194+
195+ // The Via in BYE should NOT have received=172.0.0.1 (which was in the incoming INVITE)
196+ assert ! ( via. received( ) . expect( "failed to get received" ) . is_none( ) ) ;
197+
198+ // The host should be our local address (127.0.0.1) and NOT alice.example.com
199+ assert_eq ! ( via. uri. host_with_port. host. to_string( ) , "127.0.0.1" ) ;
200+
201+ Ok ( ( ) )
202+ }
203+
204+ #[ tokio:: test]
205+ async fn test_server_dialog_reinvite_via ( ) -> crate :: Result < ( ) > {
206+ let dialog_id = DialogId {
207+ call_id : "server-reinvite-test" . to_string ( ) ,
208+ local_tag : "bob-tag" . to_string ( ) ,
209+ remote_tag : "alice-tag" . to_string ( ) ,
210+ } ;
211+
212+ let endpoint = create_test_endpoint ( ) . await ?;
213+ let ( tu_sender, _tu_receiver) = unbounded_channel ( ) ;
214+ let ( state_sender, _state_receiver) = unbounded_channel ( ) ;
215+
216+ let invite_req = create_invite_request ( & dialog_id. remote_tag , "" , & dialog_id. call_id ) ;
217+
218+ let dialog_inner = DialogInner :: new (
219+ TransactionRole :: Server ,
220+ dialog_id. clone ( ) ,
221+ invite_req. clone ( ) ,
222+ endpoint. inner . clone ( ) ,
223+ state_sender,
224+ None ,
225+ None ,
226+ tu_sender,
227+ )
228+ . expect ( "Failed to create dialog inner" ) ;
229+
230+ let server_dialog = ServerInviteDialog {
231+ inner : Arc :: new ( dialog_inner) ,
232+ } ;
233+
234+ // Generate re-INVITE request
235+ let reinvite_req =
236+ server_dialog
237+ . inner
238+ . make_request ( rsip:: Method :: Invite , None , None , None , None , None ) ?;
239+
240+ assert_eq ! ( reinvite_req. method, rsip:: Method :: Invite ) ;
241+ let via = reinvite_req. via_header ( ) . expect ( "no via" ) . typed ( ) ?;
242+
243+ // Should not have mirrored the "received" param
244+ assert ! ( via. received( ) . unwrap( ) . is_none( ) ) ;
245+ assert_eq ! ( via. uri. host_with_port. host. to_string( ) , "127.0.0.1" ) ;
246+
247+ Ok ( ( ) )
248+ }
0 commit comments