git » sdk » commit 83a9af9

Send modify before accept for different senders

author Stephen Paul Weber
2023-10-10 14:29:30 UTC
committer Stephen Paul Weber
2023-10-10 14:29:30 UTC
parent 6c5b4354dfcee376652342ece21438d624193867

Send modify before accept for different senders

xmpp/jingle/Session.hx +17 -2

diff --git a/xmpp/jingle/Session.hx b/xmpp/jingle/Session.hx
index 3eba09a..1276d5e 100644
--- a/xmpp/jingle/Session.hx
+++ b/xmpp/jingle/Session.hx
@@ -297,7 +297,21 @@ class InitiatedSession implements Session {
 		// TODO: tie-break with any in-flight content-add we sent?
 		pc.setRemoteDescription({ type: SdpType.OFFER, sdp: remoteDescription.toSdp() }).then((_) -> {
 			afterMedia = () -> {
-				setupLocalDescription("content-accept", addThis.media.map((m) -> m.mid));
+				setupLocalDescription(
+					"content-accept",
+					addThis.media.map((m) -> m.mid),
+					false,
+					(gonnaAccept) -> {
+						if (gonnaAccept.media.find(
+							(m) -> m.contentElement(false).attr.get("senders") != addThis.media.find((addM) -> addM.mid == m.mid).contentElement(false).attr.get("senders")
+						) != null) {
+							final modify = gonnaAccept.toStanza("content-modify", sid, initiator);
+							modify.attr.set("to", counterpart.asString());
+							modify.attr.set("id", ID.medium());
+							client.sendStanza(modify);
+						}
+					}
+				);
 				afterMedia = null;
 			};
 			client.trigger("call/media", { session: this, audio: audio, video: video });
@@ -424,7 +438,7 @@ class InitiatedSession implements Session {
 		});
 	}
 
-	private function setupLocalDescription(type: String, ?filterMedia: Array<String>, ?filterOut: Bool = false) {
+	private function setupLocalDescription(type: String, ?filterMedia: Array<String>, ?filterOut: Bool = false, ?beforeSend: (SessionDescription)->Void) {
 		return pc.setLocalDescription(null).then((_) -> {
 			localDescription = SessionDescription.parse(pc.localDescription.sdp);
 			var descriptionToSend = localDescription;
@@ -437,6 +451,7 @@ class InitiatedSession implements Session {
 					descriptionToSend.identificationTags
 				);
 			}
+			if (beforeSend != null) beforeSend(descriptionToSend);
 			final sessionAccept = descriptionToSend.toStanza(type, sid, initiator);
 			sessionAccept.attr.set("to", counterpart.asString());
 			sessionAccept.attr.set("id", ID.medium());