- Type your task here, using "@" to assign to a user and "//" to select a due date
User Story
The customer develops his own softphone, that is planned to be advertised in Apple AppStore.
One of the new requirements for applications in Apple AppStore is supporting IPv6 DNS64/NAT64 networks.
In case of IPv6, it works with PortaSIP through NAT64, that performs proxying between IPv6 and IPv4 networks.Thus it is needed to adjust PortaSIP logic to allow processing of SIP requests / responses with IPv6 in headers as now b2bua cannot process them.
Without this modifications, the customer's application won't be authorized to be posted in AppStore.
Use Cases
Use case #1A: Call between 2 UAs with IPv6 via custom proxy
Roles: caller, callee, NAT64, PortaSIP, custom proxy (Customer's proxy with push-service)
Preconditions:
We have two accounts 111222 & 222333. They are configured on UAs with IPv6 addresses. These UAs are configured to send requests to custom proxy via NAT64.
Custom proxy routes calls between PortaSIP and UAs/NAT64 & processes RTP.
PortaSIP uses IPv4.
Use scenario:
111222 calls 222333
Call goes through NAT64 & custom proxy to PortaSIP
PortaSIP processes it and routes call to custom proxy
- Custom proxy routes call to 222333 via NAT64
- 222333 confirms the call & they start communication
- media streams between IPv6 UAs are sent either directly or via third party media proxy.
Network chain:
UA (111222) -> NAT64 -> custom proxy -> PortaSIP -> custom proxy -> NAT64 -> UA (222333)
Use case #1B: Call between 2 UAs with IPv6
Roles: caller, callee, NAT64, PortaSIP
Preconditions:
We have two accounts 111222 & 222333. They are configured on UAs with IPv6 addresses. These UAs are configured to send requests to PortaSIP via NAT64.
PortaSIP uses IPv4.
Use scenario:
111222 calls 222333
Call goes through NAT64 to PortaSIP
PortaSIP routes call to 222333 via NAT64
- 222333 confirms the call & they start communication
- media streams between IPv6 UAs are sent either directly or via PortaSIP media proxy.
Network chain:
UA (111222) -> NAT64 -> PortaSIP -> NAT64 -> UA (222333)
Use case #2A: Call from UA with IPv6 to UA/vendor with IPv4 via custom proxy
Roles: caller, callee/vendor, NAT64, PortaSIP, custom proxy (Customer's proxy with push-service)
Preconditions:
We have two accounts 111222 & 222333.
Caller's UA (111222) has IPv6 address. It is configured to send requests to custom proxy via NAT64.
Callee's UA (222333) has IPv4 address.
333444 is a number outside the system.
Custom proxy routes calls between PortaSIP and UAs/NAT64 & processes RTP.
PortaSIP uses IPv4.
Use scenario 2A.1: Call from UA with IPv6 to UA with IPv4
111222 calls 222333
Call goes through NAT64 & custom proxy to PortaSIP
PortaSIP processes it and routes call to custom proxy
- Custom proxy routes call to 222333
- 222333 confirms the call & they start communication
- media streams between UAs are sent either directly or via third party media proxy.
Network chain:
UA (111222) -> NAT64 -> custom proxy -> PortaSIP -> custom proxy -> UA (222333)
Use scenario 2A.2: Call from UA with IPv6 to vendor with IPv4
111222 calls 333444
Call goes through NAT64 & custom proxy to PortaSIP
PortaSIP processes it and routes call to vendor
- 333444 confirms the call & they start communication
- media streams between parties are sent either directly or via third party media proxy.
Network chain:
UA (111222) -> NAT64 -> custom proxy -> PortaSIP -> vendor (333444)
Use case #2B: Call from UA with IPv6 to UA/vendor with IPv4
Roles: caller, callee/vendor, NAT64, PortaSIP
Preconditions:
We have two accounts 111222 & 222333.
Caller's UA (111222) has IPv6 address. It is configured to send requests to PortaSIP via NAT64.
Callee's UA (222333) has IPv4 address.
333444 is a number outside the system.
PortaSIP uses IPv4.
Use scenario 2B.1: Call from UA with IPv6 to UA with IPv4
111222 calls 222333
Call goes through NAT64 to PortaSIP
PortaSIP routes call to 222333
- 222333 confirms the call & they start communication
- media streams between UAs are sent either directly or via PortaSIP media proxy.
Network chain:
UA (111222) -> NAT64 -> PortaSIP -> UA (222333)
Use scenario 2B.2: Call from UA with IPv6 to vendor with IPv4
111222 calls 333444
Call goes through NAT64 to PortaSIP
PortaSIP processes it and routes call to vendor
- 333444 confirms the call & they start communication
- media streams between parties are sent either directly or via PortaSIP media proxy.
Network chain:
UA (111222) -> NAT64 -> PortaSIP -> vendor (333444)
Use case #3A: Call from UA/vendor with IPv4 to UA with IPv6 via custom proxy
Roles: caller/vendor, callee, NAT64, PortaSIP, custom proxy (Customer's proxy with push-service)
Preconditions:
We have two accounts 111222 & 222333.
Caller's UA (111222) has IPv4 address.
Callee's UA (222333) has IPv6 address. It is configured to send requests to custom proxy via NAT64.
333444 is a number outside the system.
Custom proxy routes calls between PortaSIP and UAs/NAT64 & processes RTP.
PortaSIP uses IPv4.
Use scenario 3A.1: Call from UA with IPv4 to UA with IPv6
111222 calls 222333
Call goes through custom proxy to PortaSIP
PortaSIP processes it and routes call to custom proxy
- Custom proxy routes call to callee via NAT64
- 222333 confirms the call & they start communication
- media streams between UAs are sent either directly or via third party media proxy.
Network chain:
UA (111222) -> custom proxy -> PortaSIP -> custom proxy -> NAT64 -> UA (222333)
Use scenario 3A.2: Call from vendor with IPv4 to UA with IPv6
Vendor routes call from 333444 to 222333 to PortaSIP
PortaSIP processes it and routes call to custom proxy
- Custom proxy routes call to callee via NAT64
- 222333 confirms the call & they start communication
- media streams between parties are sent either directly or via third party media proxy.
Network chain:
vendor (333444) -> PortaSIP -> custom proxy -> NAT64 -> UA (222333)
Use case #3B: Call from UA/vendor with IPv4 to UA with IPv6
Roles: caller/vendor, callee, NAT64, PortaSIP
Preconditions:
We have two accounts 111222 & 222333.
Caller's UA (111222) has IPv4 address.
Callee's UA (222333) has IPv6 address. It is configured to send requests to PortaSIP via NAT64.
333444 is a number outside the system.
PortaSIP uses IPv4.
Use scenario 3B.1: Call from UA with IPv4 to UA with IPv6
111222 calls 222333
Call goes to PortaSIP
PortaSIP processes it and routes call to callee via NAT64
- 222333 confirms the call & they start communication
- media streams between UAs are sent either directly or via PortaSIP media proxy.
Network chain:
UA (111222) -> PortaSIP -> NAT64 -> UA (222333)
Use scenario 3B.2: Call from vendor with IPv4 to UA with IPv6
Vendor routes call from 333444 to 222333 to PortaSIP
PortaSIP processes it and routes call to callee via NAT64
- 222333 confirms the call & they start communication
- media streams between parties are sent either directly or via PortaSIP media proxy.
Network chain:
vendor (333444) -> PortaSIP -> NAT64 -> UA (222333)
Use case #4A: Support IPv6 for voice rejects via custom proxy
Roles: caller, NAT64, PortaSIP, custom proxy (Customer's proxy with push-service)
Preconditions:
We have two accounts 111222 & 222333.
111222 has insufficient funds. It is configured on UA with IPv6 address. This UA is configured to send requests to custom proxy via NAT64.
Custom proxy routes calls between PortaSIP and UAs/NAT64.
Use scenario:
111222 calls 222333
Call goes through NAT64 & custom proxy to PortaSIP
PortaSIP rejects call due to insufficient balance & plays the prompt about insufficient funds
- media streams between parties are sent via third party media proxy.
- Callee (111222) hears this prompt
Network chain:
UA (111222) -> NAT64 -> custom proxy -> PortaSIP
Use case #4B: Support IPv6 for voice rejects
Roles: caller, NAT64, PortaSIP
Preconditions:
We have two accounts 111222 & 222333.
111222 has insufficient funds. It is configured on UA with IPv6 address. This UA is configured to send requests to PortaSIP via NAT64.
Use scenario:
111222 calls 222333
Call goes through NAT64 to PortaSIP
PortaSIP rejects call due to insufficient balance & plays the prompt about insufficient funds
- media streams between parties are sent via PortaSIP media proxy.
- Callee (111222) hears this prompt
Network chain:
UA (111222) -> NAT64 -> PortaSIP
Use case #5A: Call from UA with IPv6 to IVR via custom proxy
Roles: caller, NAT64, PortaSIP, custom proxy (Customer's proxy with push-service)
Preconditions:
We have account 111222. It is configured on UA with IPv6 address. This UA is configured to send requests to custom proxy via NAT64.
Custom proxy routes calls between PortaSIP and UAs/NAT64.
Use scenario:
111222 calls IVR for sound quality check
Call goes through NAT64 & custom proxy to PortaSIP
PortaSIP runs IVR for sound quality check
- media streams between parties are sent via third party media proxy.
- Callee (111222) hears a sound check recording
Network chain:
UA (111222) -> NAT64 -> custom proxy -> PortaSIP
Use case #5B: Call from UA with IPv6 to IVR
Roles: caller, NAT64, PortaSIP
Preconditions:
We have account 111222. It is configured on UA with IPv6 address. This UA is configured to send requests to PortaSIP via NAT64.
Use scenario:
111222 calls IVR for sound quality check
Call goes through NAT64 to PortaSIP
PortaSIP runs IVR for sound quality check
- media streams between parties are sent via PortaSIP media proxy.
- Callee (111222) hears a sound check recording
Network chain:
UA (111222) -> NAT64 -> PortaSIP
Other requirements / constraints
- We distinguish between A and B cases - with and without push/media custom proxy respectively. While B cases are more general, A cases are required for the particular deployment.
- Call recording & legal intercept aren't used by particular customer [A cases], but generally these features are to be supported as well [B cases].
- [A cases] We forward all calls to local accounts to their custom proxy server (static registration). It uses data about locations from our DB to route calls after this. Such a configuration has been done as this proxy is needed for PUSH-service.
- [A cases] Custom proxy server is handling media proxying by one of its components - we call it "third party media proxy"
- [A cases] Recommendations for testing from Apple can be found here ("Test for IPv6 DNS64/NAT64 Compatibility Regularly" section).
- [A cases] Example of the INVITE from the call that customer tried on his system: