RFC 3420

Internet Media Type message/sipfrag

πŸ“… published November 2002, from ietf

RFC 3420: Internet Media Type message/sipfrag πŸŽ€

Okay bestie, let's get into it! πŸ’– Here's the quick title-block tea β˜•:

  • Series: Network Working Group
  • Author: R. Sparks, from dynamicsoft πŸ’…
  • Category: Standards Track ✨
  • Date: November 2002 🌸
  • Obsoletes / Updates: this title block doesn't list either one πŸ™ˆ

Status of this Memo πŸ“œ

So this one's a standards track protocol doc πŸ¦‹ for the whole Internet community, and it's basically asking everyone to chat about it and suggest improvements 🫢. If you want the official standardization state, check the current edition of the "Internet Official Protocol Standards" (STD 1) πŸ‘‘. And the best part? Distribution of this memo is unlimited 🌈, so share it with everyone!

Copyright (C) The Internet Society (2002). All Rights Reserved.

Abstract 🧚

Okay, so this doc registers the message/sipfrag MIME media type πŸ’œ. It's kinda like message/sip, except it lets you represent certain subsets of well formed Session Initiation Protocol (SIP) messages instead of needing a whole complete SIP message πŸ“. Besides the end-to-end security stuff, message/sipfrag gets used with the REFER method to share the status of a referenced request πŸ”₯. Iconic, honestly.

Table of Contents πŸ—‚οΈ

1.  Introduction . . . . . . . . . . . . . . . . . . . . . . . . .  2
2.  Definition: message/sipfrag  . . . . . . . . . . . . . . . . .  2
3.  Examples . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
    3.1 Valid message/sipfrag parts  . . . . . . . . . . . . . . .  3
    3.2 Invalid message/sipfrag parts  . . . . . . . . . . . . . .  4
4.  Discussion . . . . . . . . . . . . . . . . . . . . . . . . . .  5
5.  IANA Considerations  . . . . . . . . . . . . . . . . . . . . .  6
6.  Security Considerations  . . . . . . . . . . . . . . . . . . .  6
    Normative References . . . . . . . . . . . . . . . . . . . . .  7
    Non-Normative References . . . . . . . . . . . . . . . . . . .  7
    Author's Address . . . . . . . . . . . . . . . . . . . . . . .  7
    Full Copyright Statement . . . . . . . . . . . . . . . . . . .  8

1. Introduction ✨

Okay so the message/sip MIME media type from [1] carries an entire well formed SIP message πŸŽ€. Section 23.4 of [1] explains how message/sip works together with S/MIME to level up end-to-end security πŸ”. The ideas in that section can be stretched so SIP entities can make assertions about just a subset of a SIP message (like the way [6] describes) πŸ’–. That's where message/sipfrag comes in, because it's the type this document defines to represent that subset ✨.

Also, the REFER method from [5] uses a subset of a SIP message to carry the status of referenced requests πŸ“¬. Letting only part of a SIP message get carried is lowkey genius, because info that could mess with privacy and confidentiality can just get removed πŸ™ˆ.

Now, this doc does not provide a way to chop a SIP message into multiple pieces, send them separately, and then put them back together πŸ’…. If you need that, the message/partial type defined in [2] is the one to use πŸ¦‹.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMEND", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [4] 🌸. Those are the requirement-level words, so pay attention to them! πŸ‘‘

2. Definition: message/sipfrag πŸ§šβ€β™€οΈ

Okay, so a valid message/sipfrag part is one you could get by starting with some valid SIP message and then deleting any of the following πŸ’œ:

  • the entire start line
  • one or more entire header fields
  • the body

The following Augmented Backus-Naur Form (ABNF) [3] rule describes a message/sipfrag part, using the SIP grammar elements defined in [1] πŸ“. Any expansion of an element is subject to the restrictions on valid SIP messages defined there πŸ”₯.

        sipfrag = [ start-line ]
                  *message-header
                  [ CRLF [ message-body ] ]

Super important bit, bestie! 🌈 If the message/sipfrag part has a body, it MUST also contain the appropriate header fields that describe that body (like Content-Length), as required by Section 7.4 of [1], plus the null-line that separates the header from the body πŸ’….

3. Examples πŸŽ€

3.1 Valid message/sipfrag parts πŸ’–

This section puts a vertical bar and a space to the left of each example, so you can see exactly how far each example goes ✨. Each line of the message/sipfrag element starts with the first character after the "|" pair πŸ¦‹.

