[switch_core_media] RFC 2543-style hold not detected for IPv6 endpoints — HELD state never triggered - #3099
Open
gaurang1102 wants to merge 4 commits into
Conversation
… multi-node use, but the implementation was never completed. All SQL writers hardcode the literal string 'single_box' instead of reading a configurable value from the module's global configuration.
…inate leg via ovars
…umber on Polycom endpoints
…r RFC 2543 SDP hold
|
I agree that this seems like an oversight. We have had to custom-code around this. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
reeSWITCH detects RFC 2543-style call hold by checking whether the SDP's connection address (c= line) is set to the IPv4 null address 0.0.0.0. This detection is in switch_core_media_process_sdp() in src/switch_core_media.c.
However, the check does not include the equivalent IPv6 null address 0:0:0:0:0:0:0:0 (or its canonical form ::). IPv6-capable endpoints — notably Cisco IP phones in dual-stack environments — send RFC 2543-style hold using the IPv6 null address in the SDP connection line. FreeSWITCH does not recognize this as a hold, so the channel never transitions to the HELD state, breaking all hold-dependent features: music on hold, hold timers, supervisor monitoring, and hold/resume event generation.
RFC Reference
RFC 2543 §3.1 specifies that a hold is signaled by setting the SDP connection address to 0.0.0.0. RFC 3264 deprecated this in favor of a=sendonly/recvonly, but many deployed devices (especially Cisco) continue to use RFC 2543-style hold. For IPv6, the equivalent address is 0:0:0:0:0:0:0:0 (abbreviated ::). FreeSWITCH already handles the IPv4 case; the IPv6 case is missing.
Affected Code
File: src/switch_core_media.c
Function: switch_core_media_process_sdp() — the sdp_connection->c_address check approximately 124 lines before the main media loop.
Type of Change
Related Issues
#3098 (comment)
Testing
(1) Configure FreeSWITCH with an IPv6-enabled sofia profile (listen-ip = ::).
(2) Register a Cisco IP phone (e.g., Cisco 8800 series) that sends RFC 2543-style hold via IPv6.
(3) Place a call to/from the Cisco phone. While connected, press the Hold button on the phone.
(4) Capture the re-INVITE or UPDATE sent by the phone using sofia global siptrace on.
(5) Observe the SDP contains c=IN IP6 0:0:0:0:0:0:0:0 in the connection field.
(6) Check the channel state:
fs_cli -x "show channels"
or monitor SWITCH_EVENT_CHANNEL_HOLD — the channel does NOT enter the HELD state.
(7) Music on hold is not triggered; the far end hears live audio (or silence) instead of MOH.
Checklist
Additional Notes