The calling party sends an INVITE (e.g. sip:someuser@example.org
) via the SIP load-balancer
to the SIP proxy. The proxy replies with an authorization challenge in the 407 response, and the
calling party sends the INVITE again with authentication credentials. The SIP proxy checks if
the called party is a local user. If it is, and if there is a registered contact found for this
user, then (after various feature-related tasks for both the caller and the callee) the Request-URI
is replaced by the URI of the registered contact (e.g. sip:me@1.2.3.4:1234;transport=UDP
).
If it’s not a local user but a numeric user, a proper PSTN gateway is being selected by the SIP
proxy, and the Request-URI is rewritten accordingly (e.g. sip:+43123456789@2.3.4.5:5060
).
Once the proxy has finished working through the call features of both parties involved and has selected the final destination for the call, and - optionally - has invoked the Media Relay for this call, the INVITE is sent to the SIP B2BUA. The B2BUA creates a new INVITE message from scratch (using a new Call-ID and a new From-Tag), copies only various and explicitly allowed SIP headers from the old message to the new one, filters out unwanted media capabilities from the SDP body (e.g. to force audio calls to use G.711 as a codec) and then sends the new message back to the SIP proxy that forwards it to the SIP load-balancer to reach to the called party.
SIP replies from the called party are passed through the elements back to the calling party (replacing various fields on the B2BUA to match the first call leg again). If a reply with an SDP body is received by the SIP proxy (e.g. a 183 or a 200), the Media Relay is invoked again to prepare the ports for the media stream.
Once the 200OK is routed from the called party to the calling party, the media stream is fully negotiated, and the endpoints can start sending traffic to each other (either end-to-end or via the Media Relay). Upon reception of the 200OK, the SIP proxy writes a start record for the accounting process. The 200OK is also acknowledged with an ACK message from the calling party to the called party, according to the SIP 3-way handshake.
Either of the parties can tear down the media session at any time by sending a BYE, which is passed through to the other party. Once the BYE reaches the SIP proxy, it instructs the Media Relay to close the media ports, and it writes a stop record for accounting purposes. Both the start- and the stop-records are picked up by the ngcp-mediator service in a regular interval and are converted into a Call Detail Record (CDR), which will be rated by the ngcp-rate-o-mat process and can be billed to the calling party.