Create an answer

After receiving an offer, the call recipient creates an answer and stores it inside a structured data with an ID based on the random ID provided by the caller. This answer includes a session description in SDP format, and it needs to be delivered to the caller (the person initiating the call).

Contents

Create a new WebRTC peer connection

The app creates a new RTCPeerConnection using the simple-peer module. If you are joining a room where another user is waiting for you, props.peerPayload contains the offer of that user and therefore the value of initiator will be false. This means that the app will create an answer.

PeerView.js

const initiator = !props.peerPayload
const peer = new Peer({ initiator: initiator,
                      stream: props.stream,
                      config : {
                        iceServers: CONFIG.iceServers
                      },
                      trickle: false })

PeerView.js

if (!initiator) {
  // let's connect to the other peer
  peer.signal(props.peerPayload.payload)
}

For now, only the connection establishment is done using the SAFE Network. The actual connection is either peer-to-peer (STUN) or via a TURN server. At some point later, we will integrate this functionality directly in CRUST.

Store the answer inside a structured data

After the answer is created, the signal event is fired.

PeerView.js

The app creates a structured data with an ID based on the random ID provided by the caller.

PeerView.js

Create a structured data

The app creates a structured data handle for the answer.

store.js

The address of the structured data is based on the app ID (example.signaling.v1) and the random ID provided by the caller. The structured data is unversioned (type 500). The data is stored as a base64 string.

store.js

Save the structured data

The app saves the structured data by sending a PUT request to the SAFE Network.

store.js

Last updated

Was this helpful?