The first two examples show that a message/sipfrag part can be just a start line 🌸.

      | INVITE sip:alice@atlanta.com SIP/2.0
   or
      | SIP/2.0 603 Declined

The next two show that subsets of a full SIP message can be represented 🫢.

   | REGISTER sip:atlanta.com SIP/2.0
   | To: sip:alice@atlanta.com
   | Contact: <sip:alicepc@atlanta.com>;q=0.9,
   |          <sip:alicemobile@atlanta.com>;q=0.1

   | SIP/2.0 400 Bad Request
   | Warning: 399 atlanta.com Your Event header field was malformed

A message/sipfrag part doesn't have to contain a start line, and this one's a good example of that πŸ“. It shows a part that might be signed to make assertions about a particular message πŸ”. (See [6].)

      | From: Alice <sip:alice@atlanta.com>
      | To: Bob <sip:bob@biloxi.com>
      | Contact: <sip:alice@pc33.atlanta.com>
      | Date: Thu, 21 Feb 2002 13:02:03 GMT
      | Call-ID: a84b4c76e66710
      | Cseq: 314159 INVITE

The next two examples show message/sipfrag parts that have bodies πŸ‘‘.

      | SIP/2.0 200 OK
      | Content-Type: application/sdp
      | Content-Length: 247
      |
      | v=0
      | o=alice 2890844526 2890844526 IN IP4 host.anywhere.com
      | s=
      | c=IN IP4 host.anywhere.com
      | t=0 0
      | m=audio 49170 RTP/AVP 0
      | a=rtpmap:0 PCMU/8000
      | m=video 51372 RTP/AVP 31
      | a=rtpmap:31 H261/90000
      | m=video 53000 RTP/AVP 32
      | a=rtpmap:32 MPV/90000

      | Content-Type: text/plain
      | Content-Length: 11
      |
      | Hi There!

3.2 Invalid message/sipfrag parts πŸ™…β€β™€οΈ

Now for the don'ts, bestie! πŸ’€ This section puts the character "X" followed by a space to the left of each example, so you can see the extent of each one 🌸. Each line of the invalid message/sipfrag element starts with the first character after the "X " pair πŸ¦‹.

The start line, if present, must be complete and valid per [1] πŸ’….

      X INVITE

      X INVITE sip:alice@atlanta.com SIP/1.09

      X SIP/2.0

      X 404 Not Found

All header fields must be valid per [1] 🫢.

      X INVITE sip:alice@atlanta.com SIP/2.0
      X Via: SIP/2.0/UDP ;branch=z9hG4bK29342a
      X To: <>;tag=39234

      X To: sip:alice@atlanta.com
      X From: sip:bob@biloxi.com;tag=1992312
      X Call-ID: this is invalid

      X INVITE sip:alice@atlanta.com SIP/2.0
      X From: <sip:bob@biloxi.com>;tag=z9hG4bK2912;tag=z9hG4bK99234

If a body is present in the message/sipfrag part, the headers required by Section 7.4 of [1] and the null-line separating the header from the body. πŸ‘ Here's what that looks like going wrong πŸ‘‡

      X MESSAGE sip:alice@atlanta.com SIP/2.0
      X Hi There!

Okay bestie, time for the legal bit, but make it cute πŸŽ€ Copyright (C) The Internet Society (2002). All Rights Reserved. So anyone can copy this document and share it with others. You can also make derivative works that comment on or explain it, or help people implement it, and publish and distribute those too, in whole or in part, with no restrictions of any kind πŸ¦‹. The one catch is that the above copyright notice and this paragraph have to stay on every copy and every derivative work.

BUT the document itself can't be modified in any way πŸ™…. You can't remove the copyright notice, and you can't remove the references to the Internet Society or other Internet organizations. The exceptions are when it's needed for developing Internet standards, in which case the copyright procedures in the Internet Standards process must be followed, or when it's being translated into languages other than English 🌈.

The limited permissions above are perpetual, and the Internet Society or its successors or assigns will never revoke them πŸ’œ.

This document and the info inside it is provided "AS IS", and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. The caps are doing a lot here, not gonna lie 😭

Acknowledgement 🌸

Funding for the RFC Editor function is currently provided by the Internet Society. So the Internet Society is covering the RFC Editor right now, which is honestly iconic πŸ‘‘πŸ«Ά

πŸ“¦ where this page comes from