@@ -984,51 +984,33 @@ impl SessionInner {
984984 }
985985 }
986986 proto:: signal_response:: Message :: Offer ( offer) => {
987- // Store mid_to_track_id mapping
988- if !offer. mid_to_track_id . is_empty ( ) {
989- let mut mapping = self . mid_to_track_id . lock ( ) ;
990- for ( mid, track_id) in & offer. mid_to_track_id {
991- mapping. insert ( mid. clone ( ) , track_id. clone ( ) ) ;
992- }
987+ // In single PC mode, client always offers and server always answers,
988+ // so we should never receive an offer from the server.
989+ if self . single_pc_mode {
990+ log:: warn!( "received unexpected offer in single PC mode, ignoring" ) ;
991+ return Ok ( ( ) ) ;
993992 }
994993
994+ // Dual PC mode: handle offer on subscriber PC
995+ log:: debug!( "received subscriber offer: {:?}" , offer) ;
995996 let offer_sdp =
996997 SessionDescription :: parse ( & offer. sdp , offer. r#type . parse ( ) . unwrap ( ) ) . unwrap ( ) ;
997998
998- if self . single_pc_mode {
999- // In single PC mode, handle offer on publisher PC
1000- let answer = self
1001- . publisher_pc
1002- . create_anwser ( offer_sdp, AnswerOptions :: default ( ) )
1003- . await ?;
1004-
1005- self . signal_client
1006- . send ( proto:: signal_request:: Message :: Answer ( proto:: SessionDescription {
1007- r#type : "answer" . to_string ( ) ,
1008- sdp : answer. to_string ( ) ,
1009- id : offer. id ,
1010- mid_to_track_id : Default :: default ( ) ,
1011- } ) )
1012- . await ;
1013- } else {
1014- // Dual PC mode: handle offer on subscriber PC
1015- log:: debug!( "received subscriber offer: {:?}" , offer) ;
1016- let answer = self
1017- . subscriber_pc
1018- . as_ref ( )
1019- . unwrap ( )
1020- . create_anwser ( offer_sdp, AnswerOptions :: default ( ) )
1021- . await ?;
1022-
1023- self . signal_client
1024- . send ( proto:: signal_request:: Message :: Answer ( proto:: SessionDescription {
1025- r#type : "answer" . to_string ( ) ,
1026- sdp : answer. to_string ( ) ,
1027- id : 0 ,
1028- mid_to_track_id : Default :: default ( ) ,
1029- } ) )
1030- . await ;
1031- }
999+ let answer = self
1000+ . subscriber_pc
1001+ . as_ref ( )
1002+ . unwrap ( )
1003+ . create_anwser ( offer_sdp, AnswerOptions :: default ( ) )
1004+ . await ?;
1005+
1006+ self . signal_client
1007+ . send ( proto:: signal_request:: Message :: Answer ( proto:: SessionDescription {
1008+ r#type : "answer" . to_string ( ) ,
1009+ sdp : answer. to_string ( ) ,
1010+ id : 0 ,
1011+ mid_to_track_id : Default :: default ( ) ,
1012+ } ) )
1013+ . await ;
10321014 }
10331015 proto:: signal_response:: Message :: Trickle ( trickle) => {
10341016 let target = trickle. target ( ) ;
0 commit comments