mirror of https://github.com/sipwise/kamailio.git
commit
2b360f9ea9
@ -1,301 +1,301 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||||
<xs:simpleType name="tPriority" final="list restriction">
|
<xs:simpleType name="tPriority" final="list restriction">
|
||||||
<xs:restriction base="xs:int">
|
<xs:restriction base="xs:int">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tProfilePartIndicator" final="list restriction">
|
<xs:simpleType name="tProfilePartIndicator" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:maxInclusive value="1"/>
|
<xs:maxInclusive value="1"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">REGISTERED</label>
|
<label xml:lang="en">REGISTERED</label>
|
||||||
<definition xml:lang="en">iFC is part of the registered profile</definition>
|
<definition xml:lang="en">iFC is part of the registered profile</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">UNREGISTERED</label>
|
<label xml:lang="en">UNREGISTERED</label>
|
||||||
<definition xml:lang="en">iFC is part of the unregistered profile</definition>
|
<definition xml:lang="en">iFC is part of the unregistered profile</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tSharedIFCSetID" final="list restriction">
|
<xs:simpleType name="tSharedIFCSetID" final="list restriction">
|
||||||
<xs:restriction base="xs:int">
|
<xs:restriction base="xs:int">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tGroupID" final="list restriction">
|
<xs:simpleType name="tGroupID" final="list restriction">
|
||||||
<xs:restriction base="xs:int">
|
<xs:restriction base="xs:int">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tRegistrationType" final="list restriction">
|
<xs:simpleType name="tRegistrationType" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:maxInclusive value="2"/>
|
<xs:maxInclusive value="2"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">INITIAL_REGISTRATION</label>
|
<label xml:lang="en">INITIAL_REGISTRATION</label>
|
||||||
<definition xml:lang="en">Matches to REGISTER messages that are related to initial registration</definition>
|
<definition xml:lang="en">Matches to REGISTER messages that are related to initial registration</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">RE-REGISTRATION</label>
|
<label xml:lang="en">RE-REGISTRATION</label>
|
||||||
<definition xml:lang="en">Matches to REGISTER messages that are related to re-registration</definition>
|
<definition xml:lang="en">Matches to REGISTER messages that are related to re-registration</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="2">
|
<xs:enumeration value="2">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">DE-REGISTRATION</label>
|
<label xml:lang="en">DE-REGISTRATION</label>
|
||||||
<definition xml:lang="en">Matches to REGISTER messages that are related to de-registration</definition>
|
<definition xml:lang="en">Matches to REGISTER messages that are related to de-registration</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tDefaultHandling" final="list restriction">
|
<xs:simpleType name="tDefaultHandling" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:maxInclusive value="1"/>
|
<xs:maxInclusive value="1"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">SESSION_CONTINUED</label>
|
<label xml:lang="en">SESSION_CONTINUED</label>
|
||||||
<definition xml:lang="en">Session Continued</definition>
|
<definition xml:lang="en">Session Continued</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">SESSION_TERMINATED</label>
|
<label xml:lang="en">SESSION_TERMINATED</label>
|
||||||
<definition xml:lang="en">Session Terminated</definition>
|
<definition xml:lang="en">Session Terminated</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tDirectionOfRequest" final="list restriction">
|
<xs:simpleType name="tDirectionOfRequest" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:maxInclusive value="3"/>
|
<xs:maxInclusive value="3"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">ORIGINATING_SESSION</label>
|
<label xml:lang="en">ORIGINATING_SESSION</label>
|
||||||
<definition xml:lang="en">Originating Session</definition>
|
<definition xml:lang="en">Originating Session</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">TERMINATING_REGISTERED</label>
|
<label xml:lang="en">TERMINATING_REGISTERED</label>
|
||||||
<definition xml:lang="en">Terminating Session for registered user</definition>
|
<definition xml:lang="en">Terminating Session for registered user</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="2">
|
<xs:enumeration value="2">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">TERMINATING_UNREGISTERED</label>
|
<label xml:lang="en">TERMINATING_UNREGISTERED</label>
|
||||||
<definition xml:lang="en">Terminating Session for unregistered user</definition>
|
<definition xml:lang="en">Terminating Session for unregistered user</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="3">
|
<xs:enumeration value="3">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">ORIGINATING_UNREGISTERED</label>
|
<label xml:lang="en">ORIGINATING_UNREGISTERED</label>
|
||||||
<definition xml:lang="en">Originating Session for an unregistered user</definition>
|
<definition xml:lang="en">Originating Session for an unregistered user</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tPrivateID" final="list restriction">
|
<xs:simpleType name="tPrivateID" final="list restriction">
|
||||||
<xs:restriction base="xs:anyURI"/>
|
<xs:restriction base="xs:anyURI"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tSIP_URL" final="list restriction">
|
<xs:simpleType name="tSIP_URL" final="list restriction">
|
||||||
<xs:restriction base="xs:anyURI"/>
|
<xs:restriction base="xs:anyURI"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tTEL_URL" final="list restriction">
|
<xs:simpleType name="tTEL_URL" final="list restriction">
|
||||||
<xs:restriction base="xs:anyURI"/>
|
<xs:restriction base="xs:anyURI"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tIdentity" final="list restriction">
|
<xs:simpleType name="tIdentity" final="list restriction">
|
||||||
<xs:union memberTypes="tSIP_URL tTEL_URL"/>
|
<xs:union memberTypes="tSIP_URL tTEL_URL"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tIdentityType" final="list restriction">
|
<xs:simpleType name="tIdentityType" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
<xs:maxInclusive value="2"/>
|
<xs:maxInclusive value="2"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">PUBLIC_USER_IDENTITY</label>
|
<label xml:lang="en">PUBLIC_USER_IDENTITY</label>
|
||||||
<definition xml:lang="en">Identity is a Public User Identity.</definition>
|
<definition xml:lang="en">Identity is a Public User Identity.</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">DISTINCT_PSI</label>
|
<label xml:lang="en">DISTINCT_PSI</label>
|
||||||
<definition xml:lang="en">Identity is a distinct Public Service Identity.</definition>
|
<definition xml:lang="en">Identity is a distinct Public Service Identity.</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="2">
|
<xs:enumeration value="2">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">WILDCARDED_PSI</label>
|
<label xml:lang="en">WILDCARDED_PSI</label>
|
||||||
<definition xml:lang="en">Identity matches a wildcarded Public Service Identity.</definition>
|
<definition xml:lang="en">Identity matches a wildcarded Public Service Identity.</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:complexType name="tPublicIdentityExtension">
|
<xs:complexType name="tPublicIdentityExtension">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="IdentityType" type="tIdentityType" minOccurs="0"/>
|
<xs:element name="IdentityType" type="tIdentityType" minOccurs="0"/>
|
||||||
<xs:element name="WildcardedPSI" type="xs:anyURI" minOccurs="0"/>
|
<xs:element name="WildcardedPSI" type="xs:anyURI" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:simpleType name="tServiceInfo" final="list restriction">
|
<xs:simpleType name="tServiceInfo" final="list restriction">
|
||||||
<xs:restriction base="xs:string">
|
<xs:restriction base="xs:string">
|
||||||
<xs:minLength value="0"/>
|
<xs:minLength value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tString" final="list restriction">
|
<xs:simpleType name="tString" final="list restriction">
|
||||||
<xs:restriction base="xs:string">
|
<xs:restriction base="xs:string">
|
||||||
<xs:minLength value="0"/>
|
<xs:minLength value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tBool">
|
<xs:simpleType name="tBool">
|
||||||
<xs:restriction base="xs:boolean"/>
|
<xs:restriction base="xs:boolean"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tSubscribedMediaProfileId" final="list restriction">
|
<xs:simpleType name="tSubscribedMediaProfileId" final="list restriction">
|
||||||
<xs:restriction base="xs:int">
|
<xs:restriction base="xs:int">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:complexType name="tExtension">
|
<xs:complexType name="tExtension">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tServiceProfileExtension">
|
<xs:complexType name="tServiceProfileExtension">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="SharedIFCSetID" type="tSharedIFCSetID" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:element name="SharedIFCSetID" type="tSharedIFCSetID" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tSePoTriExtension">
|
<xs:complexType name="tSePoTriExtension">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="RegistrationType" type="tRegistrationType" minOccurs="0" maxOccurs="2"/>
|
<xs:element name="RegistrationType" type="tRegistrationType" minOccurs="0" maxOccurs="2"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tIMSSubscription">
|
<xs:complexType name="tIMSSubscription">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="PrivateID" type="tPrivateID"/>
|
<xs:element name="PrivateID" type="tPrivateID"/>
|
||||||
<xs:element name="ServiceProfile" type="tServiceProfile" maxOccurs="unbounded"/>
|
<xs:element name="ServiceProfile" type="tServiceProfile" maxOccurs="unbounded"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tServiceProfile">
|
<xs:complexType name="tServiceProfile">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="PublicIdentity" type="tPublicIdentity" maxOccurs="unbounded"/>
|
<xs:element name="PublicIdentity" type="tPublicIdentity" maxOccurs="unbounded"/>
|
||||||
<xs:element name="CoreNetworkServicesAuthorization" type="tCoreNetworkServicesAuthorization" minOccurs="0"/>
|
<xs:element name="CoreNetworkServicesAuthorization" type="tCoreNetworkServicesAuthorization" minOccurs="0"/>
|
||||||
<xs:element name="InitialFilterCriteria" type="tInitialFilterCriteria" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:element name="InitialFilterCriteria" type="tInitialFilterCriteria" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<xs:element name="Extension" type="tServiceProfileExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tServiceProfileExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tCoreNetworkServicesAuthorization">
|
<xs:complexType name="tCoreNetworkServicesAuthorization">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="SubscribedMediaProfileId" type="tSubscribedMediaProfileId" minOccurs="0"/>
|
<xs:element name="SubscribedMediaProfileId" type="tSubscribedMediaProfileId" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tInitialFilterCriteria">
|
<xs:complexType name="tInitialFilterCriteria">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="Priority" type="tPriority"/>
|
<xs:element name="Priority" type="tPriority"/>
|
||||||
<xs:element name="TriggerPoint" type="tTrigger" minOccurs="0"/>
|
<xs:element name="TriggerPoint" type="tTrigger" minOccurs="0"/>
|
||||||
<xs:element name="ApplicationServer" type="tApplicationServer"/>
|
<xs:element name="ApplicationServer" type="tApplicationServer"/>
|
||||||
<xs:element name="ProfilePartIndicator" type="tProfilePartIndicator" minOccurs="0"/>
|
<xs:element name="ProfilePartIndicator" type="tProfilePartIndicator" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tTrigger">
|
<xs:complexType name="tTrigger">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="ConditionTypeCNF" type="tBool"/>
|
<xs:element name="ConditionTypeCNF" type="tBool"/>
|
||||||
<xs:element name="SPT" type="tSePoTri" maxOccurs="unbounded"/>
|
<xs:element name="SPT" type="tSePoTri" maxOccurs="unbounded"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tSePoTri">
|
<xs:complexType name="tSePoTri">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="ConditionNegated" type="tBool" default="0" minOccurs="0"/>
|
<xs:element name="ConditionNegated" type="tBool" default="0" minOccurs="0"/>
|
||||||
<xs:element name="Group" type="tGroupID" maxOccurs="unbounded"/>
|
<xs:element name="Group" type="tGroupID" maxOccurs="unbounded"/>
|
||||||
<xs:choice>
|
<xs:choice>
|
||||||
<xs:element name="RequestURI" type="tString"/>
|
<xs:element name="RequestURI" type="tString"/>
|
||||||
<xs:element name="Method" type="tString"/>
|
<xs:element name="Method" type="tString"/>
|
||||||
<xs:element name="SIPHeader" type="tHeader"/>
|
<xs:element name="SIPHeader" type="tHeader"/>
|
||||||
<xs:element name="SessionCase" type="tDirectionOfRequest"/>
|
<xs:element name="SessionCase" type="tDirectionOfRequest"/>
|
||||||
<xs:element name="SessionDescription" type="tSessionDescription"/>
|
<xs:element name="SessionDescription" type="tSessionDescription"/>
|
||||||
</xs:choice>
|
</xs:choice>
|
||||||
<xs:element name="Extension" type="tSePoTriExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tSePoTriExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tHeader">
|
<xs:complexType name="tHeader">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="Header" type="tString"/>
|
<xs:element name="Header" type="tString"/>
|
||||||
<xs:element name="Content" type="tString" minOccurs="0"/>
|
<xs:element name="Content" type="tString" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tSessionDescription">
|
<xs:complexType name="tSessionDescription">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="Line" type="tString"/>
|
<xs:element name="Line" type="tString"/>
|
||||||
<xs:element name="Content" type="tString" minOccurs="0"/>
|
<xs:element name="Content" type="tString" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tApplicationServer">
|
<xs:complexType name="tApplicationServer">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="ServerName" type="tSIP_URL"/>
|
<xs:element name="ServerName" type="tSIP_URL"/>
|
||||||
<xs:element name="DefaultHandling" type="tDefaultHandling" minOccurs="0"/>
|
<xs:element name="DefaultHandling" type="tDefaultHandling" minOccurs="0"/>
|
||||||
<xs:element name="ServiceInfo" type="tServiceInfo" minOccurs="0"/>
|
<xs:element name="ServiceInfo" type="tServiceInfo" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tPublicIdentity">
|
<xs:complexType name="tPublicIdentity">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="BarringIndication" type="tBool" default="0" minOccurs="0"/>
|
<xs:element name="BarringIndication" type="tBool" default="0" minOccurs="0"/>
|
||||||
<xs:element name="Identity" type="tIdentity"/>
|
<xs:element name="Identity" type="tIdentity"/>
|
||||||
<xs:element name="Extension" type="tPublicIdentityExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tPublicIdentityExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:element name="IMSSubscription" type="tIMSSubscription"/>
|
<xs:element name="IMSSubscription" type="tIMSSubscription"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
|
@ -1,301 +1,301 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||||
<xs:simpleType name="tPriority" final="list restriction">
|
<xs:simpleType name="tPriority" final="list restriction">
|
||||||
<xs:restriction base="xs:int">
|
<xs:restriction base="xs:int">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tProfilePartIndicator" final="list restriction">
|
<xs:simpleType name="tProfilePartIndicator" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:maxInclusive value="1"/>
|
<xs:maxInclusive value="1"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">REGISTERED</label>
|
<label xml:lang="en">REGISTERED</label>
|
||||||
<definition xml:lang="en">iFC is part of the registered profile</definition>
|
<definition xml:lang="en">iFC is part of the registered profile</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">UNREGISTERED</label>
|
<label xml:lang="en">UNREGISTERED</label>
|
||||||
<definition xml:lang="en">iFC is part of the unregistered profile</definition>
|
<definition xml:lang="en">iFC is part of the unregistered profile</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tSharedIFCSetID" final="list restriction">
|
<xs:simpleType name="tSharedIFCSetID" final="list restriction">
|
||||||
<xs:restriction base="xs:int">
|
<xs:restriction base="xs:int">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tGroupID" final="list restriction">
|
<xs:simpleType name="tGroupID" final="list restriction">
|
||||||
<xs:restriction base="xs:int">
|
<xs:restriction base="xs:int">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tRegistrationType" final="list restriction">
|
<xs:simpleType name="tRegistrationType" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:maxInclusive value="2"/>
|
<xs:maxInclusive value="2"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">INITIAL_REGISTRATION</label>
|
<label xml:lang="en">INITIAL_REGISTRATION</label>
|
||||||
<definition xml:lang="en">Matches to REGISTER messages that are related to initial registration</definition>
|
<definition xml:lang="en">Matches to REGISTER messages that are related to initial registration</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">RE-REGISTRATION</label>
|
<label xml:lang="en">RE-REGISTRATION</label>
|
||||||
<definition xml:lang="en">Matches to REGISTER messages that are related to re-registration</definition>
|
<definition xml:lang="en">Matches to REGISTER messages that are related to re-registration</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="2">
|
<xs:enumeration value="2">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">DE-REGISTRATION</label>
|
<label xml:lang="en">DE-REGISTRATION</label>
|
||||||
<definition xml:lang="en">Matches to REGISTER messages that are related to de-registration</definition>
|
<definition xml:lang="en">Matches to REGISTER messages that are related to de-registration</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tDefaultHandling" final="list restriction">
|
<xs:simpleType name="tDefaultHandling" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:maxInclusive value="1"/>
|
<xs:maxInclusive value="1"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">SESSION_CONTINUED</label>
|
<label xml:lang="en">SESSION_CONTINUED</label>
|
||||||
<definition xml:lang="en">Session Continued</definition>
|
<definition xml:lang="en">Session Continued</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">SESSION_TERMINATED</label>
|
<label xml:lang="en">SESSION_TERMINATED</label>
|
||||||
<definition xml:lang="en">Session Terminated</definition>
|
<definition xml:lang="en">Session Terminated</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tDirectionOfRequest" final="list restriction">
|
<xs:simpleType name="tDirectionOfRequest" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:maxInclusive value="3"/>
|
<xs:maxInclusive value="3"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">ORIGINATING_SESSION</label>
|
<label xml:lang="en">ORIGINATING_SESSION</label>
|
||||||
<definition xml:lang="en">Originating Session</definition>
|
<definition xml:lang="en">Originating Session</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">TERMINATING_REGISTERED</label>
|
<label xml:lang="en">TERMINATING_REGISTERED</label>
|
||||||
<definition xml:lang="en">Terminating Session for registered user</definition>
|
<definition xml:lang="en">Terminating Session for registered user</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="2">
|
<xs:enumeration value="2">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">TERMINATING_UNREGISTERED</label>
|
<label xml:lang="en">TERMINATING_UNREGISTERED</label>
|
||||||
<definition xml:lang="en">Terminating Session for unregistered user</definition>
|
<definition xml:lang="en">Terminating Session for unregistered user</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="3">
|
<xs:enumeration value="3">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">ORIGINATING_UNREGISTERED</label>
|
<label xml:lang="en">ORIGINATING_UNREGISTERED</label>
|
||||||
<definition xml:lang="en">Originating Session for an unregistered user</definition>
|
<definition xml:lang="en">Originating Session for an unregistered user</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tPrivateID" final="list restriction">
|
<xs:simpleType name="tPrivateID" final="list restriction">
|
||||||
<xs:restriction base="xs:anyURI"/>
|
<xs:restriction base="xs:anyURI"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tSIP_URL" final="list restriction">
|
<xs:simpleType name="tSIP_URL" final="list restriction">
|
||||||
<xs:restriction base="xs:anyURI"/>
|
<xs:restriction base="xs:anyURI"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tTEL_URL" final="list restriction">
|
<xs:simpleType name="tTEL_URL" final="list restriction">
|
||||||
<xs:restriction base="xs:anyURI"/>
|
<xs:restriction base="xs:anyURI"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tIdentity" final="list restriction">
|
<xs:simpleType name="tIdentity" final="list restriction">
|
||||||
<xs:union memberTypes="tSIP_URL tTEL_URL"/>
|
<xs:union memberTypes="tSIP_URL tTEL_URL"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tIdentityType" final="list restriction">
|
<xs:simpleType name="tIdentityType" final="list restriction">
|
||||||
<xs:restriction base="xs:unsignedByte">
|
<xs:restriction base="xs:unsignedByte">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
<xs:maxInclusive value="2"/>
|
<xs:maxInclusive value="2"/>
|
||||||
<xs:enumeration value="0">
|
<xs:enumeration value="0">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">PUBLIC_USER_IDENTITY</label>
|
<label xml:lang="en">PUBLIC_USER_IDENTITY</label>
|
||||||
<definition xml:lang="en">Identity is a Public User Identity.</definition>
|
<definition xml:lang="en">Identity is a Public User Identity.</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="1">
|
<xs:enumeration value="1">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">DISTINCT_PSI</label>
|
<label xml:lang="en">DISTINCT_PSI</label>
|
||||||
<definition xml:lang="en">Identity is a distinct Public Service Identity.</definition>
|
<definition xml:lang="en">Identity is a distinct Public Service Identity.</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
<xs:enumeration value="2">
|
<xs:enumeration value="2">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>
|
<xs:documentation>
|
||||||
<label xml:lang="en">WILDCARDED_PSI</label>
|
<label xml:lang="en">WILDCARDED_PSI</label>
|
||||||
<definition xml:lang="en">Identity matches a wildcarded Public Service Identity.</definition>
|
<definition xml:lang="en">Identity matches a wildcarded Public Service Identity.</definition>
|
||||||
</xs:documentation>
|
</xs:documentation>
|
||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
</xs:enumeration>
|
</xs:enumeration>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:complexType name="tPublicIdentityExtension">
|
<xs:complexType name="tPublicIdentityExtension">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="IdentityType" type="tIdentityType" minOccurs="0"/>
|
<xs:element name="IdentityType" type="tIdentityType" minOccurs="0"/>
|
||||||
<xs:element name="WildcardedPSI" type="xs:anyURI" minOccurs="0"/>
|
<xs:element name="WildcardedPSI" type="xs:anyURI" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:simpleType name="tServiceInfo" final="list restriction">
|
<xs:simpleType name="tServiceInfo" final="list restriction">
|
||||||
<xs:restriction base="xs:string">
|
<xs:restriction base="xs:string">
|
||||||
<xs:minLength value="0"/>
|
<xs:minLength value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tString" final="list restriction">
|
<xs:simpleType name="tString" final="list restriction">
|
||||||
<xs:restriction base="xs:string">
|
<xs:restriction base="xs:string">
|
||||||
<xs:minLength value="0"/>
|
<xs:minLength value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tBool">
|
<xs:simpleType name="tBool">
|
||||||
<xs:restriction base="xs:boolean"/>
|
<xs:restriction base="xs:boolean"/>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:simpleType name="tSubscribedMediaProfileId" final="list restriction">
|
<xs:simpleType name="tSubscribedMediaProfileId" final="list restriction">
|
||||||
<xs:restriction base="xs:int">
|
<xs:restriction base="xs:int">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
</xs:restriction>
|
</xs:restriction>
|
||||||
</xs:simpleType>
|
</xs:simpleType>
|
||||||
<xs:complexType name="tExtension">
|
<xs:complexType name="tExtension">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tServiceProfileExtension">
|
<xs:complexType name="tServiceProfileExtension">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="SharedIFCSetID" type="tSharedIFCSetID" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:element name="SharedIFCSetID" type="tSharedIFCSetID" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tSePoTriExtension">
|
<xs:complexType name="tSePoTriExtension">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="RegistrationType" type="tRegistrationType" minOccurs="0" maxOccurs="2"/>
|
<xs:element name="RegistrationType" type="tRegistrationType" minOccurs="0" maxOccurs="2"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tIMSSubscription">
|
<xs:complexType name="tIMSSubscription">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="PrivateID" type="tPrivateID"/>
|
<xs:element name="PrivateID" type="tPrivateID"/>
|
||||||
<xs:element name="ServiceProfile" type="tServiceProfile" maxOccurs="unbounded"/>
|
<xs:element name="ServiceProfile" type="tServiceProfile" maxOccurs="unbounded"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tServiceProfile">
|
<xs:complexType name="tServiceProfile">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="PublicIdentity" type="tPublicIdentity" maxOccurs="unbounded"/>
|
<xs:element name="PublicIdentity" type="tPublicIdentity" maxOccurs="unbounded"/>
|
||||||
<xs:element name="CoreNetworkServicesAuthorization" type="tCoreNetworkServicesAuthorization" minOccurs="0"/>
|
<xs:element name="CoreNetworkServicesAuthorization" type="tCoreNetworkServicesAuthorization" minOccurs="0"/>
|
||||||
<xs:element name="InitialFilterCriteria" type="tInitialFilterCriteria" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:element name="InitialFilterCriteria" type="tInitialFilterCriteria" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<xs:element name="Extension" type="tServiceProfileExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tServiceProfileExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tCoreNetworkServicesAuthorization">
|
<xs:complexType name="tCoreNetworkServicesAuthorization">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="SubscribedMediaProfileId" type="tSubscribedMediaProfileId" minOccurs="0"/>
|
<xs:element name="SubscribedMediaProfileId" type="tSubscribedMediaProfileId" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tInitialFilterCriteria">
|
<xs:complexType name="tInitialFilterCriteria">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="Priority" type="tPriority"/>
|
<xs:element name="Priority" type="tPriority"/>
|
||||||
<xs:element name="TriggerPoint" type="tTrigger" minOccurs="0"/>
|
<xs:element name="TriggerPoint" type="tTrigger" minOccurs="0"/>
|
||||||
<xs:element name="ApplicationServer" type="tApplicationServer"/>
|
<xs:element name="ApplicationServer" type="tApplicationServer"/>
|
||||||
<xs:element name="ProfilePartIndicator" type="tProfilePartIndicator" minOccurs="0"/>
|
<xs:element name="ProfilePartIndicator" type="tProfilePartIndicator" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tTrigger">
|
<xs:complexType name="tTrigger">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="ConditionTypeCNF" type="tBool"/>
|
<xs:element name="ConditionTypeCNF" type="tBool"/>
|
||||||
<xs:element name="SPT" type="tSePoTri" maxOccurs="unbounded"/>
|
<xs:element name="SPT" type="tSePoTri" maxOccurs="unbounded"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tSePoTri">
|
<xs:complexType name="tSePoTri">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="ConditionNegated" type="tBool" default="0" minOccurs="0"/>
|
<xs:element name="ConditionNegated" type="tBool" default="0" minOccurs="0"/>
|
||||||
<xs:element name="Group" type="tGroupID" maxOccurs="unbounded"/>
|
<xs:element name="Group" type="tGroupID" maxOccurs="unbounded"/>
|
||||||
<xs:choice>
|
<xs:choice>
|
||||||
<xs:element name="RequestURI" type="tString"/>
|
<xs:element name="RequestURI" type="tString"/>
|
||||||
<xs:element name="Method" type="tString"/>
|
<xs:element name="Method" type="tString"/>
|
||||||
<xs:element name="SIPHeader" type="tHeader"/>
|
<xs:element name="SIPHeader" type="tHeader"/>
|
||||||
<xs:element name="SessionCase" type="tDirectionOfRequest"/>
|
<xs:element name="SessionCase" type="tDirectionOfRequest"/>
|
||||||
<xs:element name="SessionDescription" type="tSessionDescription"/>
|
<xs:element name="SessionDescription" type="tSessionDescription"/>
|
||||||
</xs:choice>
|
</xs:choice>
|
||||||
<xs:element name="Extension" type="tSePoTriExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tSePoTriExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tHeader">
|
<xs:complexType name="tHeader">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="Header" type="tString"/>
|
<xs:element name="Header" type="tString"/>
|
||||||
<xs:element name="Content" type="tString" minOccurs="0"/>
|
<xs:element name="Content" type="tString" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tSessionDescription">
|
<xs:complexType name="tSessionDescription">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="Line" type="tString"/>
|
<xs:element name="Line" type="tString"/>
|
||||||
<xs:element name="Content" type="tString" minOccurs="0"/>
|
<xs:element name="Content" type="tString" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tApplicationServer">
|
<xs:complexType name="tApplicationServer">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="ServerName" type="tSIP_URL"/>
|
<xs:element name="ServerName" type="tSIP_URL"/>
|
||||||
<xs:element name="DefaultHandling" type="tDefaultHandling" minOccurs="0"/>
|
<xs:element name="DefaultHandling" type="tDefaultHandling" minOccurs="0"/>
|
||||||
<xs:element name="ServiceInfo" type="tServiceInfo" minOccurs="0"/>
|
<xs:element name="ServiceInfo" type="tServiceInfo" minOccurs="0"/>
|
||||||
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:complexType name="tPublicIdentity">
|
<xs:complexType name="tPublicIdentity">
|
||||||
<xs:sequence>
|
<xs:sequence>
|
||||||
<xs:element name="BarringIndication" type="tBool" default="0" minOccurs="0"/>
|
<xs:element name="BarringIndication" type="tBool" default="0" minOccurs="0"/>
|
||||||
<xs:element name="Identity" type="tIdentity"/>
|
<xs:element name="Identity" type="tIdentity"/>
|
||||||
<xs:element name="Extension" type="tPublicIdentityExtension" minOccurs="0"/>
|
<xs:element name="Extension" type="tPublicIdentityExtension" minOccurs="0"/>
|
||||||
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
<xs:element name="IMSSubscription" type="tIMSSubscription"/>
|
<xs:element name="IMSSubscription" type="tIMSSubscription"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
CC = gcc
|
CC = gcc
|
||||||
FILES = *.c ../netstring.c ../jsonrpc_global.c seatest/seatest.c
|
FILES = *.c ../netstring.c ../jsonrpc_global.c seatest/seatest.c
|
||||||
OUT_EXE = test
|
OUT_EXE = test
|
||||||
|
|
||||||
build: $(FILES)
|
build: $(FILES)
|
||||||
$(CC) -std=gnu99 -pedantic -D TEST -o $(OUT_EXE) $(FILES) -lm -levent
|
$(CC) -std=gnu99 -pedantic -D TEST -o $(OUT_EXE) $(FILES) -lm -levent
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f *.o core
|
rm -f *.o core
|
||||||
|
|
||||||
rebuild: clean build
|
rebuild: clean build
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
Copyright (c) 2010 Keith Nicholas
|
Copyright (c) 2010 Keith Nicholas
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
in the Software without restriction, including without limitation the rights
|
in the Software without restriction, including without limitation the rights
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
furnished to do so, subject to the following conditions:
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
The above copyright notice and this permission notice shall be included in
|
||||||
all copies or substantial portions of the Software.
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
@ -1,248 +1,248 @@
|
|||||||
#include "seatest.h"
|
#include "seatest.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#else
|
#else
|
||||||
unsigned int GetTickCount() { return 0;}
|
unsigned int GetTickCount() { return 0;}
|
||||||
void _getch( void ) { }
|
void _getch( void ) { }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int sea_tests_run = 0;
|
static int sea_tests_run = 0;
|
||||||
static int sea_tests_passed = 0;
|
static int sea_tests_passed = 0;
|
||||||
static int sea_tests_failed = 0;
|
static int sea_tests_failed = 0;
|
||||||
static char* seatest_current_fixture;
|
static char* seatest_current_fixture;
|
||||||
|
|
||||||
static void (*seatest_suite_setup_func)( void ) = 0;
|
static void (*seatest_suite_setup_func)( void ) = 0;
|
||||||
static void (*seatest_suite_teardown_func)( void ) = 0;
|
static void (*seatest_suite_teardown_func)( void ) = 0;
|
||||||
static void (*seatest_fixture_setup)( void ) = 0;
|
static void (*seatest_fixture_setup)( void ) = 0;
|
||||||
static void (*seatest_fixture_teardown)( void ) = 0;
|
static void (*seatest_fixture_teardown)( void ) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void suite_setup(void (*setup)( void ))
|
void suite_setup(void (*setup)( void ))
|
||||||
{
|
{
|
||||||
seatest_suite_setup_func = setup;
|
seatest_suite_setup_func = setup;
|
||||||
}
|
}
|
||||||
void suite_teardown(void (*teardown)( void ))
|
void suite_teardown(void (*teardown)( void ))
|
||||||
{
|
{
|
||||||
seatest_suite_teardown_func = teardown;
|
seatest_suite_teardown_func = teardown;
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_suite_setup( void )
|
void seatest_suite_setup( void )
|
||||||
{
|
{
|
||||||
if(seatest_suite_setup_func != 0) seatest_suite_setup_func();
|
if(seatest_suite_setup_func != 0) seatest_suite_setup_func();
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_suite_teardown( void )
|
void seatest_suite_teardown( void )
|
||||||
{
|
{
|
||||||
if(seatest_suite_teardown_func != 0) seatest_suite_teardown_func();
|
if(seatest_suite_teardown_func != 0) seatest_suite_teardown_func();
|
||||||
}
|
}
|
||||||
|
|
||||||
void fixture_setup(void (*setup)( void ))
|
void fixture_setup(void (*setup)( void ))
|
||||||
{
|
{
|
||||||
seatest_fixture_setup = setup;
|
seatest_fixture_setup = setup;
|
||||||
}
|
}
|
||||||
void fixture_teardown(void (*teardown)( void ))
|
void fixture_teardown(void (*teardown)( void ))
|
||||||
{
|
{
|
||||||
seatest_fixture_teardown = teardown;
|
seatest_fixture_teardown = teardown;
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_setup( void )
|
void seatest_setup( void )
|
||||||
{
|
{
|
||||||
if(seatest_fixture_setup != 0) seatest_fixture_setup();
|
if(seatest_fixture_setup != 0) seatest_fixture_setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_teardown( void )
|
void seatest_teardown( void )
|
||||||
{
|
{
|
||||||
if(seatest_fixture_teardown != 0) seatest_fixture_teardown();
|
if(seatest_fixture_teardown != 0) seatest_fixture_teardown();
|
||||||
}
|
}
|
||||||
|
|
||||||
char* test_file_name(char* path)
|
char* test_file_name(char* path)
|
||||||
{
|
{
|
||||||
char* file = path + strlen(path);
|
char* file = path + strlen(path);
|
||||||
while(file != path && *file!= '\\' ) file--;
|
while(file != path && *file!= '\\' ) file--;
|
||||||
if(*file == '\\') file++;
|
if(*file == '\\') file++;
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int seatest_fixture_tests_run;
|
static int seatest_fixture_tests_run;
|
||||||
static int seatest_fixture_tests_failed;
|
static int seatest_fixture_tests_failed;
|
||||||
|
|
||||||
void seatest_simple_test_result(int passed, char* reason, const char* function, unsigned int line)
|
void seatest_simple_test_result(int passed, char* reason, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
if (!passed)
|
if (!passed)
|
||||||
{
|
{
|
||||||
printf("%-20s Line %-5d %s\r\n", function, line, reason );
|
printf("%-20s Line %-5d %s\r\n", function, line, reason );
|
||||||
sea_tests_failed++;
|
sea_tests_failed++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sea_tests_passed++;
|
sea_tests_passed++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_true(int test, const char* function, unsigned int line)
|
void seatest_assert_true(int test, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
seatest_simple_test_result(test, "Should of been true", function, line);
|
seatest_simple_test_result(test, "Should of been true", function, line);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_false(int test, const char* function, unsigned int line)
|
void seatest_assert_false(int test, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
seatest_simple_test_result(!test, "Should of been false", function, line);
|
seatest_simple_test_result(!test, "Should of been false", function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void seatest_assert_int_equal(int expected, int actual, const char* function, unsigned int line)
|
void seatest_assert_int_equal(int expected, int actual, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
sprintf(s, "Expected %d but was %d", expected, actual);
|
sprintf(s, "Expected %d but was %d", expected, actual);
|
||||||
seatest_simple_test_result(expected==actual, s, function, line);
|
seatest_simple_test_result(expected==actual, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_ulong_equal(unsigned long expected, unsigned long actual, const char* function, unsigned int line)
|
void seatest_assert_ulong_equal(unsigned long expected, unsigned long actual, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
sprintf(s, "Expected %lu but was %lu", expected, actual);
|
sprintf(s, "Expected %lu but was %lu", expected, actual);
|
||||||
seatest_simple_test_result(expected==actual, s, function, line);
|
seatest_simple_test_result(expected==actual, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_float_equal( float expected, float actual, float delta, const char* function, unsigned int line )
|
void seatest_assert_float_equal( float expected, float actual, float delta, const char* function, unsigned int line )
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
float result = expected-actual;
|
float result = expected-actual;
|
||||||
sprintf(s, "Expected %f but was %f", expected, actual);
|
sprintf(s, "Expected %f but was %f", expected, actual);
|
||||||
if(result < 0.0) result = 0.0f - result;
|
if(result < 0.0) result = 0.0f - result;
|
||||||
seatest_simple_test_result( result <= delta, s, function, line);
|
seatest_simple_test_result( result <= delta, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_double_equal( double expected, double actual, double delta, const char* function, unsigned int line )
|
void seatest_assert_double_equal( double expected, double actual, double delta, const char* function, unsigned int line )
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
double result = expected-actual;
|
double result = expected-actual;
|
||||||
sprintf(s, "Expected %f but was %f", expected, actual);
|
sprintf(s, "Expected %f but was %f", expected, actual);
|
||||||
if(result < 0.0) result = 0.0 - result;
|
if(result < 0.0) result = 0.0 - result;
|
||||||
seatest_simple_test_result( result <= delta, s, function, line);
|
seatest_simple_test_result( result <= delta, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_string_equal(char* expected, char* actual, const char* function, unsigned int line)
|
void seatest_assert_string_equal(char* expected, char* actual, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
sprintf(s, "Expected %s but was %s", expected, actual);
|
sprintf(s, "Expected %s but was %s", expected, actual);
|
||||||
seatest_simple_test_result(strcmp(expected, actual)==0, s, function, line);
|
seatest_simple_test_result(strcmp(expected, actual)==0, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_string_ends_with(char* expected, char* actual, const char* function, unsigned int line)
|
void seatest_assert_string_ends_with(char* expected, char* actual, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
sprintf(s, "Expected %s to end with %s", actual, expected);
|
sprintf(s, "Expected %s to end with %s", actual, expected);
|
||||||
seatest_simple_test_result(strcmp(expected, actual+(strlen(actual)-strlen(expected)))==0, s, function, line);
|
seatest_simple_test_result(strcmp(expected, actual+(strlen(actual)-strlen(expected)))==0, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_string_starts_with(char* expected, char* actual, const char* function, unsigned int line)
|
void seatest_assert_string_starts_with(char* expected, char* actual, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
sprintf(s, "Expected %s to start with %s", actual, expected);
|
sprintf(s, "Expected %s to start with %s", actual, expected);
|
||||||
seatest_simple_test_result(strncmp(expected, actual, strlen(expected))==0, s, function, line);
|
seatest_simple_test_result(strncmp(expected, actual, strlen(expected))==0, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_string_contains(char* expected, char* actual, const char* function, unsigned int line)
|
void seatest_assert_string_contains(char* expected, char* actual, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
sprintf(s, "Expected %s to be in %s", expected, actual);
|
sprintf(s, "Expected %s to be in %s", expected, actual);
|
||||||
seatest_simple_test_result(strstr(actual, expected)!=0, s, function, line);
|
seatest_simple_test_result(strstr(actual, expected)!=0, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_assert_string_doesnt_contain(char* expected, char* actual, const char* function, unsigned int line)
|
void seatest_assert_string_doesnt_contain(char* expected, char* actual, const char* function, unsigned int line)
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
sprintf(s, "Expected %s not to have %s in it", actual, expected);
|
sprintf(s, "Expected %s not to have %s in it", actual, expected);
|
||||||
seatest_simple_test_result(strstr(actual, expected)==0, s, function, line);
|
seatest_simple_test_result(strstr(actual, expected)==0, s, function, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_run_test(void)
|
void seatest_run_test(void)
|
||||||
{
|
{
|
||||||
sea_tests_run++;
|
sea_tests_run++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_header_printer(char* s, int length, char f)
|
void seatest_header_printer(char* s, int length, char f)
|
||||||
{
|
{
|
||||||
int l = strlen(s);
|
int l = strlen(s);
|
||||||
int d = (length- (l + 2)) / 2;
|
int d = (length- (l + 2)) / 2;
|
||||||
int i;
|
int i;
|
||||||
for(i = 0; i<d; i++) printf("%c",f);
|
for(i = 0; i<d; i++) printf("%c",f);
|
||||||
printf(" %s ", s);
|
printf(" %s ", s);
|
||||||
for(i = (d+l+2); i<length; i++) printf("%c",f);
|
for(i = (d+l+2); i<length; i++) printf("%c",f);
|
||||||
printf("\r\n");
|
printf("\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void seatest_test_fixture_start(char* filepath)
|
void seatest_test_fixture_start(char* filepath)
|
||||||
{
|
{
|
||||||
seatest_current_fixture = test_file_name(filepath);
|
seatest_current_fixture = test_file_name(filepath);
|
||||||
seatest_header_printer(seatest_current_fixture, 50, '-');
|
seatest_header_printer(seatest_current_fixture, 50, '-');
|
||||||
seatest_fixture_tests_failed = sea_tests_failed;
|
seatest_fixture_tests_failed = sea_tests_failed;
|
||||||
seatest_fixture_tests_run = sea_tests_run;
|
seatest_fixture_tests_run = sea_tests_run;
|
||||||
seatest_fixture_teardown = 0;
|
seatest_fixture_teardown = 0;
|
||||||
seatest_fixture_setup = 0;
|
seatest_fixture_setup = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void seatest_test_fixture_end()
|
void seatest_test_fixture_end()
|
||||||
{
|
{
|
||||||
char s[SEATEST_PRINT_BUFFER_SIZE];
|
char s[SEATEST_PRINT_BUFFER_SIZE];
|
||||||
sprintf(s, "%d run %d failed", sea_tests_run-seatest_fixture_tests_run, sea_tests_failed-seatest_fixture_tests_failed);
|
sprintf(s, "%d run %d failed", sea_tests_run-seatest_fixture_tests_run, sea_tests_failed-seatest_fixture_tests_failed);
|
||||||
seatest_header_printer(s, 50, ' ');
|
seatest_header_printer(s, 50, ' ');
|
||||||
printf("\r\n");
|
printf("\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
static char* seatest_fixture_filter = 0;
|
static char* seatest_fixture_filter = 0;
|
||||||
static char* seatest_test_filter = 0;
|
static char* seatest_test_filter = 0;
|
||||||
|
|
||||||
void fixture_filter(char* filter)
|
void fixture_filter(char* filter)
|
||||||
{
|
{
|
||||||
seatest_fixture_filter = filter;
|
seatest_fixture_filter = filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void test_filter(char* filter)
|
void test_filter(char* filter)
|
||||||
{
|
{
|
||||||
seatest_test_filter = filter;
|
seatest_test_filter = filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int seatest_should_run( char* fixture, char* test)
|
int seatest_should_run( char* fixture, char* test)
|
||||||
{
|
{
|
||||||
int run = 1;
|
int run = 1;
|
||||||
if(seatest_fixture_filter)
|
if(seatest_fixture_filter)
|
||||||
{
|
{
|
||||||
if(strncmp(seatest_fixture_filter, fixture, strlen(seatest_fixture_filter)) != 0) run = 0;
|
if(strncmp(seatest_fixture_filter, fixture, strlen(seatest_fixture_filter)) != 0) run = 0;
|
||||||
}
|
}
|
||||||
if(seatest_test_filter)
|
if(seatest_test_filter)
|
||||||
{
|
{
|
||||||
if(strncmp(seatest_test_filter, test, strlen(seatest_test_filter)) != 0) run = 0;
|
if(strncmp(seatest_test_filter, test, strlen(seatest_test_filter)) != 0) run = 0;
|
||||||
}
|
}
|
||||||
return run;
|
return run;
|
||||||
}
|
}
|
||||||
|
|
||||||
int run_tests(void (*tests)(void))
|
int run_tests(void (*tests)(void))
|
||||||
{
|
{
|
||||||
unsigned long end;
|
unsigned long end;
|
||||||
unsigned long start = GetTickCount();
|
unsigned long start = GetTickCount();
|
||||||
tests();
|
tests();
|
||||||
end = GetTickCount();
|
end = GetTickCount();
|
||||||
printf("\r\n\r\n==================SEATEST v%s====================\r\n\r\n", SEATEST_VERSION);
|
printf("\r\n\r\n==================SEATEST v%s====================\r\n\r\n", SEATEST_VERSION);
|
||||||
if (sea_tests_failed > 0) {
|
if (sea_tests_failed > 0) {
|
||||||
printf(" Failed\r\n");
|
printf(" Failed\r\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printf(" ALL TESTS PASSED\r\n");
|
printf(" ALL TESTS PASSED\r\n");
|
||||||
}
|
}
|
||||||
printf(" %d tests run\r\n", sea_tests_run);
|
printf(" %d tests run\r\n", sea_tests_run);
|
||||||
printf(" in %lu ms\r\n",end - start);
|
printf(" in %lu ms\r\n",end - start);
|
||||||
printf("==================================================\r\n");
|
printf("==================================================\r\n");
|
||||||
|
|
||||||
_getch();
|
_getch();
|
||||||
return sea_tests_failed == 0;
|
return sea_tests_failed == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,74 +1,74 @@
|
|||||||
#ifndef SEATEST_H
|
#ifndef SEATEST_H
|
||||||
#define SEATEST_H
|
#define SEATEST_H
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Defines
|
Defines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define SEATEST_VERSION "0.5"
|
#define SEATEST_VERSION "0.5"
|
||||||
#define SEATEST_PROJECT_HOME "http://code.google.com/p/seatest/"
|
#define SEATEST_PROJECT_HOME "http://code.google.com/p/seatest/"
|
||||||
#define SEATEST_PRINT_BUFFER_SIZE 100000
|
#define SEATEST_PRINT_BUFFER_SIZE 100000
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Declarations
|
Declarations
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void seatest_test_fixture_start(char* filepath);
|
void seatest_test_fixture_start(char* filepath);
|
||||||
void seatest_test_fixture_end( void );
|
void seatest_test_fixture_end( void );
|
||||||
void seatest_simple_test_result(int passed, char* reason, const char* function, unsigned int line);
|
void seatest_simple_test_result(int passed, char* reason, const char* function, unsigned int line);
|
||||||
void seatest_assert_true(int test, const char* function, unsigned int line);
|
void seatest_assert_true(int test, const char* function, unsigned int line);
|
||||||
void seatest_assert_false(int test, const char* function, unsigned int line);
|
void seatest_assert_false(int test, const char* function, unsigned int line);
|
||||||
void seatest_assert_int_equal(int expected, int actual, const char* function, unsigned int line);
|
void seatest_assert_int_equal(int expected, int actual, const char* function, unsigned int line);
|
||||||
void seatest_assert_ulong_equal(unsigned long expected, unsigned long actual, const char* function, unsigned int line);
|
void seatest_assert_ulong_equal(unsigned long expected, unsigned long actual, const char* function, unsigned int line);
|
||||||
void seatest_assert_float_equal(float expected, float actual, float delta, const char* function, unsigned int line);
|
void seatest_assert_float_equal(float expected, float actual, float delta, const char* function, unsigned int line);
|
||||||
void seatest_assert_double_equal(double expected, double actual, double delta, const char* function, unsigned int line);
|
void seatest_assert_double_equal(double expected, double actual, double delta, const char* function, unsigned int line);
|
||||||
void seatest_assert_string_equal(char* expected, char* actual, const char* function, unsigned int line);
|
void seatest_assert_string_equal(char* expected, char* actual, const char* function, unsigned int line);
|
||||||
void seatest_assert_string_ends_with(char* expected, char* actual, const char* function, unsigned int line);
|
void seatest_assert_string_ends_with(char* expected, char* actual, const char* function, unsigned int line);
|
||||||
void seatest_assert_string_starts_with(char* expected, char* actual, const char* function, unsigned int line);
|
void seatest_assert_string_starts_with(char* expected, char* actual, const char* function, unsigned int line);
|
||||||
void seatest_assert_string_contains(char* expected, char* actual, const char* function, unsigned int line);
|
void seatest_assert_string_contains(char* expected, char* actual, const char* function, unsigned int line);
|
||||||
void seatest_assert_string_doesnt_contain(char* expected, char* actual, const char* function, unsigned int line);
|
void seatest_assert_string_doesnt_contain(char* expected, char* actual, const char* function, unsigned int line);
|
||||||
int seatest_should_run( char* fixture, char* test);
|
int seatest_should_run( char* fixture, char* test);
|
||||||
void seatest_run_test(void);
|
void seatest_run_test(void);
|
||||||
void seatest_setup( void );
|
void seatest_setup( void );
|
||||||
void seatest_teardown( void );
|
void seatest_teardown( void );
|
||||||
void seatest_suite_teardown( void );
|
void seatest_suite_teardown( void );
|
||||||
void seatest_suite_setup( void );
|
void seatest_suite_setup( void );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Assert Macros
|
Assert Macros
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define assert_true(test) do { seatest_assert_true(test, __FUNCTION__, __LINE__); } while (0)
|
#define assert_true(test) do { seatest_assert_true(test, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_false(test) do { seatest_assert_false(test, __FUNCTION__, __LINE__); } while (0)
|
#define assert_false(test) do { seatest_assert_false(test, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_int_equal(expected, actual) do { seatest_assert_int_equal(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
#define assert_int_equal(expected, actual) do { seatest_assert_int_equal(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_ulong_equal(expected, actual) do { seatest_assert_ulong_equal(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
#define assert_ulong_equal(expected, actual) do { seatest_assert_ulong_equal(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_string_equal(expected, actual) do { seatest_assert_string_equal(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
#define assert_string_equal(expected, actual) do { seatest_assert_string_equal(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_n_array_equal(expected, actual, n) do { int seatest_count; for(seatest_count=0; seatest_count<n; seatest_count++) { char s_seatest[SEATEST_PRINT_BUFFER_SIZE]; sprintf(s_seatest,"Expected %d to be %d at position %d", actual[seatest_count], expected[seatest_count], seatest_count); seatest_simple_test_result((expected[seatest_count] == actual[seatest_count]), s_seatest, __FUNCTION__, __LINE__);} } while (0)
|
#define assert_n_array_equal(expected, actual, n) do { int seatest_count; for(seatest_count=0; seatest_count<n; seatest_count++) { char s_seatest[SEATEST_PRINT_BUFFER_SIZE]; sprintf(s_seatest,"Expected %d to be %d at position %d", actual[seatest_count], expected[seatest_count], seatest_count); seatest_simple_test_result((expected[seatest_count] == actual[seatest_count]), s_seatest, __FUNCTION__, __LINE__);} } while (0)
|
||||||
#define assert_bit_set(bit_number, value) { seatest_simple_test_result(((1 << bit_number) & value), " Expected bit to be set" , __FUNCTION__, __LINE__); } while (0)
|
#define assert_bit_set(bit_number, value) { seatest_simple_test_result(((1 << bit_number) & value), " Expected bit to be set" , __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_bit_not_set(bit_number, value) { seatest_simple_test_result(!((1 << bit_number) & value), " Expected bit not to to be set" , __FUNCTION__, __LINE__); } while (0)
|
#define assert_bit_not_set(bit_number, value) { seatest_simple_test_result(!((1 << bit_number) & value), " Expected bit not to to be set" , __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_bit_mask_matches(value, mask) { seatest_simple_test_result(((value & mask) == mask), " Expected all bits of mask to be set" , __FUNCTION__, __LINE__); } while (0)
|
#define assert_bit_mask_matches(value, mask) { seatest_simple_test_result(((value & mask) == mask), " Expected all bits of mask to be set" , __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_fail(message) { seatest_simple_test_result(0, message, __FUNCTION__, __LINE__); } while (0)
|
#define assert_fail(message) { seatest_simple_test_result(0, message, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_float_equal(expected, actual, delta) do { seatest_assert_float_equal(expected, actual, delta, __FUNCTION__, __LINE__); } while (0)
|
#define assert_float_equal(expected, actual, delta) do { seatest_assert_float_equal(expected, actual, delta, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_double_equal(expected, actual, delta) do { seatest_assert_double_equal(expected, actual, delta, __FUNCTION__, __LINE__); } while (0)
|
#define assert_double_equal(expected, actual, delta) do { seatest_assert_double_equal(expected, actual, delta, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_string_contains(expected, actual) do { seatest_assert_string_contains(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
#define assert_string_contains(expected, actual) do { seatest_assert_string_contains(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_string_doesnt_contain(expected, actual) do { seatest_assert_string_doesnt_contain(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
#define assert_string_doesnt_contain(expected, actual) do { seatest_assert_string_doesnt_contain(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_string_starts_with(expected, actual) do { seatest_assert_string_starts_with(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
#define assert_string_starts_with(expected, actual) do { seatest_assert_string_starts_with(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
||||||
#define assert_string_ends_with(expected, actual) do { seatest_assert_string_ends_with(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
#define assert_string_ends_with(expected, actual) do { seatest_assert_string_ends_with(expected, actual, __FUNCTION__, __LINE__); } while (0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Fixture / Test Management
|
Fixture / Test Management
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void fixture_setup(void (*setup)( void ));
|
void fixture_setup(void (*setup)( void ));
|
||||||
void fixture_teardown(void (*teardown)( void ));
|
void fixture_teardown(void (*teardown)( void ));
|
||||||
#define run_test(test) do { if(seatest_should_run(__FILE__, #test)) {seatest_suite_setup(); seatest_setup(); test(); seatest_teardown(); seatest_suite_teardown(); seatest_run_test(); }} while (0)
|
#define run_test(test) do { if(seatest_should_run(__FILE__, #test)) {seatest_suite_setup(); seatest_setup(); test(); seatest_teardown(); seatest_suite_teardown(); seatest_run_test(); }} while (0)
|
||||||
#define test_fixture_start() do { seatest_test_fixture_start(__FILE__); } while (0)
|
#define test_fixture_start() do { seatest_test_fixture_start(__FILE__); } while (0)
|
||||||
#define test_fixture_end() do { seatest_test_fixture_end();} while (0)
|
#define test_fixture_end() do { seatest_test_fixture_end();} while (0)
|
||||||
void fixture_filter(char* filter);
|
void fixture_filter(char* filter);
|
||||||
void test_filter(char* filter);
|
void test_filter(char* filter);
|
||||||
|
|
||||||
int run_tests(void (*tests)(void));
|
int run_tests(void (*tests)(void));
|
||||||
void suite_teardown(void (*teardown)( void ));
|
void suite_teardown(void (*teardown)( void ));
|
||||||
void suite_setup(void (*setup)( void ));
|
void suite_setup(void (*setup)( void ));
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,48 +1,48 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
||||||
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
||||||
|
|
||||||
<!ENTITY admin SYSTEM "osp_admin.xml">
|
<!ENTITY admin SYSTEM "osp_admin.xml">
|
||||||
<!ENTITY devel SYSTEM "osp_devel.xml">
|
<!ENTITY devel SYSTEM "osp_devel.xml">
|
||||||
<!ENTITY faq SYSTEM "osp_faq.xml">
|
<!ENTITY faq SYSTEM "osp_faq.xml">
|
||||||
|
|
||||||
<!-- Include general documentation entities -->
|
<!-- Include general documentation entities -->
|
||||||
<!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
|
<!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
|
||||||
%docentities;
|
%docentities;
|
||||||
|
|
||||||
]>
|
]>
|
||||||
|
|
||||||
<book>
|
<book>
|
||||||
<bookinfo>
|
<bookinfo>
|
||||||
<title>OSP Module for Secure, Multi-Lateral Peering</title>
|
<title>OSP Module for Secure, Multi-Lateral Peering</title>
|
||||||
<productname class="trade">&sername;</productname>
|
<productname class="trade">&sername;</productname>
|
||||||
<authorgroup>
|
<authorgroup>
|
||||||
<author>
|
<author>
|
||||||
<firstname>Ulrich</firstname>
|
<firstname>Ulrich</firstname>
|
||||||
<surname>Abend</surname>
|
<surname>Abend</surname>
|
||||||
<affiliation>
|
<affiliation>
|
||||||
<orgname>&fhg;</orgname>
|
<orgname>&fhg;</orgname>
|
||||||
<address><email>ullstar@iptel.org</email></address>
|
<address><email>ullstar@iptel.org</email></address>
|
||||||
</affiliation>
|
</affiliation>
|
||||||
</author>
|
</author>
|
||||||
<editor>
|
<editor>
|
||||||
<firstname>Di-Shi</firstname>
|
<firstname>Di-Shi</firstname>
|
||||||
<surname>Sun</surname>
|
<surname>Sun</surname>
|
||||||
<affiliation>
|
<affiliation>
|
||||||
<orgname>TransNexus, Inc.</orgname>
|
<orgname>TransNexus, Inc.</orgname>
|
||||||
<address><email>support@transnexus.com</email></address>
|
<address><email>support@transnexus.com</email></address>
|
||||||
</affiliation>
|
</affiliation>
|
||||||
</editor>
|
</editor>
|
||||||
</authorgroup>
|
</authorgroup>
|
||||||
<copyright>
|
<copyright>
|
||||||
<year>2003</year>
|
<year>2003</year>
|
||||||
<holder>&fhg;</holder>
|
<holder>&fhg;</holder>
|
||||||
</copyright>
|
</copyright>
|
||||||
</bookinfo>
|
</bookinfo>
|
||||||
<toc></toc>
|
<toc></toc>
|
||||||
|
|
||||||
&admin;
|
&admin;
|
||||||
&devel;
|
&devel;
|
||||||
&faq;
|
&faq;
|
||||||
|
|
||||||
</book>
|
</book>
|
||||||
|
@ -1,363 +1,363 @@
|
|||||||
<!-- OSP Module User's Guide -->
|
<!-- OSP Module User's Guide -->
|
||||||
|
|
||||||
<chapter>
|
<chapter>
|
||||||
<chapterinfo>
|
<chapterinfo>
|
||||||
</chapterinfo>
|
</chapterinfo>
|
||||||
<title>User's Guide</title>
|
<title>User's Guide</title>
|
||||||
<section>
|
<section>
|
||||||
<title>Overview</title>
|
<title>Overview</title>
|
||||||
<para>The OSP module enables SER to support secure, multi-lateral peering using the OSP standard defined by ETSI (TS 101 321 V4.1.1). This module will enable your SER to:</para>
|
<para>The OSP module enables SER to support secure, multi-lateral peering using the OSP standard defined by ETSI (TS 101 321 V4.1.1). This module will enable your SER to:</para>
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Send a peering authorization request to a peering server.</para>
|
<para>Send a peering authorization request to a peering server.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Validate a digitally signed peering authorization token received in a SIP INVITE message.</para>
|
<para>Validate a digitally signed peering authorization token received in a SIP INVITE message.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>Report usage information to a peering server.</para>
|
<para>Report usage information to a peering server.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title>Dependencies</title>
|
<title>Dependencies</title>
|
||||||
<para>The OSP module depends on the following modules which must be loaded before the OSP module.</para>
|
<para>The OSP module depends on the following modules which must be loaded before the OSP module.</para>
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para><emphasis>sl</emphasis> -- stateless replier</para>
|
<para><emphasis>sl</emphasis> -- stateless replier</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para><emphasis>tm</emphasis> -- stateful processing</para>
|
<para><emphasis>tm</emphasis> -- stateful processing</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para><emphasis>rr</emphasis> -- Record-Route/Route operation</para>
|
<para><emphasis>rr</emphasis> -- Record-Route/Route operation</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para><emphasis>textops</emphasis> -- text based operation</para>
|
<para><emphasis>textops</emphasis> -- text based operation</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para><emphasis>avpops</emphasis> -- AVP operation</para>
|
<para><emphasis>avpops</emphasis> -- AVP operation</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para><emphasis>OSP Toolkit</emphasis> -- The OSP Toolkit, available from http://sourceforge.net/projects/osp-toolkit, must be built before building SER with the OSP Module. For instructions on building SER with the OSP Toolkit, see http://www.transnexus.com/White%20Papers/Multi-Lateral_Peering_with_SER_V2.0.x.pdf</para>
|
<para><emphasis>OSP Toolkit</emphasis> -- The OSP Toolkit, available from http://sourceforge.net/projects/osp-toolkit, must be built before building SER with the OSP Module. For instructions on building SER with the OSP Toolkit, see http://www.transnexus.com/White%20Papers/Multi-Lateral_Peering_with_SER_V2.0.x.pdf</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title>Exported Parameters</title>
|
<title>Exported Parameters</title>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>sp1_uri</varname>, <varname>sp2_uri</varname>, ..., <varname>sp16_uri</varname></title>
|
<title><varname>sp1_uri</varname>, <varname>sp2_uri</varname>, ..., <varname>sp16_uri</varname></title>
|
||||||
<para>These sp_uri (string) parameters define peering servers to be used for requesting peering authorization and routing information. At least one peering server must be configured. Others are required only if there are more than one peering servers. Each peering server address takes the form of a standard URL, and consists of up to four components:</para>
|
<para>These sp_uri (string) parameters define peering servers to be used for requesting peering authorization and routing information. At least one peering server must be configured. Others are required only if there are more than one peering servers. Each peering server address takes the form of a standard URL, and consists of up to four components:</para>
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>An optional indication of the protocol to be used for communicating with the peering server. Both HTTP and HTTP secured with SSL/TLS are supported and are indicated by "http://" and "https://" respectively. If the protocol is not explicitly indicated, the SER defaults to HTTP secured with SSL.</para>
|
<para>An optional indication of the protocol to be used for communicating with the peering server. Both HTTP and HTTP secured with SSL/TLS are supported and are indicated by "http://" and "https://" respectively. If the protocol is not explicitly indicated, the SER defaults to HTTP secured with SSL.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>The Internet domain name for the peering server. An IP address may also be used, provided it is enclosed in square brackets such as [172.16.1.1].</para>
|
<para>The Internet domain name for the peering server. An IP address may also be used, provided it is enclosed in square brackets such as [172.16.1.1].</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>An optional TCP port number for communicating with the peering server. If the port number is omitted, the SER defaults to port 1080 (for HTTP) or port 1443 (for HTTP secured with SSL).</para>
|
<para>An optional TCP port number for communicating with the peering server. If the port number is omitted, the SER defaults to port 1080 (for HTTP) or port 1443 (for HTTP secured with SSL).</para>
|
||||||
<para>The uniform resource identifier for requests to the peering server. This component is not optional and must be included.</para>
|
<para>The uniform resource identifier for requests to the peering server. This component is not optional and must be included.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the OSP servers</title>
|
<title>Setting the OSP servers</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","sp1_uri","http://osptestserver.transnexus.com:1080/osp")
|
modparam("osp","sp1_uri","http://osptestserver.transnexus.com:1080/osp")
|
||||||
modparam("osp","sp2_uri","https://[1.2.3.4]:1443/osp")
|
modparam("osp","sp2_uri","https://[1.2.3.4]:1443/osp")
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>device_ip</varname></title>
|
<title><varname>device_ip</varname></title>
|
||||||
<para>The device_ip (string) is a recommended parameter that explicitly defines the IP address of SER in a peering request message (as SourceAlternate type=transport). The IP address must be in brackets as shown in the example below.</para>
|
<para>The device_ip (string) is a recommended parameter that explicitly defines the IP address of SER in a peering request message (as SourceAlternate type=transport). The IP address must be in brackets as shown in the example below.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the device IP address</title>
|
<title>Setting the device IP address</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","device_ip","[1.1.1.1]")
|
modparam("osp","device_ip","[1.1.1.1]")
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>token_format</varname></title>
|
<title><varname>token_format</varname></title>
|
||||||
<para>When SER receives a SIP INVITE with a peering token, the OSP Module will validate the token to determine whether or not the call has been authorized by a peering server. Peering tokens may, or may not, be digitally signed. The token format (integer) parameter defines if SER will validate signed or unsigned tokens or both. The values for token format are defined below. The default value is 2.</para>
|
<para>When SER receives a SIP INVITE with a peering token, the OSP Module will validate the token to determine whether or not the call has been authorized by a peering server. Peering tokens may, or may not, be digitally signed. The token format (integer) parameter defines if SER will validate signed or unsigned tokens or both. The values for token format are defined below. The default value is 2.</para>
|
||||||
<para>0 - Validate only signed tokens. Calls with valid signed tokens are allowed.</para>
|
<para>0 - Validate only signed tokens. Calls with valid signed tokens are allowed.</para>
|
||||||
<para>1 - Validate only unsigned tokens. Calls with valid unsigned tokens are allowed.</para>
|
<para>1 - Validate only unsigned tokens. Calls with valid unsigned tokens are allowed.</para>
|
||||||
<para>2 - Validate both signed and unsigned tokens are allowed. Calls with valid tokens are allowed.</para>
|
<para>2 - Validate both signed and unsigned tokens are allowed. Calls with valid tokens are allowed.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the token format</title>
|
<title>Setting the token format</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","token_format",2)
|
modparam("osp","token_format",2)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>private_key</varname>, <varname>local_certificate</varname>, <varname>ca_certificates</varname></title>
|
<title><varname>private_key</varname>, <varname>local_certificate</varname>, <varname>ca_certificates</varname></title>
|
||||||
<para>These parameters identify files are used for validating peering authorization tokens and establishing a secure channel between SER and a peering server using SSL. The files are generated using the 'Enroll' utility from the OSP Toolkit. By default, the proxy will look for pkey.pem, localcert.pem, and cacart_0.pem in the default configuration directory. The default config directory is set at compile time using CFG_DIR and defaults to /usr/local/etc/ser/. The files may be copied to the expected file location or the parameters below may be changed.</para>
|
<para>These parameters identify files are used for validating peering authorization tokens and establishing a secure channel between SER and a peering server using SSL. The files are generated using the 'Enroll' utility from the OSP Toolkit. By default, the proxy will look for pkey.pem, localcert.pem, and cacart_0.pem in the default configuration directory. The default config directory is set at compile time using CFG_DIR and defaults to /usr/local/etc/ser/. The files may be copied to the expected file location or the parameters below may be changed.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Set authorization files</title>
|
<title>Set authorization files</title>
|
||||||
<para>If the default CFG_DIR value was used at compile time, the files will be loaded from:</para>
|
<para>If the default CFG_DIR value was used at compile time, the files will be loaded from:</para>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","private_key","/usr/local/etc/ser/pkey.pem")
|
modparam("osp","private_key","/usr/local/etc/ser/pkey.pem")
|
||||||
modparam("osp","local_certificate","/usr/local/etc/ser/localcert.pem")
|
modparam("osp","local_certificate","/usr/local/etc/ser/localcert.pem")
|
||||||
modparam("osp","ca_certificates","/usr/local/etc/ser/cacert.pem")
|
modparam("osp","ca_certificates","/usr/local/etc/ser/cacert.pem")
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>sp1_weight</varname>, <varname>sp2_weight</varname>, ..., <varname>sp16_weight</varname></title>
|
<title><varname>sp1_weight</varname>, <varname>sp2_weight</varname>, ..., <varname>sp16_weight</varname></title>
|
||||||
<para>These sp_weight (integer) parameters are used for load balancing peering requests to peering servers. These parameters are most effective when configured as factors of 1000. For example, if sp1_uri should manage twice the traffic load of sp2_uri, then set sp1_weight to 2000 and sp2_weight to 1000. Shared load balancing between peering servers is recommended. However, peering servers can be configured as primary and backup by assigning a sp_weight of 0 to the primary server and a non-zero sp_weight to the back-up server. The default values for sp1_weight and sp2_weight are 1000.</para>
|
<para>These sp_weight (integer) parameters are used for load balancing peering requests to peering servers. These parameters are most effective when configured as factors of 1000. For example, if sp1_uri should manage twice the traffic load of sp2_uri, then set sp1_weight to 2000 and sp2_weight to 1000. Shared load balancing between peering servers is recommended. However, peering servers can be configured as primary and backup by assigning a sp_weight of 0 to the primary server and a non-zero sp_weight to the back-up server. The default values for sp1_weight and sp2_weight are 1000.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the OSP server weights</title>
|
<title>Setting the OSP server weights</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","sp1_weight",1000)
|
modparam("osp","sp1_weight",1000)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>device_port</varname></title>
|
<title><varname>device_port</varname></title>
|
||||||
<para>The device_port (string) parameter is an optional field which includes the SIP port being used by SER in the peering request (as SourceAlternate type=network) to the peering server. If is not configured, this information is not included in the peering request. This field is useful if multiple SERs are running on the same Linux computer since it enables the peering server to administer different peering policies based on different SIP proxies. This parameter has not been implemented yet.</para>
|
<para>The device_port (string) parameter is an optional field which includes the SIP port being used by SER in the peering request (as SourceAlternate type=network) to the peering server. If is not configured, this information is not included in the peering request. This field is useful if multiple SERs are running on the same Linux computer since it enables the peering server to administer different peering policies based on different SIP proxies. This parameter has not been implemented yet.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the device port</title>
|
<title>Setting the device port</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","device_port","5060")
|
modparam("osp","device_port","5060")
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>enable_crypto_hardware_support</varname></title>
|
<title><varname>enable_crypto_hardware_support</varname></title>
|
||||||
<para>The enable_crypto_hardware_support (integer) parameter is used to set the cryptographic hardware acceleration engine in the openssl library. The default value is 0 (no crypto hardware is present). If crypto hardware is used, the value should be set to 1.</para>
|
<para>The enable_crypto_hardware_support (integer) parameter is used to set the cryptographic hardware acceleration engine in the openssl library. The default value is 0 (no crypto hardware is present). If crypto hardware is used, the value should be set to 1.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the hardware support</title>
|
<title>Setting the hardware support</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","enable_crypto_hardware_support",0)
|
modparam("osp","enable_crypto_hardware_support",0)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>ssl_lifetime</varname></title>
|
<title><varname>ssl_lifetime</varname></title>
|
||||||
<para>The ssl_lifetime (integer) parameter defines the lifetime, in seconds, of a single SSL session key. Once this time limit is exceeded, the OSP Module will negotiate a new session key. Communication exchanges in progress will not be interrupted when this time limit expires. This is an optional field with default value is 200 seconds.</para>
|
<para>The ssl_lifetime (integer) parameter defines the lifetime, in seconds, of a single SSL session key. Once this time limit is exceeded, the OSP Module will negotiate a new session key. Communication exchanges in progress will not be interrupted when this time limit expires. This is an optional field with default value is 200 seconds.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the ssl lifetime</title>
|
<title>Setting the ssl lifetime</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","ssl_lifetime",200)
|
modparam("osp","ssl_lifetime",200)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>persistence</varname></title>
|
<title><varname>persistence</varname></title>
|
||||||
<para>The persistence (integer) parameter defines the time, in seconds, that an HTTP connection should be maintained after the completion of a communication exchange. The OSP Module will maintain the connection for this time period in anticipation of future communication exchanges to the same peering server.</para>
|
<para>The persistence (integer) parameter defines the time, in seconds, that an HTTP connection should be maintained after the completion of a communication exchange. The OSP Module will maintain the connection for this time period in anticipation of future communication exchanges to the same peering server.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the persistence</title>
|
<title>Setting the persistence</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","persistence",1000)
|
modparam("osp","persistence",1000)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>retry_delay</varname></title>
|
<title><varname>retry_delay</varname></title>
|
||||||
<para>The retry_delay (integer) parameter defines the time, in seconds, between retrying connection attempts to an OSP peering server. After exhausting all peering servers the OSP Module will delay for this amount of time before resuming connection attempts. This is an optional field with default value is 1 second.</para>
|
<para>The retry_delay (integer) parameter defines the time, in seconds, between retrying connection attempts to an OSP peering server. After exhausting all peering servers the OSP Module will delay for this amount of time before resuming connection attempts. This is an optional field with default value is 1 second.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the retry delay</title>
|
<title>Setting the retry delay</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","retry_delay",1)
|
modparam("osp","retry_delay",1)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>retry_limit</varname></title>
|
<title><varname>retry_limit</varname></title>
|
||||||
<para>The retry_limit (integer) parameter defines the maximum number of retries for connection attempts to a peering server. If no connection is established after this many retry attempts to all peering servers, the OSP Module will cease connection attempts and return appropriate error codes. This number does not count the initial connection attempt, so that a retry_limit of 1 will result in a total of two connection attempts to every peering server. The default value is 2.</para>
|
<para>The retry_limit (integer) parameter defines the maximum number of retries for connection attempts to a peering server. If no connection is established after this many retry attempts to all peering servers, the OSP Module will cease connection attempts and return appropriate error codes. This number does not count the initial connection attempt, so that a retry_limit of 1 will result in a total of two connection attempts to every peering server. The default value is 2.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the retry limit</title>
|
<title>Setting the retry limit</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","retry_limit",2)
|
modparam("osp","retry_limit",2)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>timeout</varname></title>
|
<title><varname>timeout</varname></title>
|
||||||
<para>The timeout (integer) parameter defines the maximum time in milliseconds, to wait for a response from a peering server. If no response is received within this time, the current connection is aborted and the OSP Module attempts to contact the next peering server. The default value is 10 seconds.</para>
|
<para>The timeout (integer) parameter defines the maximum time in milliseconds, to wait for a response from a peering server. If no response is received within this time, the current connection is aborted and the OSP Module attempts to contact the next peering server. The default value is 10 seconds.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the timeout</title>
|
<title>Setting the timeout</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","timeout",10)
|
modparam("osp","timeout",10)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>max_destinations</varname></title>
|
<title><varname>max_destinations</varname></title>
|
||||||
<para>The max_destinations (integer) parameter defines the maximum number of destinations that SER requests the peering server to return in a peering response. The default value is 5.</para>
|
<para>The max_destinations (integer) parameter defines the maximum number of destinations that SER requests the peering server to return in a peering response. The default value is 5.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Setting the number of destination</title>
|
<title>Setting the number of destination</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","max_destinations",5)
|
modparam("osp","max_destinations",5)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>validate_call_id</varname></title>
|
<title><varname>validate_call_id</varname></title>
|
||||||
<para>The validate_call_id (integer) parameter instructs the OSP module to validate call id in the peering token. If this value is set to 1, the OSP Module validates that the call id in the SIP INVITE message matches the call id in the peering token. If they do not match the INVITE is rejected. If this value is set to 0, the OSP Module will not validate the call id in the peering token. The default value is 1.</para>
|
<para>The validate_call_id (integer) parameter instructs the OSP module to validate call id in the peering token. If this value is set to 1, the OSP Module validates that the call id in the SIP INVITE message matches the call id in the peering token. If they do not match the INVITE is rejected. If this value is set to 0, the OSP Module will not validate the call id in the peering token. The default value is 1.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Instructing the module to validate call id</title>
|
<title>Instructing the module to validate call id</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","validate_call_id",1)
|
modparam("osp","validate_call_id",1)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><varname>use_rpid_for_calling_number</varname></title>
|
<title><varname>use_rpid_for_calling_number</varname></title>
|
||||||
<para>The use_rpid_for_calling_number(integer) parameter instructs the OSP module to use the calling number in the Remote-Party-ID of the SIP INVITE message. If this value is set to 1, the OSP Module uses the calling number in the Reomte-Party-ID header of the INVITE message when a Remote-Party-ID exists. If this value is set to 0, the OSP Module will use the calling number in the From header of the INVITE message. The default value is 1.</para>
|
<para>The use_rpid_for_calling_number(integer) parameter instructs the OSP module to use the calling number in the Remote-Party-ID of the SIP INVITE message. If this value is set to 1, the OSP Module uses the calling number in the Reomte-Party-ID header of the INVITE message when a Remote-Party-ID exists. If this value is set to 0, the OSP Module will use the calling number in the From header of the INVITE message. The default value is 1.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>Instructing the module to use calling number in Remote-Party-ID</title>
|
<title>Instructing the module to use calling number in Remote-Party-ID</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
modparam("osp","use_rpid_calling_number",1)
|
modparam("osp","use_rpid_calling_number",1)
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title>Exported Functions</title>
|
<title>Exported Functions</title>
|
||||||
<section>
|
<section>
|
||||||
<title><function moreinfo="none">checkospheader()</function></title>
|
<title><function moreinfo="none">checkospheader()</function></title>
|
||||||
<para>This function checks for the existence of the OSP-Auth-Token header field.</para>
|
<para>This function checks for the existence of the OSP-Auth-Token header field.</para>
|
||||||
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>checkospheader usage</title>
|
<title>checkospheader usage</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
...
|
...
|
||||||
if (checkospheader()) {
|
if (checkospheader()) {
|
||||||
log("OSP header field found.\n");
|
log("OSP header field found.\n");
|
||||||
} else {
|
} else {
|
||||||
log("no OSP header field present\n");
|
log("no OSP header field present\n");
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><function moreinfo="none">validateospheader()</function></title>
|
<title><function moreinfo="none">validateospheader()</function></title>
|
||||||
<para>This function validates an OSP-Token specified in the OSP-Auth-Tokenheader field of the SIP message. If a peering token is present, it will be validated locally. If no OSP header is found or the header token is invalid or expired, -1 is returned; on successful validation 1 is returned.</para>
|
<para>This function validates an OSP-Token specified in the OSP-Auth-Tokenheader field of the SIP message. If a peering token is present, it will be validated locally. If no OSP header is found or the header token is invalid or expired, -1 is returned; on successful validation 1 is returned.</para>
|
||||||
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>validateospheader usage</title>
|
<title>validateospheader usage</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
...
|
...
|
||||||
if (validateospheader()) {
|
if (validateospheader()) {
|
||||||
log("valid OSP header found\n");
|
log("valid OSP header found\n");
|
||||||
} else {
|
} else {
|
||||||
log("OSP header not found, invalid or expired\n");
|
log("OSP header not found, invalid or expired\n");
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><function moreinfo="none">requestosprouting()</function></title>
|
<title><function moreinfo="none">requestosprouting()</function></title>
|
||||||
<para>This function launches a query to the peering server requesting the IP address of one or more destination peers serving the called party. If destination peers are available, the peering server will return the IP address and a peering authorization token for each destination peer. The OSP-Auth-Token Header field is inserted into the SIP message and the SIP uri is rewritten to the IP address of destination peer provided by the peering server.</para>
|
<para>This function launches a query to the peering server requesting the IP address of one or more destination peers serving the called party. If destination peers are available, the peering server will return the IP address and a peering authorization token for each destination peer. The OSP-Auth-Token Header field is inserted into the SIP message and the SIP uri is rewritten to the IP address of destination peer provided by the peering server.</para>
|
||||||
<para>The address of the called party must be a valid E164 number, otherwise this function returns -1. If the transaction was accepted by the peering server, the uri is being rewritten and 1 returned, on errors (peering servers are not available, authentication failed or there is no route to destination or the route is blocked) -1 is returned.</para>
|
<para>The address of the called party must be a valid E164 number, otherwise this function returns -1. If the transaction was accepted by the peering server, the uri is being rewritten and 1 returned, on errors (peering servers are not available, authentication failed or there is no route to destination or the route is blocked) -1 is returned.</para>
|
||||||
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>requestosprouting usage</title>
|
<title>requestosprouting usage</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
...
|
...
|
||||||
if (requestosprouting()) {
|
if (requestosprouting()) {
|
||||||
log("successfully queried OSP server, now relaying call\n");
|
log("successfully queried OSP server, now relaying call\n");
|
||||||
} else {
|
} else {
|
||||||
log("Authorization request was rejected from OSP server\n");
|
log("Authorization request was rejected from OSP server\n");
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><function moreinfo="none">prepareospfirstroute()</function></title>
|
<title><function moreinfo="none">prepareospfirstroute()</function></title>
|
||||||
<para>This function tries to prepare the INVITE to be forwarded or redirected using the first destination in the list returned by the peering server. If the route could not be prepared, the function returns 'FALSE' back to the script, which can then decide how to handle the failure.</para>
|
<para>This function tries to prepare the INVITE to be forwarded or redirected using the first destination in the list returned by the peering server. If the route could not be prepared, the function returns 'FALSE' back to the script, which can then decide how to handle the failure.</para>
|
||||||
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>prepareospfirstroute usage</title>
|
<title>prepareospfirstroute usage</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
...
|
...
|
||||||
if (prepareospfirstroute ()) {
|
if (prepareospfirstroute ()) {
|
||||||
log("successfully prepared the first route, now relaying call\n");
|
log("successfully prepared the first route, now relaying call\n");
|
||||||
} else {
|
} else {
|
||||||
log("could not prepare the route. The first destination was blocked\n");
|
log("could not prepare the route. The first destination was blocked\n");
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><function moreinfo="none">prepareosprnextoute()</function></title>
|
<title><function moreinfo="none">prepareosprnextoute()</function></title>
|
||||||
<para>Once the call could not be completed through the first destination, this function tries to prepare the INVITE message using the next destination in the list returned by the peering Server. If it succeeds in preparing the route, the message is either redirected or relayed on (using the t_relay call), or else the function returns 'FALSE' back to the script, which can then decide how to handle the failure.</para>
|
<para>Once the call could not be completed through the first destination, this function tries to prepare the INVITE message using the next destination in the list returned by the peering Server. If it succeeds in preparing the route, the message is either redirected or relayed on (using the t_relay call), or else the function returns 'FALSE' back to the script, which can then decide how to handle the failure.</para>
|
||||||
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>prepareospnextroute usage</title>
|
<title>prepareospnextroute usage</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
...
|
...
|
||||||
if (prepareospnextroute ()) {
|
if (prepareospnextroute ()) {
|
||||||
log("successfully prepared the next route, now relaying call\n");
|
log("successfully prepared the next route, now relaying call\n");
|
||||||
} else {
|
} else {
|
||||||
log("could not prepare the route. No next destination available\n");
|
log("could not prepare the route. No next destination available\n");
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><function moreinfo="none">appendospheaders()</function></title>
|
<title><function moreinfo="none">appendospheaders()</function></title>
|
||||||
<para>This function is used to append route specific OSP headers. Before calling appendospheaders, prepareospfirst/nextroute should be called.</para>
|
<para>This function is used to append route specific OSP headers. Before calling appendospheaders, prepareospfirst/nextroute should be called.</para>
|
||||||
<para>This function can be used from BRANCH_ROUTE.</para>
|
<para>This function can be used from BRANCH_ROUTE.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>appendospheaders usage</title>
|
<title>appendospheaders usage</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
...
|
...
|
||||||
branch_route[1] {
|
branch_route[1] {
|
||||||
log("Prepare route specific OSP information\n");
|
log("Prepare route specific OSP information\n");
|
||||||
appendospheaders();
|
appendospheaders();
|
||||||
}
|
}
|
||||||
...
|
...
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><function moreinfo="none">prepareallosproute()</function></title>
|
<title><function moreinfo="none">prepareallosproute()</function></title>
|
||||||
<para>This function tries to prepare all the routes in the list returned by the peering server. The message is then either forked off or redirected to the destination. If unsuccessful in preparing the routes a SIP 500 is sent back and a trace message is logged.</para>
|
<para>This function tries to prepare all the routes in the list returned by the peering server. The message is then either forked off or redirected to the destination. If unsuccessful in preparing the routes a SIP 500 is sent back and a trace message is logged.</para>
|
||||||
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
<para>This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>prepareallosproute usage</title>
|
<title>prepareallosproute usage</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
...
|
...
|
||||||
if (prepareallosproute()) {
|
if (prepareallosproute()) {
|
||||||
log("Routes are prepared, now either forking or redirecting the call\n");
|
log("Routes are prepared, now either forking or redirecting the call\n");
|
||||||
} else {
|
} else {
|
||||||
log("Could not prepare the routes. No destination available\n");
|
log("Could not prepare the routes. No destination available\n");
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<title><function moreinfo="none">reportospusage()</function></title>
|
<title><function moreinfo="none">reportospusage()</function></title>
|
||||||
<para>This function should be called after receiving a BYE message. If the message contains an OSP cookie, the function will forward originating and/or terminating duration usage information to a peering server. The function returns TRUE if the BYE includes an OSP cookie. The actual usage message will be send on a different thread and will not delay BYE processing. The function should be called before relaying the message.</para>
|
<para>This function should be called after receiving a BYE message. If the message contains an OSP cookie, the function will forward originating and/or terminating duration usage information to a peering server. The function returns TRUE if the BYE includes an OSP cookie. The actual usage message will be send on a different thread and will not delay BYE processing. The function should be called before relaying the message.</para>
|
||||||
<para>This function can be used from REQUEST_ROUTE.</para>
|
<para>This function can be used from REQUEST_ROUTE.</para>
|
||||||
<example>
|
<example>
|
||||||
<title>reportospusage usage</title>
|
<title>reportospusage usage</title>
|
||||||
<programlisting format="linespecific">
|
<programlisting format="linespecific">
|
||||||
...
|
...
|
||||||
if (reportospusage ()) {
|
if (reportospusage ()) {
|
||||||
log("OSP call duration usage will be reported\n");
|
log("OSP call duration usage will be reported\n");
|
||||||
} else {
|
} else {
|
||||||
log("The BYE message does not include OSP information, it was not authorized by an OSP server\n");
|
log("The BYE message does not include OSP information, it was not authorized by an OSP server\n");
|
||||||
};
|
};
|
||||||
...
|
...
|
||||||
</programlisting>
|
</programlisting>
|
||||||
</example>
|
</example>
|
||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<!-- Keep this element at the end of the file
|
<!-- Keep this element at the end of the file
|
||||||
Local Variables:
|
Local Variables:
|
||||||
xml-parent-document: ("osp.xml" "Book" "chapter")
|
xml-parent-document: ("osp.xml" "Book" "chapter")
|
||||||
End:
|
End:
|
||||||
-->
|
-->
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
<!-- OSP Module Developer's Guide -->
|
<!-- OSP Module Developer's Guide -->
|
||||||
|
|
||||||
<chapter>
|
<chapter>
|
||||||
<chapterinfo>
|
<chapterinfo>
|
||||||
</chapterinfo>
|
</chapterinfo>
|
||||||
<title>Developer's Guide</title>
|
<title>Developer's Guide</title>
|
||||||
<para>The functions of the OSP modules are not used by other SER modules.</para>
|
<para>The functions of the OSP modules are not used by other SER modules.</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<!-- Keep this element at the end of the file
|
<!-- Keep this element at the end of the file
|
||||||
Local Variables:
|
Local Variables:
|
||||||
xml-parent-document: ("osp.xml" "book" "chapter")
|
xml-parent-document: ("osp.xml" "book" "chapter")
|
||||||
End:
|
End:
|
||||||
-->
|
-->
|
||||||
|
@ -1,44 +1,44 @@
|
|||||||
<!-- OSP Module FAQ -->
|
<!-- OSP Module FAQ -->
|
||||||
|
|
||||||
<chapter>
|
<chapter>
|
||||||
<chapterinfo>
|
<chapterinfo>
|
||||||
</chapterinfo>
|
</chapterinfo>
|
||||||
<title>Frequently Asked Questions</title>
|
<title>Frequently Asked Questions</title>
|
||||||
<qandaset>
|
<qandaset>
|
||||||
<qandaentry>
|
<qandaentry>
|
||||||
<question><para>What platforms does this module work on?</para></question>
|
<question><para>What platforms does this module work on?</para></question>
|
||||||
<answer><para>The module has been implemented using Linux, the underlying toolkit and the module code itself should compile and work on Solaris, *BSD, and probably most other unix platforms with ssl and pthreads available, but the OSP Module has only been tested Linux.</para></answer>
|
<answer><para>The module has been implemented using Linux, the underlying toolkit and the module code itself should compile and work on Solaris, *BSD, and probably most other unix platforms with ssl and pthreads available, but the OSP Module has only been tested Linux.</para></answer>
|
||||||
</qandaentry>
|
</qandaentry>
|
||||||
<qandaentry>
|
<qandaentry>
|
||||||
<question><para>Where can I get more information on this module?</para></question>
|
<question><para>Where can I get more information on this module?</para></question>
|
||||||
<answer><para>Please see http://www.iptel.org/views/moduledocs/ or post a message on the SER mailing list.</para></answer>
|
<answer><para>Please see http://www.iptel.org/views/moduledocs/ or post a message on the SER mailing list.</para></answer>
|
||||||
</qandaentry>
|
</qandaentry>
|
||||||
<qandaentry>
|
<qandaentry>
|
||||||
<question><para>Where can I get more information on OSP?</para></question>
|
<question><para>Where can I get more information on OSP?</para></question>
|
||||||
<answer><para>The OSP technical specification (ETSI TS 101 321) may be obtained from www.etsi.org. You can also post a message on the OSP Toolkit mailing list at https://lists.sourceforge.net/lists/listinfo/osp-toolkit-client.</para></answer>
|
<answer><para>The OSP technical specification (ETSI TS 101 321) may be obtained from www.etsi.org. You can also post a message on the OSP Toolkit mailing list at https://lists.sourceforge.net/lists/listinfo/osp-toolkit-client.</para></answer>
|
||||||
</qandaentry>
|
</qandaentry>
|
||||||
<qandaentry>
|
<qandaentry>
|
||||||
<question><para>How do I obtain an OSP server for testing?</para></question>
|
<question><para>How do I obtain an OSP server for testing?</para></question>
|
||||||
<answer>
|
<answer>
|
||||||
<para>OSP peering servers are available from the following sources:</para>
|
<para>OSP peering servers are available from the following sources:</para>
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
<listitem><para>OpenOSP is an OSP server reference implementation created by Cisco Systems and available at http://www.vovida.org/applications/downloads/openosp/</para></listitem>
|
<listitem><para>OpenOSP is an OSP server reference implementation created by Cisco Systems and available at http://www.vovida.org/applications/downloads/openosp/</para></listitem>
|
||||||
<listitem><para>RAMS is an open source, java based OSP server project available from http://sourceforge.net/projects/rams/</para></listitem>
|
<listitem><para>RAMS is an open source, java based OSP server project available from http://sourceforge.net/projects/rams/</para></listitem>
|
||||||
<listitem><para>A free version of the commercial TransNexus OSP peering server is available at www.transnexus.com.</para></listitem>
|
<listitem><para>A free version of the commercial TransNexus OSP peering server is available at www.transnexus.com.</para></listitem>
|
||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
</answer>
|
</answer>
|
||||||
</qandaentry>
|
</qandaentry>
|
||||||
<qandaentry>
|
<qandaentry>
|
||||||
<question><para>How are the exported functions used by the OSP module?</para></question>
|
<question><para>How are the exported functions used by the OSP module?</para></question>
|
||||||
<answer>
|
<answer>
|
||||||
<para>See sample-osp-ser.cfg in modules/osp/etc for examples</para>
|
<para>See sample-osp-ser.cfg in modules/osp/etc for examples</para>
|
||||||
</answer>
|
</answer>
|
||||||
</qandaentry>
|
</qandaentry>
|
||||||
</qandaset>
|
</qandaset>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<!-- Keep this element at the end of the file
|
<!-- Keep this element at the end of the file
|
||||||
Local Variables:
|
Local Variables:
|
||||||
xml-parent-document: ("osp.xml" "Book" "chapter")
|
xml-parent-document: ("osp.xml" "Book" "chapter")
|
||||||
End:
|
End:
|
||||||
-->
|
-->
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIBYDCCAQoCAQEwDQYJKoZIhvcNAQEEBQAwOzElMCMGA1UEAxMcb3NwdGVzdHNl
|
MIIBYDCCAQoCAQEwDQYJKoZIhvcNAQEEBQAwOzElMCMGA1UEAxMcb3NwdGVzdHNl
|
||||||
cnZlci50cmFuc25leHVzLmNvbTESMBAGA1UEChMJT1NQU2VydmVyMB4XDTAyMDIw
|
cnZlci50cmFuc25leHVzLmNvbTESMBAGA1UEChMJT1NQU2VydmVyMB4XDTAyMDIw
|
||||||
NDE4MjU1MloXDTEyMDIwMzE4MjU1MlowOzElMCMGA1UEAxMcb3NwdGVzdHNlcnZl
|
NDE4MjU1MloXDTEyMDIwMzE4MjU1MlowOzElMCMGA1UEAxMcb3NwdGVzdHNlcnZl
|
||||||
ci50cmFuc25leHVzLmNvbTESMBAGA1UEChMJT1NQU2VydmVyMFwwDQYJKoZIhvcN
|
ci50cmFuc25leHVzLmNvbTESMBAGA1UEChMJT1NQU2VydmVyMFwwDQYJKoZIhvcN
|
||||||
AQEBBQADSwAwSAJBAPGeGwV41EIhX0jEDFLRXQhDEr50OUQPq+f55VwQd0TQNts0
|
AQEBBQADSwAwSAJBAPGeGwV41EIhX0jEDFLRXQhDEr50OUQPq+f55VwQd0TQNts0
|
||||||
6BP29+UiNdRW3c3IRHdZcJdC1Cg68ME9cgeq0h8CAwEAATANBgkqhkiG9w0BAQQF
|
6BP29+UiNdRW3c3IRHdZcJdC1Cg68ME9cgeq0h8CAwEAATANBgkqhkiG9w0BAQQF
|
||||||
AANBAGkzBSj1EnnmUxbaiG1N4xjIuLAWydun7o3bFk2tV8dBIhnuh445obYyk1En
|
AANBAGkzBSj1EnnmUxbaiG1N4xjIuLAWydun7o3bFk2tV8dBIhnuh445obYyk1En
|
||||||
Q27kI7eACCILBZqi2MHDOIMnoN0=
|
Q27kI7eACCILBZqi2MHDOIMnoN0=
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
-----BEGIN CERTIFICATE-----
|
||||||
MIIBeTCCASMCEHqkOHVRRWr+1COq3CR/xsowDQYJKoZIhvcNAQEEBQAwOzElMCMG
|
MIIBeTCCASMCEHqkOHVRRWr+1COq3CR/xsowDQYJKoZIhvcNAQEEBQAwOzElMCMG
|
||||||
A1UEAxMcb3NwdGVzdHNlcnZlci50cmFuc25leHVzLmNvbTESMBAGA1UEChMJT1NQ
|
A1UEAxMcb3NwdGVzdHNlcnZlci50cmFuc25leHVzLmNvbTESMBAGA1UEChMJT1NQ
|
||||||
U2VydmVyMB4XDTA1MDYyMzAwMjkxOFoXDTA2MDYyNDAwMjkxOFowRTELMAkGA1UE
|
U2VydmVyMB4XDTA1MDYyMzAwMjkxOFoXDTA2MDYyNDAwMjkxOFowRTELMAkGA1UE
|
||||||
BhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp
|
BhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdp
|
||||||
ZGdpdHMgUHR5IEx0ZDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQCvLeZfj1G0wuJb
|
ZGdpdHMgUHR5IEx0ZDBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQCvLeZfj1G0wuJb
|
||||||
8JTcVeZaZftncEmRluOnaME3ustd918lRMDYokZmtmDZN8SrP0yd1pfVqZ7NkmBA
|
8JTcVeZaZftncEmRluOnaME3ustd918lRMDYokZmtmDZN8SrP0yd1pfVqZ7NkmBA
|
||||||
CbBX0k7pAgMBAAEwDQYJKoZIhvcNAQEEBQADQQDnV8QNFVVJx/+7IselU0wsepqM
|
CbBX0k7pAgMBAAEwDQYJKoZIhvcNAQEEBQADQQDnV8QNFVVJx/+7IselU0wsepqM
|
||||||
urivXZzuxOmTEmTVDzCJx1xhA8jd3vGAj7XDIYiPub1PV23eY5a2ARJuw5w9
|
urivXZzuxOmTEmTVDzCJx1xhA8jd3vGAj7XDIYiPub1PV23eY5a2ARJuw5w9
|
||||||
-----END CERTIFICATE-----
|
-----END CERTIFICATE-----
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue