Note over B: update out_request_cap with fxs cap <br/> ---------------------------------------------------
Note over B: update out_request_cap with fxs cap <br/> ---------------------------------------------------
B->>D: Write out_request_cap
else is dect
else is dect
Note over A: update out_request_cap with enpt cap <br/> -----------------------------------------------------
Note over A: update out_request_cap with enpt cap <br/> -----------------------------------------------------
A->>D: Write out_request_cap
A->>B: new call
A->>B: new call
end
end
B->>C: init call
B->>C: init call
Note over C: chan_voicemngr_start_calling<br/>/chan_voicemngr_new: <br/> sem_wait() <br/> Read out_request_cap from shared memory <br/> sem_post() <br/> update cap and continue with outgoing process <br/> ------------------------------------------------------------------
Note over C: chan_voicemngr_start_calling<br/>/chan_voicemngr_new: <br/> Read out_request_cap from shared memory <br/> --------------------------------------------------------------
D->>C: Read out_request_cap
Note over C: chan_voicemngr_start_calling<br/>/chan_voicemngr_new: <br/> update cap and continue with outgoing process <br/> ------------------------------------------------------------------
```
```
#### incoming calls
#### incoming calls
...
@@ -23,20 +28,34 @@ sequenceDiagram
...
@@ -23,20 +28,34 @@ sequenceDiagram
participant B as chan-voicemngr
participant B as chan-voicemngr
participant C as voicemngr
participant C as voicemngr
participant D as dectmngr
participant D as dectmngr
participant E as shared memory
Note left of A : Incoming call
Note left of A : Incoming call
Note over A: incoming codec offer negotiation with pjsip cap <br/> and keep the list <br/>which used for calling chan_voicemngr <br/> ------------------------------------------------------------------
Note over A: incoming codec offer negotiation with pjsip cap <br/> and keep the list <br/>which used for calling chan_voicemngr <br/> ------------------------------------------------------------------
A->>B: chan_voicemngr_new(..., codec_list)
A->>B: chan_voicemngr_new(..., codec_list)
Note over B: chan_voicemngr_new: <br/> sem_wait() <br/> Read extension_cap from shared memory <br/> update in_request_cap to shared memory <br/> sem_post() <br/> update cap and continue with incoming process <br/> hangup chan if no shared cap <br/> ------------------------------------------------------------------
Note over B: chan_voicemngr_new: <br/> Read extension_cap from shared memory <br/> -----------------------------------------------------------
B->>A: cap update and continue with incoming process
E->>B: Read extension_cap
A->>C: indicate RINGING
alt no avaliable cap in extension_cap
alt is fxs answered
Note over B: hangup chan if no shared cap <br/> -------------------------------------------
Note over C: update answered_cap <br/> combined with <br/> in_request_cap and fxs cap <br/> ----------------------------------------
else incoming cap avaliable in extension_cap
else is dect answered
Note over B: update in_request_cap to shared memory <br/> update cap and continue with incoming process <br/> ------------------------------------------------------------------
Note over D: update answered_cap <br/> combined with <br/> in_request_cap and enpt cap <br/> ------------------------------------------
B->>E: Write in_request_cap
B->>A: cap update and continue with incoming process
A->>C: indicate RINGING
alt fxs answered
Note over C: update answered_cap <br/> combined with <br/> in_request_cap and fxs cap <br/> ----------------------------------------
E->>C: Read in_request_cap
C->>E: Write answered_cap
else dect answered
Note over D: update answered_cap <br/> combined with <br/> in_request_cap and enpt cap <br/> ------------------------------------------
E->>D: Read in_request_cap
D->>E: Write answered_cap
D->>C: Answered/OFFHOOK
end
C->>A: Answered
Note over A: pjsip/res_pjsip_sdp_rtp.c: <br/> update cap with answered_cap. <br/> --------------------------------------------
E->>A: Read answered_cap
Note left of A: 200OK
end
end
C->>A: Answered
Note over A: pjsip/res_pjsip_sdp_rtp.c: <br/> update cap with answered_cap. <br/> --------------------------------------------