DRINKS K. Cartwright
Internet-Draft TNS
Intended status: Standards Track October 31, 2011
Expires: May 3, 2012
SPPP Over SOAP and HTTP
draft-ietf-drinks-sppp-over-soap-06
Abstract
The Session Peering Provisioning Protocol (SPPP) is an XML protocol
that exists to enable the provisioning of session establishment data
into Session Data Registries or SIP Service Provider data stores.
Sending XML data structures over Simple Object Access Protocol (SOAP)
and HTTP(s) is a widely used, de-facto standard for messaging between
elements of provisioning systems. Therefore the combination of SOAP
and HTTP(s) as a transport for SPPP is a natural fit. The obvious
benefits include leveraging existing industry expertise, leveraging
existing standards, and a higher probability that existing
provisioning systems can be more easily integrated with this
protocol. This document describes the specification for transporting
SPPP XML structures over SOAP and HTTP(s).
Status of this Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 3, 2012.
Copyright Notice
Copyright (c) 2011 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
Cartwright Expires May 3, 2012 [Page 1]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
(http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 5
3. SOAP Features and Protocol Layering . . . . . . . . . . . . . 6
4. HTTP(s) Features and SPPP . . . . . . . . . . . . . . . . . . 9
5. Authentication and Session Management . . . . . . . . . . . . 10
6. Base Protocol Data Structures . . . . . . . . . . . . . . . . 11
6.1. Request and Response Structures . . . . . . . . . . . . . 11
6.1.1. Update Request and Response Structures . . . . . . . . 11
6.1.2. Query Request and Response Structures . . . . . . . . 14
6.2. Response Codes and Messages . . . . . . . . . . . . . . . 17
7. Protocol Operations . . . . . . . . . . . . . . . . . . . . . 20
7.1. Add Destination Group Operation . . . . . . . . . . . . . 20
7.2. Get Destination Groups Operation . . . . . . . . . . . . . 20
7.3. Add Public Identifier Operation . . . . . . . . . . . . . 21
7.4. Get Public Identifiers Operation . . . . . . . . . . . . . 22
7.5. Add Route Group Operation . . . . . . . . . . . . . . . . 23
7.6. Get Route Groups Operation . . . . . . . . . . . . . . . . 23
7.7. Add Route Record Operation . . . . . . . . . . . . . . . . 24
7.8. Get Route Records Operation . . . . . . . . . . . . . . . 25
7.9. Add Route Group Offer Operation . . . . . . . . . . . . . 25
7.10. Accept Route Group Offer Operation . . . . . . . . . . . . 26
7.11. Reject Route Group Offer Operation . . . . . . . . . . . . 27
7.12. Get Route Group Offers Operation . . . . . . . . . . . . . 28
7.13. Add Egress Route Operation . . . . . . . . . . . . . . . . 29
7.14. Get Egress Routes Operation . . . . . . . . . . . . . . . 30
7.15. Delete Operation . . . . . . . . . . . . . . . . . . . . . 31
8. SPPP SOAP WSDL Definition . . . . . . . . . . . . . . . . . . 33
9. SPPP SOAP Examples . . . . . . . . . . . . . . . . . . . . . . 44
10. Security Considerations . . . . . . . . . . . . . . . . . . . 46
10.1. Integrity, Privacy, and Authentication . . . . . . . . . . 46
10.2. Vulnerabilities . . . . . . . . . . . . . . . . . . . . . 46
10.3. Deployment Environment Specifics . . . . . . . . . . . . . 46
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47
12. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 48
13. References . . . . . . . . . . . . . . . . . . . . . . . . . . 49
13.1. Normative References . . . . . . . . . . . . . . . . . . . 49
13.2. Informative References . . . . . . . . . . . . . . . . . . 49
Cartwright Expires May 3, 2012 [Page 2]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 50
Cartwright Expires May 3, 2012 [Page 3]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
1. Introduction
SPPP, defined in [I-D.draft-ietf-drinks-spprov], is best supported by
a transport and messaging infrastructure that is connection oriented,
request-response oriented, easily secured, supports propagation
through firewalls in a standard fashion, and that is easily
integrated into back-office systems. This is due to the fact that
the client side of SPPP is likely to be integrated with
organizations' operational support systems that facilitate
transactional provisioning of user addresses and their associated
session establishment data. While the server side of SPPP is likely
to reside in a separate organization's network, resulting the SPPP
provisioning transactions traversing the Internet as they are
propagated from the SPPP client to the SPPP server. Given the
current state of industry practice and technologies, SOAP and HTTP(s)
are well suited for this type of environment. This document
describes the specification for transporting SPPP XML structures over
SOAP and HTTP(s).
The specification in this document for transporting SPPP XML
structures over SOAP and HTTP(s) is primarily comprised of five
subjects: (1) a description of any applicable SOAP features, (2) any
applicable HTTP features, (3) security considerations, and perhaps
most importantly, (5) the Web Services Description Language (WSDL)
definition for SPPP over SOAP.
Cartwright Expires May 3, 2012 [Page 4]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
2. Terminology
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
Cartwright Expires May 3, 2012 [Page 5]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
3. SOAP Features and Protocol Layering
The list of SOAP features that are explicitly used and required for
SPPP are limited. Most SOAP features are not necessary for SPPP.
SPPP primarily uses SOAP simply as a standard message envelope
technology. The SOAP message envelope is comprised of the SOAP
header and body. As described in the SOAP specifications, the SOAP
header can contain optional, application specific, information about
the message. The SOAP body contains the SPPP message itself, whose
structure is defined by the combination of one of the WSDL operations
defined in this document and the SPPP XML data structures defined in
the SPPP protocol document. SPPP does not rely on any data elements
in the SOAP header. All relevant data elements are defined in the
SPPP XML schema described in [I-D.draft-ietf-drinks-spprov] and the
SPPP WSDL specification described in this document.
WSDL is a widely standardized and adopted technology for defining the
top-level structures of the messages that are transported within the
body of a SOAP message. The WSDL definition for the SPPP SOAP
messages is defined later in this document, which imports by
reference the XML data types contained in the SPPP schema. The IANA
registry where the SPPP schema resides is described in The IETF XML
Registry [RFC3688].
There are multiple structural styles that SOAP WSDL allows. But the
best practice for this type of application is what is sometimes
referred to as the Document Literal Wrapped style of designing SOAP
WSDL. This style is generally regarded as an optimal approach that
enhances maintainability, comprehension, portability, and, to a
certain extent, performance. It is characterized by setting the
soapAction binding style as _document_, the soapAction encoding style
as _literal_, and then defining the SOAP messages to simply contain a
single data element that _wraps_ that is a data structure containing
all the required input or output data elements. The figure below
illustrates this high level technical structure as conceptual layers
3 through 6.
Cartwright Expires May 3, 2012 [Page 6]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
+-------------+
(1) | Transport |Example:
| Protocol | TCP, TLS, BEEP, etc.
+-------------+
|
V
+-------------+
(2) | Message |Example:
| Envelope | HTTP, SOAP, None, etc.
+-------------+
|
V
+--------------+
+------| SOAP |-----+
| (3) | Operation | |
Contains | +--------------+ | Contains
| Example: |
V submitUpdateRqst V
+--------------+ +-------------+
|SOAP Request | |SOAP Response|
Example:| Message | (4) | Message | Example:
spppUpdate | (Operation | | (Operation |spppUpdate
RequestMsg | Input) | | Output) | ResponseMsg
+--------------+ +-------------+
| |
Contains | | Contains
| |
V V
+---------------+ +---------------+
Example:| Wrapped | (5) | Wrapped | Example:
spppUpdate |Request Object | |Response Object| spppUpdate
Request +---------------+ +---------------+ Response
| |
Contains | | Contains
| |
V V
+----------+ +-----------+
Example: | SPPP | | SPPP |
AddRteGrp |XML Types | (6) | XML Types |
RqstType +----------+ +-----------+
Figure 1: Layering and Technical Structure of the SPPP SOAP Messages
The SOAP operations supported by SPPP are normatively defined later
in this document. Each SOAP operation defines a request/input
message and a response/output message. Each such request and
response message then contains a single object that wraps the SPPP
XML data types that comprise the inputs and the outputs,
Cartwright Expires May 3, 2012 [Page 7]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
respectively, of the SOAP operation.
SOAP faults are not used by the SPPP SOAP mapping. All SPPP success
and error responses are specified within the SPPP protocol
specification [I-D.draft-ietf-drinks-spprov]. However, if a SOAP
fault were to occur, perhaps due to failures in the SOAP message
handling layer of a SOAP library, the client application should
capture and handle the fault. Specifics on how to handle such SOAP
faults, if they should occur, will be specific to the chosen SOAP
implementation.
SOAP 1.2 [SOAPREF] or higher and WSDL 1.1 [WSDLREF] or higher SHOULD
be used.
SPPP is a request/reply protocol that allows a client application to
submit provisioning data and query requests to a server. The SPPP
data structures are designed to be protocol agnostic. Concerns
regarding encryption, non-repudiation, and authentication are beyond
the scope of this document. For more details, please refer to the
Transport Protocol Requirements section.
As illustrated in the previous diagram, SPPP can be viewed as a set
of layers that collectively define the structure of an SPPP request
and response. Layers 1 and 2 represent the transport, envelope, and
authentication technologies. This document defines layers 3, 4, and
5 below.
1. Layer 1: The transport protocol layer represents the
communication mechanism between the client and server. SPPP can
be layered over any transport protocol that provides a set of
basic requirements defined in the Transport Protocol Requirements
section. But this document specifies the required mechanism.
2. Layer 2: The message envelope layer is optional, but can provide
features that are above the transport technology layer but below
the application messaging layer. Technologies such as HTTP and
SOAP are examples of messaging envelope technologies. This
document specifies the required envelope technology.
3. Layers 3,4,5,6: The operation and message layers provides an
envelope-independent and transport-independent wrapper for the
SPPP data model objects that are being acted on (created,
modified, queried).
Cartwright Expires May 3, 2012 [Page 8]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
4. HTTP(s) Features and SPPP
SOAP is not tied to HTTP(s), however, for reasons described in the
introduction, HTTP(s) is a good choice as the transport mechanism for
the SPPP SOAP messages. HTTP 1.1 includes the "persistent
connection" feature, which allows multiple HTTP request/response
pairs to be transported across a single HTTP connection. This is an
important performance optimization feature, particularly when the
connections is an HTTPS connection where the relatively time
consuming SSL handshake has occurred. Persistent connections SHOULD
be used for the SPPP HTTP connections.
HTTP 1.1 [RFC2616] or higher SHOULD be used.
Cartwright Expires May 3, 2012 [Page 9]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
5. Authentication and Session Management
To achieve integrity and privacy, conforming SPPP SOAP Clients and
Servers MUST support SOAP over HTTP over TLS [RFC5246] as the secure
transport mechanism. This combination of HTTP and TLS is referred to
as HTTPS. And to accomplish authentication, conforming SOAP SPPP
Clients and Servers MUST use HTTP Digest Authentication as defined in
[RFC2617]. As a result, the communication session is established
through the initial HTTP connection setup, the digest authentication,
and the TLS handshake. When the HTTP connection is broken down, the
communication session ends.
Cartwright Expires May 3, 2012 [Page 10]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
6. Base Protocol Data Structures
SPPP uses a common model and a common set of data structures for most
of the supported operations. This section describes these common
operation data structures.
6.1. Request and Response Structures
An SPPP client interacts with an SPPP server by using one of the
supported transport mechanisms to send one or more requests to the
server and receive corresponding replies from the server. There are
two generalized types of operations that an SPPP client can submit to
an SPPP server, updates and queries. The following two sub-sections
describe the generalized data structures that are used for each of
these two types of operations.
6.1.1. Update Request and Response Structures
An SPPP update request is wrapped within the <spppUpdateRequest>
element while an SPPP update response is wrapped within an
<spppUpdateResponse> element. The following two sub-sections
describe these two elements.
6.1.1.1. Update Request
An SPPP update request object is contained within the generic
<spppUpdateRequest> element.
<element name="spppUpdateRequest">
<complexType>
<sequence>
<element name="clientTransId" type="spppb:TransIdType"
minOccurs="0"/>
<element name="minorVer" type="spppb:MinorVerType"
minOccurs="0"/>
<element name="rqst" type="spppb:BasicUpdateRqstType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<simpleType name="TransIdType">
<restriction base="string"/>
</simpleType>
Cartwright Expires May 3, 2012 [Page 11]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<simpleType name="MinorVerType">
<restriction base="unsignedLong"/>
</simpleType>
The data elements within the <spppUpdateRequest> element are
described as follows:
o clientTransId: Zero or one client-generated transaction ID that,
within the context of the SPPP client, identifies this request.
This value can be used at the discretion of the SPPP client to
track, log or correlate requests and their responses. SPPP
server MUST echo back this value to the client in the
corresponding response to the incoming request. SPPP server
will not check this value for uniqueness.
o minorVer: Zero or one minor version identifier, indicating the
minor version of the SPPP API that the client is attempting to
use. This is used in conjunction with the major version
identifier in the XML namespace to identify the version of SPPP
that the client is using. If the element is not present, the
server assumes that the client is using the latest minor version
supported by the SPPP server for the given major version. The
versions supported by a given SPPP server can be retrieved by
the client using the SPPP server menu operation described later
in the document.
o rqst: One or more BasicUpdateRqstType objects. These are the
actions that the client is requesting the SPPP server perform.
They are processed by the SPPP server in the order in which they
are included in the request. And with respect to handling error
conditions, it is a matter of policy whether the objects are
processed in a "stop and rollback" fashion or in a "stop and
commit" fashion. In the "stop and rollback" scenario, the SPPP
server would stop processing BasicUpdateRqstType object
instances in the request at the first error and roll back any
BasicUpdateRqstType object instances that had already been
processed for that update request. In the "stop and commit"
scenario the SPPP server would stop processing
BasicUpdateRqstType object instances in the request at the first
error but commit any BasicUpdateRqstType object instances that
had already been processed for that update request.
All update request objects extend the base type BasicUpdateRqstType.
This base type is defined as follows:
Cartwright Expires May 3, 2012 [Page 12]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<complexType name="BasicUpdateRqstType" abstract="true">
<sequence>
<element name="ext" type="spppb:ExtAnyType" minOccurs="0"/>
</sequence>
</complexType>
The BasicUpdateRqstType object primarily acts as an abstract base
type, and its only data element is described as follows:
o ext: This is the standard extension element for this object.
Refer to the Extensibility section of this document for more
details.
6.1.1.2. Update Response
An SPPP update response object is contained within the generic
<spppUpdateResponse> element.
<element name="spppUpdateResponse">
<complexType>
<sequence>
<element name="overallResult" type="spppb:ResultCodeType"/>
<element name="rqstObjResult" type="spppb:RqstObjResultCodeType"
minOccurs="0" maxOccurs="unbounded"/>
<element name="clientTransId" type="spppb:TransIdType"
minOccurs="0"/>
<element name="serverTransId" type="spppb:TransIdType"/>
</sequence>
</complexType>
</element>
<complexType name="ResultCodeType">
<sequence>
<element name="code" type="int"/>
<element name="msg" type="string"/>
</sequence>
</complexType>
<complexType name="RqstObjResultCodeType">
<complexContent>
<extension base="spppb:ResultCodeType">
<sequence>
<element name="rqstObj" type="spppb:BasicUpdateRqstType"/>
</sequence>
</extension>
Cartwright Expires May 3, 2012 [Page 13]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
</complexContent>
</complexType>
An <spppUpdateResponse> contains the elements necessary for the SPPP
client to precisely determine the overall result of the request, and
if an error occurred, it provides information about the specific
object, data element, or condition caused the error.
The data elements within the SPPP update response are described as
follows:
o clientTransId: Zero or one client transaction ID. This value is
simply an echo of the client transaction ID that SPPP client
passed into the SPPP update request. When included in the
request, the SPPP server MUST return it in the corresponding
response message.
o serverTransId: Exactly one server transaction ID that identifies
this request for tracking purposes. This value MUST be unique
for a given SPPP server.
o overallResult: Exactly one response code and message pair that
explicitly identifies the result of the request. See the
Response Code section for further details.
o rqstObjResult: An optional response code, response message, and
BasicRqstObject triplet. This element will be present only if
an object level error has occurred. It indicates the error
condition and the exact request object that contributed to the
error. The response code will reflect the exact error. See the
Response Code section for further details.
o ext: This is the standard extension element for this object.
Refer to the Extensibility section for more details.
6.1.2. Query Request and Response Structures
At times, on behalf of the registrant, the registrar may need to have
access to SPPP objects that were previously provisioned in the
registry. A few examples include logging, auditing, and pre-
provisioning dependency checking. This query mechanism is limited to
aid provisioning scenarios and should not be confused with query
protocols provided as part of the resolution system (e.g. ENUM and
SIP).
An SPPP query request is wrapped within the <spppQueryRequest>
Cartwright Expires May 3, 2012 [Page 14]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
element while an SPPP query response is wrapped within an
<spppQueryResponse> element. The following two sub-sections describe
these two element structures.
6.1.2.1. Query Request
An SPPP query request object is contained within the generic
<spppQueryRequest> element.
<element name="spppQueryRequest">
<complexType>
<sequence>
<element name="minorVer" type="spppb:MinorVerType"
minOccurs="0"/>
<element name="rqst" type="spppb:BasicQueryRqstType"/>
</sequence>
</complexType>
</element>
The data elements within the <spppQueryRequest> element are described
as follows:
o minorVer: Zero or one minor version identifier, indicating the
minor version of the SPPP API that the client is attempting to
use. This is used in conjunction with the major version
identifier in the XML namespace to identify the version of SPPP
that the client is using. If the element is not present, the
server assumes that the client is using the latest minor version
supported by the SPPP server for the given major version. The
versions supported by a given SPPP server can be retrieved by
the client using the SPPP server menu operation described later
in the document.
o rqst: One BasicQueryRqstType objects. This is the query that
the client is requesting the SPPP server perform.
All query request objects extend the base type BasicQueryRqstType.
This base type is defined as follows:
<complexType name="BasicQueryRqstType" abstract="true">
<sequence>
<element name="ext" type="spppb:ExtAnyType" minOccurs="0"/>
</sequence>
Cartwright Expires May 3, 2012 [Page 15]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
</complexType>
The BasicQueryRqstType object primarily acts as an abstract base
type, and its only data element is described as follows:
o ext: This is the standard extension element for this object.
Refer to the Extensibility section of this document for more
details.
6.1.2.2. Query Response
An SPPP query response object is contained within the generic
<spppQueryResponse> element.
<element name="spppQueryResponse">
<complexType>
<sequence>
<element name="overallResult" type="spppb:ResultCodeType"/>
<element name="resultSet" type="spppb:BasicObjType"
minOccurs="0" maxOccurs=" unbounded"/>
</sequence>
</complexType>
</element>
An <spppQueryResponse> contains the elements necessary for the SPPP
client to precisely determine the overall result of the query, and if
an error occurred, exactly what condition caused the error.
The data elements within the SPPP query response are described as
follows:
o overallResult: Exactly one response code and message pair that
explicitly identifies the result of the request. See the
Response Code section for further details.
o resultSet: The set of zero or more objects that matched the
query criteria. If no objects matched the query criteria then
this result set MUST be empty and the overallResult value MUST
indicate success (if no matches are found for the query
criteria, the response is considered a success).
Cartwright Expires May 3, 2012 [Page 16]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
6.2. Response Codes and Messages
This section contains the listing of response codes and their
corresponding human-readable text.
The response code numbering scheme generally adheres to the theory
formalized in section 4.2.1 of [RFC5321]:
o The first digit of the response code can only be 1 or 2: 1 = a
positive result, 2 = a negative result.
o The second digit of the response code indicates the category: 0
= Protocol Syntax, 1 = Implementation Specific Business Rule, 2
= Security, 3 = Server System.
o The third and fourth digits of the response code indicate the
individual message event within the category defines by the
first two digits.
The response codes are also categorized as to whether they are
overall response codes that may only be returned in the
"overallResult" data element in SPPP responses, of object level
response codes that may only be returned in the "rqstObjResult"
element of the SPPP responses.
Cartwright Expires May 3, 2012 [Page 17]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
+--------+--------------------------+-------------------------------+
| Result | Result Message | Overall or Object Level |
| Code | | |
+--------+--------------------------+-------------------------------+
| 1000 | Request Succeeded. | Overall Response Code |
| | | |
| 2001 | Request syntax invalid. | Overall Response Code |
| | | |
| 2002 | Request too large. | Overall Response Code |
| | | |
| 2003 | Version not supported. | Overall Response Code |
| | | |
| 2103 | Command invalid. | Overall Response Code |
| | | |
| 2301 | System temporarily | Overall Response Code |
| | unavailable. | |
| | | |
| 2302 | Unexpected internal | Overall Response Code |
| | system or server error. | |
| | | |
| 2104 | Attribute value invalid. | Object Level Response Code |
| | | |
| | AttrName:[AttributeName] | |
| | AttrVal:[AttributeValue] | |
| | | |
| 2105 | Object does not exist. | Object Level Response Code |
| | AttrName:[AttributeName] | |
| | AttrVal:[AttributeValue] | |
| | | |
| 2106 | Object status or | Object Level Response Code |
| | ownership does not allow | |
| | for operation. | |
| | AttrName:[AttributeName] | |
| | AttrVal:[AttributeValue] | |
+--------+--------------------------+-------------------------------+
Table 1: Response Codes Numbering Scheme and Messages
Each of the object level response messages are "parameterized" with
the following parameters: "AttributeName" and "AttributeValue".
The use of these parameters MUST adhere to the following rules:
o All parameters within a response message are mandatory and MUST
be present.
o Any value provided for the "AttributeName" parameter MUST be an
exact XSD element name of the protocol data element that the
Cartwright Expires May 3, 2012 [Page 18]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
response message is referring to. For example, valid values for
"attribute name" are "dgName", "rgName", "rteRec", etc.
o The value for "AttributeValue" MUST be the value of the data
element to which the preceding "AttributeName" refers.
o Result code 2104 SHOULD be used whenever an element value does
not adhere to data validation rules.
o Result codes 2104 and 2105 MUST NOT be used interchangeably.
Response code 2105 SHOULD be returned by an update operation
when the data element(s) used to uniquely identify a pre-
existing object do not exist. If the data elements used to
uniquely identify an object are malformed, then response code
2104 SHOULD be returned.
Cartwright Expires May 3, 2012 [Page 19]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
7. Protocol Operations
This section provides a description of the specification of each
required operation (verb) for each SPPP data model object (the noun).
The specification of the data structures for the data model objects
is contianed in the protocol specification.
7.1. Add Destination Group Operation
The AddDestGrpRqstType operation creates or overwrites a Destination
Group object. If a Destination Group with the given name and
registrant ID (which together comprise the unique key for a
Destination Group) does not exist, then the server MUST create the
Destination Group. If a Destination Group with the given name and
registrant ID does exist, then the server MUST replace the current
properties of the Destination Group with the properties passed into
the AddDestGrpsRqstType operation. The XSD declarations of the
operation request object are as follows:
<complexType name="AddDestGrpRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="destGrp" type="spppb:DestGrpType"/>
</sequence>
</extension>
</complexContent>
</complexType>
The element passed into the spppUpdateRequest element for this
operation is an element of type AddDestGrpRqsttype, which extends
BasicUpdateRqstType and contains a DestGrpType object.
As with the responses to all update operations, the result of the
AddDestGrpRqstType operation is contained in the generic
spppUpdateResponse data structure described in an earlier sections of
this document. For a detailed description of the spppUpdateResponse
data structure refer to that section of the document.
7.2. Get Destination Groups Operation
The getDestGrpsRqst operation allows an SPPP client to get the
properties of Destination Group objects that a registrar is
authorized to view on behalf of the registrant. The server will
attempt to find a Destination Group object that has the registrant ID
Cartwright Expires May 3, 2012 [Page 20]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
and destination group name pair contained in each ObjKeyType object
instance. If there are no matching Destination Groups found then an
empty result set will be returned.
The element passed into the spppQueryRequest element for this
operation is an instance of type GetDestGrpsRqstType, which extends
BasicQueryRqstType and contains zero or more ObjKeyType objects. Any
limitation on the maximum number of objects that may be passed into
or returned by this operation is a policy decision and not limited by
the protocol. The XSD declaration of the operation is as follows:
<complexType name="GetDestGrpsRqstType">
<complexContent>
<extension base="spppb:BasicQueryRqstType">
<sequence>
<element name="objKey" type="spppb:ObjKeyType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
As described in an earlier section of this document, the result of
any spppQueryRequest operation is an spppQueryResponse element that
contains the overall response code and the query result set, if any.
Refer to that section of the document for a detailed description of
the spppQueryResponse element.
7.3. Add Public Identifier Operation
The AddPubIdRqstType operation creates or overwrites a Public
Identifier object of any of the concrete types specified in the
protocol data model specification. If a Public Identifier with the
given identity (refer to the data model specification for the
definition of how Public Identifiers are uniquely identified) does
not exist, then the server MUST create the Public Identifier. If a
Public Identifier with the given identity does exist, then the server
MUST replace the current properties of that Public Identifier with
the properties passed into the AddPubIdRqstType operation. The XSD
declarations of the operation request object are as follows:
Cartwright Expires May 3, 2012 [Page 21]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<complexType name="AddPubIdRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="pi" type="spppb:PubIdType"/>
</sequence>
</extension>
</complexContent>
</complexType>
7.4. Get Public Identifiers Operation
The GetPubIdsRqstType operation allows an SPPP client to get the
properties of Public Identifier objects that a registrar is
authorized to view on behalf of the registrant. The server will
attempt to find a Public Identifier object that has the properties of
the Public Identifier object passed into this operation. If there
are no matching Public Identifiers found then an empty result set
will be returned.
The element passed into the spppQueryRequest element for this
operation is an instance of type GetPubIdsRqstType, which extends
BasicQueryRqstType and contains one or more PubIDType objects. Any
limitation on the maximum number of objects that may be passed into
or returned by this operation is a policy decision and not limited by
the protocol. The XSD declaration of the operation is as follows:
<complexType name="GetPubIdsRqstType">
<complexContent>
<extension base="spppb:BasicQueryRqstType">
<sequence>
<element name="pi" type="spppb:PubIdType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
As described earlier in the document, the result of any
spppQueryRequest operation is a spppQueryResponse that contains the
response code and the query result set, if any.
Cartwright Expires May 3, 2012 [Page 22]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
7.5. Add Route Group Operation
The AddRteGrpRqstType operation creates or overwrites a Route Group
object. If a Route Group with the given name and registrant ID
(which together comprise the unique key or a Route Group) does not
exist, then the server MUST create the Route Group. If a Route Group
with the given name and registrant ID does exist, then the server
MUST replace the current properties of the Route Group with the
properties passed into the AddRteGrpRqstType operation. The XSD
declarations of the AddRteGrpRqstType operation request object are as
follows:
<complexType name="AddRteGrpRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="rteGrp" type="spppb:RteGrpType"/>
</sequence>
</extension>
</complexContent>
</complexType>
The element passed into the spppUpdateRequest element for this
operation is an instance of AddRteGrpRqstType, which extends
BasicUpdateRqstType and contains one RteGrpType object.
7.6. Get Route Groups Operation
The getRteGrpsRqst operation allows an SPPP client to get the
properties of Route Group objects that the registrar is authorized to
view on behalf of the registrant. The server will attempt to find a
Route Group object that has the registrant ID and route group name
pair contained in each ObjKeyType object instance passed into this
operation. If there are no matching Route Groups found then an empty
result set will be returned.
The element passed into the spppQueryRequest element for this
operation is an instance of type GetRteGrpsRqstType, which extends
BasicUpdateRqstType and contains zero or more ObjKeyType objects.
Any limitation on the maximum number of objects that may be passed
into or returned by this operation is a policy decision and not
limited by the protocol. The XSD declaration of the operation is as
follows:
Cartwright Expires May 3, 2012 [Page 23]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<complexType name="GetRteGrpsRqstType">
<complexContent>
<extension base="spppb:BasicQueryRqstType">
<sequence>
<element name="objKey" type="spppb:ObjKeyType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
As described in an earlier section of this document, the result of
any spppQueryRequest operation is an spppQueryResponse element that
contains the overall response code and the query result set, if any.
Refer to that section of the document for a detailed description of
the spppQueryResponse element.
7.7. Add Route Record Operation
The AddRteRecRqstType operation creates or overwrites a Route Record
object. If a Route Record with the given name and registrant ID
(which together comprise the unique key or a Route Record) does not
exist, then the server MUST create the Route Record. If a Route
Record with the given name and registrant ID does exist, then the
server MUST replace the current properties of the Route Record with
the properties passed into the AddRteRecRqstType operation. The XSD
declarations of the AddRteRecRqstType operation request object are as
follows:
<complexType name="AddRteRecRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="rteRec" type="spppb:RteRecType"/>
</sequence>
</extension>
</complexContent>
</complexType>
The element passed into the spppUpdateRequest element for this
operation is an instance of AddRteRecRqstType, which extends
BasicUpdateRqstType and contains one RteRecType object.
As with the responses to all update operations, the result of the
Cartwright Expires May 3, 2012 [Page 24]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
AddRteRecRqstType operation is contained in the generic
spppUpdateResponse data structure described in an earlier sections of
this document. For a detailed description of the spppUpdateResponse
data structure refer to that section of the document.
7.8. Get Route Records Operation
The getRteRecsRqst operation allows an SPPP client to get the
properties of Route Record objects that a registrar is authorized to
view on behalf of the registrant. The server will attempt to find a
Route Record object that has the registrant ID and route record name
pair contained in each ObjKeyType object instance. If there are no
matching Route Record found then an empty result set will be
returned.
The element passed into the spppQueryRequest element for this
operation is an instance of type GetRteRecsRqstType, which extends
BasicUpdateRqstType and contains zero or more ObjKeyType objects.
Any limitation on the maximum number of objects that may be passed
into or returned by this operation is a policy decision and not
limited by the protocol. The XSD declaration of the operation is as
follows:
<complexType name="GetRteRecsRqstType">
<complexContent>
<extension base="spppb:BasicQueryRqstType">
<sequence>
<element name="objKey" type="spppb:ObjKeyType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
As described in an earlier section of this document, the result of
any spppQueryRequest operation is an spppQueryResponse element that
contains the overall response code and the query result set, if any.
Refer to that section of the document for a detailed description of
the spppQueryResponse element.
7.9. Add Route Group Offer Operation
The AddRteGrpOffersRqstType operation creates or overwrites one or
more Route Group Offer objects. If a Route Group Offer for the given
Route Group object key and the <offeredTo> Org ID does not exist,
Cartwright Expires May 3, 2012 [Page 25]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
then the server creates the Route Group Offer object. If a such a
Route Group Offer does exist, then the server replaces the current
object with the new object. The XSD declarations of the operation
request object are as follows:
<complexType name="AddRteGrpOfferRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="rteGrpOffer" type="spppb:RteGrpOfferType"/>
</sequence>
</extension>
</complexContent>
</complexType>
The element passed into the spppUpdateRequest element for this
operation is an instance of AddRteGrpOfferRqstType, which extends
BasicUpdateRqstType and contains a RteGrpOfferType object.
As with the responses to all update operations, the result of the
AddRteGrpOfferRqstType operation is contained in the generic
spppUpdateResponse data structure described in an earlier sections of
this document. For a detailed description of the spppUpdateResponse
data structure refer to that section of the document.
7.10. Accept Route Group Offer Operation
The AcceptRteGrpOffersRqstType operation is called by, or on behalf
of, the data recipient to accept a Route Group Offer that is pending
in the "offered" status for the data recipient's organization ID. If
a Route Group Offer for the given Route Group Offer key (route name,
route registrant ID, data recipient's organization ID) exists, then
the server moves the Route Group Offer to the "accepted" status and
adds that data recipient's organization ID into the list of
peerOrgIds for that Route Group. If a such a Route Group Offer does
not exist, then the server returns the appropriate error code, 2105.
The XSD declarations for the operation request object are as follows:
Cartwright Expires May 3, 2012 [Page 26]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<complexType name="AcceptRteGrpOfferRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="rteGrpOfferKey" type="spppb:RteGrpOfferKeyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
The element passed into the spppUpdateRequest element for this
operation is an instance of AcceptRteGrpOffersRqstType, which extends
BasicUpdateRqstType and contains a RteGrpOfferKeyType object.
As with the responses to all update operations, the result of the
AcceptRteGrpOfferRqstType operation is contained in the generic
spppUpdateResponse data structure described in an earlier sections of
this document. For a detailed description of the spppUpdateResponse
data structure refer to that section of the document.
7.11. Reject Route Group Offer Operation
The RejectRteGrpOffersRqstType operation is used for these purposes
and is called by, or on behalf of, the data recipient to accept a
Route Group Offer that is pending in the "offered" status or is in
the "accepted" status for the data recipient's organization ID. If a
Route Group Offer for the given Route Group Offer key (route name,
route registrant ID, data recipient's organization ID) exists in
either the offered or accepted status, then the server deletes that
Route Group Offer object, and, if appropriate, removes the data
recipient's organization ID from the list of peeringOrg IDs for that
Route Group. If the Route Group Offer does not exist, then the
server returns the appropriate error code, 2105. The XSD
declarations for the operation request object are as follows:
<complexType name="RejectRteGrpOfferRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="rteGrpOfferKey" type="spppb:RteGrpOfferKeyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
Cartwright Expires May 3, 2012 [Page 27]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
The element passed into the spppUpdateRequest element for this
operation is an instance of RejectRteGrpOffersRqstType, which extends
BasicUpdateRqstType and contains a RteGrpOfferKeyType object.
As with the responses to all update operations, the result of the
RejectRteGrpOfferRqstType operation is contained in the generic
spppUpdateResponse data structure described in an earlier sections of
this document. For a detailed description of the spppUpdateResponse
data structure refer to that section of the document.
7.12. Get Route Group Offers Operation
The getRteGrpOffersRqst operation allows an SPPP client to get the
properties of zero or more Route Group Offer objects that registrar
is authorized to view on behalf of the registrant. The server will
attempt to find Route Group Offer objects that have all the
properties specified in the criteria passed into the operation. If
there are no matching Route Group Offers found then an empty result
set will be returned.
The element passed into the spppQueryRequest element for this
operation is an instance of GetRteGrpOffersRqstType, which extends
BasicQueryRqstType and contains the criteria that the returned Route
Group Offer objects must match. Any limitation on the maximum number
of objects that may be returned by this operation is a policy
decision and not limited by the protocol. The XSD declaration of the
operation is as follows:
<complexType name="GetRteGrpOffersRqstType">
<complexContent>
<extension base="spppb:BasicQueryRqstType">
<sequence>
<element name="offeredBy" type="spppb:OrgIdType"
minOccurs="0" maxOccurs="unbounded"/>
<element name="offeredTo" type="spppb:OrgIdType"
minOccurs="0" maxOccurs="unbounded"/>
<element name="status" type="spppb:RteGrpOfferStatusType"
minOccurs="0"/>
<element name="rteGrpOfferKey"
type="spppb:RteGrpOfferKeyType" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
Cartwright Expires May 3, 2012 [Page 28]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
The GetRteGrpOffersRqstType object is composed of the following
elements:
o offeredBy: Zero or more organization IDs. Only offers that are
offered to the organization IDs in this list should be included
in the result set. The result set is also subject to other
query criteria in the request.
o offeredTo: Zero or more organization IDs. Only offers that are
offered by the organization IDs in this list should be included
in the result set. The result set is also subject to other
query criteria in the request.
o status: The status of the offer, offered or accepted. Only
offers in the specified status should be included in the result
set. If this element is not present then the status of the
offer should not be considered in the query. The result set is
also subject to other query criteria in the request.
o rteGrpOfferKey: Zero or more Route Group Offer Keys. Only
offers having one of these keys should be included in the result
set. The result set is also subject to other query criteria in
the request.
As described in an earlier section of this document, the result of
any spppQueryRequest operation is an spppQueryResponse element that
contains the overall response code and the query result set, if any.
Refer to that section of the document for a detailed description of
the spppQueryResponse element.
7.13. Add Egress Route Operation
The AddEgrRteRqstType operation creates or overwrites an Egress Route
object. If an Egress Route with the given name and registrant ID
(which together comprise the unique key or an Egress Route) does not
exist, then the server MUST create the Route Record. If a Route
Record with the given name and registrant ID does exist, then the
server MUST replace the current properties of the Route Record with
the properties passed into the AddEgrRteRqstType operation. The XSD
declarations of the AddEgrRteRqstType operation request object are as
follows:
Cartwright Expires May 3, 2012 [Page 29]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<complexType name="AddEgrRteRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="egrRte" type="spppb:EgrRteType"/>
</sequence>
</extension>
</complexContent>
</complexType>
The element passed into the spppUpdateRequest element for this
operation is an instance of AddEgrRteRqstType, which extends
BasicUpdateRqstType and contains one EgrRteType object.
As with the responses to all update operations, the result of the
AddEgrRteRqstType operation is contained in the generic
spppUpdateResponse data structure described in an earlier sections of
this document. For a detailed description of the spppUpdateResponse
data structure refer to that section of the document.
7.14. Get Egress Routes Operation
The GetEgrRtesRqstType operation allows an SPPP client to get the
properties of Egress Route objects that a registrar is authorized to
view on behalf of the registrant. The server will attempt to find a
Egress Route object that has the registrant ID and Egress Route name
pair contained in each ObjKeyType object instance. If there are no
matching Egress Routes found then an empty result set will be
returned.
The element passed into the spppQueryRequest element for this
operation is an instance of type GetEgrRtesRqstType, which extends
BasicUpdateRqstType and contains zero or more ObjKeyType objects.
Any limitation on the maximum number of objects that may be passed
into or returned by this operation is a policy decision and not
limited by the protocol. The XSD declaration of the operation is as
follows:
Cartwright Expires May 3, 2012 [Page 30]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<complexType name="GetEgrRtesRqstType">
<complexContent>
<extension base="spppb:BasicQueryRqstType">
<sequence>
<element name="objKey" type="spppb:ObjKeyType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
As described in an earlier section of this document, the result of
any spppQueryRequest operation is an spppQueryResponse element that
contains the overall response code and the query result set, if any.
Refer to that section of the document for a detailed description of
the spppQueryResponse element.
7.15. Delete Operation
In order to remove an object from the registry, an authorized entity
can send the <spppUpdateRequest> to the registry with a corresponding
delete BasicUpdateRqstType object. Each 'Add' operation in SPPP has
a corresponding 'Del' operation, which is used to delete the
respective object type from the registry. If the entity that issued
the command is not authorized to perform this operation an
appropriate error code will be returned in the <spppUpdateRespnonse>
message.
As an example, DelPubIdRqstType is used to delete Public Identifiers
The DelPubIdsRqstType object definition is shown below:
<complexType name="DelPubIdRqstType">
<complexContent>
<extension base="spppb:BasicUpdateRqstType">
<sequence>
<element name="pi" type="spppb:PubIdType"/>
</sequence>
</extension>
</complexContent>
</complexType>
When an object is deleted, any references to that object must of
course also be removed as the SPPP server implementation fulfills the
deletion request. Furthermore, the deletion of a composite object
Cartwright Expires May 3, 2012 [Page 31]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
must also result in the deletion of the objects it contains. As a
result, the following rules apply to the deletion of SPPP object
types:
o Destination Groups: When a destination group is deleted all
public identifiers within that destination group must also be
automatically deleted by the SPPP implementation as part of
fulfilling the deletion request. And any references between
that destination group and any route group must be automatically
removed by the SPPP implementation as part of fulfilling the
deletion request.
o Route Groups: When a route group is deleted any references
between that route group and any destination group must be
automatically removed by the SPPP implementation as part of
fulfilling the deletion request. Similarly any references
between that route group and any route records must be removed
by the SPPP implementation as part of fulfilling the deletion
request. Furthermore, route group offers relating that route
group must also be deleted as part of fulfilling the deletion
request.
o Route Records: When a route record is deleted any references
between that route record and any route group must be removed by
the SPPP implementation as part of fulfilling the deletion
request.
o Public Identifiers: When a public identifier is deleted any
references between that public identifier and its containing
destination group must be removed by the SPPP implementation as
part of fulfilling the deletion request. And any route records
contained directly within that Public Identifier must be deleted
by the SPPP implementation as part of fulfilling the deletion
request.
Cartwright Expires May 3, 2012 [Page 32]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
8. SPPP SOAP WSDL Definition
The SPPP WSDL and data types are defined below. The WSDL design
approach is commonly referred to as _Generic WSDL_. It is generic in
the sense that there is not a specific WSDL operation defined for
each object type that is supported by the SPPP protocol. There is a
single WSDL update operation called submitUpdateRqst, and a single
WSDL query operation called submitQueryRqst. The submitUpdateRqst
operation takes as input an spppUpdateRequestMsg object and returns
as output an spppUpdateResponseMsg object. These objects _wrap_ the
spppUpdateRequest and spppUpdateResponse objects respectively. And
finally, the spppSOAPBinding in the WSDL defines the binding style as
_document_ and the encoding as _literal_. It is this combination of
_wrapped_ input and output data structures, _document_ binding style,
and _literal_ encoding that characterize the Document Literal Wrapped
style of WSDL specifications.
Note: The following WSDL has been formatted (e.g., tabs, spaces) to
meet I-D requirements.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:spppb="urn:ietf:params:xml:ns:sppp:base:1"
xmlns:sppps="urn:ietf:params:xml:ns:sppp:soap:1"
targetNamespace="urn:ietf:params:xml:ns:sppp:soap:1">
<wsdl:types>
<xsd:schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:sppps="urn:ietf:params:xml:ns:sppp:soap:1"
targetNamespace="urn:ietf:params:xml:ns:sppp:soap:1">
<annotation>
<documentation>
---- Import base schema ----
</documentation>
</annotation>
<import namespace="urn:ietf:params:xml:ns:sppp:base:1"
schemaLocation="spppbase.xsd"/>
<annotation>
<documentation>
---- Key type(s) extended from base schema ----
</documentation>
Cartwright Expires May 3, 2012 [Page 33]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
</annotation>
<complexType name="ObjKeyType">
<complexContent>
<extension base="spppb:ObjKeyType">
<sequence>
<element name="rant" type="spppb:OrgIdType"/>
<element name="name" type="spppb:ObjNameType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="RteGrpOfferKeyType">
<complexContent>
<extension base="spppb:RteGrpOfferKeyType">
<sequence>
<element name="rteGrpKey"
type="sppps:ObjKeyType"/>
<element name="offeredTo"
type="spppb:OrgIdType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<annotation>
<documentation>
---- Base Request Type Definitions ----
</documentation>
</annotation>
<complexType name="BasicUpdateRqstType"
abstract="true">
<sequence>
<element name="ext" type="spppb:ExtAnyType"
minOccurs="0"/>
</sequence>
</complexType>
<complexType name="BasicQueryRqstType" abstract="true">
<sequence>
<element name="ext" type="spppb:ExtAnyType"
minOccurs="0"/>
</sequence>
</complexType>
<annotation>
<documentation>
-- Request Type definition for various SPPP Objects. --
</documentation>
</annotation>
<complexType name="AddRteGrpRqstType">
<complexContent>
Cartwright Expires May 3, 2012 [Page 34]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="rteGrp" type="spppb:RteGrpType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="DelRteGrpRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="rteGrpKey"
type="sppps:ObjKeyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="GetRteGrpsRqstType">
<complexContent>
<extension base="sppps:BasicQueryRqstType">
<sequence>
<element name="rteGrpKey"
type="sppps:ObjKeyType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="AddRteRecRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="rteRec"
type="spppb:RteRecType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="DelRteRecRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="rteRecKey"
type="sppps:ObjKeyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
Cartwright Expires May 3, 2012 [Page 35]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<complexType name="GetRteRecsRqstType">
<complexContent>
<extension base="sppps:BasicQueryRqstType">
<sequence>
<element name="rteRecKey"
type="sppps:ObjKeyType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="AddDestGrpRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="destGrp"
type="spppb:DestGrpType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="DelDestGrpRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="destGrpKey"
type="sppps:ObjKeyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="GetDestGrpsRqstType">
<complexContent>
<extension base="sppps:BasicQueryRqstType">
<sequence>
<element name="destGrpKey"
type="sppps:ObjKeyType"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="AddPubIdRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="pi" type="spppb:PubIdType"/>
</sequence>
Cartwright Expires May 3, 2012 [Page 36]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
</extension>
</complexContent>
</complexType>
<complexType name="DelPubIdRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="pi" type="spppb:PubIdType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="GetPubIdsRqstType">
<complexContent>
<extension base="sppps:BasicQueryRqstType">
<sequence>
<element name="pi" type="spppb:PubIdType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="AddRteGrpOfferRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="rteGrpOffer"
type="spppb:RteGrpOfferType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="DelRteGrpOfferRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="rteGrpOfferKey"
type="sppps:RteGrpOfferKeyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="AcceptRteGrpOfferRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="rteGrpOfferKey"
type="sppps:RteGrpOfferKeyType"/>
Cartwright Expires May 3, 2012 [Page 37]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="RejectRteGrpOfferRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="rteGrpOfferKey"
type="sppps:RteGrpOfferKeyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="GetRteGrpOffersRqstType">
<complexContent>
<extension base="sppps:BasicQueryRqstType">
<sequence>
<element name="offeredBy"
type="spppb:OrgIdType"
minOccurs="0" maxOccurs="unbounded"/>
<element name="offeredTo"
type="spppb:OrgIdType"
minOccurs="0" maxOccurs="unbounded"/>
<element name="status"
type="spppb:RteGrpOfferStatusType"
minOccurs="0"/>
<element name="rteGrpOfferKey"
type="sppps:RteGrpOfferKeyType"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="AddEgrRteRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
<element name="egrRte"
type="spppb:EgrRteType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="DelEgrRteRqstType">
<complexContent>
<extension base="sppps:BasicUpdateRqstType">
<sequence>
Cartwright Expires May 3, 2012 [Page 38]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<element name="egrRteKey"
type="sppps:ObjKeyType"/>
</sequence>
</extension>
</complexContent>
</complexType>
<complexType name="GetEgrRtesRqstType">
<complexContent>
<extension base="sppps:BasicQueryRqstType">
<sequence>
<element name="egrRteKey"
type="sppps:ObjKeyType"
maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
<annotation>
<documentation>
--- Generic Request and Response Definitions ----
</documentation>
</annotation>
<element name="spppUpdateRequest">
<complexType>
<sequence>
<element name="clientTransId"
type="spppb:TransIdType" minOccurs="0"/>
<element name="minorVer"
type="spppb:MinorVerType"
minOccurs="0"/>
<element name="rqst"
type="sppps:BasicUpdateRqstType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<element name="spppUpdateResponse">
<complexType>
<sequence>
<element name="clientTransId"
type="spppb:TransIdType" minOccurs="0"/>
<element name="serverTransId"
type="spppb:TransIdType"/>
<element name="overallResult"
type="sppps:ResultCodeType"/>
<element name="rqstObjResult"
type="sppps:RqstObjResultCodeType" minOccurs="0"
maxOccurs="unbounded"/>
Cartwright Expires May 3, 2012 [Page 39]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
</sequence>
</complexType>
</element>
<element name="spppQueryRequest">
<complexType>
<sequence>
<element name="minorVer"
type="spppb:MinorVerType"
minOccurs="0"/>
<element name="rqst"
type="sppps:BasicQueryRqstType"/>
</sequence>
</complexType>
</element>
<element name="spppQueryResponse">
<complexType>
<sequence>
<element name="overallResult"
type="sppps:ResultCodeType"/>
<element name="resultSet"
type="spppb:BasicObjType"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<element name="spppServerStatusRequest">
<complexType>
<sequence>
<element name="minorVer"
type="spppb:MinorVerType"
minOccurs="0"/>
</sequence>
</complexType>
</element>
<element name="spppServerStatusResponse">
<complexType>
<sequence>
<element name="overallResult"
type="sppps:ResultCodeType"/>
<element name="svcMenu"
type="spppb:SvcMenuType"/>
</sequence>
</complexType>
</element>
<annotation>
<documentation>
--- Operation Result Type Definitions ----
</documentation>
Cartwright Expires May 3, 2012 [Page 40]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
</annotation>
<complexType name="ResultCodeType">
<sequence>
<element name="code" type="int"/>
<element name="msg" type="token"/>
</sequence>
</complexType>
<complexType name="RqstObjResultCodeType">
<complexContent>
<extension base="sppps:ResultCodeType">
<sequence>
<element name="rqstObj"
type="sppps:BasicUpdateRqstType"/>
</sequence>
</extension>
</complexContent>
</complexType>
</xsd:schema>
</wsdl:types>
<wsdl:message name="spppUpdateRequestMsg">
<wsdl:part name="rqst"
element="sppps:spppUpdateRequest"/>
</wsdl:message>
<wsdl:message name="spppUpdateResponseMsg">
<wsdl:part name="rspns"
element="sppps:spppUpdateResponse"/>
</wsdl:message>
<wsdl:message name="spppQueryRequestMsg">
<wsdl:part name="rqst" element="sppps:spppQueryRequest"/>
</wsdl:message>
<wsdl:message name="spppQueryResponseMsg">
<wsdl:part name="rspns"
element="sppps:spppQueryResponse"/>
</wsdl:message>
<wsdl:message name="spppServerStatusRequestMsg">
<wsdl:part name="rqst"
element="sppps:spppServerStatusRequest"/>
</wsdl:message>
<wsdl:message name="spppServerStatusResponseMsg">
<wsdl:part name="rspns"
element="sppps:spppServerStatusResponse"/>
</wsdl:message>
<wsdl:portType name="spppPortType">
<wsdl:operation name="submitUpdateRqst">
<wsdl:input message="sppps:spppUpdateRequestMsg"/>
<wsdl:output
message="sppps:spppUpdateResponseMsg"/>
Cartwright Expires May 3, 2012 [Page 41]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
</wsdl:operation>
<wsdl:operation name="submitQueryRqst">
<wsdl:input message="sppps:spppQueryRequestMsg"/>
<wsdl:output message="sppps:spppQueryResponseMsg"/>
</wsdl:operation>
<wsdl:operation name="submitServerStatusRqst">
<wsdl:input
message="sppps:spppServerStatusRequestMsg"/>
<wsdl:output
message="sppps:spppServerStatusResponseMsg"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="spppSoapBinding"
type="sppps:spppPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="submitUpdateRqst">
<soap:operation soapAction="submitUpdateRqst"
style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="submitQueryRqst">
<soap:operation soapAction="submitQueryRqst"
style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="submitServerStatusRqst">
<soap:operation
soapAction="submitServerStatusRqst"
style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
Cartwright Expires May 3, 2012 [Page 42]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<wsdl:service name="spppService">
<wsdl:port name="spppPort"
binding="sppps:spppSoapBinding">
<soap:address location="REPLACE_WITH_ACTUAL_URL"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Figure 2: WSDL
Cartwright Expires May 3, 2012 [Page 43]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
9. SPPP SOAP Examples
This section provides a few examples of SPPP SOAP messages. This
section of course relies on the XML data structures defined in the
SPPP protocol specification [I-D.draft-ietf-drinks-spprov]. So refer
to that document to understand XML object types embedded in these
example messages.
Note: The following examples have been formatted (e.g., tabs, spaces)
to meet I-D requirements.
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:spb="urn:ietf:params:xml:ns:sppp:base:1">
<soapenv:Header/>
<soapenv:Body>
<spb:spppUpdateRequest
xsi:schemaLocation="urn:ietf:params:xml:ns:sppp:base:1 sppp.xsd"
xmlns="urn:ietf:params:xml:ns:sppp:base:1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<spb:clientTransId>888</spb:clientTransId>
<spb:minorVer>1</spb:minorVer>
<spb:rqst xsi:type="spb:AddDestGrpRqstType">
<spb:destGrp>
<spb:rant>registrant2</spb:rant>
<spb:dgName>DEST_GRP_SPPP_5</spb:dgName>
</spb:destGrp>
</spb:rqst>
</spb:spppUpdateRequest>
</soapenv:Body>
</soapenv:Envelope>
Figure 3: Example 1 - SPPP Update Request - Add Destination Group
Cartwright Expires May 3, 2012 [Page 44]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:spb="urn:ietf:params:xml:ns:sppp:base:1">
<soapenv:Header/>
<soapenv:Body>
<spb:spppQueryRequest
xsi:schemaLocation="urn:ietf:params:xml:ns:sppp:base:1 sppp.xsd"
xmlns="urn:ietf:params:xml:ns:sppp:base:1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<spb:minorVer>1</spb:minorVer>
<spb:rqst xsi:type="spb:GetDestGrpsRqstType">
<spb:objKey>
<spb:rant>registrant2</spb:rant>
<spb:name>DEST_GRP_SPPP_5</spb:name>
</spb:objKey>
</spb:rqst>
</spb:spppQueryRequest>
</soapenv:Body>
</soapenv:Envelope>
Figure 4: Example 2 - SPPP Query Request - Get Destination Group
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:spb="urn:ietf:params:xml:ns:sppp:base:1">
<soapenv:Header/>
<soapenv:Body>
<spb:spppQueryRequest
xsi:schemaLocation="urn:ietf:params:xml:ns:sppp:base:1 sppp.xsd"
xmlns="urn:ietf:params:xml:ns:sppp:base:1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<spb:clientTransId>999</spb:clientTransId>
<spb:minorVer>1</spb:minorVer>
<spb:rqst xsi:type="spb:DelDestGrpRqstType">
<spb:objKey>
<spb:rant>registrant2</spb:rant>
<spb:name>DEST_GRP_SPPP_5</spb:name>
</spb:objKey>
</spb:rqst>
</spb:spppQueryRequest>
</soapenv:Body>
</soapenv:Envelope>
Figure 5: Example 2 - SPPP Query Request - Del Destination Group
Cartwright Expires May 3, 2012 [Page 45]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
10. Security Considerations
SPPP is used to query and update session peering data and addresses,
so the ability to access this protocol should be limited to users and
systems that are authorized to query and update this data. Because
this data is sent in both directions, it may not be sufficient for
just the client or user to be authenticated with the server. The
identity of the server should also be authenticated by the client,
which is often accomplished using the TLS certificate exchange and
validation described in [RFC2818]. SPPP data may include sensitive
information, routing data, lists of resolvable addresses, etc. So
when used in a production setting and across non-secure networks,
SPPP should only be used over communications channels that provide
strong encryption for data privacy.
10.1. Integrity, Privacy, and Authentication
The SPPP SOAP binding relies on an underlying secure transport for
integrity and privacy. Such transports are expected to include TLS/
HTTPS. In addition to the application level authentication imposed
by an SPPP server, there are a number of options for authentication
within the transport layer and the messaging envelope. These include
TLS client certificates, HTTP Digest Access Authentication, and
digital signatures within SOAP headers.
At a miniumum, all conforming SPPP over SOAP implementations MUST
support HTTPS.
10.2. Vulnerabilities
The above protocols may have various vulnerabilities, and these may
be inherited by SPPP over SOAP. And SPPP itself may have
vulnerabilities because an authorization model is not explicitly
specified in the current specification.
It is important that SPPP implementations implement an authorization
model that considers the source of each SPPP query or update request
and determines whether it is reasonable to authorize that source to
perform that specific query or update.
10.3. Deployment Environment Specifics
Some deployments of SPPP over SOAP could choose to use transports
without encryption. This presents vulnerabilities but could be
selected for deployments involving closed networks or debugging
scenarios. However, the vulnerabilities of such a deployment could
be a lack of integrity and privacy of the data transported over SPPP
messages in this type of deployment.
Cartwright Expires May 3, 2012 [Page 46]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
11. IANA Considerations
This document uses URNs to describe XML namespaces and XML schemas
conforming to a registry mechanism described in [RFC3688].
URN assignments are requested: urn:ietf:params:xml:ns:sppp:soap
Cartwright Expires May 3, 2012 [Page 47]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
12. Acknowledgements
This document is a result of various discussions held by the DRINKS
design team, which is comprised of the following individuals, in no
specific order: Syed Ali (NeuStar), Sumanth Channabasappa (Cable
Labs), David Schwartz (XConnect), Jean-Francois Mule (CableLabs),
Kenneth Cartwright (TNS, Inc.), Manjul Maharishi (TNS, Inc.),
Alexander Mayrhofer (enum.at GmbH).
Cartwright Expires May 3, 2012 [Page 48]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
13. References
13.1. Normative References
[I-D.draft-ietf-drinks-spprov]
Mule, J-F., Cartwright, K., Ali, S., and A. Mayrhofer,
"DRINKS Use cases and Protocol Requirements",
draft-ietf-drinks-spprov-09 (work in progress), June 2011.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC2616] Fielding, R., Gettys, J., Mogul, J., Frystyk, H.,
Masinter, L., Leach, P., and T. Berners-Lee, "Hypertext
Transfer Protocol -- HTTP/1.1", RFC 2616, June 1999.
[RFC2617] Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S.,
Leach, P., Luotonen, A., and L. Stewart, "HTTP
Authentication: Basic and Digest Access Authentication",
RFC 2617, June 1999.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
January 2004.
[RFC5246] Dierks, T. and E. Rescorla, "The Transport Layer Security
(TLS) Protocol Version 1.2", RFC 5246, August 2008.
[SOAPREF] Gudgin, M., Hadley, M., Moreau, J., and H. Nielsen, "SOAP
Version 1.2 Part 1: Messaging Framework", W3C
Recommendation REC-SOAP12-part1-20030624, June 2002.
13.2. Informative References
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818, May 2000.
[RFC5321] Klensin, J., "Simple Mail Transfer Protocol", RFC 5321,
October 2008.
[WSDLREF] Christensen, E., Curbera, F., Meredith, G., and S.
Weerawarana, "Web Services Description Language (WSDL)
1.1", W3C Note NOTE-wsdl-20010315, March 2001.
Cartwright Expires May 3, 2012 [Page 49]
Internet-Draft draft-ietf-drinks-sppp-over-soap October 2011
Author's Address
Kenneth Cartwright
TNS
1939 Roland Clarke Place
Reston, VA 20191
USA
Email: kcartwright@tnsi.com
Cartwright Expires May 3, 2012 [Page 50]