5.7. Processing a Rollback (Verarbeitung eines Rollbacks)
5.7. Processing a Rollback (Verarbeitung eines Rollbacks)
Ein Rollback KANN ausgeführt werden, wenn sich der PeerConnection in einem beliebigen Zustand außer "stable" befindet. Das bedeutet, dass sowohl Angebote als auch vorläufige Antworten zurückgerollt werden können. Ein Rollback kann nur dazu dienen, vorgeschlagene Änderungen abzubrechen; es gibt keine Unterstützung für ein Zurückrollen von einem "stable"-Zustand in einen früheren "stable"-Zustand. Wird in dem Zustand "stable" ein Rollback versucht, MUSS die Verarbeitung gestoppt und ein Fehler zurückgegeben werden. Beachten Sie, dass dies impliziert, dass der Answerer nach Ausführung von setLocalDescription mit seiner Antwort dies nicht mehr zurückrollen kann.
Die Wirkung des Rollbacks MUSS dieselbe sein, unabhängig davon, ob setLocalDescription oder setRemoteDescription aufgerufen wird.
Um einen Rollback zu verarbeiten, bricht eine JSEP-Implementierung die aktuelle Angebot/Antwort-Transaktion ab, setzt den Signalisierungszustand auf "stable" und setzt die ausstehende lokale und/oder entfernte Beschreibung (siehe die Abschnitte 4.1.14 und 4.1.16) auf "null". Alle Ressourcen oder Kandidaten, die durch die aufgegebene lokale Beschreibung zugewiesen wurden, werden verworfen; empfangene Medien werden gemäß den vorherigen lokalen und entfernten Beschreibungen verarbeitet.
Ein Rollback trennt alle RtpTransceiver, die durch Anwendung der zurückgerollten Sitzungsbeschreibung mit "m="-Abschnitten verknüpft waren (siehe die Abschnitte 5.10 und 5.9). Das bedeutet, dass einige zuvor verknüpfte RtpTransceiver nicht mehr mit einem "m="-Abschnitt verknüpft sind; in solchen Fällen MUSS der Wert der mid-Eigenschaft des RtpTransceiver auf "null" gesetzt werden, und die Zuordnung zwischen dem Transceiver und dem Index seines "m="-Abschnitts MUSS verworfen werden. RtpTransceiver, die durch Anwendung eines entfernten Angebots erzeugt wurden, das anschließend zurückgerollt wurde, MÜSSEN gestoppt und aus dem PeerConnection entfernt werden. Ein RtpTransceiver DARF jedoch NICHT entfernt werden, wenn über die Methode addTrack eine Spur an den RtpTransceiver angehängt wurde. Dadurch kann eine Anwendung addTrack aufrufen, dann setRemoteDescription mit einem Angebot, dann dieses Angebot zurückrollen, dann createOffer aufrufen und erreichen, dass ein "m="-Abschnitt für die hinzugefügte Spur im erzeugten Angebot erscheint.