Skip to content

Add support for SIP configuration - #782

Open
jflevesque-genetec wants to merge 21 commits into
developmentfrom
video/sip
Open

Add support for SIP configuration#782
jflevesque-genetec wants to merge 21 commits into
developmentfrom
video/sip

Conversation

@jflevesque-genetec

Copy link
Copy Markdown
Contributor

New API specifications for configuring some settings related to SIP.

SipServerConfiguration: How a SIP device can connect to a SIP registrar
NatConfiguration: If a device needs STUN/TURN servers to reach a SIP registrar (for example in a cloud setup)
CallConfiguration: Settings related to establish a call, for example which recipient are you calling when pressing on a button on an intercom
StreamingConfiguration: Configuration to be used when streaming through a SIP call.

@jflevesque-genetec

jflevesque-genetec commented Jun 3, 2026

Copy link
Copy Markdown
Contributor Author

Suggestion to move these new APIs into a SIP specification. Will be working on that shortly.
Update: Changes have been applied on the branch

Comment thread doc/Media2.xml
Comment thread wsdl/ver10/device/wsdl/devicemgmt.wsdl
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
<xs:documentation>The user info/extension of the Address of Record (AoR) in SIP, identifying the recipient on the registrar.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Order" minOccurs="1">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggest replacing this with a "CallTrigger" string,which should be one of the values returned from a new GetCallTriggers call or similar so there is a clear way to see if a call is triggered from what physical button or I/O, e.g: "Callbutton 1", "Callbutton 2", "External IO1", "External IO2", "TouchDisplay"
For calls triggered by a touch display, the value could be e.g "TouchDisplay" could be part of the supported CallTriggers.
And let the order in the array control the order of display based call triggers. Ok to have multiple recipients that share the same CallTrigger.

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl

@johado johado left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Like the idea in general. Hard to balance making it simple enough without make it to limited and hard to map to our current implementation.

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
<!--===============================-->
<xs:complexType name="ServerConfiguration">
<xs:sequence>
<xs:element name="Registrar" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded"/>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the following configuration should be added as part of registrar configuration.

  1. Transport protocol [UDP, TCP, TLS, SIPS] ==> Mandatory field
  2. Outbound proxy server (I think is important for Multitenant SIP platforms, Service provider routing,Security and policy enforcement, NAT traversal) ==> Optional field.
  3. Is it important for the client to know the registration status of the SIP configuration? I think we can add it as event or part of the get configuration response, to notify the client on registered, failed to register state.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. We will propose something for this
  2. I don't mind adding this, what other than a URI would be needed for the proxy config?
  3. It is great idea to add this event. Do you already have a suggestion for which fields to include in the event?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Proposed something for the transport. Might be missing a bit of documentation though

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SIPS gives some more assuurance compared to TLS, so perhaps SIPS should be added as well.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain the difference between SIPS and TLS? My understanding was that TLS infers SIP over TLS. Isn't SIPS the exact same thing?

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="CallRecipient">

@toa-kumalija toa-kumalija Jun 4, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DTMF can be added as part of CallRecipient configuration.
DTMF can be used to trigger actions like lock or open the door. I am not very clear of the use-case.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We weren't initially planning to add DTMFs in the specification. I know that ONVIF already supports relay outputs which seems to be what would be used to trigger the door opening. Wouldn't that specification work better than plugging it here with recipients?

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl
@ocampana-videotec ocampana-videotec added this to the 27.06 milestone Jun 5, 2026
<xs:complexType name="ServerConfiguration">
<xs:sequence>
<xs:element name="Registrar" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="UserId" type="xs:string">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the sip address and the AuthenticationId use the UserName in Authentication/Credential below?
Or can the sip address be part of the Registrar uri?
(In SIP those could be two different things)
Does use of AuthorizationServer require a special AuthenticationId if it is not the UsertId?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registrar is an URI in this format: domain:port
UserId is the extension.
So it ends up something like this: "sips:{UserId}@{registrar.Uri}"

AuthorizationServer would contain the token of the configuration if bearer authentication is used (not typical)
Authentication.Credential.Username+Password is more standard, most probably using digest auth challenge through a header.

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
Added transport for the SIP registrar
Misc changes based on discussions or comments made from F2F
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="tsip:Capabilities"/>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove?

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:attribute name="MaximumRecipients" type="xs:int" use="required">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prepare for an extendable sequence of elements for future extendability?

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl
<xs:documentation>List of call recipients.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add extendability (both attributes and elements)

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl

@johado johado left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some inconsistencies to function arguments, sometimes optional, sometimes not.

Comment thread doc/Sip.xml
Comment thread doc/Sip.xml
<wsdl:input message="tsip:SetCallButtonsRequest"/>
<wsdl:output message="tsip:SetCallButtonsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetCallButtonOptions">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need this GetCallButtonOptions ? we can only findout the callbutton type and description using this method. Instead suggestion is to add this Type (Physical, Virtual, Relay ) to the GetCallButtons Response and remove this options. Additionally here in the options we use token and in ButtonConfiguration we use ButtonId which is not matching.

<xs:documentation>Indicates whether the device shall allow incoming calls.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AutoAnswer" type="xs:boolean">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What happens when AllowIncomingCalls is set to true and AutoAnswer is set to false? Will ringtone be played during this time. If that is the case better to associate with a AudioClip Token.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the service support more than configuration? E.g operations for Call, Answer, TerminateCall ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To answer @sujithhanwha's question, yes, if AutoAnswer=false, then it would go in a ringing mode.

