7. Recording Metadata Snapshot Request Format
The SRS can explicitly request a metadata snapshot from the SRC. To request a metadata snapshot, the SRS MUST send a SIP request message with an XML document having the namespace urn:ietf:params:xml:ns:recording:1. The XML document has the following elements: o A 'requestsnapshot' XML element MUST be present as the top-level element in the XML document. o A 'requestreason' XML element that indicates the reason (as a string) for requesting the snapshot MAY be present as a child XML element of 'requestsnapshot'. The example below shows a metadata snapshot request from the SRS. <?xml version="1.0" encoding="UTF-8"?> <requestsnapshot xmlns='urn:ietf:params:xml:ns:recording:1'> <requestreason xml:lang="it">SRS internal error</requestreason> </requestsnapshot> Example Metadata Snapshot Request from SRS to SRC
8. SIP Recording Metadata Examples
8.1. Complete SIP Recording Metadata Example
The following example provides all the tuples involved in the recording metadata XML body. <?xml version="1.0" encoding="UTF-8"?> <recording xmlns='urn:ietf:params:xml:ns:recording:1'> <datamode>complete</datamode> <group group_id="7+OTCyoxTmqmqyA/1weDAg=="> <associate-time>2010-12-16T23:41:07Z</associate-time> <!-- Standardized extension --> <call-center xmlns='urn:ietf:params:xml:ns:callcenter'> <supervisor>sip:alice@atlanta.com</supervisor> </call-center> <mydata xmlns='http://example.com/my'> <structure>FOO!</structure> <whatever>bar</whatever> </mydata> </group> <session session_id="hVpd7YQgRW2nD22h7q60JQ=="> <sipSessionID>ab30317f1a784dc48ff824d0d3715d86; remote=47755a9de7794ba387653f2099600ef2</sipSessionID> <group-ref>7+OTCyoxTmqmqyA/1weDAg==</group-ref> <!-- Standardized extension --> <mydata xmlns='http://example.com/my'> <structure>FOO!</structure> <whatever>bar</whatever> </mydata> </session> <participant participant_id="srfBElmCRp2QB23b7Mpk0w=="> <nameID aor="sip:bob@biloxi.com"> <name xml:lang="it">Bob</name> </nameID> <!-- Standardized extension --> <mydata xmlns='http://example.com/my'> <structure>FOO!</structure> <whatever>bar</whatever> </mydata> </participant>
<participant participant_id="zSfPoSvdSDCmU3A3TRDxAw=="> <nameID aor="sip:Paul@biloxi.com"> <name xml:lang="it">Paul</name> </nameID> <!-- Standardized extension --> <mydata xmlns='http://example.com/my'> <structure>FOO!</structure> <whatever>bar</whatever> </mydata> </participant> <stream stream_id="UAAMm5GRQKSCMVvLyl4rFw==" session_id="hVpd7YQgRW2nD22h7q60JQ=="> <label>96</label> </stream> <stream stream_id="i1Pz3to5hGk8fuXl+PbwCw==" session_id="hVpd7YQgRW2nD22h7q60JQ=="> <label>97</label> </stream> <stream stream_id="8zc6e0lYTlWIINA6GR+3ag==" session_id="hVpd7YQgRW2nD22h7q60JQ=="> <label>98</label> </stream> <stream stream_id="EiXGlc+4TruqqoDaNE76ag==" session_id="hVpd7YQgRW2nD22h7q60JQ=="> <label>99</label> </stream> <sessionrecordingassoc session_id="hVpd7YQgRW2nD22h7q60JQ=="> <associate-time>2010-12-16T23:41:07Z</associate-time> </sessionrecordingassoc> <participantsessionassoc participant_id="srfBElmCRp2QB23b7Mpk0w==" session_id="hVpd7YQgRW2nD22h7q60JQ=="> <associate-time>2010-12-16T23:41:07Z</associate-time> </participantsessionassoc> <participantsessionassoc participant_id="zSfPoSvdSDCmU3A3TRDxAw==" session_id="hVpd7YQgRW2nD22h7q60JQ=="> <associate-time>2010-12-16T23:41:07Z</associate-time> </participantsessionassoc>
<participantstreamassoc participant_id="srfBElmCRp2QB23b7Mpk0w=="> <send>i1Pz3to5hGk8fuXl+PbwCw==</send> <send>UAAMm5GRQKSCMVvLyl4rFw==</send> <recv>8zc6e0lYTlWIINA6GR+3ag==</recv> <recv>EiXGlc+4TruqqoDaNE76ag==</recv> </participantstreamassoc> <participantstreamassoc participant_id="zSfPoSvdSDCmU3A3TRDxAw=="> <send>8zc6e0lYTlWIINA6GR+3ag==</send> <send>EiXGlc+4TruqqoDaNE76ag==</send> <recv>UAAMm5GRQKSCMVvLyl4rFw==</recv> <recv>i1Pz3to5hGk8fuXl+PbwCw==</recv> </participantstreamassoc> </recording> Example Metadata Snapshot from SRC to SRS8.2. Partial Update of Recording Metadata XML Body
The following example provides a partial update in the recording metadata XML body for the above example. The example has a snapshot that carries the disassociate-time for a participant from a session. <?xml version="1.0" encoding="UTF-8"?> <recording xmlns='urn:ietf:params:xml:ns:recording:1'> <datamode>partial</datamode> <participant participant_id="srfBElmCRp2QB23b7Mpk0w=="> <nameID aor="sip:bob@biloxi.com"> <name xml:lang="it">Bob</name> </nameID> </participant> <participantsessionassoc participant_id="srfBElmCRp2QB23b7Mpk0w==" session_id="hVpd7YQgRW2nD22h7q60JQ=="> <disassociate-time>2010-12-16T23:41:07Z</disassociate-time> </participantsessionassoc> </recording> Partial Update of SIP Recording Example XML Body
9. XML Schema Definition for Recording Metadata
This section defines the XML schema for the recording metadata document. <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="urn:ietf:params:xml:ns:recording:1" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:ietf:params:xml:ns:recording:1" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!-- This import brings in the XML language attribute xml:lang --> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="https://www.w3.org/2001/xml.xsd"/> <xs:element name="recording" type="tns:recording"/> <xs:complexType name="recording"> <xs:sequence> <xs:element name="datamode" type="tns:dataMode" minOccurs="0"/> <xs:element name="group" type="tns:group" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="session" type="tns:session" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="participant" type="tns:participant" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="stream" type="tns:stream" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="sessionrecordingassoc" type="tns:sessionrecordingassoc" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="participantsessionassoc" type="tns:participantsessionassoc" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="participantstreamassoc" type="tns:participantstreamassoc" minOccurs="0" maxOccurs="unbounded"/> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> </xs:complexType>
<xs:complexType name="group"> <xs:sequence> <xs:element name="associate-time" type="xs:dateTime" minOccurs="0"/> <xs:element name="disassociate-time" type="xs:dateTime" minOccurs="0"/> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> <xs:attribute name="group_id" type="xs:base64Binary" use="required"/> </xs:complexType> <xs:complexType name="session"> <xs:sequence> <xs:element name="sipSessionID" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="reason" type="tns:reason" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="group-ref" type="xs:base64Binary" minOccurs="0" maxOccurs="1"/> <xs:element name="start-time" type="xs:dateTime" minOccurs="0" maxOccurs="1"/> <xs:element name="stop-time" type="xs:dateTime" minOccurs="0" maxOccurs="1"/> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> <xs:attribute name="session_id" type="xs:base64Binary" use="required"/> </xs:complexType> <xs:complexType name="sessionrecordingassoc"> <xs:sequence> <xs:element name="associate-time" type="xs:dateTime" minOccurs="0"/> <xs:element name="disassociate-time" type="xs:dateTime" minOccurs="0"/> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> <xs:attribute name="session_id" type="xs:base64Binary" use="required"/> </xs:complexType>
<xs:complexType name="participant"> <xs:sequence> <xs:element name="nameID" type="tns:nameID" maxOccurs='unbounded'/> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> <xs:attribute name="participant_id" type="xs:base64Binary" use="required"/> </xs:complexType> <xs:complexType name="participantsessionassoc"> <xs:sequence> <xs:element name="associate-time" type="xs:dateTime" minOccurs="0"/> <xs:element name="disassociate-time" type="xs:dateTime" minOccurs="0"/> <xs:element name="param" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="pname" type="xs:string" use="required"/> <xs:attribute name="pval" type="xs:string" use="required"/> </xs:complexType> </xs:element> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> <xs:attribute name="participant_id" type="xs:base64Binary" use="required"/> <xs:attribute name="session_id" type="xs:base64Binary" use="required"/> </xs:complexType>
<xs:complexType name="participantstreamassoc"> <xs:sequence> <xs:element name="send" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="recv" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="associate-time" type="xs:dateTime" minOccurs="0"/> <xs:element name="disassociate-time" type="xs:dateTime" minOccurs="0"/> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> <xs:attribute name="participant_id" type="xs:base64Binary" use="required"/> </xs:complexType> <xs:complexType name="stream"> <xs:sequence> <xs:element name="label" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> <xs:attribute name="stream_id" type="xs:base64Binary" use="required"/> <xs:attribute name="session_id" type="xs:base64Binary"/> </xs:complexType> <xs:simpleType name="dataMode"> <xs:restriction base="xs:string"> <xs:enumeration value="complete"/> <xs:enumeration value="partial"/> </xs:restriction> </xs:simpleType> <xs:complexType name="nameID"> <xs:sequence> <xs:element name="name" type ="tns:name" minOccurs="0" maxOccurs="1"/> </xs:sequence> <xs:attribute name="aor" type="xs:anyURI" use="required"/> </xs:complexType>
<xs:complexType name="name"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute ref="xml:lang" use="optional"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="reason"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute type="xs:short" name="cause" use="required"/> <xs:attribute type="xs:string" name="protocol" default="SIP"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:element name="requestsnapshot" type="tns:requestsnapshot"/> <xs:complexType name="requestsnapshot"> <xs:sequence> <xs:element name="requestreason" type="tns:name" minOccurs="0"/> <xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' processContents='lax'/> </xs:sequence> </xs:complexType> </xs:schema>10. Security Considerations
This document describes an extensive set of metadata that may be recorded by the SRS. Most of the metadata could be considered private data. The procedures mentioned in the Security Considerations section of [RFC7866] MUST be followed by the SRC and the SRS for mutual authentication and to protect the content of the metadata in the RS. An SRC MAY, by policy, choose to limit the parts of the metadata sent to the SRS for recording. Also, the policy of the SRS might not require recording all the metadata it receives. For the sake of data minimization, the SRS MUST NOT record additional metadata that is not explicitly required by local policy. Metadata in storage needs to be provided with a level of security that is comparable to that of the recording session.
11. IANA Considerations
This specification registers a new XML namespace and a new XML schema.11.1. SIP Recording Metadata Schema Registration
URI: urn:ietf:params:xml:ns:recording:1 Registrant Contact: IETF SIPREC working group, Ram Mohan R (rmohanr@cisco.com) XML: The registered XML schema is contained in Section 9. Its first line is <?xml version="1.0" encoding="UTF-8"?>, and its last line is </xs:schema>.12. References
12.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997, <http://www.rfc-editor.org/info/rfc2119>. [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, A., Peterson, J., Sparks, R., Handley, M., and E. Schooler, "SIP: Session Initiation Protocol", RFC 3261, DOI 10.17487/RFC3261, June 2002, <http://www.rfc-editor.org/info/rfc3261>. [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, <http://www.rfc-editor.org/info/rfc3339>. [RFC3840] Rosenberg, J., Schulzrinne, H., and P. Kyzivat, "Indicating User Agent Capabilities in the Session Initiation Protocol (SIP)", RFC 3840, DOI 10.17487/RFC3840, August 2004, <http://www.rfc-editor.org/info/rfc3840>. [RFC4122] Leach, P., Mealling, M., and R. Salz, "A Universally Unique IDentifier (UUID) URN Namespace", RFC 4122, DOI 10.17487/RFC4122, July 2005, <http://www.rfc-editor.org/info/rfc4122>.
[RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session Description Protocol", RFC 4566, DOI 10.17487/RFC4566, July 2006, <http://www.rfc-editor.org/info/rfc4566>. [RFC4574] Levin, O. and G. Camarillo, "The Session Description Protocol (SDP) Label Attribute", RFC 4574, DOI 10.17487/RFC4574, August 2006, <http://www.rfc-editor.org/info/rfc4574>. [RFC4648] Josefsson, S., "The Base16, Base32, and Base64 Data Encodings", RFC 4648, DOI 10.17487/RFC4648, October 2006, <http://www.rfc-editor.org/info/rfc4648>. [RFC4796] Hautakorpi, J. and G. Camarillo, "The Session Description Protocol (SDP) Content Attribute", RFC 4796, DOI 10.17487/RFC4796, February 2007, <http://www.rfc-editor.org/info/rfc4796>. [RFC7866] Portman, L., Lum, H., Ed., Eckel, C., Johnston, A., and A. Hutton, "Session Recording Protocol", RFC 7866, DOI 10.17487/RFC7866, May 2016, <http://www.rfc-editor.org/info/rfc7866>.12.2. Informative References
[RFC3325] Jennings, C., Peterson, J., and M. Watson, "Private Extensions to the Session Initiation Protocol (SIP) for Asserted Identity within Trusted Networks", RFC 3325, DOI 10.17487/RFC3325, November 2002, <http://www.rfc-editor.org/info/rfc3325>. [RFC3326] Schulzrinne, H., Oran, D., and G. Camarillo, "The Reason Header Field for the Session Initiation Protocol (SIP)", RFC 3326, DOI 10.17487/RFC3326, December 2002, <http://www.rfc-editor.org/info/rfc3326>. [RFC3966] Schulzrinne, H., "The tel URI for Telephone Numbers", RFC 3966, DOI 10.17487/RFC3966, December 2004, <http://www.rfc-editor.org/info/rfc3966>. [RFC4235] Rosenberg, J., Schulzrinne, H., and R. Mahy, Ed., "An INVITE-Initiated Dialog Event Package for the Session Initiation Protocol (SIP)", RFC 4235, DOI 10.17487/RFC4235, November 2005, <http://www.rfc-editor.org/info/rfc4235>.
[RFC6341] Rehor, K., Ed., Portman, L., Ed., Hutton, A., and R. Jain, "Use Cases and Requirements for SIP-Based Media Recording (SIPREC)", RFC 6341, DOI 10.17487/RFC6341, August 2011, <http://www.rfc-editor.org/info/rfc6341>. [RFC7245] Hutton, A., Ed., Portman, L., Ed., Jain, R., and K. Rehor, "An Architecture for Media Recording Using the Session Initiation Protocol", RFC 7245, DOI 10.17487/RFC7245, May 2014, <http://www.rfc-editor.org/info/rfc7245>. [SessionID] Jones, P., Salgueiro, G., Pearce, C., and P. Giralt, "End-to-End Session Identification in IP-Based Multimedia Communication Networks", Work in Progress, draft-ietf-insipid-session-id-22, April 2016. [UML] Object Management Group, "OMG Unified Modeling Language (UML)", 2011, <http://www.omg.org/spec/UML/2.4/>.
Acknowledgements
Thanks to John Elwell, Henry Lum, Leon Portman, De Villiers de Wet, Andrew Hutton, Deepanshu Gautam, Charles Eckel, Muthu Arul Mozhi Perumal, Michael Benenson, Hadriel Kaplan, Brian Rosen, Scott Orton, Ofir Roth, Mary Barnes, Ken Rehor, Gonzalo Salgueiro, Yaron Pdut, Alissa Cooper, Stephen Farrell, and Ben Campbell for their valuable comments and inputs. Thanks to Joe Hildebrand, Peter Saint-Andre, and Matt Miller for helping in writing the XML schema, and to Martin Thomson for validating the XML schema and providing comments on the same.Authors' Addresses
Ram Mohan Ravindranath Cisco Systems Cessna Business Park Bangalore, Karnataka India Email: rmohanr@cisco.com Parthasarathi Ravindran Nokia Networks Bangalore, Karnataka India Email: partha@parthasarathi.co.in Paul Kyzivat Huawei Hudson, MA United States Email: pkyzivat@alum.mit.edu