| Previous | Next |
| RTC_E_TOO_SMALL_EXPIRES_VALUE | RTC_E_NOT_PRESENCE_PROFILE |
RTC_E_SIP_TLS_FAIL
Where the state changes: RTC_E_SIP_TLS_FAIL
Read this result as an RTC state-machine result: at this point in resolving a SIP destination and establishing UDP, TCP, TLS, or proxy transport before a transaction can proceed, the TLS transport failed outside the more specific tunnel, timeout, certificate, or compatibility cases.
Log this result as 0x80EE0069 in the RTC interface facility 0xEE, not only as a signed decimal; the facility distinguishes local RTC validation from a response status mapped by the stack.
The first useful check is to preserve TCP state, handshake stage, alert code, certificate result, and endpoint name. The result must be separated from nearby conditions because generic TLS failure should be refined using the first lower-level handshake or validation event.
Telemetry and packet evidence
The earliest callback or return site is the most valuable; later cleanup can replace the original state, so correlate the code with the object generation that produced it.
- Code-specific proof: preserve
TCPstate, handshake stage, alert code, certificate result, and endpoint name. - Addressing context: DNS query type and answers.
- RTC callback state: local/remote socket tuple.
- Transaction boundary: proxy tunnel response.
- Media or profile detail:
SIPtransaction timer and retransmit count.
For privacy-safe analysis of this result, preserve protocol structure rather than payload content; authentication values, complete addresses, buddy lists, and bodies should be redacted or hashed under policy.
Protocol and object boundary
| RTC area | SIP transport and reachability boundary |
|---|---|
| Condition to prove | the TLS transport failed outside the more specific tunnel, timeout, certificate, or compatibility cases |
| Objects to correlate | SIP URI, proxy/registrar address, DNS results, socket, HTTP CONNECT tunnel, transaction timer |
| Safe corrective direction | fix the earliest specific cause and create a fresh secure connection |
Two RTC rules frame it: first, DNS discovery, socket establishment, proxy tunneling, and SIP transaction completion are distinct phases and should not be collapsed into one “network error”; second, for this HRESULT, a retry is safe only after the application identifies whether any request bytes were transmitted and whether the previous client transaction still exists.
Actions that do not address this condition
- The following shortcut is unsafe: do not switch transports without checking profile policy and authentication constraints.
- Do not retry rapidly across every resolved address without preserving the failure phase.
- A wrapper handling it should retain the original HRESULT instead of replacing it with an undifferentiated call failure.
Step-by-step isolation
- Locate the earliest producer of this result and verify that no wrapper replaced a more specific lower-layer value.
- Map that producer to the active RTC object and to one SIP, SDP, PINT, presence, media, or profile transition.
- Collect enough evidence to preserve
TCPstate, handshake stage, alert code, certificate result, and endpoint name. - Test the competing explanation explicitly, because generic
TLSfailure should be refined using the first lower-level handshake or validation event. - Perform the narrow correction — fix the earliest specific cause and create a fresh secure connection — and validate both protocol completion and object cleanup.
A SIP capture without RTC callback state cannot show which local object accepted or rejected the transition; an HRESULT-only log has the opposite weakness: it cannot show whether the result was generated before transmission or mapped from the peer.
Remediation boundary
The owning RTC component should fix the earliest specific cause and create a fresh secure connection; it should also settle or cancel its previous operation before callers begin a replacement.
Do not turn it into an immediate unconditional retry; first determine whether the peer could have accepted the prior request and whether RTC still owns a live transaction.
Example: A registrar closes the connection during the TLS handshake with an alert.
Comparison with adjacent codes
It is tied to the condition “the TLS transport failed outside the more specific tunnel, timeout, certificate, or compatibility cases”; preserve that producing boundary before choosing recovery; the neighboring results below require different control-flow decisions.
RTC_E_INVALID_ADDRESS_LOCAL | the local address configured in the RTC profile cannot be used for the requested transport or session |
|---|---|
RTC_E_SIP_TRANSPORT_NOT_SUPPORTED | the requested SIP transport is not implemented or allowed by the RTC profile/platform path |
RTC_E_SIP_REQUEST_DESTINATION_ADDR_NOT_PRESENT | the RTC stack cannot determine a network destination for the outgoing SIP request |
Facility equality is not semantic equality; route each contrasted value through its own recovery branch.
Verification after a fix
Keep two tests: one that intentionally produces “the TLS transport failed outside the more specific tunnel, timeout, certificate, or compatibility cases”, and one that applies the narrow correction; check the callback sequence, 0x80EE0069, final session/profile state, and absence of leaked listeners, dialogs, streams, or registrations.
Technical references
- Microsoft RTC return constants — definitions relevant when reproducing it.
- SIP transport behavior — API or protocol rules used to interpret it.
- Locating SIP servers — authoritative context for the boundary.
- SIP and TEL URLs in RTC — definitions relevant when reproducing it.
Looking for a different code? Search another status or error code.