What is the relationship with ringing and audio clip playing?

@johado what do you propose?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To answer @sujithhanwha's question, yes, if AutoAnswer=false, then it would go in a ringing mode.

What is the relationship with ringing and audio clip playing?

@johado what do you propose?

Looks like we are assuming that device will play a ringtone on receiving call, was suggesting to map a audio clip token for ringtoken, incase if user wants to customize the ringtone.

</xs:element>
<xs:element name="Stun" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>Collection of STUN server URIs used for NAT traversal.</xs:documentation>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need parameter to enable and disable ICE ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. I know ICE can be provided through the SDP, but I assume here you were referring to trickle ICE?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, both in general. An explicit control allows clients or devices to enable/disable ICE support when interacting with legacy servers or middleboxes that do not support Full ICE or Trickle ICE.

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl
<xs:sequence>
<xs:element name="Configuration" type="tsip:ServerConfigurationTokenPair" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A SIP server configuration of the device.</xs:documentation>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"One or more SIP server configuration of the device."

</xs:restriction>
</xs:simpleType>

<xs:complexType name="ServerConfiguration">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a token attribute to ServerConfiguration and skip the TokenPair structure etc.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I do that, I still need to define a custom type to be able to create the server configuration, since it is the device that will decide the token. And token is always mandatory, so I can't put it optional and have it null only for creation.

<!--===============================-->
<xs:complexType name="CallConfiguration">
<xs:sequence>
<xs:element name="ServerConfiguration" type="tt:ReferenceToken">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not let CallConfiguration be an element within ServerConfiguration and skip this reference?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Separation of concerns. It help to determine and also have a configuration to add other options related to calls in general, which have no consequence on how you connect to a SIP server.

</xs:element>
<xs:element name="Relay" type="tsip:ButtonDescription" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of relay button ids.</xs:documentation>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is a relay button?
Do you mean a button wired to a digital input?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes

<xs:documentation>Display name of the call recipient.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="UserId" type="xs:string" minOccurs="1">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe a better term than "UserId" should be used. "SIPUri"? "To", "Address" ?


<xs:complexType name="ButtonConfiguration">
<xs:sequence>
<xs:element name="ServerConfiguration" type="tt:ReferenceToken">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Perhaps this should be optional an the server could deduced by the UserId/SIPUri/To/Address in the Button?
Or move it to CallButton? Is ButtonConfiguration needed or is CallButton type enough?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The list of buttons being configured (line 491) will be part/related to this server configuration and not any other. No need to repeat registrar information over every button.

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
<wsdl:output message="tsip:GetServerConfigurationsResponse"/>
</wsdl:operation>
<wsdl:operation name="SetServerConfiguration">
<wsdl:documentation>This operation sets the SIP server configuration of the device. The device shall support this command. Only one SIP server configuration is supported. If the configuration is absent, the device shall remove the existing SIP server configuration.</wsdl:documentation>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update doc. Not only one supported anymore. The remove is handled with new operation now.

</xs:sequence>
</xs:complexType>

<xs:simpleType name="TransportType">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a doc section clarifying that this is a non -normative enum that may be extended in the future.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But it is normative. It is specified as the only valid values for Transport in the Registrar type (see spec .xml file). This is the standard way to have extensibility for types (Transport is still string, but requires to be one of this enum)

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
Comment thread wsdl/ver10/sip/wsdl/sip.wsdl Outdated
<xs:element name="AddNatConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="NatConfiguration" type="tsip:NatConfiguration" minOccurs="0">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly to call Add without specifying a NatConfiguration?
Should probably be minOccurs=1
Clearer with a SetNatConfiguration operation instead since you can only have one per server config?
Or should the operation be skipped and NatConfiguration be an element in ServerConfiguration?

<xs:documentation>List of relay button ids.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Virtual" type="tsip:ButtonDescription" minOccurs="0" maxOccurs="unbounded">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if it makes sense to expose Virtual call buttons like this. If they are dynamically created, there really is no list until the button is created?
Would a product have to expose a fake number of possible buttons?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My point of view is that the device provides what is currently possible. If the user first needs to go on the webpage to create the button layout, then that's a prerequisite to use virtual buttons. Once the layout exists, then the options provide their reference tokens and a short description so that the user can make sense of it once part of the VMS.

This is one such compromise required to be able to have button configuration for a wide range of devices without having to pull/support a complex array of functions (ex: create/update/delete button layouts with screen displays, etc.)

</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CallButtonOptions">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make duplicate ButtonId semantics explicit: treat same ButtonId entries as one logical button group and either define mandatory call strategy + ordering/fallback + capability advertisement, or let behavior be up to vendor.

Comment thread wsdl/ver10/sip/wsdl/sip.wsdl
<xs:documentation>Optional name of the server configuration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first ONVIF then Vendor -->

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add extendability for attributes

</xs:sequence>
</xs:complexType>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first ONVIF then Vendor -->

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add extendability for attributes?

<xs:documentation>Indicates whether the device shall automatically answer incoming calls.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> <!-- first ONVIF then Vendor -->

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add extendability for attributes?

<xs:documentation>A button's description.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add extendability for elements and attributes?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants