This commit is contained in:
darthsandmann
2023-02-11 19:37:07 +01:00
parent 15ed948dcd
commit d1289421b9
84 changed files with 34044 additions and 2 deletions

8
deps/bin/onvif-cli vendored Executable file
View File

@ -0,0 +1,8 @@
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
import re
import sys
from onvif.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -0,0 +1,31 @@
"""Initialize onvif."""
import zeep
from onvif.client import SERVICES, ONVIFCamera, ONVIFService
from onvif.exceptions import (
ERR_ONVIF_BUILD,
ERR_ONVIF_PROTOCOL,
ERR_ONVIF_UNKNOWN,
ERR_ONVIF_WSDL,
ONVIFError,
)
def zeep_pythonvalue(self, xmlvalue):
"""Monkey patch zeep."""
return xmlvalue
# pylint: disable=no-member
zeep.xsd.simple.AnySimpleType.pythonvalue = zeep_pythonvalue
__all__ = (
"ONVIFService",
"ONVIFCamera",
"ONVIFError",
"ERR_ONVIF_UNKNOWN",
"ERR_ONVIF_PROTOCOL",
"ERR_ONVIF_WSDL",
"ERR_ONVIF_BUILD",
"SERVICES",
)

View File

@ -0,0 +1,483 @@
"""ONVIF Client."""
import datetime as dt
import logging
import os.path
import httpx
from httpx import AsyncClient, BasicAuth, DigestAuth
from zeep.cache import SqliteCache
from zeep.client import AsyncClient as BaseZeepAsyncClient, Client, Settings
from zeep.exceptions import Fault
import zeep.helpers
from zeep.proxy import AsyncServiceProxy
from zeep.transports import AsyncTransport
from zeep.wsse.username import UsernameToken
from onvif.definition import SERVICES
from onvif.exceptions import ONVIFAuthError, ONVIFError, ONVIFTimeoutError
logger = logging.getLogger("onvif")
logging.basicConfig(level=logging.INFO)
logging.getLogger("zeep.client").setLevel(logging.CRITICAL)
def safe_func(func):
"""Ensure methods to raise an ONVIFError Exception when some thing was wrong."""
def wrapped(*args, **kwargs):
try:
return func(*args, **kwargs)
except Exception as err:
raise ONVIFError(err)
return wrapped
class UsernameDigestTokenDtDiff(UsernameToken):
"""
UsernameDigestToken class, with a time offset parameter that can be adjusted;
This allows authentication on cameras without being time synchronized.
Please note that using NTP on both end is the recommended solution,
this should only be used in "safe" environments.
"""
def __init__(self, user, passw, dt_diff=None, **kwargs):
super().__init__(user, passw, **kwargs)
# Date/time difference in datetime.timedelta
self.dt_diff = dt_diff
def apply(self, envelope, headers):
old_created = self.created
if self.created is None:
self.created = dt.datetime.utcnow()
if self.dt_diff is not None:
self.created += self.dt_diff
result = super().apply(envelope, headers)
self.created = old_created
return result
class ZeepAsyncClient(BaseZeepAsyncClient):
"""Overwrite create_service method to be async."""
def create_service(self, binding_name, address):
"""Create a new ServiceProxy for the given binding name and address.
:param binding_name: The QName of the binding
:param address: The address of the endpoint
"""
try:
binding = self.wsdl.bindings[binding_name]
except KeyError:
raise ValueError(
"No binding found with the given QName. Available bindings "
"are: %s" % (", ".join(self.wsdl.bindings.keys()))
)
return AsyncServiceProxy(self, binding, address=address)
class ONVIFService:
"""
Python Implemention for ONVIF Service.
Services List:
DeviceMgmt DeviceIO Event AnalyticsDevice Display Imaging Media
PTZ Receiver RemoteDiscovery Recording Replay Search Extension
>>> from onvif import ONVIFService
>>> device_service = ONVIFService('http://192.168.0.112/onvif/device_service',
... 'admin', 'foscam',
... '/etc/onvif/wsdl/devicemgmt.wsdl')
>>> ret = device_service.GetHostname()
>>> print ret.FromDHCP
>>> print ret.Name
>>> device_service.SetHostname(dict(Name='newhostname'))
>>> ret = device_service.GetSystemDateAndTime()
>>> print ret.DaylightSavings
>>> print ret.TimeZone
>>> dict_ret = device_service.to_dict(ret)
>>> print dict_ret['TimeZone']
There are two ways to pass parameter to services methods
1. Dict
params = {'Name': 'NewHostName'}
device_service.SetHostname(params)
2. Type Instance
params = device_service.create_type('SetHostname')
params.Hostname = 'NewHostName'
device_service.SetHostname(params)
"""
@safe_func
def __init__(
self,
xaddr,
user,
passwd,
url,
encrypt=True,
no_cache=False,
dt_diff=None,
binding_name="",
binding_key="",
):
if not os.path.isfile(url):
raise ONVIFError("%s doesn`t exist!" % url)
self.url = url
self.xaddr = xaddr
self.binding_key = binding_key
wsse = UsernameDigestTokenDtDiff(
user, passwd, dt_diff=dt_diff, use_digest=encrypt
)
# Create soap client
client = AsyncClient(timeout=90)
self.transport = (
AsyncTransport(client=client)
if no_cache
else AsyncTransport(client=client, cache=SqliteCache())
)
settings = Settings()
settings.strict = False
settings.xml_huge_tree = True
self.zeep_client_authless = ZeepAsyncClient(
wsdl=url,
transport=self.transport,
settings=settings
)
self.ws_client_authless = self.zeep_client_authless.create_service(binding_name, self.xaddr)
self.zeep_client = ZeepAsyncClient(
wsdl=url,
wsse=wsse,
transport=self.transport,
settings=settings
)
self.ws_client = self.zeep_client.create_service(binding_name, self.xaddr)
# Set soap header for authentication
self.user = user
self.passwd = passwd
# Indicate wether password digest is needed
self.encrypt = encrypt
self.dt_diff = dt_diff
namespace = binding_name[binding_name.find("{") + 1 : binding_name.find("}")]
available_ns = self.zeep_client.namespaces
active_ns = (
list(available_ns.keys())[list(available_ns.values()).index(namespace)]
or "ns0"
)
self.create_type = lambda x: self.zeep_client.get_element(active_ns + ":" + x)()
async def close(self):
"""Close the transport."""
await self.transport.aclose()
@staticmethod
@safe_func
def to_dict(zeepobject):
"""Convert a WSDL Type instance into a dictionary."""
return {} if zeepobject is None else zeep.helpers.serialize_object(zeepobject)
def __getattr__(self, name):
"""
Call the real onvif Service operations,
See the official wsdl definition for the
APIs detail(API name, request parameters,
response parameters, parameter types, etc...)
"""
def service_wrapper(func):
"""Wrap service call."""
@safe_func
def wrapped(params=None):
def call(params=None):
# No params
if params is None:
params = {}
else:
params = ONVIFService.to_dict(params)
try:
ret = func(**params)
except TypeError:
ret = func(params)
return ret
return call(params)
return wrapped
builtin = name.startswith("__") and name.endswith("__")
if builtin:
return self.__dict__[name]
if name.startswith("authless_"):
return service_wrapper(getattr(self.ws_client_authless, name.split("_")[1]))
return service_wrapper(getattr(self.ws_client, name))
class ONVIFCamera:
"""
Python Implemention ONVIF compliant device
This class integrates onvif services
adjust_time parameter allows authentication on cameras without being time synchronized.
Please note that using NTP on both end is the recommended solution,
this should only be used in "safe" environments.
Also, this cannot be used on AXIS camera, as every request is authenticated, contrary to ONVIF standard
>>> from onvif import ONVIFCamera
>>> mycam = ONVIFCamera('192.168.0.112', 80, 'admin', '12345')
>>> mycam.devicemgmt.GetServices(False)
>>> media_service = mycam.create_media_service()
>>> ptz_service = mycam.create_ptz_service()
# Get PTZ Configuration:
>>> mycam.ptz.GetConfiguration()
# Another way:
>>> ptz_service.GetConfiguration()
"""
def __init__(
self,
host,
port,
user,
passwd,
wsdl_dir=os.path.join(os.path.dirname(os.path.dirname(__file__)), "wsdl"),
encrypt=True,
no_cache=False,
adjust_time=False,
):
os.environ.pop("http_proxy", None)
os.environ.pop("https_proxy", None)
self.host = host
self.port = int(port)
self.user = user
self.passwd = passwd
self.wsdl_dir = wsdl_dir
self.encrypt = encrypt
self.no_cache = no_cache
self.adjust_time = adjust_time
self.dt_diff = None
self.xaddrs = {}
# Active service client container
self.services = {}
self.to_dict = ONVIFService.to_dict
self._snapshot_uris = {}
self._snapshot_client = AsyncClient()
async def update_xaddrs(self):
"""Update xaddrs for services."""
self.dt_diff = None
devicemgmt = self.create_devicemgmt_service()
if self.adjust_time:
try:
sys_date = await devicemgmt.authless_GetSystemDateAndTime()
except zeep.exceptions.Fault:
# Looks like we should try with auth
sys_date = await devicemgmt.GetSystemDateAndTime()
cdate = sys_date.UTCDateTime
cam_date = dt.datetime(
cdate.Date.Year,
cdate.Date.Month,
cdate.Date.Day,
cdate.Time.Hour,
cdate.Time.Minute,
cdate.Time.Second,
)
self.dt_diff = cam_date - dt.datetime.utcnow()
await devicemgmt.close()
del self.services[devicemgmt.binding_key]
devicemgmt = self.create_devicemgmt_service()
# Get XAddr of services on the device
self.xaddrs = {}
capabilities = await devicemgmt.GetCapabilities({"Category": "All"})
for name in capabilities:
capability = capabilities[name]
try:
if name.lower() in SERVICES and capability is not None:
namespace = SERVICES[name.lower()]["ns"]
self.xaddrs[namespace] = capability["XAddr"]
except Exception:
logger.exception("Unexpected service type")
async def create_pullpoint_subscription(self):
"""Create a pullpoint subscription."""
try:
events = self.create_events_service()
pullpoint = await events.CreatePullPointSubscription()
# pylint: disable=protected-access
self.xaddrs[
"http://www.onvif.org/ver10/events/wsdl/PullPointSubscription"
] = pullpoint.SubscriptionReference.Address._value_1
except Fault:
return False
return True
async def close(self):
"""Close all transports."""
await self._snapshot_client.aclose()
for service in self.services.values():
await service.close()
async def get_snapshot_uri(self, profile_token):
"""Get the snapshot uri for a given profile."""
uri = self._snapshot_uris.get(profile_token)
if uri is None:
media_service = self.create_media_service()
req = media_service.create_type("GetSnapshotUri")
req.ProfileToken = profile_token
result = await media_service.GetSnapshotUri(req)
uri = result.Uri
self._snapshot_uris[profile_token] = uri
return uri
async def get_snapshot(self, profile_token, basic_auth=False):
"""Get a snapshot image from the camera."""
uri = await self.get_snapshot_uri(profile_token)
if uri is None:
return None
auth = None
if self.user and self.passwd:
if basic_auth:
auth = BasicAuth(self.user, self.passwd)
else:
auth = DigestAuth(self.user, self.passwd)
try:
response = await self._snapshot_client.get(uri, auth=auth)
except httpx.TimeoutException as error:
raise ONVIFTimeoutError(error) from error
except httpx.RequestError as error:
raise ONVIFError(error) from error
if response.status_code == 401:
raise ONVIFAuthError(f"Failed to authenticate to {uri}")
if response.status_code < 300:
return response.content
return None
def get_definition(self, name, port_type=None):
"""Returns xaddr and wsdl of specified service"""
# Check if the service is supported
if name not in SERVICES:
raise ONVIFError("Unknown service %s" % name)
wsdl_file = SERVICES[name]["wsdl"]
namespace = SERVICES[name]["ns"]
binding_name = "{{{}}}{}".format(namespace, SERVICES[name]["binding"])
if port_type:
namespace += "/" + port_type
wsdlpath = os.path.join(self.wsdl_dir, wsdl_file)
if not os.path.isfile(wsdlpath):
raise ONVIFError("No such file: %s" % wsdlpath)
# XAddr for devicemgmt is fixed:
if name == "devicemgmt":
xaddr = "{}:{}/onvif/device_service".format(
self.host
if (self.host.startswith("http://") or self.host.startswith("https://"))
else "http://%s" % self.host,
self.port,
)
return xaddr, wsdlpath, binding_name
# Get other XAddr
xaddr = self.xaddrs.get(namespace)
if not xaddr:
raise ONVIFError("Device doesn`t support service: %s" % name)
return xaddr, wsdlpath, binding_name
def create_onvif_service(self, name, port_type=None):
"""Create ONVIF service client"""
name = name.lower()
xaddr, wsdl_file, binding_name = self.get_definition(name, port_type)
# Don't re-create bindings if the xaddr remains the same.
# The xaddr can change when a new PullPointSubscription is created.
binding_key = f"{binding_name}{xaddr}"
binding = self.services.get(binding_key)
if binding:
return binding
service = ONVIFService(
xaddr,
self.user,
self.passwd,
wsdl_file,
self.encrypt,
no_cache=self.no_cache,
dt_diff=self.dt_diff,
binding_name=binding_name,
binding_key=binding_key
)
self.services[binding_key] = service
return service
def create_devicemgmt_service(self):
"""Service creation helper."""
return self.create_onvif_service("devicemgmt")
def create_media_service(self):
"""Service creation helper."""
return self.create_onvif_service("media")
def create_ptz_service(self):
"""Service creation helper."""
return self.create_onvif_service("ptz")
def create_imaging_service(self):
"""Service creation helper."""
return self.create_onvif_service("imaging")
def create_deviceio_service(self):
"""Service creation helper."""
return self.create_onvif_service("deviceio")
def create_events_service(self):
"""Service creation helper."""
return self.create_onvif_service("events")
def create_analytics_service(self):
"""Service creation helper."""
return self.create_onvif_service("analytics")
def create_recording_service(self):
"""Service creation helper."""
return self.create_onvif_service("recording")
def create_search_service(self):
"""Service creation helper."""
return self.create_onvif_service("search")
def create_replay_service(self):
"""Service creation helper."""
return self.create_onvif_service("replay")
def create_pullpoint_service(self):
"""Service creation helper."""
return self.create_onvif_service("pullpoint", port_type="PullPointSubscription")
def create_notification_service(self):
"""Service creation helper."""
return self.create_onvif_service("notification")
def create_subscription_service(self, port_type=None):
"""Service creation helper."""
return self.create_onvif_service("subscription", port_type=port_type)
def create_receiver_service(self):
"""Service creation helper."""
return self.create_onvif_service("receiver")

View File

@ -0,0 +1,74 @@
"""ONVIF Service Definitions"""
SERVICES = {
"devicemgmt": {
"ns": "http://www.onvif.org/ver10/device/wsdl",
"wsdl": "devicemgmt.wsdl",
"binding": "DeviceBinding",
},
"media": {
"ns": "http://www.onvif.org/ver10/media/wsdl",
"wsdl": "media.wsdl",
"binding": "MediaBinding",
},
"ptz": {
"ns": "http://www.onvif.org/ver20/ptz/wsdl",
"wsdl": "ptz.wsdl",
"binding": "PTZBinding",
},
"imaging": {
"ns": "http://www.onvif.org/ver20/imaging/wsdl",
"wsdl": "imaging.wsdl",
"binding": "ImagingBinding",
},
"deviceio": {
"ns": "http://www.onvif.org/ver10/deviceIO/wsdl",
"wsdl": "deviceio.wsdl",
"binding": "DeviceIOBinding",
},
"events": {
"ns": "http://www.onvif.org/ver10/events/wsdl",
"wsdl": "events.wsdl",
"binding": "EventBinding",
},
"pullpoint": {
"ns": "http://www.onvif.org/ver10/events/wsdl",
"wsdl": "events.wsdl",
"binding": "PullPointSubscriptionBinding",
},
"notification": {
"ns": "http://www.onvif.org/ver10/events/wsdl",
"wsdl": "events.wsdl",
"binding": "NotificationProducerBinding",
},
"subscription": {
"ns": "http://www.onvif.org/ver10/events/wsdl",
"wsdl": "events.wsdl",
"binding": "SubscriptionManagerBinding",
},
"analytics": {
"ns": "http://www.onvif.org/ver20/analytics/wsdl",
"wsdl": "analytics.wsdl",
"binding": "AnalyticsEngineBinding",
},
"recording": {
"ns": "http://www.onvif.org/ver10/recording/wsdl",
"wsdl": "recording.wsdl",
"binding": "RecordingBinding",
},
"search": {
"ns": "http://www.onvif.org/ver10/search/wsdl",
"wsdl": "search.wsdl",
"binding": "SearchBinding",
},
"replay": {
"ns": "http://www.onvif.org/ver10/replay/wsdl",
"wsdl": "replay.wsdl",
"binding": "ReplayBinding",
},
"receiver": {
"ns": "http://www.onvif.org/ver10/receiver/wsdl",
"wsdl": "receiver.wsdl",
"binding": "ReceiverBinding",
},
}

View File

@ -0,0 +1,38 @@
""" Core exceptions raised by the ONVIF Client """
# Error codes setting
# Error unknown, e.g, HTTP errors
ERR_ONVIF_UNKNOWN = 1
# Protocol error returned by WebService,
# e.g:DataEncodingUnknown, MissingAttr, InvalidArgs, ...
ERR_ONVIF_PROTOCOL = 2
# Error about WSDL instance
ERR_ONVIF_WSDL = 3
# Error about Build
ERR_ONVIF_BUILD = 4
class ONVIFError(Exception):
"""ONVIF Exception class."""
def __init__(self, err):
self.reason = "Unknown error: " + str(err)
self.code = ERR_ONVIF_UNKNOWN
super().__init__(err)
def __str__(self):
return self.reason
class ONVIFTimeoutError(ONVIFError):
"""ONVIF Timeout Exception class."""
def __init__(self, err):
super().__init__(err)
class ONVIFAuthError(ONVIFError):
"""ONVIF Authentication Exception class."""
def __init__(self, err):
super().__init__(err)

View File

@ -0,0 +1 @@
1.2.0

View File

@ -0,0 +1 @@
"""Dummy for packaging"""

View File

@ -0,0 +1,751 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2010-2013 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this
document so long as this copyright notice, license and disclaimer are
retained with all copies of the document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND
THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;
THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE;
OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS,
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE
FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS
DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES
WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR
DISTRIBUTION OF THIS DOCUMENT.
THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO,
INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS
AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN
CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions name="PACSService" targetNamespace="http://www.onvif.org/ver10/accesscontrol/wsdl"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tac="http://www.onvif.org/ver10/accesscontrol/wsdl"
>
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/accesscontrol/wsdl"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:pt="http://www.onvif.org/ver10/pacs"
xmlns:tac="http://www.onvif.org/ver10/accesscontrol/wsdl"
elementFormDefault="qualified"
version="1.0">
<xs:import namespace="http://www.onvif.org/ver10/pacs" schemaLocation="types.xsd"/>
<!--====== types ======-->
<xs:complexType name="ServiceCapabilities">
<xs:annotation>
<xs:documentation>
The service capabilities reflect optional functionality of a service.
The information is static and does not change during device operation.
The following capabilities are available:
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:attribute name="MaxLimit" type="xs:unsignedInt" use="required"><xs:annotation>
<xs:documentation>The maximum number of entries returned by a single GetList request. The device shall never return more than this number of entities in a single response.</xs:documentation>
</xs:annotation></xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AccessPointInfoBase">
<xs:annotation>
<xs:documentation>
Used as extension base for AccessPointInfo.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="pt:DataEntity">
<xs:sequence>
<xs:element name="Name" type="pt:Name"><xs:annotation>
<xs:documentation>A user readable name. It shall be up to 64 characters.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="Description" type="pt:Description" minOccurs="0"><xs:annotation>
<xs:documentation>Optional user readable description for the AccessPoint. It shall be up to 1024 characters.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="AreaFrom" type="pt:ReferenceToken" minOccurs="0"><xs:annotation>
<xs:documentation>Optional reference to the Area from which access is requested.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="AreaTo" type="pt:ReferenceToken" minOccurs="0"><xs:annotation>
<xs:documentation>Optional reference to the Area to which access is requested.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="EntityType" type="xs:QName" minOccurs="0"><xs:annotation>
<xs:documentation>Optional entity type; if missing, a Door type as defined by the ONVIF DoorControl service should be assumed. This can also be represented by the QName value "tdc:Door" - where tdc is the namespace of the Door Control service: &quot;http://www.onvif.org/ver10/doorcontrol/wsdl&quot;. This field is provided for future extensions; it will allow an AccessPoint being extended to cover entity types other than Doors as well.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="Entity" type="pt:ReferenceToken"><xs:annotation>
<xs:documentation>Reference to the entity used to control access; the entity type may be specified by the optional EntityType field explained below but is typically a Door.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AccessPointInfo">
<xs:annotation>
<xs:documentation>
The AccessPointInfo structure contains basic information about an AccessPoint instance.
An AccessPoint defines an entity a Credential can be granted or denied access to. The
AccessPointInfo provides basic information on how access is controlled in one direction for a
door (from which area to which area).
&lt;/p&gt;&lt;p&gt;
door is the typical device involved, but other type of
devices may be supported as well.
Multiple AccessPoints may cover the same Door.
A typical case is one AccessPoint for entry and another for exit, both referencing
the same Door.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device shall provide the following fields for each AccessPoint instance:
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="tac:AccessPointInfoBase">
<xs:sequence>
<xs:element name="Capabilities" type="tac:AccessPointCapabilities"><xs:annotation>
<xs:documentation>The capabilities for the AccessPoint.</xs:documentation>
</xs:annotation></xs:element>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AccessPointCapabilities">
<xs:annotation>
<xs:documentation>
The AccessPoint capabilities reflect optional functionality of a particular physical entity.
Different AccessPoint instances may have different set of capabilities. This information may
change during device operation, e.g. if hardware settings are changed.
The following capabilities are available:</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:attribute name="DisableAccessPoint" type="xs:boolean" use="required"><xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint instance supports EnableAccessPoint and DisableAccessPoint commands.</xs:documentation>
</xs:annotation></xs:attribute>
<xs:attribute name="Duress" type="xs:boolean"><xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint instance supports generation of duress events.</xs:documentation>
</xs:annotation></xs:attribute>
<xs:attribute name="AnonymousAccess" type="xs:boolean"><xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint has a REX switch or other input that allows anonymous access.</xs:documentation>
</xs:annotation></xs:attribute>
<xs:attribute name="AccessTaken" type="xs:boolean"><xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint instance supports generation of AccessTaken and AccessNotTaken events. If AnonymousAccess and AccessTaken are both true, it indicates that the Anonymous versions of AccessTaken and AccessNotTaken are supported.</xs:documentation>
</xs:annotation></xs:attribute>
<xs:attribute name="ExternalAuthorization" type="xs:boolean"><xs:annotation>
<xs:documentation>Indicates whether or not this AccessPoint instance supports the ExternalAuthorization operation and the generation of Request events. If AnonymousAccess and ExternalAuthorization are both true, it indicates that the Anonymous version is supported as well.</xs:documentation>
</xs:annotation></xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AreaInfoBase">
<xs:annotation>
<xs:documentation>
Basic information about an Area. Used as extension base.
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="pt:DataEntity">
<xs:sequence>
<xs:element name="Name" type="pt:Name"><xs:annotation>
<xs:documentation>User readable name. It shall be up to 64 characters.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="Description" type="pt:Description" minOccurs="0"><xs:annotation>
<xs:documentation>User readable description for the Area. It shall be up to 1024 characters.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AreaInfo">
<xs:annotation>
<xs:documentation>
The AreaInfo structure contains basic information about an Area.
An ONVIF compliant device shall provide the following fields for each Area:
</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="tac:AreaInfoBase">
<xs:sequence>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!--===============================-->
<xs:complexType name="AccessPointState">
<xs:annotation>
<xs:documentation>
The AccessPointState contains state information for an AccessPoint.
An ONVIF compliant device shall provide the following fields for each AccessPoint instance:
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="Enabled" type="xs:boolean"><xs:annotation>
<xs:documentation>Indicates that the AccessPoint is enabled. By default this field value shall be True, if the DisableAccessPoint capabilities is not supported.</xs:documentation>
</xs:annotation></xs:element>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<!--===============================-->
<xs:simpleType name="Decision">
<xs:annotation>
<xs:documentation>
The Decision enumeration represents a choice of two available options for an access request:
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="Granted">
<xs:annotation><xs:documentation>The decision is to grant access.</xs:documentation></xs:annotation>
</xs:enumeration>
<xs:enumeration value="Denied">
<xs:annotation><xs:documentation>The decision is to deny access.</xs:documentation></xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
<xs:simpleType name="DenyReason">
<xs:annotation>
<xs:documentation>
Non-normative enum that describes the various reasons for denying access.
The following strings shall be used for the reason field:
</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="CredentialNotEnabled">
<xs:annotation><xs:documentation>The device shall provide the following event, whenever a valid credential is not enabled or has been disabled (e.g., due to credential being lost etc.) to prevent unauthorized entry.</xs:documentation></xs:annotation>
</xs:enumeration>
<xs:enumeration value="CredentialNotActive">
<xs:annotation><xs:documentation>The device shall provide the following event, whenever a valid credential is presented though it is not active yet;: e.g, the credential was presented before the start date.</xs:documentation></xs:annotation>
</xs:enumeration>
<xs:enumeration value="CredentialExpired">
<xs:annotation><xs:documentation>The device shall provide the following event, whenever a valid credential was presented after its expiry date.</xs:documentation></xs:annotation>
</xs:enumeration>
<xs:enumeration value="InvalidPIN">
<xs:annotation><xs:documentation>The device shall provide the following event, whenever an entered PIN code does not match the credential.</xs:documentation></xs:annotation>
</xs:enumeration>
<xs:enumeration value="NotPermittedAtThisTime">
<xs:annotation><xs:documentation>The device shall provide the following event, whenever a valid credential is denied access to the requested AccessPoint because the credential is not permitted at the moment.</xs:documentation></xs:annotation>
</xs:enumeration>
<xs:enumeration value="Unauthorized">
<xs:annotation><xs:documentation>The device shall provide the following event, whenever the presented credential is not authorized.</xs:documentation></xs:annotation>
</xs:enumeration>
<xs:enumeration value="Other">
<xs:annotation><xs:documentation>The device shall provide the following event, whenever the request is denied and no other specific event matches it or is supported by the service.</xs:documentation></xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
<!-- Message Request / Response elements -->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tac:ServiceCapabilities"><xs:annotation>
<xs:documentation>The capability response message contains the requested Access Control service capabilities using a hierarchical XML capability structure.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointInfoList">
<xs:complexType>
<xs:sequence>
<xs:element name="Limit" type="xs:int" minOccurs="0"><xs:annotation>
<xs:documentation>Maximum number of entries to return. If not specified, less than one or higher than what the device supports, the number of items is determined by the device.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="StartReference" type="xs:string" minOccurs="0"><xs:annotation>
<xs:documentation>Start returning entries from this start reference. If not specified, entries shall start from the beginning of the dataset.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointInfoListResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="NextStartReference" type="xs:string" minOccurs="0"><xs:annotation>
<xs:documentation>StartReference to use in next call to get the following items. If absent, no more items to get.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="AccessPointInfo" type="tac:AccessPointInfo" minOccurs="0" maxOccurs="unbounded"><xs:annotation>
<xs:documentation>List of AccessPointInfo items.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointInfo">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken" maxOccurs="unbounded"><xs:annotation>
<xs:documentation>Tokens of AccessPointInfo items to get.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointInfoResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessPointInfo" type="tac:AccessPointInfo" minOccurs="0" maxOccurs="unbounded"><xs:annotation>
<xs:documentation>List of AccessPointInfo items.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAreaInfoList">
<xs:complexType>
<xs:sequence>
<xs:element name="Limit" type="xs:int" minOccurs="0"><xs:annotation>
<xs:documentation>Maximum number of entries to return. If not specified, less than one or higher than what the device supports, the number of items is determined by the device.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="StartReference" type="xs:string" minOccurs="0"><xs:annotation>
<xs:documentation>Start returning entries from this start reference. If not specified, entries shall start from the beginning of the dataset.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAreaInfoListResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="NextStartReference" type="xs:string" minOccurs="0"><xs:annotation>
<xs:documentation>StartReference to use in next call to get the following items. If absent, no more items to get.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="AreaInfo" type="tac:AreaInfo" minOccurs="0" maxOccurs="unbounded"><xs:annotation>
<xs:documentation>List of AreaInfo items.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAreaInfo">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken" maxOccurs="unbounded"><xs:annotation>
<xs:documentation>Tokens of AreaInfo items to get.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAreaInfoResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AreaInfo" type="tac:AreaInfo" minOccurs="0" maxOccurs="unbounded"><xs:annotation>
<xs:documentation>List of AreaInfo items.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointState">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken"><xs:annotation>
<xs:documentation>Token of AccessPoint instance to get AccessPointState for.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetAccessPointStateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessPointState" type="tac:AccessPointState"><xs:annotation>
<xs:documentation>AccessPointState item.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="EnableAccessPoint">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken"><xs:annotation>
<xs:documentation>Token of the AccessPoint instance to enable.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="EnableAccessPointResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DisableAccessPoint">
<xs:complexType>
<xs:sequence>
<xs:element name="Token" type="pt:ReferenceToken"><xs:annotation>
<xs:documentation>Token of the AccessPoint instance to disable.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DisableAccessPointResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="ExternalAuthorization">
<xs:complexType>
<xs:sequence>
<xs:element name="AccessPointToken" type="pt:ReferenceToken"><xs:annotation>
<xs:documentation>Token of the Access Point instance.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="CredentialToken" type="pt:ReferenceToken" minOccurs="0"><xs:annotation>
<xs:documentation>Optional token of the Credential involved.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="Reason" type="xs:string" minOccurs="0"><xs:annotation>
<xs:documentation>Optional reason for decision.</xs:documentation>
</xs:annotation></xs:element>
<xs:element name="Decision" type="tac:Decision"><xs:annotation>
<xs:documentation>Decision - Granted or Denied.</xs:documentation>
</xs:annotation></xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="ExternalAuthorizationResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
</xs:schema>
</wsdl:types>
<!--===============================-->
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tac:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tac:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAccessPointInfoListRequest">
<wsdl:part name="parameters" element="tac:GetAccessPointInfoList"/>
</wsdl:message>
<wsdl:message name="GetAccessPointInfoListResponse">
<wsdl:part name="parameters" element="tac:GetAccessPointInfoListResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAccessPointInfoRequest">
<wsdl:part name="parameters" element="tac:GetAccessPointInfo"/>
</wsdl:message>
<wsdl:message name="GetAccessPointInfoResponse">
<wsdl:part name="parameters" element="tac:GetAccessPointInfoResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAreaInfoListRequest">
<wsdl:part name="parameters" element="tac:GetAreaInfoList"/>
</wsdl:message>
<wsdl:message name="GetAreaInfoListResponse">
<wsdl:part name="parameters" element="tac:GetAreaInfoListResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAreaInfoRequest">
<wsdl:part name="parameters" element="tac:GetAreaInfo"/>
</wsdl:message>
<wsdl:message name="GetAreaInfoResponse">
<wsdl:part name="parameters" element="tac:GetAreaInfoResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="GetAccessPointStateRequest">
<wsdl:part name="parameters" element="tac:GetAccessPointState"/>
</wsdl:message>
<wsdl:message name="GetAccessPointStateResponse">
<wsdl:part name="parameters" element="tac:GetAccessPointStateResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="EnableAccessPointRequest">
<wsdl:part name="parameters" element="tac:EnableAccessPoint"/>
</wsdl:message>
<wsdl:message name="EnableAccessPointResponse">
<wsdl:part name="parameters" element="tac:EnableAccessPointResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="DisableAccessPointRequest">
<wsdl:part name="parameters" element="tac:DisableAccessPoint"/>
</wsdl:message>
<wsdl:message name="DisableAccessPointResponse">
<wsdl:part name="parameters" element="tac:DisableAccessPointResponse"/>
</wsdl:message>
<!--===============================-->
<wsdl:message name="ExternalAuthorizationRequest">
<wsdl:part name="parameters" element="tac:ExternalAuthorization"/>
</wsdl:message>
<wsdl:message name="ExternalAuthorizationResponse">
<wsdl:part name="parameters" element="tac:ExternalAuthorizationResponse"/>
</wsdl:message>
<!--===============================-->
<!--====== Faults messages ========-->
<wsdl:portType name="PACSPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>
This operation returns the capabilities of the Access Control service.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device which provides the Access Control service shall
implement this method.
</wsdl:documentation>
<wsdl:input message="tac:GetServiceCapabilitiesRequest"/>
<wsdl:output message="tac:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessPointInfoList">
<wsdl:documentation>
This operation requests a list of all AccessPointInfo items provided by the device.
An ONVIF compliant device which provides the Access Control service shall implement this method.
&lt;/p&gt;&lt;p&gt;
A call to this method shall return a StartReference when not all data is returned and more
data is available. The reference shall be valid for retrieving the next set of data.
Please refer section [Retrieving system configuration] for more details.
&lt;/p&gt;&lt;p&gt;
The number of items returned shall not be greater than Limit parameter.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:GetAccessPointInfoListRequest"/>
<wsdl:output message="tac:GetAccessPointInfoListResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessPointInfo">
<wsdl:documentation>
This operation requests a list of AccessPointInfo items matching the given tokens.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device which provides Access Control service shall implement this method.
&lt;/p&gt;&lt;p&gt;
The device shall ignore tokens it cannot resolve and shall return an empty list if there
are no items matching specified tokens. The device shall not return a fault in this case.
&lt;/p&gt;&lt;p&gt;
If the number of requested items is greater than MaxLimit, a TooManyItems
fault shall be returned.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:GetAccessPointInfoRequest"/>
<wsdl:output message="tac:GetAccessPointInfoResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAreaInfoList">
<wsdl:documentation>
This operation requests a list of all AreaInfo items provided by the device.
An ONVIF compliant device which provides the Access Control service shall implement this method.
&lt;/p&gt;&lt;p&gt;
A call to this method shall return a StartReference when not all data is returned and more
data is available. The reference shall be valid for retrieving the next set of data.
Please refer section [Retrieving system configuration] for more details.
&lt;/p&gt;&lt;p&gt;
The number of items returned shall not be greater than Limit parameter.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:GetAreaInfoListRequest"/>
<wsdl:output message="tac:GetAreaInfoListResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAreaInfo">
<wsdl:documentation>
This operation requests a list of AreaInfo items matching the given tokens.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device which provides Access Control service shall implement this method.
&lt;/p&gt;&lt;p&gt;
The device shall ignore tokens it cannot resolve and shall return an empty list if there
are no items matching specified tokens. The device shall not return a fault in this case.
&lt;/p&gt;&lt;p&gt;
If the number of requested items is greater than MaxLimit, a TooManyItems
fault shall be returned.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:GetAreaInfoRequest"/>
<wsdl:output message="tac:GetAreaInfoResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAccessPointState">
<wsdl:documentation>
This operation requests the AccessPointState for the AccessPoint instance specified by Token.
&lt;/p&gt;&lt;p&gt;
An ONVIF compliant device that provides Access Control service shall implement this method.
</wsdl:documentation>
<wsdl:input message="tac:GetAccessPointStateRequest"/>
<wsdl:output message="tac:GetAccessPointStateResponse"/>
</wsdl:operation>
<wsdl:operation name="EnableAccessPoint">
<wsdl:documentation>
This operation allows enabling an access point.
&lt;/p&gt;&lt;p&gt;
A device that signals support for DisableAccessPoint capability for a particular AccessPoint
instance shall implement this command.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:EnableAccessPointRequest"/>
<wsdl:output message="tac:EnableAccessPointResponse"/>
</wsdl:operation>
<wsdl:operation name="DisableAccessPoint">
<wsdl:documentation>
This operation allows disabling an access point.
&lt;/p&gt;&lt;p&gt;
A device that signals support for DisableAccessPoint capability for a particular AccessPoint
instance shall implement this command.
&lt;/p&gt;&lt;p&gt;
</wsdl:documentation>
<wsdl:input message="tac:DisableAccessPointRequest"/>
<wsdl:output message="tac:DisableAccessPointResponse"/>
</wsdl:operation>
<wsdl:operation name="ExternalAuthorization">
<wsdl:documentation>
This operation allows to Deny or Grant decision at an AccessPoint instance.
&lt;/p&gt;&lt;p&gt;
A device that signals support for ExternalAuthorization capability for a particular
AccessPoint instance shall implement this method.
</wsdl:documentation>
<wsdl:input message="tac:ExternalAuthorizationRequest"/>
<wsdl:output message="tac:ExternalAuthorizationResponse"/>
</wsdl:operation>
</wsdl:portType>
<!--===============================-->
<wsdl:binding name="PACSBinding" type="tac:PACSPort">
<wsdl:documentation>
Copyright (c) 2010-2013 by ONVIF: Open Network Video Interface Forum. All rights reserved.<br/>
This is the initial minimized version of the Access Control service
aimed at the first PACS Profile C. <br/>
The AccessControl service implements the Authentication and
Authorization functionality and controls the actions to get
access to various Access Points controlling access to Doors and Areas. <br/>
The basic data structures used by the service are:
* CredentialInfo holding basic information of a credential.<br/>
* AccessPointInfo holding basic information on how access is controlled in
one direction for a door (from which area to which area) defined in the DoorControl service.<br/>
</wsdl:documentation>
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<!--===============================-->
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAccessPointInfoList">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointInfoList"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAccessPointInfo">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointInfo"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAreaInfoList">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAreaInfoList"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAreaInfo">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAreaInfo"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetAccessPointState">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/GetAccessPointState"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="EnableAccessPoint">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/EnableAccessPoint"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="DisableAccessPoint">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/DisableAccessPoint"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="ExternalAuthorization">
<soap:operation soapAction="http://www.onvif.org/ver10/accesscontrol/wsdl/ExternalAuthorization"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
</wsdl:binding>
<wsdl:service name="PACSService">
<wsdl:port name="PACSPort" binding="tac:PACSBinding">
<soap:address location="http://192.168.0.51:8888/onvif/PACS"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,149 @@
<?xml version="1.0"?>
<!--
Copyright © 2002-2004 BEA Systems Inc., International Business Machines Corporation,
Microsoft Corporation, Inc, SAP AG, and Sun Microsystems, Inc.. All rights reserved.
Permission to copy, display, perform, modify and distribute the WS-Addressing Specification,
and to authorize others to do the foregoing, in any medium without fee or royalty is hereby
granted for the purpose of developing and evaluating the WS-Addressing Specification.
BEA, IBM, Microsoft, SAP AG, and Sun Microsystems (collectively, the "Authors") each agree
to grant a license to third parties, under royalty-free and otherwise reasonable,
non-discriminatory terms and conditions, to their respective essential patent claims that
they deem necessary to implement the WS-Addressing Specification.
DISCLAIMERS:
THE WS-Addressing Specification IS PROVIDED "AS IS", AND THE AUTHORS MAKE NO REPRESENTATIONS
OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE
CONTENTS OF THE WS-Addressing Specification IS SUITABLE FOR ANY PURPOSE; NOR THAT THE
IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
TRADEMARKS OR OTHER RIGHTS.
THE AUTHORS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
DAMAGES ARISING OUT OF ANY USE OF THE WS-Addressing Specification OR THE PERFORMANCE OR
IMPLEMENTATION OF THE CONTENTS THEREOF.
You may remove these disclaimers from your modified versions of the WS-Addressing
Specification provided that you effectively disclaim all warranties and liabilities on behalf
of all copyright holders in the copies of any such modified versions you distribute.
The name and trademarks of the Authors may NOT be used in any manner, including advertising
or publicity pertaining to the WS-Addressing Specification or its contents without specific,
written prior permission. Title to copyright in the WS-Addressing Specification will at all
times remain with the Authors.
No other rights are granted by implication, estoppel or otherwise.
-->
<xs:schema targetNamespace="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" elementFormDefault="qualified" blockDefault="#all">
<!-- //////////////////// WS-Addressing //////////////////// -->
<!-- Endpoint reference -->
<xs:element name="EndpointReference" type="wsa:EndpointReferenceType"/>
<xs:complexType name="EndpointReferenceType">
<xs:sequence>
<xs:element name="Address" type="wsa:AttributedURI"/>
<xs:element name="ReferenceProperties" type="wsa:ReferencePropertiesType" minOccurs="0"/>
<xs:element name="ReferenceParameters" type="wsa:ReferenceParametersType" minOccurs="0"/>
<xs:element name="PortType" type="wsa:AttributedQName" minOccurs="0"/>
<xs:element name="ServiceName" type="wsa:ServiceNameType" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
If "Policy" elements from namespace "http://schemas.xmlsoap.org/ws/2002/12/policy#policy" are used, they must appear first (before any extensibility elements).
</xs:documentation>
</xs:annotation>
</xs:any>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="ReferencePropertiesType">
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ReferenceParametersType">
<xs:sequence>
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ServiceNameType">
<xs:simpleContent>
<xs:extension base="xs:QName">
<xs:attribute name="PortName" type="xs:NCName"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Message information header blocks -->
<xs:element name="MessageID" type="wsa:AttributedURI"/>
<xs:element name="RelatesTo" type="wsa:Relationship"/>
<xs:element name="To" type="wsa:AttributedURI"/>
<xs:element name="Action" type="wsa:AttributedURI"/>
<xs:element name="From" type="wsa:EndpointReferenceType"/>
<xs:element name="ReplyTo" type="wsa:EndpointReferenceType"/>
<xs:element name="FaultTo" type="wsa:EndpointReferenceType"/>
<xs:complexType name="Relationship">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="RelationshipType" type="xs:QName" use="optional"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="RelationshipTypeValues">
<xs:restriction base="xs:QName">
<xs:enumeration value="wsa:Reply"/>
</xs:restriction>
</xs:simpleType>
<!--
June 19, 2007: The ReplyAfter element is deprecated. The name of this element does not match the
name (RetryAfter) used in the specification (http://www.w3.org/Submission/2004/SUBM-ws-addressing-20040810/).
-->
<xs:element name="ReplyAfter" type="wsa:ReplyAfterType"/>
<xs:complexType name="ReplyAfterType">
<xs:simpleContent>
<xs:extension base="xs:nonNegativeInteger">
<xs:anyAttribute namespace="##other"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!--
June 19, 2007: The RetryAfter element has been added to be consistent with the specification
(http://www.w3.org/Submission/2004/SUBM-ws-addressing-20040810/).
-->
<xs:element name="RetryAfter" type="wsa:RetryAfterType"/>
<xs:complexType name="RetryAfterType">
<xs:simpleContent>
<xs:extension base="xs:nonNegativeInteger">
<xs:anyAttribute namespace="##other"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="FaultSubcodeValues">
<xs:restriction base="xs:QName">
<xs:enumeration value="wsa:InvalidMessageInformationHeader"/>
<xs:enumeration value="wsa:MessageInformationHeaderRequired"/>
<xs:enumeration value="wsa:DestinationUnreachable"/>
<xs:enumeration value="wsa:ActionNotSupported"/>
<xs:enumeration value="wsa:EndpointUnavailable"/>
</xs:restriction>
</xs:simpleType>
<xs:attribute name="Action" type="xs:anyURI"/>
<!-- Common declarations and definitions -->
<xs:complexType name="AttributedQName">
<xs:simpleContent>
<xs:extension base="xs:QName">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="AttributedURI">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,528 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2012 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tan="http://www.onvif.org/ver20/analytics/wsdl" targetNamespace="http://www.onvif.org/ver20/analytics/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver20/analytics/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema" elementFormDefault="qualified" version="2.2">
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tan:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the analytics service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="RuleSupport" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication that the device supports the rules interface and the rules syntax.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="AnalyticsModuleSupport" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication that the device supports the scene analytics module interface.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="CellBasedSceneDescriptionSupported" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication that the device produces the cell based scene description</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="tan:Capabilities"/>
<!--===============================-->
<xs:element name="GetSupportedRules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
References an existing Video Analytics configuration. The list of available tokens can be obtained
via the Media service GetVideoAnalyticsConfigurations method.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetSupportedRulesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="SupportedRules" type="tt:SupportedRules"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="CreateRules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Rule" type="tt:Config" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateRulesResponse">
<xs:complexType/>
</xs:element>
<!--===============================-->
<xs:element name="DeleteRules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="RuleName" type="xs:string" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>References the specific rule to be deleted (e.g. "MyLineDetector"). </xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteRulesResponse">
<xs:complexType/>
</xs:element>
<!--===============================-->
<xs:element name="ModifyRules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Rule" type="tt:Config" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ModifyRulesResponse">
<xs:complexType/>
</xs:element>
<!--===============================-->
<xs:element name="GetRules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRulesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Rule" type="tt:Config" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetSupportedAnalyticsModules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetSupportedAnalyticsModulesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="SupportedAnalyticsModules" type="tt:SupportedAnalyticsModules"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="CreateAnalyticsModules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AnalyticsModule" type="tt:Config" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateAnalyticsModulesResponse">
<xs:complexType/>
</xs:element>
<!--===============================-->
<xs:element name="DeleteAnalyticsModules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing Video Analytics configuration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AnalyticsModuleName" type="xs:string" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Name of the AnalyticsModule to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteAnalyticsModulesResponse">
<xs:complexType/>
</xs:element>
<!--===============================-->
<xs:element name="ModifyAnalyticsModules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AnalyticsModule" type="tt:Config" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ModifyAnalyticsModulesResponse">
<xs:complexType/>
</xs:element>
<!--===============================-->
<xs:element name="GetAnalyticsModules">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference to an existing VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsModulesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AnalyticsModule" type="tt:Config" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tan:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tan:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetSupportedRulesRequest">
<wsdl:part name="parameters" element="tan:GetSupportedRules"/>
</wsdl:message>
<wsdl:message name="GetSupportedRulesResponse">
<wsdl:part name="parameters" element="tan:GetSupportedRulesResponse"/>
</wsdl:message>
<wsdl:message name="CreateRulesRequest">
<wsdl:part name="parameters" element="tan:CreateRules"/>
</wsdl:message>
<wsdl:message name="CreateRulesResponse">
<wsdl:part name="parameters" element="tan:CreateRulesResponse"/>
</wsdl:message>
<wsdl:message name="DeleteRulesRequest">
<wsdl:part name="parameters" element="tan:DeleteRules"/>
</wsdl:message>
<wsdl:message name="DeleteRulesResponse">
<wsdl:part name="parameters" element="tan:DeleteRulesResponse"/>
</wsdl:message>
<wsdl:message name="GetRulesRequest">
<wsdl:part name="parameters" element="tan:GetRules"/>
</wsdl:message>
<wsdl:message name="GetRulesResponse">
<wsdl:part name="parameters" element="tan:GetRulesResponse"/>
</wsdl:message>
<wsdl:message name="GetSupportedAnalyticsModulesResponse">
<wsdl:part name="parameters" element="tan:GetSupportedAnalyticsModulesResponse"/>
</wsdl:message>
<wsdl:message name="GetSupportedAnalyticsModulesRequest">
<wsdl:part name="parameters" element="tan:GetSupportedAnalyticsModules"/>
</wsdl:message>
<wsdl:message name="CreateAnalyticsModulesRequest">
<wsdl:part name="parameters" element="tan:CreateAnalyticsModules"/>
</wsdl:message>
<wsdl:message name="CreateAnalyticsModulesResponse">
<wsdl:part name="parameters" element="tan:CreateAnalyticsModulesResponse"/>
</wsdl:message>
<wsdl:message name="DeleteAnalyticsModulesRequest">
<wsdl:part name="parameters" element="tan:DeleteAnalyticsModules"/>
</wsdl:message>
<wsdl:message name="DeleteAnalyticsModulesResponse">
<wsdl:part name="parameters" element="tan:DeleteAnalyticsModulesResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsModulesRequest">
<wsdl:part name="parameters" element="tan:GetAnalyticsModules"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsModulesResponse">
<wsdl:part name="parameters" element="tan:GetAnalyticsModulesResponse"/>
</wsdl:message>
<wsdl:message name="ModifyRulesRequest">
<wsdl:part name="parameters" element="tan:ModifyRules"/>
</wsdl:message>
<wsdl:message name="ModifyRulesResponse">
<wsdl:part name="parameters" element="tan:ModifyRulesResponse"/>
</wsdl:message>
<wsdl:message name="ModifyAnalyticsModulesRequest">
<wsdl:part name="parameters" element="tan:ModifyAnalyticsModules"/>
</wsdl:message>
<wsdl:message name="ModifyAnalyticsModulesResponse">
<wsdl:part name="parameters" element="tan:ModifyAnalyticsModulesResponse"/>
</wsdl:message>
<wsdl:portType name="RuleEnginePort">
<wsdl:operation name="GetSupportedRules">
<wsdl:documentation>
List all rules that are supported by the given VideoAnalyticsConfiguration.
The result of this method may depend on the overall Video analytics configuration of the device,
which is available via the current set of profiles.
</wsdl:documentation>
<wsdl:input message="tan:GetSupportedRulesRequest"/>
<wsdl:output message="tan:GetSupportedRulesResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateRules">
<wsdl:documentation>
Add one or more rules to an existing VideoAnalyticsConfiguration.
The available supported types can be retrieved via <a href="#op.GetSupportedRules">GetSupportedRules</a>,
where the Name of the supported rule correspond to the type of an rule instance.<br/>
Pass unique module names which can be later used as reference.
The Parameters of the rules must match those of the corresponding description.
<br/>
Although this method is mandatory a device implementation must not support adding rules.
Instead it can provide a fixed set of predefined configurations via the media service function
<a href="media.wsdl#op.GetCompatibleVideoAnalyticsConfigurations">GetCompatibleVideoAnalyticsConfigurations</a>.
</wsdl:documentation>
<wsdl:input message="tan:CreateRulesRequest"/>
<wsdl:output message="tan:CreateRulesResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteRules">
<wsdl:documentation>
Remove one or more rules from a VideoAnalyticsConfiguration.
</wsdl:documentation>
<wsdl:input message="tan:DeleteRulesRequest"/>
<wsdl:output message="tan:DeleteRulesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetRules">
<wsdl:documentation>
List the currently assigned set of rules of a VideoAnalyticsConfiguration.
</wsdl:documentation>
<wsdl:input message="tan:GetRulesRequest"/>
<wsdl:output message="tan:GetRulesResponse"/>
</wsdl:operation>
<wsdl:operation name="ModifyRules">
<wsdl:documentation>
Modify one or more rules of a VideoAnalyticsConfiguration. The rules are referenced by their names.
</wsdl:documentation>
<wsdl:input message="tan:ModifyRulesRequest"/>
<wsdl:output message="tan:ModifyRulesResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="AnalyticsEnginePort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the analytics service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="tan:GetServiceCapabilitiesRequest"/>
<wsdl:output message="tan:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetSupportedAnalyticsModules">
<wsdl:documentation>
List all analytics modules that are supported by the given VideoAnalyticsConfiguration.
The result of this method may depend on the overall Video analytics configuration of the device,
which is available via the current set of profiles.
</wsdl:documentation>
<wsdl:input message="tan:GetSupportedAnalyticsModulesRequest"/>
<wsdl:output message="tan:GetSupportedAnalyticsModulesResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateAnalyticsModules">
<wsdl:documentation>
Add one or more analytics modules to an existing VideoAnalyticsConfiguration.
The available supported types can be retrieved via <a href="#op.GetSupportedAnalyticsModules">GetSupportedAnalyticsModules</a>,
where the Name of the supported AnalyticsModules correspond to the type of an AnalyticsModule instance.<br/>
Pass unique module names which can be later used as reference. The Parameters of the analytics module must match those of the corresponding AnalyticsModuleDescription.
<br/>
Although this method is mandatory a device implementation must not support adding modules.
Instead it can provide a fixed set of predefined configurations via the media service function
<a href="media.wsdl#op.GetCompatibleVideoAnalyticsConfigurations">GetCompatibleVideoAnalyticsConfigurations</a>.
<br/>
The device shall ensure that a corresponding analytics engine starts operation when a client
subscribes directly or indirectly for events produced by the analytics or rule engine or when a
client requests the corresponding scene description stream.
An analytics module must be attached to a Video source using the media profiles before it can be used.
In case differing analytics configurations are attached to the same profile it is undefined which
of the analytics module configuration becomes active if no stream is activated or multiple streams
with different profiles are activated at the same time.
</wsdl:documentation>
<wsdl:input message="tan:CreateAnalyticsModulesRequest"/>
<wsdl:output message="tan:CreateAnalyticsModulesResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteAnalyticsModules">
<wsdl:documentation>
Remove one or more analytics modules from a VideoAnalyticsConfiguration referenced by their names.<br/>
</wsdl:documentation>
<wsdl:input message="tan:DeleteAnalyticsModulesRequest"/>
<wsdl:output message="tan:DeleteAnalyticsModulesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsModules">
<wsdl:documentation>
List the currently assigned set of analytics modules of a VideoAnalyticsConfiguration.
</wsdl:documentation>
<wsdl:input message="tan:GetAnalyticsModulesRequest"/>
<wsdl:output message="tan:GetAnalyticsModulesResponse"/>
</wsdl:operation>
<wsdl:operation name="ModifyAnalyticsModules">
<wsdl:documentation>
Modify the settings of one or more analytics modules of a VideoAnalyticsConfiguration. The modules are referenced by their names.
It is allowed to pass only a subset to be modified.
</wsdl:documentation>
<wsdl:input message="tan:ModifyAnalyticsModulesRequest"/>
<wsdl:output message="tan:ModifyAnalyticsModulesResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="RuleEngineBinding" type="tan:RuleEnginePort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetSupportedRules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetSupportedRules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateRules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/CreateRules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteRules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/DeleteRules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetRules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetRules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ModifyRules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/ModifyRules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="AnalyticsEngineBinding" type="tan:AnalyticsEnginePort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetSupportedAnalyticsModules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetSupportedAnalyticsModules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateAnalyticsModules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/CreateAnalyticsModules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteAnalyticsModules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/DeleteAnalyticsModules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsModules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/GetAnalyticsModules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ModifyAnalyticsModules">
<soap:operation soapAction="http://www.onvif.org/ver20/analytics/wsdl/ModifyAnalyticsModules"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AnalyticsService">
<wsdl:port name="AnalyticsEnginePort" binding="tan:AnalyticsEngineBinding">
<soap:address location="http://192.168.0.51:8888/onvif/Analytics"/>
</wsdl:port>
<wsdl:port name="RuleEnginePort" binding="tan:RuleEnginePort">
<soap:address location="http://192.168.0.51:8888/onvif/Analytics"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,714 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.onvif.org/onvif/ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tad="http://www.onvif.org/ver10/analyticsdevice/wsdl" targetNamespace="http://www.onvif.org/ver10/analyticsdevice/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/analyticsdevice/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tad:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the analytics device service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="tad:Capabilities"/>
<!--===============================-->
<xs:element name="DeleteAnalyticsEngineControl">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the Analytics Engine Control configuration to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteAnalyticsEngineControlResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateAnalyticsEngineInputs">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineInput" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Settings of the configurations to be created.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ForcePersistence" type="xs:boolean" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateAnalyticsEngineInputsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineInput" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Configurations containing token generated.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateAnalyticsEngineControl">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineControl">
<xs:annotation>
<xs:documentation>Settings of the Analytics Engine Control configuration to be created. Mode shall be set to "idle".</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateAnalyticsEngineControlResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineInput" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Configuration containing token generated.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetAnalyticsEngineControl">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineControl">
<xs:annotation>
<xs:documentation>Contains the modified Analytics Engine Control configuration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ForcePersistence" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetAnalyticsEngineControlResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineControl">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the requested AnalyticsEngineControl configuration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineControlResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineControl">
<xs:annotation>
<xs:documentation>Configuration of the AnalyticsEngineControl.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineControls">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineControlsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="AnalyticsEngineControls" type="tt:AnalyticsEngineControl" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of available AnalyticsEngineControl configurations.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngine">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the requested AnalyticsEngine configuration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngine">
<xs:annotation>
<xs:documentation>Configuration of the AnalyticsEngine.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngines">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEnginesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngine" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of available AnalyticsEngine configurations.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetVideoAnalyticsConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:VideoAnalyticsConfiguration">
<xs:annotation>
<xs:documentation>Contains the modified video analytics configuration. The configuration shall exist in the device.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ForcePersistence" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetVideoAnalyticsConfigurationResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetAnalyticsEngineInput">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineInput">
<xs:annotation>
<xs:documentation>Contains the modified Analytics Engine Input configuration. The configuration shall exist in the device.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ForcePersistence" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetAnalyticsEngineInputResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineInput">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the requested AnalyticsEngineInput configuration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineInputResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineInput">
<xs:annotation>
<xs:documentation>Configuration of the AnalyticsEngineInput.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineInputs">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsEngineInputsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:AnalyticsEngineInput" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of available AnalyticsEngineInput configurations.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsDeviceStreamUri">
<xs:complexType>
<xs:sequence>
<xs:element name="StreamSetup" type="tt:StreamSetup">
<xs:annotation>
<xs:documentation>Configuration of the URI requested.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="AnalyticsEngineControlToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the AnalyticsEngineControl whose URI is requested.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsDeviceStreamUriResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Uri" type="xs:anyURI">
<xs:annotation>
<xs:documentation>Streaming URI.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetVideoAnalyticsConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the VideoAnalyticsConfiguration requested.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetVideoAnalyticsConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:VideoAnalyticsConfiguration">
<xs:annotation>
<xs:documentation>Settings of the VideoAnalyticsConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteAnalyticsEngineInputs">
<xs:complexType>
<xs:sequence>
<xs:element name="ConfigurationToken" type="tt:ReferenceToken" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>LIst of tokens of Analytics Engine Input configurations to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteAnalyticsEngineInputsResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsState">
<xs:complexType>
<xs:sequence>
<xs:element name="AnalyticsEngineControlToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the AnalyticsEngineControl whose state information is requested.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetAnalyticsStateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="State" type="tt:AnalyticsStateInformation">
<xs:annotation>
<xs:documentation>Current status information.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<!--===============================-->
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tad:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tad:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="DeleteAnalyticsEngineControlRequest">
<wsdl:part name="parameters" element="tad:DeleteAnalyticsEngineControl"/>
</wsdl:message>
<wsdl:message name="DeleteAnalyticsEngineControlResponse">
<wsdl:part name="parameters" element="tad:DeleteAnalyticsEngineControlResponse"/>
</wsdl:message>
<wsdl:message name="CreateAnalyticsEngineControlRequest">
<wsdl:part name="parameters" element="tad:CreateAnalyticsEngineControl"/>
</wsdl:message>
<wsdl:message name="CreateAnalyticsEngineControlResponse">
<wsdl:part name="parameters" element="tad:CreateAnalyticsEngineControlResponse"/>
</wsdl:message>
<wsdl:message name="SetAnalyticsEngineControlRequest">
<wsdl:part name="parameters" element="tad:SetAnalyticsEngineControl"/>
</wsdl:message>
<wsdl:message name="SetAnalyticsEngineControlResponse">
<wsdl:part name="parameters" element="tad:SetAnalyticsEngineControlResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineControlRequest">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineControl"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineControlResponse">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineControlResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineControlsRequest">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineControls"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineControlsResponse">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineControlsResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineRequest">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngine"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineResponse">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEnginesRequest">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngines"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEnginesResponse">
<wsdl:part name="parameters" element="tad:GetAnalyticsEnginesResponse"/>
</wsdl:message>
<wsdl:message name="SetVideoAnalyticsConfigurationRequest">
<wsdl:part name="parameters" element="tad:SetVideoAnalyticsConfiguration"/>
</wsdl:message>
<wsdl:message name="SetVideoAnalyticsConfigurationResponse">
<wsdl:part name="parameters" element="tad:SetVideoAnalyticsConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="SetAnalyticsEngineInputRequest">
<wsdl:part name="parameters" element="tad:SetAnalyticsEngineInput"/>
</wsdl:message>
<wsdl:message name="SetAnalyticsEngineInputResponse">
<wsdl:part name="parameters" element="tad:SetAnalyticsEngineInputResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineInputRequest">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineInput"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineInputResponse">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineInputResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineInputsRequest">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineInputs"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsEngineInputsResponse">
<wsdl:part name="parameters" element="tad:GetAnalyticsEngineInputsResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsDeviceStreamUriRequest">
<wsdl:part name="parameters" element="tad:GetAnalyticsDeviceStreamUri"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsDeviceStreamUriResponse">
<wsdl:part name="parameters" element="tad:GetAnalyticsDeviceStreamUriResponse"/>
</wsdl:message>
<wsdl:message name="GetVideoAnalyticsConfigurationRequest">
<wsdl:part name="parameters" element="tad:GetVideoAnalyticsConfiguration"/>
</wsdl:message>
<wsdl:message name="GetVideoAnalyticsConfigurationResponse">
<wsdl:part name="parameters" element="tad:GetVideoAnalyticsConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="CreateAnalyticsEngineInputsRequest">
<wsdl:part name="parameters" element="tad:CreateAnalyticsEngineInputs"/>
</wsdl:message>
<wsdl:message name="CreateAnalyticsEngineInputsResponse">
<wsdl:part name="parameters" element="tad:CreateAnalyticsEngineInputsResponse"/>
</wsdl:message>
<wsdl:message name="DeleteAnalyticsEngineInputsRequest">
<wsdl:part name="parameters" element="tad:DeleteAnalyticsEngineInputs"/>
</wsdl:message>
<wsdl:message name="DeleteAnalyticsEngineInputsResponse">
<wsdl:part name="parameters" element="tad:DeleteAnalyticsEngineInputsResponse"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsStateRequest">
<wsdl:part name="parameters" element="tad:GetAnalyticsState"/>
</wsdl:message>
<wsdl:message name="GetAnalyticsStateResponse">
<wsdl:part name="parameters" element="tad:GetAnalyticsStateResponse"/>
</wsdl:message>
<wsdl:portType name="AnalyticsDevicePort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the analytics device service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="tad:GetServiceCapabilitiesRequest"/>
<wsdl:output message="tad:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteAnalyticsEngineControl">
<wsdl:documentation>DeleteAnalyticsEngineControl shall delete a control object .</wsdl:documentation>
<wsdl:input message="tad:DeleteAnalyticsEngineControlRequest"/>
<wsdl:output message="tad:DeleteAnalyticsEngineControlResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateAnalyticsEngineControl">
<wsdl:documentation>CreateAnalyticsEngineControl shall create a new control object.</wsdl:documentation>
<wsdl:input message="tad:CreateAnalyticsEngineControlRequest"/>
<wsdl:output message="tad:CreateAnalyticsEngineControlResponse"/>
</wsdl:operation>
<wsdl:operation name="SetAnalyticsEngineControl">
<wsdl:documentation>This command modifies the AnalyticsEngineControl configuration.</wsdl:documentation>
<wsdl:input message="tad:SetAnalyticsEngineControlRequest"/>
<wsdl:output message="tad:SetAnalyticsEngineControlResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngineControl">
<wsdl:documentation>The GetAnalyticsEngineControl command fetches the analytics engine control if the analytics engine control token is known.</wsdl:documentation>
<wsdl:input message="tad:GetAnalyticsEngineControlRequest"/>
<wsdl:output message="tad:GetAnalyticsEngineControlResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngineControls">
<wsdl:documentation>This operation lists all available analytics engine controls for the device.</wsdl:documentation>
<wsdl:input message="tad:GetAnalyticsEngineControlsRequest"/>
<wsdl:output message="tad:GetAnalyticsEngineControlsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngine">
<wsdl:documentation>The GetAnalyticsEngine command fetches the analytics engine configuration if the token is known.</wsdl:documentation>
<wsdl:input message="tad:GetAnalyticsEngineRequest"/>
<wsdl:output message="tad:GetAnalyticsEngineResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngines">
<wsdl:documentation>This operation lists all available analytics engine configurations for the device.</wsdl:documentation>
<wsdl:input message="tad:GetAnalyticsEnginesRequest"/>
<wsdl:output message="tad:GetAnalyticsEnginesResponse"/>
</wsdl:operation>
<wsdl:operation name="SetVideoAnalyticsConfiguration">
<wsdl:documentation>A video analytics configuration is modified using this command.</wsdl:documentation>
<wsdl:input message="tad:SetVideoAnalyticsConfigurationRequest"/>
<wsdl:output message="tad:SetVideoAnalyticsConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="SetAnalyticsEngineInput">
<wsdl:documentation>This command modifies the analytics engine input configuration.</wsdl:documentation>
<wsdl:input message="tad:SetAnalyticsEngineInputRequest"/>
<wsdl:output message="tad:SetAnalyticsEngineInputResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngineInput">
<wsdl:documentation>The GetAnalyticsEngineInput command fetches the input configuration if the analytics engine input configuration token is known.</wsdl:documentation>
<wsdl:input message="tad:GetAnalyticsEngineInputRequest"/>
<wsdl:output message="tad:GetAnalyticsEngineInputResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngineInputs">
<wsdl:documentation>This operation lists all available analytics engine input configurations for the device.</wsdl:documentation>
<wsdl:input message="tad:GetAnalyticsEngineInputsRequest"/>
<wsdl:output message="tad:GetAnalyticsEngineInputsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsDeviceStreamUri">
<wsdl:documentation>This operation requests a URI that can be used to initiate a live stream using RTSP as the control protocol if the token of the AnalyticsEngineControl is known.</wsdl:documentation>
<wsdl:input message="tad:GetAnalyticsDeviceStreamUriRequest"/>
<wsdl:output message="tad:GetAnalyticsDeviceStreamUriResponse"/>
</wsdl:operation>
<wsdl:operation name="GetVideoAnalyticsConfiguration">
<wsdl:documentation>The GetVideoAnalyticsConfiguration command fetches the video analytics configuration if the video analytics configuration token is known.</wsdl:documentation>
<wsdl:input message="tad:GetVideoAnalyticsConfigurationRequest"/>
<wsdl:output message="tad:GetVideoAnalyticsConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateAnalyticsEngineInputs">
<wsdl:documentation>This command generates one or more analytics engine input configurations.</wsdl:documentation>
<wsdl:input message="tad:CreateAnalyticsEngineInputsRequest"/>
<wsdl:output message="tad:CreateAnalyticsEngineInputsResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteAnalyticsEngineInputs">
<wsdl:documentation>This command deletes analytics engine input configurations if the tokens are known.</wsdl:documentation>
<wsdl:input message="tad:DeleteAnalyticsEngineInputsRequest"/>
<wsdl:output message="tad:DeleteAnalyticsEngineInputsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsState">
<wsdl:documentation>GetAnalyticsState returns status information of the referenced AnalyticsEngineControl object.</wsdl:documentation>
<wsdl:input message="tad:GetAnalyticsStateRequest"/>
<wsdl:output message="tad:GetAnalyticsStateResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="AnalyticsDeviceBinding" type="tad:AnalyticsDevicePort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteAnalyticsEngineControl">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/DeleteAnalyticsEngineControl"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateAnalyticsEngineControl">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/CreateAnalyticsEngineControl"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetAnalyticsEngineControl">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/SetAnalyticsEngineControl"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngineControl">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetAnalyticsEngineControl"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngineControls">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetAnalyticsEngineControls"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngine">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetAnalyticsEngine"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngines">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetAnalyticsEngines"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetVideoAnalyticsConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/SetVideoAnalyticsConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetAnalyticsEngineInput">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/SetAnalyticsEngineInput"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngineInput">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetAnalyticsEngineInput"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsEngineInputs">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetAnalyticsEngineInputs"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsDeviceStreamUri">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetAnalyticsDeviceStreamUri"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetVideoAnalyticsConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetVideoAnalyticsConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateAnalyticsEngineInputs">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/CreateAnalyticsEngineInputs"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteAnalyticsEngineInputs">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/DeleteAnalyticsEngineInputs"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetAnalyticsState">
<soap:operation soapAction="http://www.onvif.org/ver10/analyticsdevice/wsdl/GetAnalyticsState"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="AnalyticsDeviceService">
<wsdl:port name="AnalyticsDevicePort" binding="tad:AnalyticsDeviceBinding">
<soap:address location="http://192.168.0.51:8888/onvif/AnalyticsDevice"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,581 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2004-2006). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsd:schema
targetNamespace="http://docs.oasis-open.org/wsn/b-2"
xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2"
xmlns:wstop="http://docs.oasis-open.org/wsn/t-1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- ======================== Imports ============================ -->
<xsd:import namespace="http://www.w3.org/2005/08/addressing"
schemaLocation="./ws-addr.xsd"
/>
<xsd:import namespace="http://docs.oasis-open.org/wsrf/bf-2"
schemaLocation="./bf-2.xsd"
/>
<xsd:import namespace="http://docs.oasis-open.org/wsn/t-1"
schemaLocation="./t-1.xsd"
/>
<!-- ===================== Misc. Helper Types ===================== -->
<xsd:complexType name="QueryExpressionType" mixed="true">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="1" processContents="lax" />
</xsd:sequence>
<xsd:attribute name="Dialect" type="xsd:anyURI" use="required"/>
</xsd:complexType>
<xsd:complexType name="TopicExpressionType" mixed="true">
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute name="Dialect" type="xsd:anyURI" use="required" />
<xsd:anyAttribute/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="FilterType">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SubscriptionPolicyType">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xsd:sequence>
</xsd:complexType>
<!-- =============== Resource Property Related =================== -->
<!-- ======== Resource Properties for NotificationProducer ======== -->
<xsd:element name="TopicExpression" type="wsnt:TopicExpressionType"/>
<xsd:element name="FixedTopicSet" type="xsd:boolean" default="true"/>
<xsd:element name="TopicExpressionDialect" type="xsd:anyURI"/>
<xsd:element name="NotificationProducerRP">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:TopicExpression"
minOccurs="0" maxOccurs="unbounded" />
<xsd:element ref="wsnt:FixedTopicSet"
minOccurs="0" maxOccurs="1" />
<xsd:element ref="wsnt:TopicExpressionDialect"
minOccurs="0" maxOccurs="unbounded" />
<xsd:element ref="wstop:TopicSet"
minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- ======== Resource Properties for SubscriptionManager ========= -->
<xsd:element name="ConsumerReference"
type="wsa:EndpointReferenceType" />
<xsd:element name="Filter" type="wsnt:FilterType" />
<xsd:element name="SubscriptionPolicy" type="wsnt:SubscriptionPolicyType" />
<xsd:element name="CreationTime" type="xsd:dateTime" />
<xsd:element name="SubscriptionManagerRP" >
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:ConsumerReference"
minOccurs="1" maxOccurs="1" />
<xsd:element ref="wsnt:Filter"
minOccurs="0" maxOccurs="1" />
<xsd:element ref="wsnt:SubscriptionPolicy"
minOccurs="0" maxOccurs="1" />
<xsd:element ref="wsnt:CreationTime"
minOccurs="0" maxOccurs="1" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- ================= Notification Metadata ===================== -->
<xsd:element name="SubscriptionReference"
type="wsa:EndpointReferenceType" />
<xsd:element name="Topic"
type="wsnt:TopicExpressionType" />
<xsd:element name="ProducerReference"
type="wsa:EndpointReferenceType" />
<!-- ================== Message Helper Types ===================== -->
<xsd:complexType name="NotificationMessageHolderType" >
<xsd:sequence>
<xsd:element ref="wsnt:SubscriptionReference"
minOccurs="0" maxOccurs="1" />
<xsd:element ref="wsnt:Topic"
minOccurs="0" maxOccurs="1" />
<xsd:element ref="wsnt:ProducerReference"
minOccurs="0" maxOccurs="1" />
<xsd:element name="Message">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##any" processContents="lax"
minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="NotificationMessage"
type="wsnt:NotificationMessageHolderType"/>
<!-- ========== Message Types for NotificationConsumer =========== -->
<xsd:element name="Notify" >
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:NotificationMessage"
minOccurs="1" maxOccurs="unbounded" />
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<!-- ========== Message Types for NotificationProducer =========== -->
<xsd:simpleType name="AbsoluteOrRelativeTimeType">
<xsd:union memberTypes="xsd:dateTime xsd:duration" />
</xsd:simpleType>
<xsd:element name="CurrentTime" type="xsd:dateTime" />
<xsd:element name="TerminationTime"
nillable="true" type="xsd:dateTime" />
<xsd:element name="ProducerProperties"
type="wsnt:QueryExpressionType" />
<xsd:element name="MessageContent"
type="wsnt:QueryExpressionType" />
<xsd:element name="UseRaw"><xsd:complexType/></xsd:element>
<xsd:element name="Subscribe" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ConsumerReference"
type="wsa:EndpointReferenceType"
minOccurs="1" maxOccurs="1" />
<xsd:element name="Filter"
type="wsnt:FilterType"
minOccurs="0" maxOccurs="1" />
<xsd:element name="InitialTerminationTime"
type="wsnt:AbsoluteOrRelativeTimeType"
nillable="true"
minOccurs="0" maxOccurs="1" />
<xsd:element name="SubscriptionPolicy"
minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##any" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SubscribeResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SubscriptionReference"
type="wsa:EndpointReferenceType"
minOccurs="1" maxOccurs="1" />
<xsd:element ref="wsnt:CurrentTime"
minOccurs="0" maxOccurs="1" />
<xsd:element ref="wsnt:TerminationTime"
minOccurs="0" maxOccurs="1" />
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetCurrentMessage">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Topic"
type="wsnt:TopicExpressionType" />
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetCurrentMessageResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="SubscribeCreationFailedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="SubscribeCreationFailedFault"
type="wsnt:SubscribeCreationFailedFaultType"/>
<xsd:complexType name="InvalidFilterFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="UnknownFilter" type="xsd:QName"
minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="InvalidFilterFault"
type="wsnt:InvalidFilterFaultType"/>
<xsd:complexType name="TopicExpressionDialectUnknownFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="TopicExpressionDialectUnknownFault"
type="wsnt:TopicExpressionDialectUnknownFaultType"/>
<xsd:complexType name="InvalidTopicExpressionFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="InvalidTopicExpressionFault"
type="wsnt:InvalidTopicExpressionFaultType"/>
<xsd:complexType name="TopicNotSupportedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="TopicNotSupportedFault"
type="wsnt:TopicNotSupportedFaultType"/>
<xsd:complexType name="MultipleTopicsSpecifiedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="MultipleTopicsSpecifiedFault"
type="wsnt:MultipleTopicsSpecifiedFaultType"/>
<xsd:complexType name="InvalidProducerPropertiesExpressionFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="InvalidProducerPropertiesExpressionFault"
type="wsnt:InvalidProducerPropertiesExpressionFaultType"/>
<xsd:complexType name="InvalidMessageContentExpressionFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="InvalidMessageContentExpressionFault"
type="wsnt:InvalidMessageContentExpressionFaultType"/>
<xsd:complexType name="UnrecognizedPolicyRequestFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="UnrecognizedPolicy" type="xsd:QName"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnrecognizedPolicyRequestFault"
type="wsnt:UnrecognizedPolicyRequestFaultType"/>
<xsd:complexType name="UnsupportedPolicyRequestFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="UnsupportedPolicy" type="xsd:QName"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnsupportedPolicyRequestFault"
type="wsnt:UnsupportedPolicyRequestFaultType"/>
<xsd:complexType name="NotifyMessageNotSupportedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="NotifyMessageNotSupportedFault"
type="wsnt:NotifyMessageNotSupportedFaultType"/>
<xsd:complexType name="UnacceptableInitialTerminationTimeFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="MinimumTime" type="xsd:dateTime"/>
<xsd:element name="MaximumTime" type="xsd:dateTime"
minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnacceptableInitialTerminationTimeFault"
type="wsnt:UnacceptableInitialTerminationTimeFaultType"/>
<xsd:complexType name="NoCurrentMessageOnTopicFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="NoCurrentMessageOnTopicFault"
type="wsnt:NoCurrentMessageOnTopicFaultType"/>
<!-- ======== Message Types for PullPoint ======================== -->
<xsd:element name="GetMessages">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="MaximumNumber"
type="xsd:nonNegativeInteger"
minOccurs="0"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetMessagesResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:NotificationMessage"
minOccurs="0" maxOccurs="unbounded" />
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:element name="DestroyPullPoint">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:element name="DestroyPullPointResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="UnableToGetMessagesFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnableToGetMessagesFault"
type="wsnt:UnableToGetMessagesFaultType"/>
<xsd:complexType name="UnableToDestroyPullPointFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnableToDestroyPullPointFault"
type="wsnt:UnableToDestroyPullPointFaultType"/>
<!-- ======== Message Types for Create PullPoint ================= -->
<xsd:element name="CreatePullPoint">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:element name="CreatePullPointResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="PullPoint"
type="wsa:EndpointReferenceType"/>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:anyAttribute/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="UnableToCreatePullPointFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnableToCreatePullPointFault"
type="wsnt:UnableToCreatePullPointFaultType"/>
<!-- ======== Message Types for Base SubscriptionManager ========= -->
<xsd:element name="Renew">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="TerminationTime"
type="wsnt:AbsoluteOrRelativeTimeType"
nillable="true"
minOccurs="1" maxOccurs="1" />
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="RenewResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="wsnt:TerminationTime"
minOccurs="1" maxOccurs="1" />
<xsd:element ref="wsnt:CurrentTime"
minOccurs="0" maxOccurs="1" />
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="UnacceptableTerminationTimeFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType">
<xsd:sequence>
<xsd:element name="MinimumTime" type="xsd:dateTime"/>
<xsd:element name="MaximumTime" type="xsd:dateTime"
minOccurs="0"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnacceptableTerminationTimeFault"
type="wsnt:UnacceptableTerminationTimeFaultType"/>
<xsd:element name="Unsubscribe">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="UnsubscribeResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="UnableToDestroySubscriptionFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="UnableToDestroySubscriptionFault"
type="wsnt:UnableToDestroySubscriptionFaultType"/>
<!-- ====== Message Types for Pausable SubscriptionManager ======= -->
<xsd:element name="PauseSubscription">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PauseSubscriptionResponse" >
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ResumeSubscription">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ResumeSubscriptionResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="PauseFailedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="PauseFailedFault"
type="wsnt:PauseFailedFaultType"/>
<xsd:complexType name="ResumeFailedFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="ResumeFailedFault"
type="wsnt:ResumeFailedFaultType"/>
</xsd:schema>

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementers or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2005). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsd:schema
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wsrf-bf=
"http://docs.oasis-open.org/wsrf/bf-2"
elementFormDefault="qualified" attributeFormDefault="unqualified"
targetNamespace=
"http://docs.oasis-open.org/wsrf/bf-2">
<xsd:import
namespace="http://www.w3.org/2005/08/addressing"
schemaLocation= "./ws-addr.xsd"/>
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="./xml.xsd">
<xsd:annotation>
<xsd:documentation>
Get access to the xml: attribute groups for xml:lang as declared on 'schema'
and 'documentation' below
</xsd:documentation>
</xsd:annotation>
</xsd:import>
<!-- ====================== BaseFault Types ======================= -->
<xsd:element name="BaseFault" type="wsrf-bf:BaseFaultType"/>
<xsd:complexType name="BaseFaultType">
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="Timestamp" type="xsd:dateTime"
minOccurs="1" maxOccurs="1"/>
<xsd:element name="Originator" type="wsa:EndpointReferenceType"
minOccurs="0" maxOccurs="1"/>
<xsd:element name="ErrorCode"
minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:complexContent mixed="true">
<xsd:extension base="xsd:anyType">
<xsd:attribute name="dialect" type="xsd:anyURI"
use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="Description"
minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:string">
<xsd:attribute ref="xml:lang" use="optional"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="FaultCause" minOccurs="0" maxOccurs="1">
<xsd:complexType>
<xsd:sequence>
<xsd:any namespace="##other" processContents="lax"
minOccurs="1" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:anyAttribute namespace="##other" processContents="lax"/>
</xsd:complexType>
</xsd:schema>

View File

@ -0,0 +1,448 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2004-2006). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<wsdl:definitions name="WS-BaseNotification"
targetNamespace="http://docs.oasis-open.org/wsn/bw-2"
xmlns:wsntw="http://docs.oasis-open.org/wsn/bw-2"
xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:wsrf-rw="http://docs.oasis-open.org/wsrf/rw-2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<!-- ========================== Imports =========================== -->
<wsdl:import
namespace="http://docs.oasis-open.org/wsrf/rw-2"
location="./rw-2.wsdl"/>
<!-- ===================== Types Definitions ====================== -->
<wsdl:types>
<xsd:schema>
<xsd:import
namespace="http://docs.oasis-open.org/wsn/b-2"
schemaLocation="./b-2.xsd"/>
</xsd:schema>
</wsdl:types>
<!-- ================ NotificationConsumer::Notify ================
Notify(
NotificationMessage
(SubscriptionReference, TopicExpression, ProducerReference,
Message)*
returns: n/a (one way)
-->
<wsdl:message name="Notify">
<wsdl:part name="Notify" element="wsnt:Notify"/>
</wsdl:message>
<!-- ============== NotificationProducer::Subscribe ===============
Subscribe(
(ConsumerEndpointReference, [Filter], [SubscriptionPolicy],
[InitialTerminationTime])
returns: WS-Resource qualified EPR to a Subscription
-->
<wsdl:message name="SubscribeRequest" >
<wsdl:part name="SubscribeRequest"
element="wsnt:Subscribe"/>
</wsdl:message>
<wsdl:message name="SubscribeResponse">
<wsdl:part name="SubscribeResponse"
element="wsnt:SubscribeResponse"/>
</wsdl:message>
<wsdl:message name="SubscribeCreationFailedFault">
<wsdl:part name="SubscribeCreationFailedFault"
element="wsnt:SubscribeCreationFailedFault" />
</wsdl:message>
<wsdl:message name="TopicExpressionDialectUnknownFault">
<wsdl:part name="TopicExpressionDialectUnknownFault"
element="wsnt:TopicExpressionDialectUnknownFault" />
</wsdl:message>
<wsdl:message name="InvalidFilterFault">
<wsdl:part name="InvalidFilterFault"
element="wsnt:InvalidFilterFault" />
</wsdl:message>
<wsdl:message name="InvalidProducerPropertiesExpressionFault">
<wsdl:part name="InvalidProducerPropertiesExpressionFault"
element="wsnt:InvalidProducerPropertiesExpressionFault" />
</wsdl:message>
<wsdl:message name="InvalidMessageContentExpressionFault">
<wsdl:part name="InvalidMessageContentExpressionFault"
element="wsnt:InvalidMessageContentExpressionFault" />
</wsdl:message>
<wsdl:message name="UnrecognizedPolicyRequestFault">
<wsdl:part name="UnrecognizedPolicyRequestFault"
element="wsnt:UnrecognizedPolicyRequestFault" />
</wsdl:message>
<wsdl:message name="UnsupportedPolicyRequestFault">
<wsdl:part name="UnsupportedPolicyRequestFault"
element="wsnt:UnsupportedPolicyRequestFault" />
</wsdl:message>
<wsdl:message name="NotifyMessageNotSupportedFault">
<wsdl:part name="NotifyMessageNotSupportedFault"
element="wsnt:NotifyMessageNotSupportedFault" />
</wsdl:message>
<wsdl:message name="UnacceptableInitialTerminationTimeFault">
<wsdl:part name="UnacceptableInitialTerminationTimeFault"
element="wsnt:UnacceptableInitialTerminationTimeFault"/>
</wsdl:message>
<!-- ========== NotificationProducer::GetCurrentMessage ===========
GetCurrentMessage(topicExpression)
returns: a NotificationMessage (xsd:any)
-->
<wsdl:message name="GetCurrentMessageRequest">
<wsdl:part name="GetCurrentMessageRequest"
element="wsnt:GetCurrentMessage"/>
</wsdl:message>
<wsdl:message name="GetCurrentMessageResponse">
<wsdl:part name="GetCurrentMessageResponse"
element="wsnt:GetCurrentMessageResponse"/>
</wsdl:message>
<wsdl:message name="InvalidTopicExpressionFault">
<wsdl:part name="InvalidTopicExpressionFault"
element="wsnt:InvalidTopicExpressionFault" />
</wsdl:message>
<wsdl:message name="TopicNotSupportedFault">
<wsdl:part name="TopicNotSupportedFault"
element="wsnt:TopicNotSupportedFault" />
</wsdl:message>
<wsdl:message name="MultipleTopicsSpecifiedFault">
<wsdl:part name="MultipleTopicsSpecifiedFault"
element="wsnt:MultipleTopicsSpecifiedFault" />
</wsdl:message>
<wsdl:message name="NoCurrentMessageOnTopicFault">
<wsdl:part name="NoCurrentMessageOnTopicFault"
element="wsnt:NoCurrentMessageOnTopicFault" />
</wsdl:message>
<!-- ========== PullPoint::GetMessages ===========
GetMessages(MaximumNumber)
returns: NotificationMessage list
-->
<wsdl:message name="GetMessagesRequest">
<wsdl:part name="GetMessagesRequest"
element="wsnt:GetMessages"/>
</wsdl:message>
<wsdl:message name="GetMessagesResponse">
<wsdl:part name="GetMessagesResponse"
element="wsnt:GetMessagesResponse"/>
</wsdl:message>
<wsdl:message name="UnableToGetMessagesFault">
<wsdl:part name="UnableToGetMessagesFault"
element="wsnt:UnableToGetMessagesFault"/>
</wsdl:message>
<!-- ========== PullPoint::DestroyPullPoint ===========
DestroyPullPoint()
returns: void
-->
<wsdl:message name="DestroyPullPointRequest">
<wsdl:part name="DestroyPullPointRequest"
element="wsnt:DestroyPullPoint"/>
</wsdl:message>
<wsdl:message name="DestroyPullPointResponse">
<wsdl:part name="DestroyPullPointResponse"
element="wsnt:DestroyPullPointResponse"/>
</wsdl:message>
<wsdl:message name="UnableToDestroyPullPointFault">
<wsdl:part name="UnableToDestroyPullPointFault"
element="wsnt:UnableToDestroyPullPointFault"/>
</wsdl:message>
<!-- ========== PullPoint::CreatePullPoint ===========
CreatePullPoint()
returns: PullPoint (wsa:EndpointReference)
-->
<wsdl:message name="CreatePullPointRequest">
<wsdl:part name="CreatePullPointRequest"
element="wsnt:CreatePullPoint"/>
</wsdl:message>
<wsdl:message name="CreatePullPointResponse">
<wsdl:part name="CreatePullPointResponse"
element="wsnt:CreatePullPointResponse"/>
</wsdl:message>
<wsdl:message name="UnableToCreatePullPointFault">
<wsdl:part name="UnableToCreatePullPointFault"
element="wsnt:UnableToCreatePullPointFault"/>
</wsdl:message>
<!-- ================ SubscriptionManager::Renew ==================
Renew( Duration | AbsoluteTime)
returns: (New Termination Time [CurrentTime])
-->
<wsdl:message name="RenewRequest">
<wsdl:part name="RenewRequest"
element="wsnt:Renew"/>
</wsdl:message>
<wsdl:message name="RenewResponse">
<wsdl:part name="RenewResponse"
element="wsnt:RenewResponse"/>
</wsdl:message>
<wsdl:message name="UnacceptableTerminationTimeFault">
<wsdl:part name="UnacceptableTerminationTimeFault"
element="wsnt:UnacceptableTerminationTimeFault" />
</wsdl:message>
<!-- ============== SubscriptionManager::Unsubscribe ===============
Unsubscribe()
returns: empty
-->
<wsdl:message name="UnsubscribeRequest">
<wsdl:part name="UnsubscribeRequest"
element="wsnt:Unsubscribe"/>
</wsdl:message>
<wsdl:message name="UnsubscribeResponse">
<wsdl:part name="UnsubscribeResponse"
element="wsnt:UnsubscribeResponse"/>
</wsdl:message>
<wsdl:message name="UnableToDestroySubscriptionFault">
<wsdl:part name="UnableToDestroySubscriptionFault"
element="wsnt:UnableToDestroySubscriptionFault" />
</wsdl:message>
<!-- ========== SubscriptionManager::PauseSubscription ============
PauseSubscription()
returns: empty
-->
<wsdl:message name="PauseSubscriptionRequest">
<wsdl:part name="PauseSubscriptionRequest"
element="wsnt:PauseSubscription"/>
</wsdl:message>
<wsdl:message name="PauseSubscriptionResponse">
<wsdl:part name="PauseSubscriptionResponse"
element="wsnt:PauseSubscriptionResponse"/>
</wsdl:message>
<wsdl:message name="PauseFailedFault">
<wsdl:part name="PauseFailedFault"
element="wsnt:PauseFailedFault" />
</wsdl:message>
<!-- ========= SubscriptionManager::ResumeSubscription ============
ResumeSubscription()
returns: empty
-->
<wsdl:message name="ResumeSubscriptionRequest">
<wsdl:part name="ResumeSubscriptionRequest"
element="wsnt:ResumeSubscription"/>
</wsdl:message>
<wsdl:message name="ResumeSubscriptionResponse">
<wsdl:part name="ResumeSubscriptionResponse"
element="wsnt:ResumeSubscriptionResponse"/>
</wsdl:message>
<wsdl:message name="ResumeFailedFault">
<wsdl:part name="ResumeFailedFault"
element="wsnt:ResumeFailedFault" />
</wsdl:message>
<!-- =================== PortType Definitions ===================== -->
<!-- ========= NotificationConsumer PortType Definition =========== -->
<wsdl:portType name="NotificationConsumer">
<wsdl:operation name="Notify">
<wsdl:input message="wsntw:Notify" />
</wsdl:operation>
</wsdl:portType>
<!-- ========= NotificationProducer PortType Definition =========== -->
<wsdl:portType name="NotificationProducer">
<wsdl:operation name="Subscribe">
<wsdl:input message="wsntw:SubscribeRequest" />
<wsdl:output message="wsntw:SubscribeResponse" />
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="InvalidFilterFault"
message="wsntw:InvalidFilterFault"/>
<wsdl:fault name="TopicExpressionDialectUnknownFault"
message="wsntw:TopicExpressionDialectUnknownFault"/>
<wsdl:fault name="InvalidTopicExpressionFault"
message="wsntw:InvalidTopicExpressionFault" />
<wsdl:fault name="TopicNotSupportedFault"
message="wsntw:TopicNotSupportedFault" />
<wsdl:fault name="InvalidProducerPropertiesExpressionFault"
message="wsntw:InvalidProducerPropertiesExpressionFault"/>
<wsdl:fault name="InvalidMessageContentExpressionFault"
message="wsntw:InvalidMessageContentExpressionFault"/>
<wsdl:fault name="UnacceptableInitialTerminationTimeFault"
message="wsntw:UnacceptableInitialTerminationTimeFault"/>
<wsdl:fault name="UnrecognizedPolicyRequestFault"
message="wsntw:UnrecognizedPolicyRequestFault"/>
<wsdl:fault name="UnsupportedPolicyRequestFault"
message="wsntw:UnsupportedPolicyRequestFault"/>
<wsdl:fault name="NotifyMessageNotSupportedFault"
message="wsntw:NotifyMessageNotSupportedFault"/>
<wsdl:fault name="SubscribeCreationFailedFault"
message="wsntw:SubscribeCreationFailedFault"/>
</wsdl:operation>
<wsdl:operation name="GetCurrentMessage">
<wsdl:input message="wsntw:GetCurrentMessageRequest"/>
<wsdl:output message="wsntw:GetCurrentMessageResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="TopicExpressionDialectUnknownFault"
message="wsntw:TopicExpressionDialectUnknownFault"/>
<wsdl:fault name="InvalidTopicExpressionFault"
message="wsntw:InvalidTopicExpressionFault" />
<wsdl:fault name="TopicNotSupportedFault"
message="wsntw:TopicNotSupportedFault" />
<wsdl:fault name="NoCurrentMessageOnTopicFault"
message="wsntw:NoCurrentMessageOnTopicFault" />
<wsdl:fault name="MultipleTopicsSpecifiedFault"
message="wsntw:MultipleTopicsSpecifiedFault" />
</wsdl:operation>
</wsdl:portType>
<!-- ========== PullPoint PortType Definition ===================== -->
<wsdl:portType name="PullPoint">
<wsdl:operation name="GetMessages">
<wsdl:input name="GetMessagesRequest"
message="wsntw:GetMessagesRequest" />
<wsdl:output name="GetMessagesResponse"
message="wsntw:GetMessagesResponse" />
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="UnableToGetMessagesFault"
message="wsntw:UnableToGetMessagesFault" />
</wsdl:operation>
<wsdl:operation name="DestroyPullPoint">
<wsdl:input name="DestroyPullPointRequest"
message="wsntw:DestroyPullPointRequest" />
<wsdl:output name="DestroyPullPointResponse"
message="wsntw:DestroyPullPointResponse" />
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="UnableToDestroyPullPointFault"
message="wsntw:UnableToDestroyPullPointFault" />
</wsdl:operation>
<wsdl:operation name="Notify">
<wsdl:input message="wsntw:Notify"/>
</wsdl:operation>
</wsdl:portType>
<!-- ========== CreatePullPoint PortType Definition =============== -->
<wsdl:portType name="CreatePullPoint">
<wsdl:operation name="CreatePullPoint">
<wsdl:input name="CreatePullPointRequest"
message="wsntw:CreatePullPointRequest" />
<wsdl:output name="CreatePullPointResponse"
message="wsntw:CreatePullPointResponse" />
<wsdl:fault name="UnableToCreatePullPointFault"
message="wsntw:UnableToCreatePullPointFault" />
</wsdl:operation>
</wsdl:portType>
<!-- ========== SubscriptionManager PortType Definition =========== -->
<wsdl:portType name="SubscriptionManager">
<wsdl:operation name="Renew">
<wsdl:input name="RenewRequest"
message="wsntw:RenewRequest" />
<wsdl:output name="RenewResponse"
message="wsntw:RenewResponse" />
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="UnacceptableTerminationTimeFault"
message=
"wsntw:UnacceptableTerminationTimeFault" />
</wsdl:operation>
<wsdl:operation name="Unsubscribe">
<wsdl:input name="UnsubscribeRequest"
message="wsntw:UnsubscribeRequest" />
<wsdl:output name="UnsubscribeResponse"
message="wsntw:UnsubscribeResponse" />
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="UnableToDestroySubscriptionFault"
message=
"wsntw:UnableToDestroySubscriptionFault" />
</wsdl:operation>
</wsdl:portType>
<!-- ====== PausableSubscriptionManager PortType Definition ======= -->
<wsdl:portType name="PausableSubscriptionManager">
<!-- ============== Extends: SubscriptionManager ============ -->
<wsdl:operation name="Renew">
<wsdl:input name="RenewRequest"
message="wsntw:RenewRequest" />
<wsdl:output name="RenewResponse"
message="wsntw:RenewResponse" />
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="UnacceptableTerminationTimeFault"
message=
"wsntw:UnacceptableTerminationTimeFault" />
</wsdl:operation>
<wsdl:operation name="Unsubscribe">
<wsdl:input name="UnsubscribeRequest"
message="wsntw:UnsubscribeRequest" />
<wsdl:output name="UnsubscribeResponse"
message="wsntw:UnsubscribeResponse" />
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="UnableToDestroySubscriptionFault"
message=
"wsntw:UnableToDestroySubscriptionFault" />
</wsdl:operation>
<!-- === PausableSubscriptionManager specific operations === -->
<wsdl:operation name="PauseSubscription">
<wsdl:input message="wsntw:PauseSubscriptionRequest"/>
<wsdl:output message="wsntw:PauseSubscriptionResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="PauseFailedFault"
message="wsntw:PauseFailedFault" />
</wsdl:operation>
<wsdl:operation name="ResumeSubscription">
<wsdl:input message="wsntw:ResumeSubscriptionRequest"/>
<wsdl:output message="wsntw:ResumeSubscriptionResponse"/>
<wsdl:fault name="ResourceUnknownFault"
message="wsrf-rw:ResourceUnknownFault" />
<wsdl:fault name="ResumeFailedFault"
message="wsntw:ResumeFailedFault" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,522 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.onvif.org/onvif/ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tls="http://www.onvif.org/ver10/display/wsdl" targetNamespace="http://www.onvif.org/ver10/display/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/display/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tls:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the display service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="FixedLayout" type="xs:boolean"><xs:annotation><xs:documentation>Indication that the SetLayout command supports only predefined layouts.</xs:documentation></xs:annotation></xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="tls:Capabilities"/>
<!--===============================-->
<xs:element name="GetLayout">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the Video Output whose Layout is requested</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetLayoutResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Layout" type="tt:Layout">
<xs:annotation>
<xs:documentation>Current layout of the video output.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetLayout">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the Video Output whose Layout shall be changed.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Layout" type="tt:Layout">
<xs:annotation>
<xs:documentation>Layout to be set</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetLayoutResponse">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetDisplayOptions">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the Video Output whose options are requested</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetDisplayOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="LayoutOptions" type="tt:LayoutOptions" minOccurs="0">
<xs:annotation>
<xs:documentation>The LayoutOptions describe the fixed and predefined layouts of a device. If the device does
not offer fixed layouts and allows setting the layout free this element is empty.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CodingCapabilities" type="tt:CodingCapabilities">
<xs:annotation>
<xs:documentation>decoding and encoding capabilities of the device</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPaneConfigurations">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference Token of the Video Output whose Pane Configurations are requested</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPaneConfigurationsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Contains a list of defined Panes of the specified VideoOutput. Each VideoOutput has at least one PaneConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPaneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference Token of the Video Output the requested pane belongs to</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Pane" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Reference Token of the Pane whose Configuration is requested</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPaneConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration">
<xs:annotation>
<xs:documentation>returns the configuration of the requested pane.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetPaneConfigurations">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the video output whose panes to set.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Pane Configuration to be set.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetPaneConfigurationsResponse">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetPaneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the video output whose panes to set.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration">
<xs:annotation>
<xs:documentation>Pane Configuration to be set.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetPaneConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="CreatePaneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the video output where the pane shall be created.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PaneConfiguration" type="tt:PaneConfiguration">
<xs:annotation>
<xs:documentation>Configuration of the pane to be created.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="CreatePaneConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="PaneToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the new pane configuration.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DeletePaneConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoOutput" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the video output where the pane shall be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PaneToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>Token of the pane to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="DeletePaneConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tls:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tls:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetLayoutRequest">
<wsdl:part name="parameters" element="tls:GetLayout"/>
</wsdl:message>
<wsdl:message name="GetLayoutResponse">
<wsdl:part name="parameters" element="tls:GetLayoutResponse"/>
</wsdl:message>
<wsdl:message name="SetLayoutRequest">
<wsdl:part name="parameters" element="tls:SetLayout"/>
</wsdl:message>
<wsdl:message name="SetLayoutResponse">
<wsdl:part name="parameters" element="tls:SetLayoutResponse"/>
</wsdl:message>
<wsdl:message name="GetDisplayOptionsRequest">
<wsdl:part name="parameters" element="tls:GetDisplayOptions"/>
</wsdl:message>
<wsdl:message name="GetDisplayOptionsResponse">
<wsdl:part name="parameters" element="tls:GetDisplayOptionsResponse"/>
</wsdl:message>
<wsdl:message name="GetPaneConfigurationsRequest">
<wsdl:part name="parameters" element="tls:GetPaneConfigurations"/>
</wsdl:message>
<wsdl:message name="GetPaneConfigurationsResponse">
<wsdl:part name="parameters" element="tls:GetPaneConfigurationsResponse"/>
</wsdl:message>
<wsdl:message name="GetPaneConfigurationRequest">
<wsdl:part name="parameters" element="tls:GetPaneConfiguration"/>
</wsdl:message>
<wsdl:message name="GetPaneConfigurationResponse">
<wsdl:part name="parameters" element="tls:GetPaneConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="SetPaneConfigurationsRequest">
<wsdl:part name="parameters" element="tls:SetPaneConfigurations"/>
</wsdl:message>
<wsdl:message name="SetPaneConfigurationsResponse">
<wsdl:part name="parameters" element="tls:SetPaneConfigurationsResponse"/>
</wsdl:message>
<wsdl:message name="SetPaneConfigurationRequest">
<wsdl:part name="parameters" element="tls:SetPaneConfiguration"/>
</wsdl:message>
<wsdl:message name="SetPaneConfigurationResponse">
<wsdl:part name="parameters" element="tls:SetPaneConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="CreatePaneConfigurationRequest">
<wsdl:part name="parameters" element="tls:CreatePaneConfiguration"/>
</wsdl:message>
<wsdl:message name="CreatePaneConfigurationResponse">
<wsdl:part name="parameters" element="tls:CreatePaneConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="DeletePaneConfigurationRequest">
<wsdl:part name="parameters" element="tls:DeletePaneConfiguration"/>
</wsdl:message>
<wsdl:message name="DeletePaneConfigurationResponse">
<wsdl:part name="parameters" element="tls:DeletePaneConfigurationResponse"/>
</wsdl:message>
<wsdl:portType name="DisplayPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the display service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="tls:GetServiceCapabilitiesRequest"/>
<wsdl:output message="tls:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetLayout">
<wsdl:documentation>Return the current layout of a video output. The Layout assigns a pane configuration to a certain area of the display. The layout settings
directly affect a specific video output. The layout consists of a list of PaneConfigurations and
their associated display areas.</wsdl:documentation>
<wsdl:input message="tls:GetLayoutRequest"/>
<wsdl:output message="tls:GetLayoutResponse"/>
</wsdl:operation>
<wsdl:operation name="SetLayout">
<wsdl:documentation>Change the layout of a display (e.g. change from
single view to split screen view).The Layout assigns a pane configuration to a certain area of the display. The layout settings
directly affect a specific video output. The layout consists of a list of PaneConfigurations and
their associated display areas.<br/>
A device implementation shall be tolerant against rounding errors when matching a layout against its fixed set of layouts by accepting differences of at least one percent.
</wsdl:documentation>
<wsdl:input message="tls:SetLayoutRequest"/>
<wsdl:output message="tls:SetLayoutResponse"/>
</wsdl:operation>
<wsdl:operation name="GetDisplayOptions">
<wsdl:documentation>The Display Options contain the supported layouts (LayoutOptions) and the decoding and
encoding capabilities (CodingCapabilities) of the device. The GetDisplayOptions command
returns both, Layout and Coding Capabilities, of a VideoOutput.</wsdl:documentation>
<wsdl:input message="tls:GetDisplayOptionsRequest"/>
<wsdl:output message="tls:GetDisplayOptionsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetPaneConfigurations">
<wsdl:documentation>List all currently defined panes of a device for a specified video output
(regardless if this pane is visible at a moment). A Pane is a display area on the monitor that is attached to a video output. A pane has a
PaneConfiguration that describes which entities are associated with the pane. A client has to configure the pane according to the connection to be established by setting the
AudioOutput and/or AudioSourceToken. If a Token is not set, the corresponding session will
not be established.</wsdl:documentation>
<wsdl:input message="tls:GetPaneConfigurationsRequest"/>
<wsdl:output message="tls:GetPaneConfigurationsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetPaneConfiguration">
<wsdl:documentation>Retrieve the pane configuration for a pane token.</wsdl:documentation>
<wsdl:input message="tls:GetPaneConfigurationRequest"/>
<wsdl:output message="tls:GetPaneConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="SetPaneConfigurations">
<wsdl:documentation>Modify one or more configurations of the specified video output.
This method will only modify the provided configurations and leave the others unchanged.
Use <a href="#op.DeletePaneConfiguration">DeletePaneConfiguration</a> to remove pane configurations.</wsdl:documentation>
<wsdl:input message="tls:SetPaneConfigurationsRequest"/>
<wsdl:output message="tls:SetPaneConfigurationsResponse"/>
</wsdl:operation>
<wsdl:operation name="SetPaneConfiguration">
<wsdl:documentation>This command changes the configuration of the specified pane (tbd)</wsdl:documentation>
<wsdl:input message="tls:SetPaneConfigurationRequest"/>
<wsdl:output message="tls:SetPaneConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="CreatePaneConfiguration">
<wsdl:documentation>Create a new pane configuration describing the streaming and coding settings for a display area.<br/>
This optional method is only supported by devices that signal support of dynamic pane creation via their capabilities.<br/>
The content of the Token field may be ignored by the device.
</wsdl:documentation>
<wsdl:input message="tls:CreatePaneConfigurationRequest"/>
<wsdl:output message="tls:CreatePaneConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="DeletePaneConfiguration">
<wsdl:documentation>Delete a pane configuration. A service must respond with an error if the pane configuration
is in use by the current layout.<br/>
This optional method is only supported by devices that signal support of dynamic pane creation via their capabilities.
</wsdl:documentation>
<wsdl:input message="tls:DeletePaneConfigurationRequest"/>
<wsdl:output message="tls:DeletePaneConfigurationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="DisplayBinding" type="tls:DisplayPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetLayout">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetLayout"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetLayout">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/SetLayout"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetDisplayOptions">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetDisplayOptions"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetPaneConfigurations">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetPaneConfigurations"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetPaneConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/GetPaneConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetPaneConfigurations">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/SetPaneConfigurations"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetPaneConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/SetPaneConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreatePaneConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/CreatePaneConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeletePaneConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/display/wsdl/DeletePaneConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="DisplayService">
<wsdl:port name="DisplayPort" binding="tls:DisplayBinding">
<soap:address location="http://192.168.0.51:8888/onvif/Display"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,126 @@
<?xml version='1.0' encoding='UTF-8' ?>
<!-- Schema for the SOAP/1.1 envelope
Portions © 2001 DevelopMentor.
© 2001 W3C (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved.
This document is governed by the W3C Software License [1] as described in the FAQ [2].
[1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
[2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
By obtaining, using and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions:
Permission to use, copy, modify, and distribute this software and its documentation, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the software and documentation or portions thereof, including modifications, that you make:
1. The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.
2. Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, a short notice of the following form (hypertext is preferred, text is permitted) should be used within the body of any redistributed or derivative code: "Copyright © 2001 World Wide Web Consortium, (Massachusetts Institute of Technology, Institut National de Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. http://www.w3.org/Consortium/Legal/"
3. Notice of any changes or modifications to the W3C files, including the date changes were made. (We recommend you provide URIs to the location from which the code is derived.)
Original W3C files; http://www.w3.org/2001/06/soap-envelope
Changes made:
- reverted namespace to http://schemas.xmlsoap.org/soap/envelope/
- reverted mustUnderstand to only allow 0 and 1 as lexical values
- made encodingStyle a global attribute 20020825
- removed default value from mustUnderstand attribute declaration
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENTATION.
The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the software without specific, written prior permission. Title to copyright in this software and any associated documentation will at all times remain with copyright holders.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/"
targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" >
<!-- Envelope, header and body -->
<xs:element name="Envelope" type="tns:Envelope" />
<xs:complexType name="Envelope" >
<xs:sequence>
<xs:element ref="tns:Header" minOccurs="0" />
<xs:element ref="tns:Body" minOccurs="1" />
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Header" type="tns:Header" />
<xs:complexType name="Header" >
<xs:sequence>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Body" type="tns:Body" />
<xs:complexType name="Body" >
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax" >
<xs:annotation>
<xs:documentation>
Prose in the spec does not specify that attributes are allowed on the Body element
</xs:documentation>
</xs:annotation>
</xs:anyAttribute>
</xs:complexType>
<!-- Global Attributes. The following attributes are intended to be usable via qualified attribute names on any complex type referencing them. -->
<xs:attribute name="mustUnderstand" >
<xs:simpleType>
<xs:restriction base='xs:boolean'>
<xs:pattern value='0|1' />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="actor" type="xs:anyURI" />
<xs:simpleType name="encodingStyle" >
<xs:annotation>
<xs:documentation>
'encodingStyle' indicates any canonicalization conventions followed in the contents of the containing element. For example, the value 'http://schemas.xmlsoap.org/soap/encoding/' indicates the pattern described in SOAP specification
</xs:documentation>
</xs:annotation>
<xs:list itemType="xs:anyURI" />
</xs:simpleType>
<xs:attribute name="encodingStyle" type="tns:encodingStyle" />
<xs:attributeGroup name="encodingStyle" >
<xs:attribute ref="tns:encodingStyle" />
</xs:attributeGroup>
<xs:element name="Fault" type="tns:Fault" />
<xs:complexType name="Fault" final="extension" >
<xs:annotation>
<xs:documentation>
Fault reporting structure
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="faultcode" type="xs:QName" />
<xs:element name="faultstring" type="xs:string" />
<xs:element name="faultactor" type="xs:anyURI" minOccurs="0" />
<xs:element name="detail" type="tns:detail" minOccurs="0" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="detail">
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
</xs:sequence>
<xs:anyAttribute namespace="##any" processContents="lax" />
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,737 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2012 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:wstop="http://docs.oasis-open.org/wsn/t-1" xmlns:wsntw="http://docs.oasis-open.org/wsn/bw-2" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:tev="http://www.onvif.org/ver10/events/wsdl" xmlns:wsrf-rw="http://docs.oasis-open.org/wsrf/rw-2" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" targetNamespace="http://www.onvif.org/ver10/events/wsdl">
<wsdl:import namespace="http://docs.oasis-open.org/wsn/bw-2" location="./bw-2.wsdl"/>
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/events/wsdl" xmlns:wstop="http://docs.oasis-open.org/wsn/t-1" xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" xmlns:tt="http://www.onvif.org/ver10/schema" elementFormDefault="qualified" version="2.3">
<xs:import namespace="http://www.w3.org/2005/08/addressing" schemaLocation="./ws-addr.xsd"/>
<xs:import namespace="http://docs.oasis-open.org/wsn/t-1" schemaLocation="./t-1.xsd"/>
<xs:import namespace="http://docs.oasis-open.org/wsn/b-2" schemaLocation="./b-2.xsd"/>
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tev:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the event service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="WSSubscriptionPolicySupport" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the WS Subscription policy is supported.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="WSPullPointSupport" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the WS Pull Point is supported.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="WSPausableSubscriptionManagerInterfaceSupport" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the WS Pausable Subscription Manager Interface is supported.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaxNotificationProducers" type="xs:int">
<xs:annotation>
<xs:documentation>Maximum number of supported notification producers as defined by WS-BaseNotification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaxPullPoints" type="xs:int">
<xs:annotation>
<xs:documentation>Maximum supported number of notification pull points.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="PersistentNotificationStorage" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication if the device supports persistent notification storage.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="tev:Capabilities"/>
<!--===============================-->
<xs:element name="CreatePullPointSubscription">
<xs:complexType>
<xs:sequence>
<xs:element name="Filter" type="wsnt:FilterType" minOccurs="0">
<xs:annotation>
<xs:documentation>Optional XPATH expression to select specific topics.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="InitialTerminationTime" type="wsnt:AbsoluteOrRelativeTimeType" nillable="true" minOccurs="0">
<xs:annotation>
<xs:documentation>Initial termination time.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="SubscriptionPolicy" minOccurs="0">
<xs:annotation>
<xs:documentation>Refer to <a href="http://docs.oasis-open.org/wsn/wsn-ws_base_notification-1.3-spec-os.htm">Web Services Base Notification 1.3 (WS-BaseNotification)</a>.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreatePullPointSubscriptionResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="SubscriptionReference" type="wsa:EndpointReferenceType">
<xs:annotation>
<xs:documentation>Endpoint reference of the subscription to be used for pulling the messages.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:CurrentTime">
<xs:annotation>
<xs:documentation>Current time of the server for synchronization purposes.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:TerminationTime">
<xs:annotation>
<xs:documentation>Date time when the PullPoint will be shut down without further pull requests.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="PullMessages">
<xs:complexType>
<xs:sequence>
<xs:element name="Timeout" type="xs:duration">
<xs:annotation>
<xs:documentation>Maximum time to block until this method returns.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MessageLimit" type="xs:int">
<xs:annotation>
<xs:documentation>Upper limit for the number of messages to return at once. A server implementation may decide to return less messages.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PullMessagesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="CurrentTime" type="xs:dateTime">
<xs:annotation>
<xs:documentation>The date and time when the messages have been delivered by the web server to the client.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TerminationTime" type="xs:dateTime">
<xs:annotation>
<xs:documentation>Date time when the PullPoint will be shut down without further pull requests.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:NotificationMessage" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of messages. This list shall be empty in case of a timeout.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PullMessagesFaultResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="MaxTimeout" type="xs:duration">
<xs:annotation>
<xs:documentation>Maximum timeout supported by the device.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaxMessageLimit" type="xs:int">
<xs:annotation>
<xs:documentation>Maximum message limit supported by the device.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="Seek">
<xs:complexType>
<xs:sequence>
<xs:element name="UtcTime" type="xs:dateTime"><xs:annotation><xs:documentation>The date and time to match against stored messages.</xs:documentation></xs:annotation></xs:element>
<xs:element name="Reverse" type="xs:boolean" minOccurs="0" maxOccurs="1"><xs:annotation><xs:documentation>Reverse the pull direction of PullMessages.</xs:documentation></xs:annotation></xs:element>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SeekResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetSynchronizationPoint">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="SetSynchronizationPointResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetEventProperties">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetEventPropertiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="TopicNamespaceLocation" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of topic namespaces supported.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:FixedTopicSet">
<xs:annotation>
<xs:documentation>True when topicset is fixed for all times.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wstop:TopicSet">
<xs:annotation>
<xs:documentation>Set of topics supported.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element ref="wsnt:TopicExpressionDialect" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Defines the XPath expression syntax supported for matching topic expressions. <br/>
The following TopicExpressionDialects are mandatory for an ONVIF compliant device :
<ul type="disc">
<li>http://docs.oasis-open.org/wsn/t-1/TopicExpression/Concrete</li>
<li>http://www.onvif.org/ver10/tev/topicExpression/ConcreteSet.</li>
</ul>
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MessageContentFilterDialect" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Defines the XPath function set supported for message content filtering.<br/>
The following MessageContentFilterDialects are mandatory for an ONVIF compliant device:
<ul type="disc">
<li>http://www.onvif.org/ver10/tev/messageContentFilter/ItemFilter.</li>
</ul>
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ProducerPropertiesFilterDialect" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
Optional ProducerPropertiesDialects. Refer to <a href="http://docs.oasis-open.org/wsn/wsn-ws_base_notification-1.3-spec-os.htm">Web Services Base Notification 1.3 (WS-BaseNotification)</a> for advanced filtering.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MessageContentSchemaLocation" type="xs:anyURI" minOccurs="1" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>
The Message Content Description Language allows referencing
of vendor-specific types. In order to ease the integration of such types into a client application,
the GetEventPropertiesResponse shall list all URI locations to schema files whose types are
used in the description of notifications, with MessageContentSchemaLocation elements.<br/>
This list shall at least contain the URI of the ONVIF schema file.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation/>
</xs:annotation>
</xs:any>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tev:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tev:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="CreatePullPointSubscriptionRequest">
<wsdl:part name="parameters" element="tev:CreatePullPointSubscription"/>
</wsdl:message>
<wsdl:message name="CreatePullPointSubscriptionResponse">
<wsdl:part name="parameters" element="tev:CreatePullPointSubscriptionResponse"/>
</wsdl:message>
<wsdl:message name="PullMessagesRequest">
<wsdl:part name="parameters" element="tev:PullMessages"/>
</wsdl:message>
<wsdl:message name="PullMessagesResponse">
<wsdl:part name="parameters" element="tev:PullMessagesResponse"/>
</wsdl:message>
<wsdl:message name="PullMessagesFaultResponse">
<wsdl:part name="parameters" element="tev:PullMessagesFaultResponse"/>
</wsdl:message>
<wsdl:message name="SeekRequest">
<wsdl:part name="parameters" element="tev:Seek"/>
</wsdl:message>
<wsdl:message name="SeekResponse">
<wsdl:part name="parameters" element="tev:SeekResponse"/>
</wsdl:message>
<wsdl:message name="SetSynchronizationPointRequest">
<wsdl:part name="parameters" element="tev:SetSynchronizationPoint"/>
</wsdl:message>
<wsdl:message name="SetSynchronizationPointResponse">
<wsdl:part name="parameters" element="tev:SetSynchronizationPointResponse"/>
</wsdl:message>
<wsdl:message name="GetEventPropertiesRequest">
<wsdl:part name="parameters" element="tev:GetEventProperties"/>
</wsdl:message>
<wsdl:message name="GetEventPropertiesResponse">
<wsdl:part name="parameters" element="tev:GetEventPropertiesResponse"/>
</wsdl:message>
<wsdl:portType name="EventPortType">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the event service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="tev:GetServiceCapabilitiesRequest" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetServiceCapabilitiesRequest"/>
<wsdl:output message="tev:GetServiceCapabilitiesResponse" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="CreatePullPointSubscription">
<wsdl:documentation>This method returns a PullPointSubscription that can be polled using PullMessages.
This message contains the same elements as the SubscriptionRequest of the WS-BaseNotification without the ConsumerReference.<br/>
If no Filter is specified the pullpoint notifies all occurring events to the client.<br/>
This method is mandatory.</wsdl:documentation>
<wsdl:input message="tev:CreatePullPointSubscriptionRequest" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/CreatePullPointSubscriptionRequest"/>
<wsdl:output message="tev:CreatePullPointSubscriptionResponse" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/CreatePullPointSubscriptionResponse"/>
<wsdl:fault name="ResourceUnknownFault" message="wsrf-rw:ResourceUnknownFault"/>
<wsdl:fault name="InvalidFilterFault" message="wsntw:InvalidFilterFault"/>
<wsdl:fault name="TopicExpressionDialectUnknownFault" message="wsntw:TopicExpressionDialectUnknownFault"/>
<wsdl:fault name="InvalidTopicExpressionFault" message="wsntw:InvalidTopicExpressionFault"/>
<wsdl:fault name="TopicNotSupportedFault" message="wsntw:TopicNotSupportedFault"/>
<wsdl:fault name="InvalidProducerPropertiesExpressionFault" message="wsntw:InvalidProducerPropertiesExpressionFault"/>
<wsdl:fault name="InvalidMessageContentExpressionFault" message="wsntw:InvalidMessageContentExpressionFault"/>
<wsdl:fault name="UnacceptableInitialTerminationTimeFault" message="wsntw:UnacceptableInitialTerminationTimeFault"/>
<wsdl:fault name="UnrecognizedPolicyRequestFault" message="wsntw:UnrecognizedPolicyRequestFault"/>
<wsdl:fault name="UnsupportedPolicyRequestFault" message="wsntw:UnsupportedPolicyRequestFault"/>
<wsdl:fault name="NotifyMessageNotSupportedFault" message="wsntw:NotifyMessageNotSupportedFault"/>
<wsdl:fault name="SubscribeCreationFailedFault" message="wsntw:SubscribeCreationFailedFault"/>
</wsdl:operation>
<wsdl:operation name="GetEventProperties">
<wsdl:documentation>The WS-BaseNotification specification defines a set of OPTIONAL WS-ResouceProperties.
This specification does not require the implementation of the WS-ResourceProperty interface.
Instead, the subsequent direct interface shall be implemented by an ONVIF compliant device
in order to provide information about the FilterDialects, Schema files and topics supported by
the device.</wsdl:documentation>
<wsdl:input message="tev:GetEventPropertiesRequest" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetEventPropertiesRequest"/>
<wsdl:output message="tev:GetEventPropertiesResponse" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetEventPropertiesResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="PullPointSubscription">
<wsdl:operation name="PullMessages">
<wsdl:documentation>
This method pulls one or more messages from a PullPoint.
The device shall provide the following PullMessages command for all SubscriptionManager
endpoints returned by the CreatePullPointSubscription command. This method shall not wait until
the requested number of messages is available but return as soon as at least one message is available.<br/>
The command shall at least support a Timeout of one minute. In case a device supports retrieval of less messages
than requested it shall return these without generating a fault.</wsdl:documentation>
<wsdl:input message="tev:PullMessagesRequest" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesRequest"/>
<wsdl:output message="tev:PullMessagesResponse" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesResponse"/>
<wsdl:fault name="PullMessagesFaultResponse" message="tev:PullMessagesFaultResponse" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessages/Fault/PullMessagesFaultResponse"/>
</wsdl:operation>
<wsdl:operation name="Seek">
<wsdl:documentation>
This method readjusts the pull pointer into the past.
A device supporting persistent notification storage shall provide the
following Seek command for all SubscriptionManager endpoints returned by
the CreatePullPointSubscription command. The optional Reverse argument can
be used to reverse the pull direction of the PullMessages command.<br/>
The UtcTime argument will be matched against the UtcTime attribute on a
NotificationMessage.
</wsdl:documentation>
<wsdl:input message="tev:SeekRequest" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SeekRequest"/>
<wsdl:output message="tev:SeekResponse" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SeekResponse"/>
</wsdl:operation>
<wsdl:operation name="SetSynchronizationPoint">
<wsdl:documentation>Properties inform a client about property creation, changes and
deletion in a uniform way. When a client wants to synchronize its properties with the
properties of the device, it can request a synchronization point which repeats the current
status of all properties to which a client has subscribed. The PropertyOperation of all
produced notifications is set to “Initialized”. The Synchronization Point is
requested directly from the SubscriptionManager which was returned in either the
SubscriptionResponse or in the CreatePullPointSubscriptionResponse. The property update is
transmitted via the notification transportation of the notification interface. This method is mandatory.
</wsdl:documentation>
<wsdl:input message="tev:SetSynchronizationPointRequest" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SetSynchronizationPointRequest"/>
<wsdl:output message="tev:SetSynchronizationPointResponse" wsaw:Action="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SetSynchronizationPointResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="PullPointSubscriptionBinding" type="tev:PullPointSubscription">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="PullMessages">
<soap:operation soapAction="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/PullMessagesRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="PullMessagesFaultResponse">
<soap:fault name="PullMessagesFaultResponse" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Seek">
<soap:operation soapAction="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SeekRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetSynchronizationPoint">
<soap:operation soapAction="http://www.onvif.org/ver10/events/wsdl/PullPointSubscription/SetSynchronizationPointRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="EventBinding" type="tev:EventPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreatePullPointSubscription">
<soap:operation soapAction="http://www.onvif.org/ver10/events/wsdl/EventPortType/CreatePullPointSubscriptionRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidFilterFault">
<soap:fault name="InvalidFilterFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicExpressionDialectUnknownFault">
<soap:fault name="TopicExpressionDialectUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidTopicExpressionFault">
<soap:fault name="InvalidTopicExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicNotSupportedFault">
<soap:fault name="TopicNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidProducerPropertiesExpressionFault">
<soap:fault name="InvalidProducerPropertiesExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidMessageContentExpressionFault">
<soap:fault name="InvalidMessageContentExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnacceptableInitialTerminationTimeFault">
<soap:fault name="UnacceptableInitialTerminationTimeFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnrecognizedPolicyRequestFault">
<soap:fault name="UnrecognizedPolicyRequestFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnsupportedPolicyRequestFault">
<soap:fault name="UnsupportedPolicyRequestFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="NotifyMessageNotSupportedFault">
<soap:fault name="NotifyMessageNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="SubscribeCreationFailedFault">
<soap:fault name="SubscribeCreationFailedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="GetEventProperties">
<soap:operation soapAction="http://www.onvif.org/ver10/events/wsdl/EventPortType/GetEventPropertiesRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="SubscriptionManagerBinding" type="wsntw:SubscriptionManager">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Renew">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/RenewRequest"/>
<wsdl:input name="RenewRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="RenewResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnacceptableTerminationTimeFault">
<soap:fault name="UnacceptableTerminationTimeFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Unsubscribe">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/SubscriptionManager/UnsubscribeRequest"/>
<wsdl:input name="UnsubscribeRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="UnsubscribeResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnableToDestroySubscriptionFault">
<soap:fault name="UnableToDestroySubscriptionFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="NotificationProducerBinding" type="wsntw:NotificationProducer">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Subscribe">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/SubscribeRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidFilterFault">
<soap:fault name="InvalidFilterFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicExpressionDialectUnknownFault">
<soap:fault name="TopicExpressionDialectUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidTopicExpressionFault">
<soap:fault name="InvalidTopicExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicNotSupportedFault">
<soap:fault name="TopicNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidProducerPropertiesExpressionFault">
<soap:fault name="InvalidProducerPropertiesExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidMessageContentExpressionFault">
<soap:fault name="InvalidMessageContentExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnacceptableInitialTerminationTimeFault">
<soap:fault name="UnacceptableInitialTerminationTimeFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnrecognizedPolicyRequestFault">
<soap:fault name="UnrecognizedPolicyRequestFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnsupportedPolicyRequestFault">
<soap:fault name="UnsupportedPolicyRequestFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="NotifyMessageNotSupportedFault">
<soap:fault name="NotifyMessageNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="SubscribeCreationFailedFault">
<soap:fault name="SubscribeCreationFailedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="GetCurrentMessage">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/NotificationProducer/GetCurrentMessageRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicExpressionDialectUnknownFault">
<soap:fault name="TopicExpressionDialectUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="InvalidTopicExpressionFault">
<soap:fault name="InvalidTopicExpressionFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="TopicNotSupportedFault">
<soap:fault name="TopicNotSupportedFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="NoCurrentMessageOnTopicFault">
<soap:fault name="NoCurrentMessageOnTopicFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="MultipleTopicsSpecifiedFault">
<soap:fault name="MultipleTopicsSpecifiedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="NotificationConsumerBinding" type="wsntw:NotificationConsumer">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Notify">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/NotificationConsumer/Notify"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="PullPointBinding" type="wsntw:PullPoint">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetMessages">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/PullPoint/GetMessagesRequest"/>
<wsdl:input name="GetMessagesRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="GetMessagesResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnableToGetMessagesFault">
<soap:fault name="UnableToGetMessagesFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="DestroyPullPoint">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/PullPoint/DestroyPullPointRequest"/>
<wsdl:input name="DestroyPullPointRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="DestroyPullPointResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnableToDestroyPullPointFault">
<soap:fault name="UnableToDestroyPullPointFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Notify">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/PullPoint/Notify"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="CreatePullPointBinding" type="wsntw:CreatePullPoint">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="CreatePullPoint">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/CreatePullPoint/CreatePullPointRequest"/>
<wsdl:input name="CreatePullPointRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="CreatePullPointResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="UnableToCreatePullPointFault">
<soap:fault name="UnableToCreatePullPointFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="PausableSubscriptionManagerBinding" type="wsntw:PausableSubscriptionManager">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Renew">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/PausableSubscriptionManager/RenewRequest"/>
<wsdl:input name="RenewRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="RenewResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnacceptableTerminationTimeFault">
<soap:fault name="UnacceptableTerminationTimeFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="Unsubscribe">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/PausableSubscriptionManager/UnsubscribeRequest"/>
<wsdl:input name="UnsubscribeRequest">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="UnsubscribeResponse">
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="UnableToDestroySubscriptionFault">
<soap:fault name="UnableToDestroySubscriptionFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="PauseSubscription">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/PausableSubscriptionManager/PauseSubscriptionRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="PauseFailedFault">
<soap:fault name="PauseFailedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="ResumeSubscription">
<soap:operation soapAction="http://docs.oasis-open.org/wsn/bw-2/PausableSubscriptionManager/ResumeSubscriptionRequest"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ResourceUnknownFault">
<soap:fault name="ResourceUnknownFault" use="literal"/>
</wsdl:fault>
<wsdl:fault name="ResumeFailedFault">
<soap:fault name="ResumeFailedFault" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EventService">
<wsdl:port name="EventPortType" binding="tev:EventBinding">
<soap:address location="http://192.168.0.51:8888/onvif/device_service"/>
</wsdl:port>
<wsdl:port name="PullPointSubscription" binding="tev:PullPointSubscriptionBinding">
<soap:address location="http://192.168.0.51:8888/onvif/device_service"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,400 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../../../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2012 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:timg="http://www.onvif.org/ver20/imaging/wsdl" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tt="http://www.onvif.org/ver10/schema" name="ImagingService" targetNamespace="http://www.onvif.org/ver20/imaging/wsdl">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:timg="http://www.onvif.org/ver20/imaging/wsdl" targetNamespace="http://www.onvif.org/ver20/imaging/wsdl" elementFormDefault="qualified" version="2.2">
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="timg:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the imaging service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ImageStabilization" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates whether or not Image Stabilization feature is supported.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="timg:Capabilities"/>
<!--===============================-->
<xs:element name="GetImagingSettings">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource for which the ImagingSettings.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetImagingSettingsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ImagingSettings" type="tt:ImagingSettings20">
<xs:annotation>
<xs:documentation>
ImagingSettings for the VideoSource that was requested.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="SetImagingSettings">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken"/>
<xs:element name="ImagingSettings" type="tt:ImagingSettings20"/>
<xs:element name="ForcePersistence" type="xs:boolean" maxOccurs="1" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetImagingSettingsResponse">
<xs:complexType/>
</xs:element>
<!--===============================-->
<xs:element name="GetOptions">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource for which the imaging parameter options are requested.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ImagingOptions" type="tt:ImagingOptions20">
<xs:annotation>
<xs:documentation>
Valid ranges for the imaging parameters that are categorized as device specific.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="Move">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference to the VideoSource for the requested move (focus) operation.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Focus" type="tt:FocusMove">
<xs:annotation>
<xs:documentation>
Content of the requested move (focus) operation.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="MoveResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetMoveOptions">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource for the requested move options.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetMoveOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="MoveOptions" type="tt:MoveOptions20">
<xs:annotation>
<xs:documentation>
Valid ranges for the focus lens move options.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="Stop">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource where the focus movement should be stopped.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="StopResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetStatus">
<xs:complexType>
<xs:sequence>
<xs:element name="VideoSourceToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>
Reference token to the VideoSource where the imaging status should be requested.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetStatusResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Status" type="tt:ImagingStatus20">
<xs:annotation>
<xs:documentation>
Requested imaging status.
</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="timg:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="timg:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetImagingSettingsRequest">
<wsdl:part name="parameters" element="timg:GetImagingSettings"/>
</wsdl:message>
<wsdl:message name="GetImagingSettingsResponse">
<wsdl:part name="parameters" element="timg:GetImagingSettingsResponse"/>
</wsdl:message>
<wsdl:message name="SetImagingSettingsRequest">
<wsdl:part name="parameters" element="timg:SetImagingSettings"/>
</wsdl:message>
<wsdl:message name="SetImagingSettingsResponse">
<wsdl:part name="parameters" element="timg:SetImagingSettingsResponse"/>
</wsdl:message>
<wsdl:message name="GetOptionsRequest">
<wsdl:part name="parameters" element="timg:GetOptions"/>
</wsdl:message>
<wsdl:message name="GetOptionsResponse">
<wsdl:part name="parameters" element="timg:GetOptionsResponse"/>
</wsdl:message>
<wsdl:message name="MoveRequest">
<wsdl:part name="parameters" element="timg:Move"/>
</wsdl:message>
<wsdl:message name="MoveResponse">
<wsdl:part name="parameters" element="timg:MoveResponse"/>
</wsdl:message>
<wsdl:message name="GetMoveOptionsRequest">
<wsdl:part name="parameters" element="timg:GetMoveOptions"/>
</wsdl:message>
<wsdl:message name="GetMoveOptionsResponse">
<wsdl:part name="parameters" element="timg:GetMoveOptionsResponse"/>
</wsdl:message>
<wsdl:message name="StopRequest">
<wsdl:part name="parameters" element="timg:Stop"/>
</wsdl:message>
<wsdl:message name="StopResponse">
<wsdl:part name="parameters" element="timg:StopResponse"/>
</wsdl:message>
<wsdl:message name="GetStatusRequest">
<wsdl:part name="parameters" element="timg:GetStatus"/>
</wsdl:message>
<wsdl:message name="GetStatusResponse">
<wsdl:part name="parameters" element="timg:GetStatusResponse"/>
</wsdl:message>
<wsdl:portType name="ImagingPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the imaging service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="timg:GetServiceCapabilitiesRequest"/>
<wsdl:output message="timg:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetImagingSettings">
<wsdl:documentation>Get the ImagingConfiguration for the requested VideoSource.</wsdl:documentation>
<wsdl:input message="timg:GetImagingSettingsRequest"/>
<wsdl:output message="timg:GetImagingSettingsResponse"/>
</wsdl:operation>
<wsdl:operation name="SetImagingSettings">
<wsdl:documentation>Set the ImagingConfiguration for the requested VideoSource.</wsdl:documentation>
<wsdl:input message="timg:SetImagingSettingsRequest"/>
<wsdl:output message="timg:SetImagingSettingsResponse"/>
</wsdl:operation>
<wsdl:operation name="GetOptions">
<wsdl:documentation>This operation gets the valid ranges for the imaging parameters that have device specific ranges.
This command is mandatory for all device implementing the imaging service. The command returns all supported parameters and their ranges
such that these can be applied to the SetImagingSettings command.<br/>
For read-only parameters which cannot be modified via the SetImagingSettings command only a single option or identical Min and Max values
is provided.</wsdl:documentation>
<wsdl:input message="timg:GetOptionsRequest"/>
<wsdl:output message="timg:GetOptionsResponse"/>
</wsdl:operation>
<wsdl:operation name="Move">
<wsdl:documentation>The Move command moves the focus lens in an absolute, a relative or in a continuous manner from its current position.
The speed argument is optional for absolute and relative control, but required for continuous. If no speed argument is used, the default speed is used.
Focus adjustments through this operation will turn off the autofocus. A device with support for remote focus control should support absolute,
relative or continuous control through the Move operation. The supported MoveOpions are signalled via the GetMoveOptions command.
At least one focus control capability is required for this operation to be functional. <br/>
The move operation contains the following commands:<br/>
<b>Absolute</b> Requires position parameter and optionally takes a speed argument. A unitless type is used by default for focus positioning and speed. Optionally, if supported, the position may be requested in m-1 units. <br/>
<b>Relative</b> Requires distance parameter and optionally takes a speed argument. Negative distance means negative direction.
<b>Continuous</b> Requires a speed argument. Negative speed argument means negative direction.
</wsdl:documentation>
<wsdl:input message="timg:MoveRequest"/>
<wsdl:output message="timg:MoveResponse"/>
</wsdl:operation>
<wsdl:operation name="GetMoveOptions">
<wsdl:documentation>Imaging move operation options supported for the Video source.</wsdl:documentation>
<wsdl:input message="timg:GetMoveOptionsRequest"/>
<wsdl:output message="timg:GetMoveOptionsResponse"/>
</wsdl:operation>
<wsdl:operation name="Stop">
<wsdl:documentation>The Stop command stops all ongoing focus movements of the lense. A device with support for remote focus control as signalled via
the GetMoveOptions supports this command. <br/>The operation will not affect ongoing autofocus operation.</wsdl:documentation>
<wsdl:input message="timg:StopRequest"/>
<wsdl:output message="timg:StopResponse"/>
</wsdl:operation>
<wsdl:operation name="GetStatus">
<wsdl:documentation>Via this command the current status of the Move operation can be requested. Supported for this command is available if the support for the Move operation is signalled via GetMoveOptions.</wsdl:documentation>
<wsdl:input message="timg:GetStatusRequest"/>
<wsdl:output message="timg:GetStatusResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ImagingBinding" type="timg:ImagingPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetImagingSettings">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetImagingSettings"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetImagingSettings">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/SetImagingSettings"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetOptions">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetOptions"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Move">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/Move"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Stop">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/FocusStop"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetStatus">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetStatus"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetMoveOptions">
<soap:operation soapAction="http://www.onvif.org/ver20/imaging/wsdl/GetMoveOptions"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ImagingService">
<wsdl:port name="ImagingPort" binding="timg:ImagingBinding">
<soap:address location="http://192.168.0.51:8888/onvif/Imaging"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,13 @@
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'
xmlns:tns='http://www.w3.org/2004/08/xop/include'
targetNamespace='http://www.w3.org/2004/08/xop/include' >
<xs:element name='Include' type='tns:Include' />
<xs:complexType name='Include' >
<xs:sequence>
<xs:any namespace='##other' minOccurs='0' maxOccurs='unbounded' />
</xs:sequence>
<xs:attribute name='href' type='xs:anyURI' use='required' />
<xs:anyAttribute namespace='##other' />
</xs:complexType>
</xs:schema>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2005). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsrf-r="http://docs.oasis-open.org/wsrf/r-2"
xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
elementFormDefault="qualified" attributeFormDefault="unqualified"
targetNamespace="http://docs.oasis-open.org/wsrf/r-2"
>
<xsd:import
namespace=
"http://docs.oasis-open.org/wsrf/bf-2"
schemaLocation="./bf-2.xsd"
/>
<!-- ====================== WS-Resource fault types ============= -->
<xsd:complexType name="ResourceUnknownFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="ResourceUnknownFault"
type="wsrf-r:ResourceUnknownFaultType"/>
<xsd:complexType name="ResourceUnavailableFaultType">
<xsd:complexContent>
<xsd:extension base="wsrf-bf:BaseFaultType"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="ResourceUnavailableFault"
type="wsrf-r:ResourceUnavailableFaultType"/>
</xsd:schema>

View File

@ -0,0 +1,403 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:trv="http://www.onvif.org/ver10/receiver/wsdl" targetNamespace="http://www.onvif.org/ver10/receiver/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/receiver/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="2.1.1">
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="trv:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the receiver service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="RTP_Multicast" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the device can receive RTP multicast streams.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RTP_TCP" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the device can receive RTP/TCP streams</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RTP_RTSP_TCP" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates that the device can receive RTP/RTSP/TCP streams.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SupportedReceivers" type="xs:int" use="required">
<xs:annotation>
<xs:documentation>The maximum number of receivers supported by the device.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaximumRTSPURILength" type="xs:int">
<xs:annotation>
<xs:documentation>The maximum allowed length for RTSP URIs (Minimum and default value is 128 octet).</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="trv:Capabilities"/>
<!--===============================-->
<xs:element name="GetReceivers">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiversResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Receivers" type="tt:Receiver" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>A list of all receivers that currently exist on the device.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiver">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be retrieved.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiverResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Receiver" type="tt:Receiver">
<xs:annotation>
<xs:documentation>The details of the receiver.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateReceiver">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:ReceiverConfiguration">
<xs:annotation>
<xs:documentation>The initial configuration for the new receiver.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateReceiverResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Receiver" type="tt:Receiver">
<xs:annotation>
<xs:documentation>The details of the receiver that was created.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteReceiver">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteReceiverResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ConfigureReceiver">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be configured.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Configuration" type="tt:ReceiverConfiguration">
<xs:annotation>
<xs:documentation>The new configuration for the receiver.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ConfigureReceiverResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetReceiverMode">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be changed.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Mode" type="tt:ReceiverMode">
<xs:annotation>
<xs:documentation>The new receiver mode. Options available are:</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetReceiverModeResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiverState">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The token of the receiver to be queried.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReceiverStateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ReceiverState" type="tt:ReceiverStateInformation">
<xs:annotation>
<xs:documentation>Description of the current receiver state.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="trv:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="trv:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetReceiversRequest">
<wsdl:part name="parameters" element="trv:GetReceivers"/>
</wsdl:message>
<wsdl:message name="GetReceiversResponse">
<wsdl:part name="parameters" element="trv:GetReceiversResponse"/>
</wsdl:message>
<wsdl:message name="GetReceiverRequest">
<wsdl:part name="parameters" element="trv:GetReceiver"/>
</wsdl:message>
<wsdl:message name="GetReceiverResponse">
<wsdl:part name="parameters" element="trv:GetReceiverResponse"/>
</wsdl:message>
<wsdl:message name="CreateReceiverRequest">
<wsdl:part name="parameters" element="trv:CreateReceiver"/>
</wsdl:message>
<wsdl:message name="CreateReceiverResponse">
<wsdl:part name="parameters" element="trv:CreateReceiverResponse"/>
</wsdl:message>
<wsdl:message name="DeleteReceiverRequest">
<wsdl:part name="parameters" element="trv:DeleteReceiver"/>
</wsdl:message>
<wsdl:message name="DeleteReceiverResponse">
<wsdl:part name="parameters" element="trv:DeleteReceiverResponse"/>
</wsdl:message>
<wsdl:message name="ConfigureReceiverRequest">
<wsdl:part name="parameters" element="trv:ConfigureReceiver"/>
</wsdl:message>
<wsdl:message name="ConfigureReceiverResponse">
<wsdl:part name="parameters" element="trv:ConfigureReceiverResponse"/>
</wsdl:message>
<wsdl:message name="SetReceiverModeRequest">
<wsdl:part name="parameters" element="trv:SetReceiverMode"/>
</wsdl:message>
<wsdl:message name="SetReceiverModeResponse">
<wsdl:part name="parameters" element="trv:SetReceiverModeResponse"/>
</wsdl:message>
<wsdl:message name="GetReceiverStateRequest">
<wsdl:part name="parameters" element="trv:GetReceiverState"/>
</wsdl:message>
<wsdl:message name="GetReceiverStateResponse">
<wsdl:part name="parameters" element="trv:GetReceiverStateResponse"/>
</wsdl:message>
<wsdl:portType name="ReceiverPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the receiver service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="trv:GetServiceCapabilitiesRequest"/>
<wsdl:output message="trv:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReceivers">
<wsdl:documentation>
Lists all receivers currently present on a device. This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:GetReceiversRequest"/>
<wsdl:output message="trv:GetReceiversResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReceiver">
<wsdl:documentation>
Retrieves the details of a specific receiver. This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:GetReceiverRequest"/>
<wsdl:output message="trv:GetReceiverResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateReceiver">
<wsdl:documentation>
Creates a new receiver. This operation is mandatory, although the service may
raise a fault if the receiver cannot be created.
</wsdl:documentation>
<wsdl:input message="trv:CreateReceiverRequest"/>
<wsdl:output message="trv:CreateReceiverResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteReceiver">
<wsdl:documentation>
Deletes an existing receiver. A receiver may be deleted only if it is not
currently in use; otherwise a fault shall be raised.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:DeleteReceiverRequest"/>
<wsdl:output message="trv:DeleteReceiverResponse"/>
</wsdl:operation>
<wsdl:operation name="ConfigureReceiver">
<wsdl:documentation>
Configures an existing receiver. This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:ConfigureReceiverRequest"/>
<wsdl:output message="trv:ConfigureReceiverResponse"/>
</wsdl:operation>
<wsdl:operation name="SetReceiverMode">
<wsdl:documentation>
Sets the mode of the receiver without affecting the rest of its configuration.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:SetReceiverModeRequest"/>
<wsdl:output message="trv:SetReceiverModeResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReceiverState">
<wsdl:documentation>
Determines whether the receiver is currently disconnected, connected or
attempting to connect.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trv:GetReceiverStateRequest"/>
<wsdl:output message="trv:GetReceiverStateResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ReceiverBinding" type="trv:ReceiverPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReceivers">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/GetReceivers"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReceiver">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/GetReceiver"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateReceiver">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/CreateReceiver"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteReceiver">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/DeleteReceiver"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="ConfigureReceiver">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/ConfigureReceiver"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetReceiverMode">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/SetReceiverMode"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReceiverState">
<soap:operation soapAction="http://www.onvif.org/ver10/receiver/wsdl/GetReceiverState"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ReceiverService">
<wsdl:port name="ReceiverPort" binding="trv:ReceiverBinding">
<soap:address location="http://192.168.0.51:8888/onvif/Receiver"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,934 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2014 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:trc="http://www.onvif.org/ver10/recording/wsdl" targetNamespace="http://www.onvif.org/ver10/recording/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/recording/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="2.4.2">
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="trc:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the recording service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="DynamicRecordings" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication if the device supports dynamic creation and deletion of recordings</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="DynamicTracks" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication if the device supports dynamic creation and deletion of tracks</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Encoding" type="trc:EncodingTypes">
<xs:annotation>
<xs:documentation>Indication which encodings are supported for recording. The list may contain one or more enumeration values of tt:VideoEncoding and tt:AudioEncoding. If device does not support audio recording tt:AudioEncoding shall not be listed. </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaxRate" type="xs:float">
<xs:annotation>
<xs:documentation>Maximum supported bit rate for all tracks of a recording in kBit/s.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaxTotalRate" type="xs:float">
<xs:annotation>
<xs:documentation>Maximum supported bit rate for all recordings in kBit/s.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaxRecordings" type="xs:float">
<xs:annotation>
<xs:documentation>Maximum number of recordings supported. (Integer values only.)</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MaxRecordingJobs" type="xs:int">
<xs:annotation>
<xs:documentation>Maximum total number of supported recording jobs by the device.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="Options" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication if the device supports the GetRecordingOptions command.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="MetadataRecording" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indication if the device supports recording metadata.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:simpleType name="EncodingTypes">
<xs:list itemType="xs:string"/>
</xs:simpleType>
<xs:element name="Capabilities" type="trc:Capabilities"/>
<!--===============================-->
<xs:element name="CreateRecording">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingConfiguration" type="tt:RecordingConfiguration">
<xs:annotation>
<xs:documentation>Initial configuration for the recording.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateRecordingResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>The reference to the created recording.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteRecording">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>The reference of the recording to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteRecordingResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordings">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingItem" type="tt:GetRecordingsResponseItem" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of recording items.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetRecordingConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>Token of the recording that shall be changed.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="RecordingConfiguration" type="tt:RecordingConfiguration">
<xs:annotation>
<xs:documentation>The new configuration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetRecordingConfigurationResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>Token of the configuration to be retrieved.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingConfiguration" type="tt:RecordingConfiguration">
<xs:annotation>
<xs:documentation>Configuration of the recording.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateTrack">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>Identifies the recording to which a track shall be added.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TrackConfiguration" type="tt:TrackConfiguration">
<xs:annotation>
<xs:documentation>The configuration of the new track.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateTrackResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="TrackToken" type="tt:TrackReference">
<xs:annotation>
<xs:documentation>The TrackToken shall identify the newly created track. The
TrackToken shall be unique within the recoding to which
the new track belongs.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteTrack">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>Token of the recording the track belongs to.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TrackToken" type="tt:TrackReference">
<xs:annotation>
<xs:documentation>Token of the track to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteTrackResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetTrackConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>Token of the recording the track belongs to.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TrackToken" type="tt:TrackReference">
<xs:annotation>
<xs:documentation>Token of the track.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetTrackConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="TrackConfiguration" type="tt:TrackConfiguration">
<xs:annotation>
<xs:documentation>Configuration of the track.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetTrackConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>Token of the recording the track belongs to.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TrackToken" type="tt:TrackReference">
<xs:annotation>
<xs:documentation>Token of the track to be modified.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TrackConfiguration" type="tt:TrackConfiguration">
<xs:annotation>
<xs:documentation>New configuration for the track.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetTrackConfigurationResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateRecordingJob">
<xs:complexType>
<xs:sequence>
<xs:element name="JobConfiguration" type="tt:RecordingJobConfiguration">
<xs:annotation>
<xs:documentation>The initial configuration of the new recording job.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CreateRecordingJobResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="JobToken" type="tt:RecordingJobReference">
<xs:annotation>
<xs:documentation>The JobToken shall identify the created recording job.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="JobConfiguration" type="tt:RecordingJobConfiguration">
<xs:annotation>
<xs:documentation>
The JobConfiguration structure shall be the configuration as it is used by the device. This may be different from the
JobConfiguration passed to CreateRecordingJob.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteRecordingJob">
<xs:complexType>
<xs:sequence>
<xs:element name="JobToken" type="tt:RecordingJobReference">
<xs:annotation>
<xs:documentation>The token of the job to be deleted.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DeleteRecordingJobResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingJobs">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingJobsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="JobItem" type="tt:GetRecordingJobsResponseItem" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>List of recording jobs.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetRecordingJobConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="JobToken" type="tt:RecordingJobReference">
<xs:annotation>
<xs:documentation>Token of the job to be modified.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="JobConfiguration" type="tt:RecordingJobConfiguration">
<xs:annotation>
<xs:documentation>New configuration of the recording job.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetRecordingJobConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="JobConfiguration" type="tt:RecordingJobConfiguration">
<xs:annotation>
<xs:documentation>The JobConfiguration structure shall be the configuration
as it is used by the device. This may be different from the JobConfiguration passed to SetRecordingJobConfiguration.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingJobConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="JobToken" type="tt:RecordingJobReference">
<xs:annotation>
<xs:documentation>Token of the recording job.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingJobConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="JobConfiguration" type="tt:RecordingJobConfiguration">
<xs:annotation>
<xs:documentation>Current configuration of the recording job.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetRecordingJobMode">
<xs:complexType>
<xs:sequence>
<xs:element name="JobToken" type="tt:RecordingJobReference">
<xs:annotation>
<xs:documentation>Token of the recording job.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Mode" type="tt:RecordingJobMode">
<xs:annotation>
<xs:documentation>The new mode for the recording job.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetRecordingJobModeResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingJobState">
<xs:complexType>
<xs:sequence>
<xs:element name="JobToken" type="tt:RecordingJobReference">
<xs:annotation>
<xs:documentation>Token of the recording job.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingJobStateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="State" type="tt:RecordingJobStateInformation">
<xs:annotation>
<xs:documentation>The current state of the recording job.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingOptions">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference">
<xs:annotation>
<xs:documentation>Token of the recording.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingOptionsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Options" type="trc:RecordingOptions">
<xs:annotation>
<xs:documentation>Configuration of the recording.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="RecordingOptions">
<xs:sequence>
<xs:element name="Job" type="trc:JobOptions"/>
<xs:element name="Track" type="trc:TrackOptions"/>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="JobOptions">
<xs:attribute name="Spare" type="xs:int">
<xs:annotation>
<xs:documentation>Number of spare jobs that can be created for the recording.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="CompatibleSources" type="tt:StringAttrList">
<xs:annotation>
<xs:documentation>A device that supports recording of a restricted set of Media Service Profiles returns the list of profiles that can be recorded on the given Recording.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:complexType name="TrackOptions">
<xs:attribute name="SpareTotal" type="xs:int">
<xs:annotation>
<xs:documentation>Total spare number of tracks that can be added to this recording.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SpareVideo" type="xs:int">
<xs:annotation>
<xs:documentation>Number of spare Video tracks that can be added to this recording.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SpareAudio" type="xs:int">
<xs:annotation>
<xs:documentation>Number of spare Aduio tracks that can be added to this recording.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SpareMetadata" type="xs:int">
<xs:annotation>
<xs:documentation>Number of spare Metadata tracks that can be added to this recording.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="trc:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="trc:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="CreateRecordingRequest">
<wsdl:part name="parameters" element="trc:CreateRecording"/>
</wsdl:message>
<wsdl:message name="CreateRecordingResponse">
<wsdl:part name="parameters" element="trc:CreateRecordingResponse"/>
</wsdl:message>
<wsdl:message name="DeleteRecordingRequest">
<wsdl:part name="parameters" element="trc:DeleteRecording"/>
</wsdl:message>
<wsdl:message name="DeleteRecordingResponse">
<wsdl:part name="parameters" element="trc:DeleteRecordingResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingsRequest">
<wsdl:part name="parameters" element="trc:GetRecordings"/>
</wsdl:message>
<wsdl:message name="GetRecordingsResponse">
<wsdl:part name="parameters" element="trc:GetRecordingsResponse"/>
</wsdl:message>
<wsdl:message name="SetRecordingConfigurationRequest">
<wsdl:part name="parameters" element="trc:SetRecordingConfiguration"/>
</wsdl:message>
<wsdl:message name="SetRecordingConfigurationResponse">
<wsdl:part name="parameters" element="trc:SetRecordingConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingConfigurationRequest">
<wsdl:part name="parameters" element="trc:GetRecordingConfiguration"/>
</wsdl:message>
<wsdl:message name="GetRecordingConfigurationResponse">
<wsdl:part name="parameters" element="trc:GetRecordingConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingOptionsRequest">
<wsdl:part name="parameters" element="trc:GetRecordingOptions"/>
</wsdl:message>
<wsdl:message name="GetRecordingOptionsResponse">
<wsdl:part name="parameters" element="trc:GetRecordingOptionsResponse"/>
</wsdl:message>
<wsdl:message name="CreateTrackRequest">
<wsdl:part name="parameters" element="trc:CreateTrack"/>
</wsdl:message>
<wsdl:message name="CreateTrackResponse">
<wsdl:part name="parameters" element="trc:CreateTrackResponse"/>
</wsdl:message>
<wsdl:message name="DeleteTrackRequest">
<wsdl:part name="parameters" element="trc:DeleteTrack"/>
</wsdl:message>
<wsdl:message name="DeleteTrackResponse">
<wsdl:part name="parameters" element="trc:DeleteTrackResponse"/>
</wsdl:message>
<wsdl:message name="GetTrackConfigurationRequest">
<wsdl:part name="parameters" element="trc:GetTrackConfiguration"/>
</wsdl:message>
<wsdl:message name="GetTrackConfigurationResponse">
<wsdl:part name="parameters" element="trc:GetTrackConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="SetTrackConfigurationRequest">
<wsdl:part name="parameters" element="trc:SetTrackConfiguration"/>
</wsdl:message>
<wsdl:message name="SetTrackConfigurationResponse">
<wsdl:part name="parameters" element="trc:SetTrackConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="CreateRecordingJobRequest">
<wsdl:part name="parameters" element="trc:CreateRecordingJob"/>
</wsdl:message>
<wsdl:message name="CreateRecordingJobResponse">
<wsdl:part name="parameters" element="trc:CreateRecordingJobResponse"/>
</wsdl:message>
<wsdl:message name="DeleteRecordingJobRequest">
<wsdl:part name="parameters" element="trc:DeleteRecordingJob"/>
</wsdl:message>
<wsdl:message name="DeleteRecordingJobResponse">
<wsdl:part name="parameters" element="trc:DeleteRecordingJobResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingJobsRequest">
<wsdl:part name="parameters" element="trc:GetRecordingJobs"/>
</wsdl:message>
<wsdl:message name="GetRecordingJobsResponse">
<wsdl:part name="parameters" element="trc:GetRecordingJobsResponse"/>
</wsdl:message>
<wsdl:message name="SetRecordingJobConfigurationRequest">
<wsdl:part name="parameters" element="trc:SetRecordingJobConfiguration"/>
</wsdl:message>
<wsdl:message name="SetRecordingJobConfigurationResponse">
<wsdl:part name="parameters" element="trc:SetRecordingJobConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingJobConfigurationRequest">
<wsdl:part name="parameters" element="trc:GetRecordingJobConfiguration"/>
</wsdl:message>
<wsdl:message name="GetRecordingJobConfigurationResponse">
<wsdl:part name="parameters" element="trc:GetRecordingJobConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="SetRecordingJobModeRequest">
<wsdl:part name="parameters" element="trc:SetRecordingJobMode"/>
</wsdl:message>
<wsdl:message name="SetRecordingJobModeResponse">
<wsdl:part name="parameters" element="trc:SetRecordingJobModeResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingJobStateRequest">
<wsdl:part name="parameters" element="trc:GetRecordingJobState"/>
</wsdl:message>
<wsdl:message name="GetRecordingJobStateResponse">
<wsdl:part name="parameters" element="trc:GetRecordingJobStateResponse"/>
</wsdl:message>
<wsdl:portType name="RecordingPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the recording service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="trc:GetServiceCapabilitiesRequest"/>
<wsdl:output message="trc:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateRecording">
<wsdl:documentation>CreateRecording shall create a new recording. The new recording shall be created with a track
for each supported TrackType see Recording Control Spec. <br/>
This method is optional. It shall be available if the Recording/DynamicRecordings capability is TRUE. <br/>
When successfully completed, CreateRecording shall have created three tracks with the following configurations: <ul>
<li>
TrackToken TrackType</li>
<li>
VIDEO001 Video</li>
<li>
AUDIO001 Audio</li>
<li>
META001 Metadata</li>
</ul>
All TrackConfigurations shall have the MaximumRetentionTime set to 0 (unlimited), and the
Description set to the empty string.
</wsdl:documentation>
<wsdl:input message="trc:CreateRecordingRequest"/>
<wsdl:output message="trc:CreateRecordingResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteRecording">
<wsdl:documentation>DeleteRecording shall delete a recording object. Whenever a recording is deleted, the device
shall delete all the tracks that are part of the recording, and it shall delete all the Recording
Jobs that record into the recording. For each deleted recording job, the device shall also
delete all the receiver objects associated with the recording job that are automatically created
using the AutoCreateReceiver field of the recording job configuration structure and are not
used in any other recording job.<br/>
This method is optional. It shall be available if the Recording/DynamicRecordings capability is TRUE.
</wsdl:documentation>
<wsdl:input message="trc:DeleteRecordingRequest"/>
<wsdl:output message="trc:DeleteRecordingResponse"/>
</wsdl:operation>
<wsdl:operation name="GetRecordings">
<wsdl:documentation>GetRecordings shall return a description of all the recordings in the device. This description
shall include a list of all the tracks for each recording.</wsdl:documentation>
<wsdl:input message="trc:GetRecordingsRequest"/>
<wsdl:output message="trc:GetRecordingsResponse"/>
</wsdl:operation>
<wsdl:operation name="SetRecordingConfiguration">
<wsdl:documentation>SetRecordingConfiguration shall change the configuration of a recording.</wsdl:documentation>
<wsdl:input message="trc:SetRecordingConfigurationRequest"/>
<wsdl:output message="trc:SetRecordingConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="GetRecordingConfiguration">
<wsdl:documentation>GetRecordingConfiguration shall retrieve the recording configuration for a recording.</wsdl:documentation>
<wsdl:input message="trc:GetRecordingConfigurationRequest"/>
<wsdl:output message="trc:GetRecordingConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="GetRecordingOptions">
<wsdl:documentation>GetRecordingOptions returns information for a recording identified by the RecordingToken. The information includes the number of additonal tracks as well as recording jobs that can be configured.</wsdl:documentation>
<wsdl:input message="trc:GetRecordingOptionsRequest"/>
<wsdl:output message="trc:GetRecordingOptionsResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateTrack">
<wsdl:documentation>This method shall create a new track within a recording.<br/>
This method is optional. It shall be available if the Recording/DynamicTracks capability is TRUE.<br/>
A TrackToken in itself does not uniquely identify a specific track. Tracks within different
recordings may have the same TrackToken.
</wsdl:documentation>
<wsdl:input message="trc:CreateTrackRequest"/>
<wsdl:output message="trc:CreateTrackResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteTrack">
<wsdl:documentation>DeleteTrack shall remove a track from a recording. All the data in the track shall be deleted.<br/>
This method is optional. It shall be available if the Recording/DynamicTracks capability is
TRUE.</wsdl:documentation>
<wsdl:input message="trc:DeleteTrackRequest"/>
<wsdl:output message="trc:DeleteTrackResponse"/>
</wsdl:operation>
<wsdl:operation name="GetTrackConfiguration">
<wsdl:documentation>GetTrackConfiguration shall retrieve the configuration for a specific track.</wsdl:documentation>
<wsdl:input message="trc:GetTrackConfigurationRequest"/>
<wsdl:output message="trc:GetTrackConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="SetTrackConfiguration">
<wsdl:documentation>SetTrackConfiguration shall change the configuration of a track.</wsdl:documentation>
<wsdl:input message="trc:SetTrackConfigurationRequest"/>
<wsdl:output message="trc:SetTrackConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="CreateRecordingJob">
<wsdl:documentation>CreateRecordingJob shall create a new recording job.<br/>
The JobConfiguration returned from CreateRecordingJob shall be identical to the
JobConfiguration passed into CreateRecordingJob, except for the ReceiverToken and the
AutoCreateReceiver. In the returned structure, the ReceiverToken shall be present and valid
and the AutoCreateReceiver field shall be omitted.
</wsdl:documentation>
<wsdl:input message="trc:CreateRecordingJobRequest"/>
<wsdl:output message="trc:CreateRecordingJobResponse"/>
</wsdl:operation>
<wsdl:operation name="DeleteRecordingJob">
<wsdl:documentation>DeleteRecordingJob removes a recording job. It shall also implicitly delete all the receiver
objects associated with the recording job that are automatically created using the
AutoCreateReceiver field of the recording job configuration structure and are not used in any
other recording job.</wsdl:documentation>
<wsdl:input message="trc:DeleteRecordingJobRequest"/>
<wsdl:output message="trc:DeleteRecordingJobResponse"/>
</wsdl:operation>
<wsdl:operation name="GetRecordingJobs">
<wsdl:documentation>GetRecordingJobs shall return a list of all the recording jobs in the device.</wsdl:documentation>
<wsdl:input message="trc:GetRecordingJobsRequest"/>
<wsdl:output message="trc:GetRecordingJobsResponse"/>
</wsdl:operation>
<wsdl:operation name="SetRecordingJobConfiguration">
<wsdl:documentation>SetRecordingJobConfiguration shall change the configuration for a recording job.<br/>
SetRecordingJobConfiguration shall implicitly delete any receiver objects that were created
automatically if they are no longer used as a result of changing the recording job configuration.
</wsdl:documentation>
<wsdl:input message="trc:SetRecordingJobConfigurationRequest"/>
<wsdl:output message="trc:SetRecordingJobConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="GetRecordingJobConfiguration">
<wsdl:documentation>GetRecordingJobConfiguration shall return the current configuration for a recording job.</wsdl:documentation>
<wsdl:input message="trc:GetRecordingJobConfigurationRequest"/>
<wsdl:output message="trc:GetRecordingJobConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="SetRecordingJobMode">
<wsdl:documentation>SetRecordingJobMode shall change the mode of the recording job. Using this method shall be
equivalent to retrieving the recording job configuration, and writing it back with a different
mode.</wsdl:documentation>
<wsdl:input message="trc:SetRecordingJobModeRequest"/>
<wsdl:output message="trc:SetRecordingJobModeResponse"/>
</wsdl:operation>
<wsdl:operation name="GetRecordingJobState">
<wsdl:documentation>GetRecordingJobState returns the state of a recording job. It includes an aggregated state,
and state for each track of the recording job.</wsdl:documentation>
<wsdl:input message="trc:GetRecordingJobStateRequest"/>
<wsdl:output message="trc:GetRecordingJobStateResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="RecordingBinding" type="trc:RecordingPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateRecording">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/CreateRecording"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteRecording">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/DeleteRecording"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetRecordings">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/GetRecordings"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetRecordingConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/SetRecordingConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetRecordingConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/GetRecordingConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetRecordingOptions">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/GetRecordingOptions"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateTrack">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/CreateTrack"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteTrack">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/DeleteTrack"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetTrackConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/GetTrackConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetTrackConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/SetTrackConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="CreateRecordingJob">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/CreateRecordingJob"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="DeleteRecordingJob">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/DeleteRecordingJob"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetRecordingJobs">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/GetRecordingJobs"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetRecordingJobConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/SetRecordingJobConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetRecordingJobConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/GetRecordingJobConfiguration"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetRecordingJobMode">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/SetRecordingJobMode"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetRecordingJobState">
<soap:operation soapAction="http://www.onvif.org/ver10/recording/wsdl/GetRecordingJobState"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<!--===============================-->
<wsdl:service name="RecordingService">
<wsdl:port name="RecordingPort" binding="trc:DeviceBinding">
<soap:address location="http://192.168.0.51:8888/onvif/Recording"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="http://www.onvif.org/onvif/ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:dn="http://www.onvif.org/ver10/network/wsdl" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.onvif.org/ver10/network/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/network/wsdl" xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" elementFormDefault="qualified">
<xs:import namespace="http://schemas.xmlsoap.org/ws/2005/04/discovery" schemaLocation="./ws-discovery.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="Hello" type="d:HelloType"/>
<xs:element name="HelloResponse" type="d:ResolveType"/>
<xs:element name="Probe" type="d:ProbeType"/>
<xs:element name="ProbeResponse" type="d:ProbeMatchesType"/>
<xs:element name="Bye" type="d:ByeType"/>
<xs:element name="ByeResponse" type="d:ResolveType"/>
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="HelloRequest">
<wsdl:part name="parameters" element="dn:Hello"/>
</wsdl:message>
<wsdl:message name="HelloResponse">
<wsdl:part name="parameters" element="dn:HelloResponse"/>
</wsdl:message>
<wsdl:message name="ProbeRequest">
<wsdl:part name="parameters" element="dn:Probe"/>
</wsdl:message>
<wsdl:message name="ProbeResponse">
<wsdl:part name="parameters" element="dn:ProbeResponse"/>
</wsdl:message>
<wsdl:message name="ByeRequest">
<wsdl:part name="parameters" element="dn:Bye"/>
</wsdl:message>
<wsdl:message name="ByeResponse">
<wsdl:part name="parameters" element="dn:ByeResponse"/>
</wsdl:message>
<wsdl:portType name="RemoteDiscoveryPort">
<wsdl:operation name="Hello">
<wsdl:input message="dn:HelloRequest" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello"/>
<wsdl:output message="dn:HelloResponse" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe"/>
</wsdl:operation>
<wsdl:operation name="Bye">
<wsdl:input message="dn:ByeRequest" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Bye"/>
<wsdl:output message="dn:ByeResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="DiscoveryLookupPort">
<wsdl:operation name="Probe">
<wsdl:input message="dn:ProbeRequest" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe"/>
<wsdl:output message="dn:ProbeResponse" dn:Action="http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="RemoteDiscoveryBinding" type="dn:RemoteDiscoveryPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Hello">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Hello"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="Bye">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Bye"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="DiscoveryLookupBinding" type="dn:DiscoveryLookupPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="Probe">
<soap:operation soapAction="http://www.onvif.org/ver10/network/wsdl/Probe"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
</wsdl:definitions>

View File

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2010 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:trp="http://www.onvif.org/ver10/replay/wsdl" targetNamespace="http://www.onvif.org/ver10/replay/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/replay/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="2.2.1">
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="trp:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the replay service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ReversePlayback" type="xs:boolean" default="0">
<xs:annotation>
<xs:documentation>Indicator that the Device supports reverse playback as defined in the ONVIF Streaming Specification. </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="SessionTimeoutRange" type="tt:FloatAttrList">
<xs:annotation>
<xs:documentation>The list contains two elements defining the minimum and maximum valid values supported as session timeout in seconds. </xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="RTP_RTSP_TCP" type="xs:boolean">
<xs:annotation>
<xs:documentation>Indicates support for RTP/RTSP/TCP.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="trp:Capabilities"/>
<!--===============================-->
<xs:element name="GetReplayUri">
<xs:complexType>
<xs:sequence>
<xs:element name="StreamSetup" type="tt:StreamSetup">
<xs:annotation>
<xs:documentation>Specifies the connection parameters to be used for the stream. The URI that is returned may depend on these parameters.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="RecordingToken" type="tt:ReferenceToken">
<xs:annotation>
<xs:documentation>The identifier of the recording to be streamed.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReplayUriResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Uri" type="xs:anyURI">
<xs:annotation>
<xs:documentation>The URI to which the client should connect in order to stream the recording.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetReplayConfiguration">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:ReplayConfiguration">
<xs:annotation>
<xs:documentation>Description of the new replay configuration parameters.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetReplayConfigurationResponse">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReplayConfiguration">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetReplayConfigurationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Configuration" type="tt:ReplayConfiguration">
<xs:annotation>
<xs:documentation>The current replay configuration parameters.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="trp:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="trp:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="GetReplayUriRequest">
<wsdl:part name="parameters" element="trp:GetReplayUri"/>
</wsdl:message>
<wsdl:message name="GetReplayUriResponse">
<wsdl:part name="parameters" element="trp:GetReplayUriResponse"/>
</wsdl:message>
<wsdl:message name="SetReplayConfigurationRequest">
<wsdl:part name="parameters" element="trp:SetReplayConfiguration"/>
</wsdl:message>
<wsdl:message name="SetReplayConfigurationResponse">
<wsdl:part name="parameters" element="trp:SetReplayConfigurationResponse"/>
</wsdl:message>
<wsdl:message name="GetReplayConfigurationRequest">
<wsdl:part name="parameters" element="trp:GetReplayConfiguration"/>
</wsdl:message>
<wsdl:message name="GetReplayConfigurationResponse">
<wsdl:part name="parameters" element="trp:GetReplayConfigurationResponse"/>
</wsdl:message>
<wsdl:portType name="ReplayPort">
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the replay service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="trp:GetServiceCapabilitiesRequest"/>
<wsdl:output message="trp:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReplayUri">
<wsdl:documentation>
Requests a URI that can be used to initiate playback of a recorded stream
using RTSP as the control protocol. The URI is valid only as it is
specified in the response.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trp:GetReplayUriRequest"/>
<wsdl:output message="trp:GetReplayUriResponse"/>
</wsdl:operation>
<wsdl:operation name="GetReplayConfiguration">
<wsdl:documentation>
Returns the current configuration of the replay service.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trp:GetReplayConfigurationRequest"/>
<wsdl:output message="trp:GetReplayConfigurationResponse"/>
</wsdl:operation>
<wsdl:operation name="SetReplayConfiguration">
<wsdl:documentation>
Changes the current configuration of the replay service.
This operation is mandatory.
</wsdl:documentation>
<wsdl:input message="trp:SetReplayConfigurationRequest"/>
<wsdl:output message="trp:SetReplayConfigurationResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ReplayBinding" type="trp:ReplayPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/replay/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReplayUri">
<soap:operation soapAction="http://www.onvif.org/ver10/replay/wsdl/GetReplayUri"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="GetReplayConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/replay/wsdl/GetReplayConfiguration"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
<wsdl:operation name="SetReplayConfiguration">
<soap:operation soapAction="http://www.onvif.org/ver10/replay/wsdl/SetReplayConfiguration"/>
<wsdl:input>
<soap:body parts="parameters" use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body parts="parameters" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ReplayService">
<wsdl:port name="ReplayPort" binding="trp:ReplayBinding">
<soap:address location="http://192.168.0.51:8888/onvif/Replay"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2005). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<wsdl:definitions name="WS-Resource"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsrf-r="http://docs.oasis-open.org/wsrf/r-2"
xmlns:wsrf-rw="http://docs.oasis-open.org/wsrf/rw-2"
targetNamespace="http://docs.oasis-open.org/wsrf/rw-2"
>
<!-- ===================== Types Definitions ====================== -->
<wsdl:types>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://docs.oasis-open.org/wsrf/rw-2"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xsd:import
namespace="http://docs.oasis-open.org/wsrf/r-2"
schemaLocation="./r-2.xsd"
/>
</xsd:schema>
</wsdl:types>
<!-- ================= WS-Resource faults ========================= -->
<wsdl:message name="ResourceUnknownFault">
<part name="ResourceUnknownFault"
element="wsrf-r:ResourceUnknownFault" />
</wsdl:message>
<wsdl:message name="ResourceUnavailableFault">
<part name="ResourceUnavailableFault"
element="wsrf-r:ResourceUnavailableFault" />
</wsdl:message>
</wsdl:definitions>

View File

@ -0,0 +1,887 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../ver20/util/onvif-wsdl-viewer.xsl"?>
<!--
Copyright (c) 2008-2014 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this document so long as this copyright notice, license and disclaimer are retained with all copies of the document. No license is granted to modify this document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tse="http://www.onvif.org/ver10/search/wsdl" targetNamespace="http://www.onvif.org/ver10/search/wsdl">
<wsdl:types>
<xs:schema targetNamespace="http://www.onvif.org/ver10/search/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="2.4.2">
<xs:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="./onvif.xsd"/>
<!-- Message Request/Responses elements -->
<!--===============================-->
<xs:element name="GetServiceCapabilities">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
<xs:element name="GetServiceCapabilitiesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Capabilities" type="tse:Capabilities">
<xs:annotation>
<xs:documentation>The capabilities for the search service is returned in the Capabilities element.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:complexType name="Capabilities">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="MetadataSearch" type="xs:boolean"/>
<xs:attribute name="GeneralStartEvents" type="xs:boolean"><xs:annotation><xs:documentation> Indicates support for general virtual property events in the FindEvents method.</xs:documentation></xs:annotation></xs:attribute>
<xs:anyAttribute processContents="lax"/>
</xs:complexType>
<xs:element name="Capabilities" type="tse:Capabilities"/>
<!--===============================-->
<xs:element name="GetRecordingSummary">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingSummaryResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Summary" type="tt:RecordingSummary"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetRecordingInformation">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingToken" type="tt:RecordingReference"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingInformationResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingInformation" type="tt:RecordingInformation"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetMediaAttributes">
<xs:complexType>
<xs:sequence>
<xs:element name="RecordingTokens" type="tt:RecordingReference" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Time" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetMediaAttributesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="MediaAttributes" type="tt:MediaAttributes" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="FindRecordings">
<xs:complexType>
<xs:sequence>
<xs:element name="Scope" type="tt:SearchScope">
<xs:annotation>
<xs:documentation>Scope defines the dataset to consider for this search.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaxMatches" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The search will be completed after this many matches. If not specified, the search will continue until reaching the endpoint or until the session expires.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="KeepAliveTime" type="xs:duration">
<xs:annotation>
<xs:documentation>The time the search session will be kept alive after responding to this and subsequent requests. A device shall support at least values up to ten seconds.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="FindRecordingsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetRecordingSearchResults">
<xs:annotation>
<xs:documentation>Gets results from a particular recording listingession.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>The search session to get results from.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MinResults" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The minimum number of results to return in one response.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaxResults" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The maximum number of results to return in one response.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="WaitTime" type="xs:duration" minOccurs="0">
<xs:annotation>
<xs:documentation>The maximum time before responding to the request, even if the MinResults parameter is not fulfilled.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetRecordingSearchResultsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ResultList" type="tt:FindRecordingResultList"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="FindEvents">
<xs:annotation>
<xs:documentation>Starts a search session and specifies the search parameters.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="StartPoint" type="xs:dateTime">
<xs:annotation>
<xs:documentation>The point of time where the search will start.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="EndPoint" type="xs:dateTime" minOccurs="0">
<xs:annotation>
<xs:documentation>The point of time where the search will stop. This can be a time before the StartPoint, in which case the search is performed backwards in time.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Scope" type="tt:SearchScope"/>
<xs:element name="SearchFilter" type="tt:EventFilter"/>
<xs:element name="IncludeStartState" type="xs:boolean">
<xs:annotation>
<xs:documentation>Setting IncludeStartState to true means that the server should return virtual events representing the start state for any recording included in the scope. Start state events are limited to the topics defined in the SearchFilter that have the IsProperty flag set to true.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaxMatches" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The search will be completed after this many matches. If not specified, the search will continue until reaching the endpoint or until the session expires.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="KeepAliveTime" type="xs:duration">
<xs:annotation>
<xs:documentation>The time the search session will be kept alive after responding to this and subsequent requests. A device shall support at least values up to ten seconds.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="FindEventsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>A unique reference to the search session created by this request.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetEventSearchResults">
<xs:annotation>
<xs:documentation>Gets results from a particular search session.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>The search session to get results from.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MinResults" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The minimum number of results to return in one response.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaxResults" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The maximum number of results to return in one response.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="WaitTime" type="xs:duration" minOccurs="0">
<xs:annotation>
<xs:documentation>The maximum time before responding to the request, even if the MinResults parameter is not fulfilled.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetEventSearchResultsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ResultList" type="tt:FindEventResultList"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="FindPTZPosition">
<xs:annotation>
<xs:documentation>Starts a search session and specifies the search parameters.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="StartPoint" type="xs:dateTime">
<xs:annotation>
<xs:documentation>The point of time where the search will start.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="EndPoint" type="xs:dateTime" minOccurs="0">
<xs:annotation>
<xs:documentation>The point of time where the search will stop. This can be a time before the StartPoint, in which case the search is performed backwards in time.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Scope" type="tt:SearchScope"/>
<xs:element name="SearchFilter" type="tt:PTZPositionFilter"/>
<xs:element name="MaxMatches" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The search will be completed after this many matches. If not specified, the search will continue until reaching the endpoint or until the session expires.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="KeepAliveTime" type="xs:duration">
<xs:annotation>
<xs:documentation>The time the search session will be kept alive after responding to this and subsequent requests. A device shall support at least values up to ten seconds.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="FindPTZPositionResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>A unique reference to the search session created by this request.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetPTZPositionSearchResults">
<xs:annotation>
<xs:documentation>Gets results from a particular search session.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>The search session to get results from.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MinResults" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The minimum number of results to return in one response.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaxResults" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The maximum number of results to return in one response.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="WaitTime" type="xs:duration" minOccurs="0">
<xs:annotation>
<xs:documentation>The maximum time before responding to the request, even if the MinResults parameter is not fulfilled.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetPTZPositionSearchResultsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ResultList" type="tt:FindPTZPositionResultList"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="FindMetadata">
<xs:annotation>
<xs:documentation>Starts a search session and specifies the search parameters.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="StartPoint" type="xs:dateTime">
<xs:annotation>
<xs:documentation>The point of time where the search will start.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="EndPoint" type="xs:dateTime" minOccurs="0">
<xs:annotation>
<xs:documentation>The point of time where the search will stop. This can be a time before the StartPoint, in which case the search is performed backwards in time.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Scope" type="tt:SearchScope"/>
<xs:element name="MetadataFilter" type="tt:MetadataFilter"/>
<xs:element name="MaxMatches" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The search will be completed after this many matches. If not specified, the search will continue until reaching the endpoint or until the session expires.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="KeepAliveTime" type="xs:duration">
<xs:annotation>
<xs:documentation>The time the search session will be kept alive after responding to this and subsequent requests. A device shall support at least values up to ten seconds.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="FindMetadataResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>A unique reference to the search session created by this request.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetMetadataSearchResults">
<xs:annotation>
<xs:documentation>Gets results from a particular search session.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>The search session to get results from.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MinResults" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The minimum number of results to return in one response.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MaxResults" type="xs:int" minOccurs="0">
<xs:annotation>
<xs:documentation>The maximum number of results to return in one response.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="WaitTime" type="xs:duration" minOccurs="0">
<xs:annotation>
<xs:documentation>The maximum time before responding to the request, even if the MinResults parameter is not fulfilled.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetMetadataSearchResultsResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="ResultList" type="tt:FindMetadataResultList"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="GetSearchState">
<xs:annotation>
<xs:documentation>Returns the state of an ongoing search session.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>The search session to get the state from.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetSearchStateResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="State" type="tt:SearchState"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<xs:element name="EndSearch">
<xs:annotation>
<xs:documentation>Ends an ongoing search session, freeing any resources.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SearchToken" type="tt:JobToken">
<xs:annotation>
<xs:documentation>The search session to end.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="EndSearchResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="Endpoint" type="xs:dateTime">
<xs:annotation>
<xs:documentation>The point of time the search had reached when it was ended. It is equal to the EndPoint specified in Find-operation if the search was completed.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!--===============================-->
<!--===============================-->
</xs:schema>
</wsdl:types>
<wsdl:message name="GetServiceCapabilitiesRequest">
<wsdl:part name="parameters" element="tse:GetServiceCapabilities"/>
</wsdl:message>
<wsdl:message name="GetServiceCapabilitiesResponse">
<wsdl:part name="parameters" element="tse:GetServiceCapabilitiesResponse"/>
</wsdl:message>
<wsdl:message name="FindEventsRequest">
<wsdl:part name="parameters" element="tse:FindEvents"/>
</wsdl:message>
<wsdl:message name="FindEventsResponse">
<wsdl:part name="parameters" element="tse:FindEventsResponse"/>
</wsdl:message>
<wsdl:message name="GetEventSearchResultsRequest">
<wsdl:part name="parameters" element="tse:GetEventSearchResults"/>
</wsdl:message>
<wsdl:message name="GetEventSearchResultsResponse">
<wsdl:part name="parameters" element="tse:GetEventSearchResultsResponse"/>
</wsdl:message>
<wsdl:message name="GetSearchStateRequest">
<wsdl:part name="parameters" element="tse:GetSearchState"/>
</wsdl:message>
<wsdl:message name="GetSearchStateResponse">
<wsdl:part name="parameters" element="tse:GetSearchStateResponse"/>
</wsdl:message>
<wsdl:message name="EndSearchRequest">
<wsdl:part name="parameters" element="tse:EndSearch"/>
</wsdl:message>
<wsdl:message name="EndSearchResponse">
<wsdl:part name="parameters" element="tse:EndSearchResponse"/>
</wsdl:message>
<wsdl:message name="FindPTZPositionRequest">
<wsdl:part name="parameters" element="tse:FindPTZPosition"/>
</wsdl:message>
<wsdl:message name="FindPTZPositionResponse">
<wsdl:part name="parameters" element="tse:FindPTZPositionResponse"/>
</wsdl:message>
<wsdl:message name="GetPTZPositionSearchResultsRequest">
<wsdl:part name="parameters" element="tse:GetPTZPositionSearchResults"/>
</wsdl:message>
<wsdl:message name="GetPTZPositionSearchResultsResponse">
<wsdl:part name="parameters" element="tse:GetPTZPositionSearchResultsResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingSummaryRequest">
<wsdl:part name="parameters" element="tse:GetRecordingSummary"/>
</wsdl:message>
<wsdl:message name="GetRecordingSummaryResponse">
<wsdl:part name="parameters" element="tse:GetRecordingSummaryResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingInformationRequest">
<wsdl:part name="parameters" element="tse:GetRecordingInformation"/>
</wsdl:message>
<wsdl:message name="GetRecordingInformationResponse">
<wsdl:part name="parameters" element="tse:GetRecordingInformationResponse"/>
</wsdl:message>
<wsdl:message name="GetMediaAttributesRequest">
<wsdl:part name="parameters" element="tse:GetMediaAttributes"/>
</wsdl:message>
<wsdl:message name="GetMediaAttributesResponse">
<wsdl:part name="parameters" element="tse:GetMediaAttributesResponse"/>
</wsdl:message>
<wsdl:message name="FindRecordingsRequest">
<wsdl:part name="parameters" element="tse:FindRecordings"/>
</wsdl:message>
<wsdl:message name="FindRecordingsResponse">
<wsdl:part name="parameters" element="tse:FindRecordingsResponse"/>
</wsdl:message>
<wsdl:message name="GetRecordingSearchResultsRequest">
<wsdl:part name="parameters" element="tse:GetRecordingSearchResults"/>
</wsdl:message>
<wsdl:message name="GetRecordingSearchResultsResponse">
<wsdl:part name="parameters" element="tse:GetRecordingSearchResultsResponse"/>
</wsdl:message>
<wsdl:message name="FindMetadataRequest">
<wsdl:part name="parameters" element="tse:FindMetadata"/>
</wsdl:message>
<wsdl:message name="FindMetadataResponse">
<wsdl:part name="parameters" element="tse:FindMetadataResponse"/>
</wsdl:message>
<wsdl:message name="GetMetadataSearchResultsRequest">
<wsdl:part name="parameters" element="tse:GetMetadataSearchResults"/>
</wsdl:message>
<wsdl:message name="GetMetadataSearchResultsResponse">
<wsdl:part name="parameters" element="tse:GetMetadataSearchResultsResponse"/>
</wsdl:message>
<wsdl:portType name="SearchPort">
<!--===============================-->
<!--===============================-->
<wsdl:operation name="GetServiceCapabilities">
<wsdl:documentation>Returns the capabilities of the search service. The result is returned in a typed answer.</wsdl:documentation>
<wsdl:input message="tse:GetServiceCapabilitiesRequest"/>
<wsdl:output message="tse:GetServiceCapabilitiesResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetRecordingSummary">
<wsdl:documentation>GetRecordingSummary is used to get a summary description of all recorded data. This
operation is mandatory to support for a device implementing the recording search service.</wsdl:documentation>
<wsdl:input message="tse:GetRecordingSummaryRequest"/>
<wsdl:output message="tse:GetRecordingSummaryResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetRecordingInformation">
<wsdl:documentation>Returns information about a single Recording specified by a RecordingToken. This operation
is mandatory to support for a device implementing the recording search service.</wsdl:documentation>
<wsdl:input message="tse:GetRecordingInformationRequest"/>
<wsdl:output message="tse:GetRecordingInformationResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetMediaAttributes">
<wsdl:documentation>Returns a set of media attributes for all tracks of the specified recordings at a specified point
in time. Clients using this operation shall be able to use it as a non blocking operation. A
device shall set the starttime and endtime of the MediaAttributes structure to equal values if
calculating this range would causes this operation to block. See MediaAttributes structure for
more information. This operation is mandatory to support for a device implementing the
recording search service.</wsdl:documentation>
<wsdl:input message="tse:GetMediaAttributesRequest"/>
<wsdl:output message="tse:GetMediaAttributesResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="FindRecordings">
<wsdl:documentation>FindRecordings starts a search session, looking for recordings that matches the scope (See
20.2.4) defined in the request. Results from the search are acquired using the
GetRecordingSearchResults request, specifying the search token returned from this request.
The device shall continue searching until one of the following occurs:<ul>
<li>The entire time range from StartPoint to EndPoint has been searched through.</li>
<li>The total number of matches has been found, defined by the MaxMatches parameter.</li>
<li>The session has been ended by a client EndSession request.</li>
<li>The session has been ended because KeepAliveTime since the last request related to
this session has expired.</li>
</ul>
The order of the results is undefined, to allow the device to return results in any order they
are found. This operation is mandatory to support for a device implementing the recording
search service.</wsdl:documentation>
<wsdl:input message="tse:FindRecordingsRequest"/>
<wsdl:output message="tse:FindRecordingsResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetRecordingSearchResults">
<wsdl:documentation>GetRecordingSearchResults acquires the results from a recording search session previously
initiated by a FindRecordings operation. The response shall not include results already
returned in previous requests for the same session. If MaxResults is specified, the response
shall not contain more than MaxResults results. The number of results relates to the number of recordings.
For viewing individual recorded data for a signal track use the FindEvents method.<br/>
GetRecordingSearchResults shall block until:<ul>
<li>
MaxResults results are available for the response if MaxResults is specified.</li>
<li>MinResults results are available for the response if MinResults is specified.</li>
<li>WaitTime has expired.</li>
<li>Search is completed or stopped.</li>
</ul>
This operation is mandatory to support for a device implementing the recording search service.</wsdl:documentation>
<wsdl:input message="tse:GetRecordingSearchResultsRequest"/>
<wsdl:output message="tse:GetRecordingSearchResultsResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="FindEvents">
<wsdl:documentation>FindEvents starts a search session, looking for recording events (in the scope that
matches the search filter defined in the request. Results from the search are
acquired using the GetEventSearchResults request, specifying the search token returned from
this request.<br/>
The device shall continue searching until one of the following occurs:<ul>
<li>
The entire time range from StartPoint to EndPoint has been searched through.</li>
<li>The total number of matches has been found, defined by the MaxMatches parameter.</li>
<li>The session has been ended by a client EndSession request.</li>
<li>The session has been ended because KeepAliveTime since the last request related to
this session has expired.</li>
</ul>
Results shall be ordered by time, ascending in case of forward search, or descending in case
of backward search. This operation is mandatory to support for a device implementing the
recording search service.</wsdl:documentation>
<wsdl:input message="tse:FindEventsRequest"/>
<wsdl:output message="tse:FindEventsResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetEventSearchResults">
<wsdl:documentation>GetEventSearchResults acquires the results from a recording event search session previously
initiated by a FindEvents operation. The response shall not include results already returned in
previous requests for the same session. If MaxResults is specified, the response shall not
contain more than MaxResults results.<br/>
GetEventSearchResults shall block until:<ul>
<li>
MaxResults results are available for the response if MaxResults is specified.</li>
<li>MinResults results are available for the response if MinResults is specified.</li>
<li>WaitTime has expired.</li>
<li>Search is completed or stopped.</li>
</ul>
This operation is mandatory to support for a device implementing the recording search service.</wsdl:documentation>
<wsdl:input message="tse:GetEventSearchResultsRequest"/>
<wsdl:output message="tse:GetEventSearchResultsResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="FindPTZPosition">
<wsdl:documentation>FindPTZPosition starts a search session, looking for ptz positions in the scope (See 20.2.4)
that matches the search filter defined in the request. Results from the search are acquired
using the GetPTZPositionSearchResults request, specifying the search token returned from
this request.<br/>
The device shall continue searching until one of the following occurs:<ul>
<li>
The entire time range from StartPoint to EndPoint has been searched through.</li>
<li>The total number of matches has been found, defined by the MaxMatches parameter.</li>
<li>The session has been ended by a client EndSession request.</li>
<li>The session has been ended because KeepAliveTime since the last request related to
this session has expired.</li>
</ul>
This operation is mandatory to support whenever CanContainPTZ is true for any metadata
track in any recording on the device.</wsdl:documentation>
<wsdl:input message="tse:FindPTZPositionRequest"/>
<wsdl:output message="tse:FindPTZPositionResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetPTZPositionSearchResults">
<wsdl:documentation>GetPTZPositionSearchResults acquires the results from a ptz position search session
previously initiated by a FindPTZPosition operation. The response shall not include results
already returned in previous requests for the same session. If MaxResults is specified, the
response shall not contain more than MaxResults results.<br/>
GetPTZPositionSearchResults shall block until:<ul>
<li>
MaxResults results are available for the response if MaxResults is specified.</li>
<li>MinResults results are available for the response if MinResults is specified.</li>
<li>WaitTime has expired.</li>
<li>Search is completed or stopped.</li>
</ul>
This operation is mandatory to support whenever CanContainPTZ is true for any metadata
track in any recording on the device.</wsdl:documentation>
<wsdl:input message="tse:GetPTZPositionSearchResultsRequest"/>
<wsdl:output message="tse:GetPTZPositionSearchResultsResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetSearchState">
<wsdl:documentation>GetSearchState returns the current state of the specified search session. This command is deprecated .</wsdl:documentation>
<wsdl:input message="tse:GetSearchStateRequest"/>
<wsdl:output message="tse:GetSearchStateResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="EndSearch">
<wsdl:documentation>EndSearch stops and ongoing search session, causing any blocking result request to return
and the SearchToken to become invalid. If the search was interrupted before completion, the
point in time that the search had reached shall be returned. If the search had not yet begun,
the StartPoint shall be returned. If the search was completed the original EndPoint supplied
by the Find operation shall be returned. When issuing EndSearch on a FindRecordings request the
EndPoint is undefined and shall not be used since the FindRecordings request doesn't have
StartPoint/EndPoint. This operation is mandatory to support for a device implementing the
recording search service.
</wsdl:documentation>
<wsdl:input message="tse:EndSearchRequest"/>
<wsdl:output message="tse:EndSearchResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="FindMetadata">
<wsdl:documentation>FindMetadata starts a search session, looking for metadata in the scope (See 20.2.4) that
matches the search filter defined in the request. Results from the search are acquired using
the GetMetadataSearchResults request, specifying the search token returned from this
request.<br/>
The device shall continue searching until one of the following occurs:<ul>
<li>
The entire time range from StartPoint to EndPoint has been searched through.</li>
<li>The total number of matches has been found, defined by the MaxMatches parameter.</li>
<li>The session has been ended by a client EndSession request.</li>
<li>The session has been ended because KeepAliveTime since the last request related to
this session has expired.</li>
</ul>
This operation is mandatory to support if the MetaDataSearch capability is set to true in the
SearchCapabilities structure return by the GetCapabilities command in the Device service.</wsdl:documentation>
<wsdl:input message="tse:FindMetadataRequest"/>
<wsdl:output message="tse:FindMetadataResponse"/>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetMetadataSearchResults">
<wsdl:documentation>GetMetadataSearchResults acquires the results from a recording search session previously
initiated by a FindMetadata operation. The response shall not include results already returned
in previous requests for the same session. If MaxResults is specified, the response shall not
contain more than MaxResults results.<br/>
GetMetadataSearchResults shall block until:<ul>
<li>
MaxResults results are available for the response if MaxResults is specified.</li>
<li>MinResults results are available for the response if MinResults is specified.</li>
<li>WaitTime has expired.</li>
<li>Search is completed or stopped.</li>
</ul>
This operation is mandatory to support if the MetaDataSearch capability is set to true in the
SearchCapabilities structure return by the GetCapabilities command in the Device service.</wsdl:documentation>
<wsdl:input message="tse:GetMetadataSearchResultsRequest"/>
<wsdl:output message="tse:GetMetadataSearchResultsResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="SearchBinding" type="tse:SearchPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<!--===============================-->
<!--===============================-->
<wsdl:operation name="GetServiceCapabilities">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetServiceCapabilities"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetRecordingSummary">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetRecordingSummary"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetRecordingInformation">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetRecordingInformation"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetMediaAttributes">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetMediaAttributes"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="FindRecordings">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/FindRecordings"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetRecordingSearchResults">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetRecordingSearchResults"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="FindEvents">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/FindEvents"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetEventSearchResults">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetEventSearchResults"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="FindPTZPosition">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/FindPTZPosition"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetPTZPositionSearchResults">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetPTZPositionSearchResults"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetSearchState">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetSearchState"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="EndSearch">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/EndSearch"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="FindMetadata">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/FindMetadata"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<wsdl:operation name="GetMetadataSearchResults">
<soap:operation soapAction="http://www.onvif.org/ver10/search/wsdl/GetMetadataSearchResults"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
<!--===============================-->
<!--===============================-->
</wsdl:binding>
<wsdl:service name="SearchService">
<wsdl:port name="ServicePort" binding="tse:SearchBinding">
<soap:address location="http://192.168.0.51:8888/onvif/Search"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

View File

@ -0,0 +1,185 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
OASIS takes no position regarding the validity or scope of any intellectual property or other rights that might be claimed to pertain to the implementation or use of the technology described in this document or the extent to which any license under such rights might or might not be available; neither does it represent that it has made any effort to identify any such rights. Information on OASIS's procedures with respect to rights in OASIS specifications can be found at the OASIS website. Copies of claims of rights made available for publication and any assurances of licenses to be made available, or the result of an attempt made to obtain a general license or permission for the use of such proprietary rights by implementors or users of this specification, can be obtained from the OASIS Executive Director.
OASIS invites any interested party to bring to its attention any copyrights, patents or patent applications, or other proprietary rights which may cover technology that may be required to implement this specification. Please address the information to the OASIS Executive Director.
Copyright (C) OASIS Open (2004-2006). All Rights Reserved.
This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to OASIS, except as needed for the purpose of developing OASIS specifications, in which case the procedures for copyrights defined in the OASIS Intellectual Property Rights document must be followed, or as required to translate it into languages other than English.
The limited permissions granted above are perpetual and will not be revoked by OASIS or its successors or assigns.
This document and the information contained herein is provided on an "AS IS" basis and OASIS DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-->
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wstop = "http://docs.oasis-open.org/wsn/t-1"
targetNamespace = "http://docs.oasis-open.org/wsn/t-1"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- =============== utility type definitions ==================== -->
<xsd:complexType name="Documentation" mixed="true">
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="0"
maxOccurs="unbounded" namespace="##any"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ExtensibleDocumented" abstract="true"
mixed="false">
<xsd:sequence>
<xsd:element name="documentation" type="wstop:Documentation"
minOccurs="0" />
</xsd:sequence>
<xsd:anyAttribute namespace="##other" processContents="lax" />
</xsd:complexType>
<xsd:complexType name="QueryExpressionType" mixed="true">
<xsd:sequence>
<xsd:any minOccurs="0" maxOccurs="1" processContents="lax" />
</xsd:sequence>
<xsd:attribute name="Dialect" type="xsd:anyURI" use="required"/>
</xsd:complexType>
<!-- ================== Topic-Namespace Related ================ -->
<xsd:complexType name="TopicNamespaceType">
<xsd:complexContent>
<xsd:extension base="wstop:ExtensibleDocumented">
<xsd:sequence>
<xsd:element name="Topic"
minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="wstop:TopicType">
<xsd:attribute name="parent" type="wstop:ConcreteTopicExpression" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:any namespace="##other"
minOccurs="0" maxOccurs="unbounded"
processContents="lax"/>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:NCName"/>
<xsd:attribute name="targetNamespace" type="xsd:anyURI"
use="required"/>
<xsd:attribute name="final" type="xsd:boolean"
default="false"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="TopicNamespace" type="wstop:TopicNamespaceType">
<xsd:unique name="rootTopicUniqueness">
<xsd:selector xpath="wstop:Topic"/>
<xsd:field xpath="@name"/>
</xsd:unique>
</xsd:element>
<xsd:attribute name="topicNamespaceLocation" type="xsd:anyURI"/>
<!-- ===================== Topic Related ========================= -->
<xsd:complexType name="TopicType">
<xsd:complexContent>
<xsd:extension base="wstop:ExtensibleDocumented">
<xsd:sequence>
<xsd:element name="MessagePattern"
type="wstop:QueryExpressionType"
minOccurs="0" maxOccurs="1" />
<xsd:element name="Topic" type="wstop:TopicType"
minOccurs="0" maxOccurs="unbounded">
<xsd:unique name="childTopicUniqueness">
<xsd:selector xpath="wstop:topic"/>
<xsd:field xpath="@name"/>
</xsd:unique>
</xsd:element>
<xsd:any namespace="##other" minOccurs="0"
maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:NCName"/>
<xsd:attribute name="messageTypes">
<xsd:simpleType>
<xsd:list itemType="xsd:QName"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="final" type="xsd:boolean"
default="false"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<!-- ================ Topic Set Related =================== -->
<xsd:complexType name="TopicSetType">
<xsd:complexContent>
<xsd:extension base="wstop:ExtensibleDocumented">
<xsd:sequence>
<xsd:any namespace="##other"
minOccurs="0" maxOccurs="unbounded"
processContents="lax"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="TopicSet" type="wstop:TopicSetType"/>
<xsd:attribute name="topic" type="xsd:boolean" default="false"/>
<!-- ================ Topic Expression Related =================== -->
<xsd:simpleType name="FullTopicExpression">
<xsd:restriction base="xsd:token">
<xsd:annotation>
<xsd:documentation>
TopicPathExpression ::= TopicPath ( '|' TopicPath )*
TopicPath ::= RootTopic ChildTopicExpression*
RootTopic ::= NamespacePrefix? ('//')? (NCName | '*')
NamespacePrefix ::= NCName ':'
ChildTopicExpression ::= '/' '/'? (QName | NCName | '*'| '.')
</xsd:documentation>
</xsd:annotation>
<xsd:pattern value=
"([\i-[:]][\c-[:]]*:)?(//)?([\i-[:]][\c-[:]]*|\*)((/|//)(([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*|\*|[.]))*(\|([\i-[:]][\c-[:]]*:)?(//)?([\i-[:]][\c-[:]]*|\*)((/|//)(([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*|\*|[.]))*)*">
</xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ConcreteTopicExpression">
<xsd:restriction base="xsd:token">
<xsd:annotation>
<xsd:documentation>
The pattern allows strings matching the following EBNF:
ConcreteTopicPath ::= RootTopic ChildTopic*
RootTopic ::= QName
ChildTopic ::= '/' (QName | NCName)
</xsd:documentation>
</xsd:annotation>
<xsd:pattern value=
"(([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*)(/([\i-[:]][\c-[:]]*:)?[\i-[:]][\c-[:]]*)*" >
</xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="SimpleTopicExpression">
<xsd:restriction base="xsd:QName">
<xsd:annotation>
<xsd:documentation>
The pattern allows strings matching the following EBNF:
RootTopic ::= QName
</xsd:documentation>
</xsd:annotation>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (c) 2010-2013 by ONVIF: Open Network Video Interface Forum. All rights reserved.
Recipients of this document may copy, distribute, publish, or display this
document so long as this copyright notice, license and disclaimer are
retained with all copies of the document.
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND
THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE;
THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE;
OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS,
COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE
FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS
DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES
WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR
DISTRIBUTION OF THIS DOCUMENT.
THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO,
INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS
AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN
CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
<xs:schema targetNamespace="http://www.onvif.org/ver10/pacs"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:pt="http://www.onvif.org/ver10/pacs"
elementFormDefault="qualified"
version="1.0">
<!--====== types ======-->
<xs:simpleType name="ReferenceToken">
<xs:annotation>
<xs:documentation>
Type used to reference logical and physical entities.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
<xs:complexType name="DataEntity">
<xs:annotation>
<xs:documentation>
General datastructure referenced by a token.
Should be used as extension base.</xs:documentation>
</xs:annotation>
<xs:sequence>
</xs:sequence>
<xs:attribute name="token" type="pt:ReferenceToken" use="required"><xs:annotation>
<xs:documentation>A service-unique identifier of the item.</xs:documentation>
</xs:annotation></xs:attribute>
</xs:complexType>
<!--===============================-->
<xs:simpleType name="Name">
<xs:annotation>
<xs:documentation>
Type used for names of logical and physical entities.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="64"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
<xs:simpleType name="Description">
<xs:annotation>
<xs:documentation>
Description is optional and the maximum length is device specific.
If the length is more than maximum length, it is silently chopped to the maximum length
supported by the device/service (which may be 0).</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="1024"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
<!--===============================-->
</xs:schema>

View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
W3C XML Schema defined in the Web Services Addressing 1.0 specification
http://www.w3.org/TR/ws-addr-core
Copyright © 2005 World Wide Web Consortium,
(Massachusetts Institute of Technology, European Research Consortium for
Informatics and Mathematics, Keio University). All Rights Reserved. This
work is distributed under the W3C® Software License [1] in the hope that
it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
$Id: ws-addr.xsd,v 1.4 2008/07/14 18:48:47 plehegar Exp $
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://www.w3.org/2005/08/addressing" targetNamespace="http://www.w3.org/2005/08/addressing" blockDefault="#all" elementFormDefault="qualified" finalDefault="" attributeFormDefault="unqualified">
<!-- Constructs from the WS-Addressing Core -->
<xs:element name="EndpointReference" type="tns:EndpointReferenceType"/>
<xs:complexType name="EndpointReferenceType" mixed="false">
<xs:sequence>
<xs:element name="Address" type="tns:AttributedURIType"/>
<xs:element name="ReferenceParameters" type="tns:ReferenceParametersType" minOccurs="0"/>
<xs:element ref="tns:Metadata" minOccurs="0"/>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:complexType name="ReferenceParametersType" mixed="false">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="Metadata" type="tns:MetadataType"/>
<xs:complexType name="MetadataType" mixed="false">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="MessageID" type="tns:AttributedURIType"/>
<xs:element name="RelatesTo" type="tns:RelatesToType"/>
<xs:complexType name="RelatesToType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute name="RelationshipType" type="tns:RelationshipTypeOpenEnum" use="optional" default="http://www.w3.org/2005/08/addressing/reply"/>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="RelationshipTypeOpenEnum">
<xs:union memberTypes="tns:RelationshipType xs:anyURI"/>
</xs:simpleType>
<xs:simpleType name="RelationshipType">
<xs:restriction base="xs:anyURI">
<xs:enumeration value="http://www.w3.org/2005/08/addressing/reply"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="ReplyTo" type="tns:EndpointReferenceType"/>
<xs:element name="From" type="tns:EndpointReferenceType"/>
<xs:element name="FaultTo" type="tns:EndpointReferenceType"/>
<xs:element name="To" type="tns:AttributedURIType"/>
<xs:element name="Action" type="tns:AttributedURIType"/>
<xs:complexType name="AttributedURIType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<!-- Constructs from the WS-Addressing SOAP binding -->
<xs:attribute name="IsReferenceParameter" type="xs:boolean"/>
<xs:simpleType name="FaultCodesOpenEnumType">
<xs:union memberTypes="tns:FaultCodesType xs:QName"/>
</xs:simpleType>
<xs:simpleType name="FaultCodesType">
<xs:restriction base="xs:QName">
<xs:enumeration value="tns:InvalidAddressingHeader"/>
<xs:enumeration value="tns:InvalidAddress"/>
<xs:enumeration value="tns:InvalidEPR"/>
<xs:enumeration value="tns:InvalidCardinality"/>
<xs:enumeration value="tns:MissingAddressInEPR"/>
<xs:enumeration value="tns:DuplicateMessageID"/>
<xs:enumeration value="tns:ActionMismatch"/>
<xs:enumeration value="tns:MessageAddressingHeaderRequired"/>
<xs:enumeration value="tns:DestinationUnreachable"/>
<xs:enumeration value="tns:ActionNotSupported"/>
<xs:enumeration value="tns:EndpointUnavailable"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="RetryAfter" type="tns:AttributedUnsignedLongType"/>
<xs:complexType name="AttributedUnsignedLongType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:unsignedLong">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="ProblemHeaderQName" type="tns:AttributedQNameType"/>
<xs:complexType name="AttributedQNameType" mixed="false">
<xs:simpleContent>
<xs:extension base="xs:QName">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="ProblemHeader" type="tns:AttributedAnyType"/>
<xs:complexType name="AttributedAnyType" mixed="false">
<xs:sequence>
<xs:any namespace="##any" processContents="lax" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
<xs:element name="ProblemIRI" type="tns:AttributedURIType"/>
<xs:element name="ProblemAction" type="tns:ProblemActionType"/>
<xs:complexType name="ProblemActionType" mixed="false">
<xs:sequence>
<xs:element ref="tns:Action" minOccurs="0"/>
<xs:element name="SoapAction" minOccurs="0" type="xs:anyURI"/>
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,272 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright Notice
(c) 2004-2005 Microsoft Corporation, Inc. All rights reserved.
Permission to copy, display, perform, modify and distribute the
WS-Discovery Specification (the "Specification", which includes
WSDL and schema documents), and to authorize others to do the
foregoing, in any medium without fee or royalty is hereby granted
for the purpose of developing and evaluating the Specification.
BEA Systems, Canon, Intel, Microsoft, and webMethods, Inc.
(collectively, the "Co-Developers") each agree to grant a license
to third parties, under royalty-free and other reasonable,
non-discriminatory terms and conditions, to their respective
essential Licensed Claims, which reasonable, non-discriminatory
terms and conditions may include, for example, but are not limited
to, an affirmation of the obligation to grant reciprocal licenses
under any of the licensee's patents that are necessary to implement
the Specification.
DISCLAIMERS:
THE SPECIFICATION IS PROVIDED "AS IS," AND THE CO-DEVELOPERS MAKE
NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING,
BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS
OF THE SPECIFICATION ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE
IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY
PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
THE CO-DEVELOPERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT,
SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY
USE OF THE SPECIFICATION OR THE PERFORMANCE OR IMPLEMENTATION OF
THE CONTENTS THEREOF.
You may remove these disclaimers from your modified versions of the
Specification provided that you effectively disclaim all warranties
and liabilities on behalf of all Co-developers and any copyright
holders in the copies of any such modified versions you distribute.
The name and trademarks of the Co-developers may NOT be used in any
manner, including advertising or publicity pertaining to the
Specification or its contents without specific, written prior
permission. Title to copyright in the Specification will at all
times remain with Microsoft.
No other rights are granted by implication, estoppel or otherwise.
-->
<xs:schema
targetNamespace="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:tns="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
blockDefault="#all" >
<xs:import
namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing"
schemaLocation="http://schemas.xmlsoap.org/ws/2004/08/addressing" />
<!-- //////////////////// Discovery Messages //////////////////// -->
<xs:element name="Hello" type="tns:HelloType" />
<xs:complexType name="HelloType" >
<xs:sequence>
<xs:element ref="wsa:EndpointReference" />
<xs:element ref="tns:Types" minOccurs="0" />
<xs:element ref="tns:Scopes" minOccurs="0" />
<xs:element ref="tns:XAddrs" minOccurs="0" />
<xs:element ref="tns:MetadataVersion" />
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:simpleType name="RelationshipType" >
<xs:restriction base="xs:QName" >
<xs:enumeration value="tns:Suppression" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OpenRelationshipType" >
<xs:union memberTypes="tns:RelationshipType xs:QName" />
</xs:simpleType>
<xs:element name="Bye" type="tns:ByeType" />
<xs:complexType name="ByeType" >
<xs:sequence>
<xs:element ref="wsa:EndpointReference" />
<xs:element ref="tns:Types" minOccurs="0" />
<xs:element ref="tns:Scopes" minOccurs="0" />
<xs:element ref="tns:XAddrs" minOccurs="0" />
<xs:element ref="tns:MetadataVersion" minOccurs="0" />
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Probe" type="tns:ProbeType" />
<xs:complexType name="ProbeType" >
<xs:sequence>
<xs:element ref="tns:Types" minOccurs="0" />
<xs:element ref="tns:Scopes" minOccurs="0" />
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="ProbeMatches" type="tns:ProbeMatchesType" />
<xs:complexType name="ProbeMatchesType" >
<xs:sequence>
<xs:element name="ProbeMatch"
type="tns:ProbeMatchType"
minOccurs="0"
maxOccurs="unbounded" >
</xs:element>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:complexType name="ProbeMatchType" >
<xs:sequence>
<xs:element ref="wsa:EndpointReference" />
<xs:element ref="tns:Types" minOccurs="0" />
<xs:element ref="tns:Scopes" minOccurs="0" />
<xs:element ref="tns:XAddrs" minOccurs="0" />
<xs:element ref="tns:MetadataVersion" />
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Resolve" type="tns:ResolveType" />
<xs:complexType name="ResolveType" >
<xs:sequence>
<xs:element ref="wsa:EndpointReference" />
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="ResolveMatches" type="tns:ResolveMatchesType" />
<xs:complexType name="ResolveMatchesType" >
<xs:sequence>
<xs:element name="ResolveMatch"
type="tns:ResolveMatchType"
minOccurs="0" />
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:complexType name="ResolveMatchType" >
<xs:sequence>
<xs:element ref="wsa:EndpointReference" />
<xs:element ref="tns:Types" minOccurs="0" />
<xs:element ref="tns:Scopes" minOccurs="0" />
<xs:element ref="tns:XAddrs" />
<xs:element ref="tns:MetadataVersion" />
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Types" type="tns:QNameListType" />
<xs:simpleType name="QNameListType" >
<xs:list itemType="xs:QName" />
</xs:simpleType>
<xs:element name="Scopes" type="tns:ScopesType" />
<xs:complexType name="ScopesType" >
<xs:simpleContent>
<xs:extension base="tns:UriListType" >
<xs:attribute name="MatchBy" type="xs:anyURI" />
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:element name="XAddrs" type="tns:UriListType" />
<xs:simpleType name="UriListType" >
<xs:list itemType="xs:anyURI" />
</xs:simpleType>
<xs:element name="MetadataVersion" type="xs:unsignedInt" />
<!-- //////////////////// Faults //////////////////// -->
<xs:simpleType name="FaultCodeType" >
<xs:restriction base="xs:QName" >
<xs:enumeration value="tns:MatchingRuleNotSupported" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="FaultCodeOpenType" >
<xs:union memberTypes="tns:FaultCodeType xs:QName" />
</xs:simpleType>
<xs:element name="SupportedMatchingRules" type="tns:UriListType" />
<!-- //////////////////// Compact Signature //////////////////// -->
<xs:attribute name="Id" type="xs:ID"/>
<xs:element name="Security" type="tns:SecurityType" />
<xs:complexType name="SecurityType" >
<xs:sequence>
<xs:element ref="tns:Sig" minOccurs="0" />
</xs:sequence>
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<xs:element name="Sig" type="tns:SigType" />
<xs:complexType name="SigType" >
<xs:sequence>
<xs:any namespace="##other"
processContents="lax"
minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="Scheme" type="xs:anyURI" use="required" />
<xs:attribute name="KeyId" type="xs:base64Binary" />
<xs:attribute name="Refs" type="xs:IDREFS" use="required" />
<xs:attribute name="Sig" type="xs:base64Binary" use="required" />
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:complexType>
<!-- //////////////////// General Headers //////////////////// -->
<xs:element name="AppSequence" type="tns:AppSequenceType" />
<xs:complexType name="AppSequenceType" >
<xs:complexContent>
<xs:restriction base="xs:anyType" >
<xs:attribute name="InstanceId"
type="xs:unsignedInt"
use="required" />
<xs:attribute name="SequenceId" type="xs:anyURI" />
<xs:attribute name="MessageNumber"
type="xs:unsignedInt"
use="required" />
<xs:anyAttribute namespace="##other" processContents="lax" />
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,287 @@
<?xml version='1.0'?>
<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns ="http://www.w3.org/1999/xhtml"
xml:lang="en">
<xs:annotation>
<xs:documentation>
<div>
<h1>About the XML namespace</h1>
<div class="bodytext">
<p>
This schema document describes the XML namespace, in a form
suitable for import by other schema documents.
</p>
<p>
See <a href="http://www.w3.org/XML/1998/namespace.html">
http://www.w3.org/XML/1998/namespace.html</a> and
<a href="http://www.w3.org/TR/REC-xml">
http://www.w3.org/TR/REC-xml</a> for information
about this namespace.
</p>
<p>
Note that local names in this namespace are intended to be
defined only by the World Wide Web Consortium or its subgroups.
The names currently defined in this namespace are listed below.
They should not be used with conflicting semantics by any Working
Group, specification, or document instance.
</p>
<p>
See further below in this document for more information about <a
href="#usage">how to refer to this schema document from your own
XSD schema documents</a> and about <a href="#nsversioning">the
namespace-versioning policy governing this schema document</a>.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:attribute name="lang">
<xs:annotation>
<xs:documentation>
<div>
<h3>lang (as an attribute name)</h3>
<p>
denotes an attribute whose value
is a language code for the natural language of the content of
any element; its value is inherited. This name is reserved
by virtue of its definition in the XML specification.</p>
</div>
<div>
<h4>Notes</h4>
<p>
Attempting to install the relevant ISO 2- and 3-letter
codes as the enumerated possible values is probably never
going to be a realistic possibility.
</p>
<p>
See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
and the IANA language subtag registry at
<a href="http://www.iana.org/assignments/language-subtag-registry">
http://www.iana.org/assignments/language-subtag-registry</a>
for further information.
</p>
<p>
The union allows for the 'un-declaration' of xml:lang with
the empty string.
</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:union memberTypes="xs:language">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="space">
<xs:annotation>
<xs:documentation>
<div>
<h3>space (as an attribute name)</h3>
<p>
denotes an attribute whose
value is a keyword indicating what whitespace processing
discipline is intended for the content of the element; its
value is inherited. This name is reserved by virtue of its
definition in the XML specification.</p>
</div>
</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:NCName">
<xs:enumeration value="default"/>
<xs:enumeration value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
<xs:documentation>
<div>
<h3>base (as an attribute name)</h3>
<p>
denotes an attribute whose value
provides a URI to be used as the base for interpreting any
relative URIs in the scope of the element on which it
appears; its value is inherited. This name is reserved
by virtue of its definition in the XML Base specification.</p>
<p>
See <a
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="id" type="xs:ID">
<xs:annotation>
<xs:documentation>
<div>
<h3>id (as an attribute name)</h3>
<p>
denotes an attribute whose value
should be interpreted as if declared to be of type ID.
This name is reserved by virtue of its definition in the
xml:id specification.</p>
<p>
See <a
href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
for information about this attribute.
</p>
</div>
</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attributeGroup name="specialAttrs">
<xs:attribute ref="xml:base"/>
<xs:attribute ref="xml:lang"/>
<xs:attribute ref="xml:space"/>
<xs:attribute ref="xml:id"/>
</xs:attributeGroup>
<xs:annotation>
<xs:documentation>
<div>
<h3>Father (in any context at all)</h3>
<div class="bodytext">
<p>
denotes Jon Bosak, the chair of
the original XML Working Group. This name is reserved by
the following decision of the W3C XML Plenary and
XML Coordination groups:
</p>
<blockquote>
<p>
In appreciation for his vision, leadership and
dedication the W3C XML Plenary on this 10th day of
February, 2000, reserves for Jon Bosak in perpetuity
the XML name "xml:Father".
</p>
</blockquote>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div xml:id="usage" id="usage">
<h2><a name="usage">About this schema document</a></h2>
<div class="bodytext">
<p>
This schema defines attributes and an attribute group suitable
for use by schemas wishing to allow <code>xml:base</code>,
<code>xml:lang</code>, <code>xml:space</code> or
<code>xml:id</code> attributes on elements they define.
</p>
<p>
To enable this, such a schema must import this schema for
the XML namespace, e.g. as follows:
</p>
<pre>
&lt;schema . . .>
. . .
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
</pre>
<p>
or
</p>
<pre>
&lt;import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
</pre>
<p>
Subsequently, qualified reference to any of the attributes or the
group defined below will have the desired effect, e.g.
</p>
<pre>
&lt;type . . .>
. . .
&lt;attributeGroup ref="xml:specialAttrs"/>
</pre>
<p>
will define a type which will schema-validate an instance element
with any of those attributes.
</p>
</div>
</div>
</xs:documentation>
</xs:annotation>
<xs:annotation>
<xs:documentation>
<div id="nsversioning" xml:id="nsversioning">
<h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
<div class="bodytext">
<p>
In keeping with the XML Schema WG's standard versioning
policy, this schema document will persist at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a>.
</p>
<p>
At the date of issue it can also be found at
<a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd</a>.
</p>
<p>
The schema document at that URI may however change in the future,
in order to remain compatible with the latest version of XML
Schema itself, or with the XML namespace itself. In other words,
if the XML Schema or XML namespaces change, the version of this
document at <a href="http://www.w3.org/2001/xml.xsd">
http://www.w3.org/2001/xml.xsd
</a>
will change accordingly; the version at
<a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd
</a>
will not change.
</p>
<p>
Previous dated (and unchanging) versions of this schema
document are at:
</p>
<ul>
<li><a href="http://www.w3.org/2009/01/xml.xsd">
http://www.w3.org/2009/01/xml.xsd</a></li>
<li><a href="http://www.w3.org/2007/08/xml.xsd">
http://www.w3.org/2007/08/xml.xsd</a></li>
<li><a href="http://www.w3.org/2004/10/xml.xsd">
http://www.w3.org/2004/10/xml.xsd</a></li>
<li><a href="http://www.w3.org/2001/03/xml.xsd">
http://www.w3.org/2001/03/xml.xsd</a></li>
</ul>
</div>
</div>
</xs:documentation>
</xs:annotation>
</xs:schema>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" ?>
<!--
W3C XML Schema defined in the Describing Media Content of Binary Data in XML
specification
http://www.w3.org/TR/xml-media-types
Copyright © 2005 World Wide Web Consortium,
(Massachusetts Institute of Technology, European Research Consortium for
Informatics and Mathematics, Keio University). All Rights Reserved. This
work is distributed under the W3C® Software License [1] in the hope that
it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[1] http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
$Id: xmlmime.xsd,v 1.1 2005/04/25 17:08:35 hugo Exp $
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
targetNamespace="http://www.w3.org/2005/05/xmlmime" >
<xs:attribute name="contentType">
<xs:simpleType>
<xs:restriction base="xs:string" >
<xs:minLength value="3" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="expectedContentTypes" type="xs:string" />
<xs:complexType name="base64Binary" >
<xs:simpleContent>
<xs:extension base="xs:base64Binary" >
<xs:attribute ref="xmime:contentType" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="hexBinary" >
<xs:simpleContent>
<xs:extension base="xs:hexBinary" >
<xs:attribute ref="xmime:contentType" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1 @@
pip

View File

@ -0,0 +1,22 @@
The MIT License (MIT)
Copyright (c) 2014 Quatanium Co., Ltd.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
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 THE
SOFTWARE.

View File

@ -0,0 +1,189 @@
Metadata-Version: 2.1
Name: onvif-zeep-async
Version: 1.2.0
Summary: Async Python Client for ONVIF Camera
Home-page: http://github.com/hunterjm/python-onvif-zeep-async
Author: Cherish Chen
Author-email: sinchb128@gmail.com
Maintainer: sinchb
Maintainer-email: sinchb128@gmail.com
License: MIT
Keywords: ONVIF,Camera,IPC
Platform: UNKNOWN
Requires-Python: >=3
Requires-Dist: httpx (<1.0.0,>=0.19.0)
Requires-Dist: zeep[async] (<5.0.0,>=4.1.0)
python-onvif-zeep-async
=======================
ONVIF Client Implementation in Python 3
Dependencies
------------
`zeep[async] <http://docs.python-zeep.org>`_ >= 4.1.0, < 5.0.0
`httpx <https://www.python-httpx.org/>`_ >= 0.19.0, < 1.0.0
Install python-onvif-zeep-async
-------------------------------
**From Source**
You should clone this repository and run setup.py::
cd python-onvif-zeep-async && python setup.py install
Alternatively, you can run::
pip install --upgrade onvif-zeep-async
Getting Started
---------------
Initialize an ONVIFCamera instance
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
from onvif import ONVIFCamera
mycam = ONVIFCamera('192.168.0.2', 80, 'user', 'passwd', '/etc/onvif/wsdl/')
await mycam.update_xaddrs()
Now, an ONVIFCamera instance is available. By default, a devicemgmt service is also available if everything is OK.
So, all operations defined in the WSDL document::
/etc/onvif/wsdl/devicemgmt.wsdl
are available.
Get information from your camera
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
# Get Hostname
resp = await mycam.devicemgmt.GetHostname()
print 'My camera`s hostname: ' + str(resp.Name)
# Get system date and time
dt = await mycam.devicemgmt.GetSystemDateAndTime()
tz = dt.TimeZone
year = dt.UTCDateTime.Date.Year
hour = dt.UTCDateTime.Time.Hour
Configure (Control) your camera
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To configure your camera, there are two ways to pass parameters to service methods.
**Dict**
This is the simpler way::
params = {'Name': 'NewHostName'}
await device_service.SetHostname(params)
**Type Instance**
This is the recommended way. Type instance will raise an
exception if you set an invalid (or non-existent) parameter.
::
params = mycam.devicemgmt.create_type('SetHostname')
params.Hostname = 'NewHostName'
await mycam.devicemgmt.SetHostname(params)
time_params = mycam.devicemgmt.create_type('SetSystemDateAndTime')
time_params.DateTimeType = 'Manual'
time_params.DaylightSavings = True
time_params.TimeZone.TZ = 'CST-8:00:00'
time_params.UTCDateTime.Date.Year = 2014
time_params.UTCDateTime.Date.Month = 12
time_params.UTCDateTime.Date.Day = 3
time_params.UTCDateTime.Time.Hour = 9
time_params.UTCDateTime.Time.Minute = 36
time_params.UTCDateTime.Time.Second = 11
await mycam.devicemgmt.SetSystemDateAndTime(time_params)
Use other services
~~~~~~~~~~~~~~~~~~
ONVIF protocol has defined many services.
You can find all the services and operations `here <http://www.onvif.org/onvif/ver20/util/operationIndex.html>`_.
ONVIFCamera has support methods to create new services::
# Create ptz service
ptz_service = mycam.create_ptz_service()
# Get ptz configuration
await mycam.ptz.GetConfiguration()
# Another way
# await ptz_service.GetConfiguration()
Or create an unofficial service::
xaddr = 'http://192.168.0.3:8888/onvif/yourservice'
yourservice = mycam.create_onvif_service('service.wsdl', xaddr, 'yourservice')
await yourservice.SomeOperation()
# Another way
# await mycam.yourservice.SomeOperation()
ONVIF CLI
---------
python-onvif also provides a command line interactive interface: onvif-cli.
onvif-cli is installed automatically.
Single command example
~~~~~~~~~~~~~~~~~~~~~~
::
$ onvif-cli devicemgmt GetHostname --user 'admin' --password '12345' --host '192.168.0.112' --port 80
True: {'FromDHCP': True, 'Name': hision}
$ onvif-cli devicemgmt SetHostname "{'Name': 'NewerHostname'}" --user 'admin' --password '12345' --host '192.168.0.112' --port 80
True: {}
Interactive mode
~~~~~~~~~~~~~~~~
::
$ onvif-cli -u 'admin' -a '12345' --host '192.168.0.112' --port 80 --wsdl /etc/onvif/wsdl/
ONVIF >>> cmd
analytics devicemgmt events imaging media ptz
ONVIF >>> cmd devicemgmt GetWsdlUrl
True: http://www.onvif.org/
ONVIF >>> cmd devicemgmt SetHostname {'Name': 'NewHostname'}
ONVIF >>> cmd devicemgmt GetHostname
True: {'Name': 'NewHostName'}
ONVIF >>> cmd devicemgmt SomeOperation
False: No Operation: SomeOperation
NOTE: Tab completion is supported for interactive mode.
Batch mode
~~~~~~~~~~
::
$ vim batchcmds
$ cat batchcmds
cmd devicemgmt GetWsdlUrl
cmd devicemgmt SetHostname {'Name': 'NewHostname', 'FromDHCP': True}
cmd devicemgmt GetHostname
$ onvif-cli --host 192.168.0.112 -u admin -a 12345 -w /etc/onvif/wsdl/ < batchcmds
ONVIF >>> True: http://www.onvif.org/
ONVIF >>> True: {}
ONVIF >>> True: {'FromDHCP': False, 'Name': NewHostname}
References
----------
* `ONVIF Offical Website <http://www.onvif.com>`_
* `Operations Index <http://www.onvif.org/onvif/ver20/util/operationIndex.html>`_
* `ONVIF Develop Documents <http://www.onvif.org/specs/DocMap-2.4.2.html>`_
* `Foscam Python Lib <http://github.com/quatanium/foscam-python-lib>`_

View File

@ -0,0 +1,53 @@
../../../bin/onvif-cli,sha256=MAGXs94BBofHuAiVBTfKfcqsA_XM7ST0DEk9gA6XQWM,214
onvif/__init__.py,sha256=DAsdFf5oJMqju-l7Vb-abV5z4RQ1fpZ8ddJmwD3zVok,599
onvif/__pycache__/__init__.cpython-310.pyc,,
onvif/__pycache__/client.cpython-310.pyc,,
onvif/__pycache__/definition.cpython-310.pyc,,
onvif/__pycache__/exceptions.cpython-310.pyc,,
onvif/client.py,sha256=-o7t3DF9lg45rQqGZa8VysfO_KFmvt1LMPoD51geL7E,16455
onvif/definition.py,sha256=dT2uCtYYxIWHVghIHnITos4WOzjOIPotPsaEWGdx9lg,2190
onvif/exceptions.py,sha256=mbyY-nIc7yfApB_q3YcYm0471wY0KNFoJ7bYP9Szgp8,886
onvif/version.txt,sha256=HltRzeUVOWqfp2KQnPjKZYTMxWSzJdLuvup2F1_pXE0,6
onvif/wsdl/__init__.py,sha256=Em3m8NWsx8UMimkXjJIny_LgRuGGgQ5_J_BokzWDuQY,26
onvif/wsdl/__pycache__/__init__.cpython-310.pyc,,
onvif/wsdl/accesscontrol.wsdl,sha256=GKQRCg8cSF4IRm2NdppfA0QX-CdxKpSiqr5L0AYFpbM,38072
onvif/wsdl/actionengine.wsdl,sha256=jMPBM2GD3s2fh7n8LipF_bPNZhvzb1DLYNUZV6h19tA,57255
onvif/wsdl/addressing,sha256=mqQSab7i4cPEbSmTDE_ce6-9nB4xVJmNRVRExqAqMEE,7263
onvif/wsdl/advancedsecurity.wsdl,sha256=yTL8gF152Qm-RXeizLhULhpFfDOKkIUx74N3OJIMQBI,79284
onvif/wsdl/analytics.wsdl,sha256=W5laHpMfME71MQwNjhS1LBtbZ4TIHFewyX22KXzrNu4,24131
onvif/wsdl/analyticsdevice.wsdl,sha256=QCLXOfnRgbEIiTILaTbMUCbTBn42Z9ufhByrsZ5jJCQ,31976
onvif/wsdl/b-2.xsd,sha256=oftw2i1rYft_ok8JknHx34npjJxvpChojE01j0ObbP8,23300
onvif/wsdl/bf-2.xsd,sha256=9ala3IYLci5voOa04yJjR0hxMs1OI6T7gMmR8kQaIjs,5100
onvif/wsdl/bw-2.wsdl,sha256=5M7OMEKxmlcbKRzWrD2rERRSdeJ38RiDEskpBqXEDBY,20498
onvif/wsdl/deviceio.wsdl,sha256=dG4by3ReWpY6sWWPPLQfkvcZjaj4SSN0BCC1bfzIrwo,60231
onvif/wsdl/devicemgmt.wsdl,sha256=Eg7OATq94VcY-hgb4l4qzxpSdm3Kr0Bd2sVfOZ4MeCI,163209
onvif/wsdl/display.wsdl,sha256=ypm5RYq0X2Ac5oCy3OfXcEiQ1lvcOP_EAfygwROEPTY,24593
onvif/wsdl/doorcontrol.wsdl,sha256=FKjpZNFd8jDmacXhacyt7mvdwZeIWSoSJADVKg0QQSM,53648
onvif/wsdl/envelope,sha256=nGb4i3mtYNbVtjg5u7cJsM39WRiYw1rBh8PCcsR7Uq4,6249
onvif/wsdl/events.wsdl,sha256=9GLKEWYPwoxHj5YqQGjb2Ui4hg6v0xb4sm6YZ2x-hhg,37870
onvif/wsdl/imaging.wsdl,sha256=_s0QauUK5wtAc_B26DUY6o9py2ZzmmHb9SGDA6LIW9E,17998
onvif/wsdl/include,sha256=3_kQDvzkr7Id4M9nP7f60QNnKhaYYqsPEuNMMSsg5g0,511
onvif/wsdl/media.wsdl,sha256=pu1qNRCWgbunJ2DYZw80Xgsic25Frj0EVQX8vZ9YLr0,174812
onvif/wsdl/onvif.xsd,sha256=nRdmSnFoTEOrM444eoGSg1YDZH45NCgCHCA0YYk3NLc,363349
onvif/wsdl/ptz.wsdl,sha256=yY_iflOkYaqivi9Ene4iQyzgrR6VUtPuiiNnm5lXYBM,54058
onvif/wsdl/r-2.xsd,sha256=5vnupoUZkNcSRgsgzZPJiCZqj-E-wnM3zFCdUy1yFhY,3660
onvif/wsdl/receiver.wsdl,sha256=Fqamd4htp9phs_S_jdFIcW2T-VyILwSrUdJX1jox_YE,17214
onvif/wsdl/recording.wsdl,sha256=taj5YpiTJwPboUgAGuUw29HVxa0TBKDEL3zReHjfy7g,40704
onvif/wsdl/remotediscovery.wsdl,sha256=UoU7dgABpVHDCSxLFnsa2DXyNzIteGVXie6rhAyaxNY,5596
onvif/wsdl/replay.wsdl,sha256=Yvs6a9b00tyFLTgptT67wvPyUqmlKp4OpqabA-UL3O8,10581
onvif/wsdl/rw-2.wsdl,sha256=zv4pjJUS5IBz523QQolHzaN42Hh9aF7yAqFBXszBGnM,3727
onvif/wsdl/search.wsdl,sha256=llUg6aAOOIRJFebwV7Th3KTVFBwEOG3FdGiAX2Dj_JY,43139
onvif/wsdl/t-1.xsd,sha256=rV2wQyo4hdHIpXS6a0BYGTrym8lxIyxLtrMfgpX-Myk,8960
onvif/wsdl/types.xsd,sha256=k1k3M6krspu9qKz0Wc45ix-foPeg_mI8t3XucagdfoI,3738
onvif/wsdl/ws-addr.xsd,sha256=r4Bsya8lFOmwsH7-Tk3EKjLa2KwIRz3AJRNiB3edXuk,5849
onvif/wsdl/ws-discovery.xsd,sha256=nJgWWM0EgHm82w2zxM5-WhHnulpvyB7vh-R5VFdXquE,10455
onvif/wsdl/xml.xsd,sha256=YZYPsxMeOAIsqtU2Di8zozgleKs8gM1YvXQyDt5hsgw,8836
onvif/wsdl/xmlmime,sha256=Mwq3ns3TqGKPEu9MvjQ1HkSPm5IxusrTOYgc4aYSN6I,1639
onvif_zeep_async-1.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
onvif_zeep_async-1.2.0.dist-info/LICENSE,sha256=ZEQ7HH321Omn-RdwKJZsIzEFs26TN-xJxzy3VxPTWIk,1087
onvif_zeep_async-1.2.0.dist-info/METADATA,sha256=XfKRbZNsDsoh2XPPauylogMn7MzvPeZsjzuTLEHoDXE,5371
onvif_zeep_async-1.2.0.dist-info/RECORD,,
onvif_zeep_async-1.2.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
onvif_zeep_async-1.2.0.dist-info/WHEEL,sha256=kGT74LWyRUZrL4VgLh6_g12IeVl_9u9ZVhadrgXZUEY,110
onvif_zeep_async-1.2.0.dist-info/entry_points.txt,sha256=T86-G39qBuLrqpISnl9sHjvR2Lt_KeMSAQus_tvBYM0,46
onvif_zeep_async-1.2.0.dist-info/top_level.txt,sha256=MqCi1uJmIvtVFJDz2IxLbpwq6FwDtWhqrWQtKwLaQg4,6

View File

@ -0,0 +1,6 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.34.2)
Root-Is-Purelib: true
Tag: py2-none-any
Tag: py3-none-any

View File

@ -0,0 +1,3 @@
[console_scripts]
onvif-cli = onvif.cli:main

View File

@ -0,0 +1 @@
onvif

View File

@ -0,0 +1 @@
pip

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Juraj Nyíri
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
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 THE
SOFTWARE.

View File

@ -0,0 +1,124 @@
Metadata-Version: 2.1
Name: pytapo
Version: 2.9.1
Summary: Python library for communication with Tapo Cameras
Home-page: https://github.com/JurajNyiri/pytapo
Author: Juraj Nyíri
Author-email: juraj.nyiri@gmail.com
License: MIT
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests
Requires-Dist: urllib3
Requires-Dist: pycryptodome
# PyTapo
Python library for communication with Tapo Cameras
## Install:
```
python3 -m pip install pytapo
```
## Usage examples:
### Initiate library:
```
from pytapo import Tapo
user = "" # user you set in Advanced Settings -> Camera Account
password = "" # password you set in Advanced Settings -> Camera Account
host = "" # ip of the camera, example: 192.168.1.52
tapo = Tapo(host, user, password)
print(tapo.getBasicInfo())
```
## Authentication
Depending on your camera model and firmware version, the authentication method varies.
Normally you should be able to authenticate using the "camera account" created via the Tapo App (Settings > Advanced settings > Camera account).
In case of a similar stack trace:
```
Traceback (most recent call last):
File "/home/user/Projects/pytapo/pytapo/__init__.py", line 41, in __init__
self.basicInfo = self.getBasicInfo()
File "/home/user/Projects/pytapo/pytapo/__init__.py", line 232, in getBasicInfo
return self.performRequest(
File "/home/user/Projects/pytapo/pytapo/__init__.py", line 95, in performRequest
self.ensureAuthenticated()
File "/home/user/Projects/pytapo/pytapo/__init__.py", line 61, in ensureAuthenticated
return self.refreshStok()
File "/home/user/Projects/pytapo/pytapo/__init__.py", line 80, in refreshStok
raise Exception("Invalid authentication data")
Exception: Invalid authentication data
```
Attempt to authenticate using `admin` as `user` and your TP-Link cloud account password as `password`.
## Contributions:
Contributions to pytapo are welcomed.
By creating a PR you acknowledge and agree that you are not breaking any TOS, law and/or have a permission to provide and share the code changes.
Owner of this repository is not legally responsible for any PRs or code changes to this project created by 3rd parties.
When you make a new change to the code base, make sure to have 100% unit test coverage, see below for more information about tests.
### Test instructions
Set the following environment variables:
`PYTAPO_USER` - user you set in Advanced Settings -> Camera Account
`PYTAPO_PASSWORD` - password you set in Advanced Settings -> Camera Account
`PYTAPO_IP` - ip of the camera, example: 192.168.1.52
Install `pre-commit` and `tox` from pip.
Run `pre-commit install` and `pre-commit install -t pre-push`.
Then run `tox` to run all the tests.
Linters are ran on every commit.
Tests are ran on push.
Your camera may do all the actions supported by this library, including, but not limited to, move, change privacy mode and reboot while tests are running. Camera does not format SD card during tests.
After the tests are done, your camera should be in the initial state.
## Thank you
- [Dale Pavey](https://research.nccgroup.com/2020/07/31/lights-camera-hacked-an-insight-into-the-world-of-popular-ip-cameras/) from NCC Group for the initial research on the Tapo C200
- [likaci](https://github.com/likaci) and [his github repository](https://github.com/likaci/mercury-ipc-control) for the research on the Mercury camera on which tapo is based
- [Tim Zhang](https://github.com/ttimasdf) for additional research for Mercury camera on [his github repository](https://github.com/ttimasdf/mercury-ipc-control)
- [Gábor Szabados](https://github.com/GSzabados) for doing research and gathering all the information above in [Home Assistant Community forum](https://community.home-assistant.io/t/use-pan-tilt-function-for-tp-link-tapo-c200-from-home-assistant/170143/18)
- [Davide Depau](https://github.com/Depau) for additional [research](https://md.depau.eu/s/r1Ys_oWoP) of the cameras and work on pytapo library
# Disclaimer
Pytapo is an unofficial module for achieving interoperability with Tapo cameras.
Author is in no way affiliated with Tp-Link or Tapo.
All the api requests used within the library are available and published on the internet (examples linked above) and this module is purely just a wrapper around those https requests.
Author does not guarantee functionality of this library and is not responsible for any damage.
All product names, trademarks and registered trademarks in this repository, are property of their respective owners.

View File

@ -0,0 +1,27 @@
pytapo-2.9.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
pytapo-2.9.1.dist-info/LICENSE,sha256=-Gohgu4ID1c6R3KkZdPntxh5utGTdmVGJeB4QhIm4ZM,1069
pytapo-2.9.1.dist-info/METADATA,sha256=qI-m0f48Tsccjv6q3x1_NxJznDZVYok0QnELgcSbLAc,4728
pytapo-2.9.1.dist-info/RECORD,,
pytapo-2.9.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pytapo-2.9.1.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
pytapo-2.9.1.dist-info/top_level.txt,sha256=2LSWwAlazOi30LD9R8o-XOGMsTPXixLD_qzGQmFrwwA,7
pytapo/ERROR_CODES.py,sha256=ca90Pi1ZaBeZYn87B6Sx7trjL8vSLpD4--uA_29akig,345
pytapo/__init__.py,sha256=j3LtLc_dkMjGQne4dTTA3t53dHB1EU66Z9Il4yCfQNA,31555
pytapo/__pycache__/ERROR_CODES.cpython-310.pyc,,
pytapo/__pycache__/__init__.cpython-310.pyc,,
pytapo/__pycache__/const.cpython-310.pyc,,
pytapo/const.py,sha256=ZwIwK6ZAmmIBHzNZNSjny3rAO3rWewo9quWdeLgriI8,412
pytapo/media_stream/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
pytapo/media_stream/__pycache__/__init__.cpython-310.pyc,,
pytapo/media_stream/__pycache__/_utils.cpython-310.pyc,,
pytapo/media_stream/__pycache__/crypto.cpython-310.pyc,,
pytapo/media_stream/__pycache__/error.cpython-310.pyc,,
pytapo/media_stream/__pycache__/response.cpython-310.pyc,,
pytapo/media_stream/__pycache__/session.cpython-310.pyc,,
pytapo/media_stream/_utils.py,sha256=_7zkj5Weay2bEYKf7_YaqyjdM720DS-IW1-ZdEdLwok,843
pytapo/media_stream/crypto.py,sha256=d9E7J0iwbXjDyd5mRMnqNF1w8tZ97WWmxbXc44ntGWc,2286
pytapo/media_stream/error.py,sha256=lxYqTkxPBECLM4xO8AWKKyjtDh5niYB1MHIwsCB10nA,607
pytapo/media_stream/response.py,sha256=_w4wzVC8LYc-9QeePD_-FTOUdfpbLuj1TI2N2UrbiGg,589
pytapo/media_stream/session.py,sha256=fZDb0tRX_Gb61ITCbYJO9H7ujsqbWWBUDPp4eGVh9Uw,18469
pytapo/media_stream/temp.py,sha256=8RP1K_f4BHLwylACXbPqli1SfbTNWOMVPmnYE7Eo5AU,922
pytapo/temp.py,sha256=VJglwz1iXg8vJMxMNjXCWKNfLi_nEabB0suHySKnRnc,2700

View File

@ -0,0 +1,5 @@
Wheel-Version: 1.0
Generator: bdist_wheel (0.37.1)
Root-Is-Purelib: true
Tag: py3-none-any

View File

@ -0,0 +1 @@
pytapo

View File

@ -0,0 +1,9 @@
ERROR_CODES = {
"-40401": "Invalid stok value",
"-64324": "Privacy mode is ON, not able to execute",
"-64302": "Preset ID not found",
"-64321": "Preset ID was deleted so no longer exists",
"-40106": "Parameter to get/do does not exist",
"-40105": "Method does not exist",
"-40101": "Parameter to set does not exist"
}

View File

@ -0,0 +1,872 @@
#
# Author: See contributors at https://github.com/JurajNyiri/pytapo/graphs/contributors
#
import hashlib
import json
import requests
import urllib3
from warnings import warn
from .const import ERROR_CODES, MAX_LOGIN_RETRIES
from .media_stream.session import HttpMediaSession
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
class Tapo:
def __init__(
self, host, user, password, cloudPassword="", superSecretKey="", childID=None
):
self.host = host
self.user = user
self.password = password
self.cloudPassword = cloudPassword
self.superSecretKey = superSecretKey
self.stok = False
self.userID = False
self.childID = childID
self.headers = {
"Host": self.host,
"Referer": "https://{host}".format(host=self.host),
"Accept": "application/json",
"Accept-Encoding": "gzip, deflate",
"User-Agent": "Tapo CameraClient Android",
"Connection": "close",
"requestByApp": "true",
"Content-Type": "application/json; charset=UTF-8",
}
self.hashedPassword = hashlib.md5(password.encode("utf8")).hexdigest().upper()
self.hashedCloudPassword = (
hashlib.md5(cloudPassword.encode("utf8")).hexdigest().upper()
)
self.basicInfo = self.getBasicInfo()
self.presets = self.isSupportingPresets()
if not self.presets:
self.presets = {}
def isSupportingPresets(self):
try:
presets = self.getPresets()
return presets
except Exception:
return False
def getHostURL(self):
return "https://{host}/stok={stok}/ds".format(host=self.host, stok=self.stok)
def getStreamURL(self):
return "{host}:8800".format(host=self.host)
def ensureAuthenticated(self):
if not self.stok:
return self.refreshStok()
return True
def refreshStok(self):
url = "https://{host}".format(host=self.host)
data = {
"method": "login",
"params": {
"hashed": True,
"password": self.hashedPassword,
"username": self.user,
},
}
res = requests.post(
url, data=json.dumps(data), headers=self.headers, verify=False
)
if res.status_code == 401:
try:
data = res.json()
if data["result"]["data"]["code"] == -40411:
raise Exception("Invalid authentication data")
except Exception as e:
if str(e) == "Invalid authentication data":
raise e
else:
pass
if self.responseIsOK(res):
self.stok = res.json()["result"]["stok"]
return self.stok
raise Exception("Invalid authentication data")
def responseIsOK(self, res):
if res.status_code != 200:
raise Exception(
"Error communicating with Tapo Camera. Status code: "
+ str(res.status_code)
)
try:
data = res.json()
if "error_code" not in data or data["error_code"] == 0:
return True
except Exception as e:
raise Exception("Unexpected response from Tapo Camera: " + str(e))
def executeFunction(self, method, params):
if method == "multipleRequest":
data = self.performRequest({"method": "multipleRequest", "params": params})[
"result"
]["responses"]
else:
data = self.performRequest(
{
"method": "multipleRequest",
"params": {"requests": [{"method": method, "params": params}]},
}
)["result"]["responses"][0]
if type(data) == list:
return data
if "result" in data:
return data["result"]
else:
raise Exception(
"Error: {}, Response: {}".format(
data["err_msg"]
if "err_msg" in data
else self.getErrorMessage(data["error_code"]),
json.dumps(data),
)
)
def performRequest(self, requestData, loginRetryCount=0):
self.ensureAuthenticated()
url = self.getHostURL()
if self.childID:
fullRequest = {
"method": "multipleRequest",
"params": {
"requests": [
{
"method": "controlChild",
"params": {
"childControl": {
"device_id": self.childID,
"request_data": requestData,
}
},
}
]
},
}
else:
fullRequest = requestData
res = requests.post(
url, data=json.dumps(fullRequest), headers=self.headers, verify=False
)
if not self.responseIsOK(res):
data = json.loads(res.text)
# -40401: Invalid Stok
if (
data
and "error_code" in data
and data["error_code"] == -40401
and loginRetryCount < MAX_LOGIN_RETRIES
):
self.refreshStok()
return self.performRequest(requestData, loginRetryCount + 1)
else:
raise Exception(
"Error: {}, Response: {}".format(
self.getErrorMessage(data["error_code"]), json.dumps(data)
)
)
responseJSON = res.json()
# strip away child device stuff to ensure consistent response format for HUB cameras
if self.childID:
responses = []
for response in responseJSON["result"]["responses"]:
if "method" in response and response["method"] == "controlChild":
if "response_data" in response["result"]:
responses.append(response["result"]["response_data"])
else:
responses.append(response["result"])
else:
responses.append(response["result"]) # not sure if needed
responseJSON["result"]["responses"] = responses
return responseJSON["result"]["responses"][0]
elif self.responseIsOK(res):
return responseJSON
def getMediaSession(self):
return HttpMediaSession(
self.host, self.cloudPassword, self.superSecretKey
) # pragma: no cover
def getChildDevices(self):
childDevices = self.performRequest(
{
"method": "getChildDeviceList",
"params": {"childControl": {"start_index": 0}},
}
)
return childDevices["result"]["child_device_list"]
# returns empty response for child devices
def getOsd(self):
# no, asking for all does not work...
if self.childID:
return self.executeFunction(
"getOsd", {"OSD": {"name": ["logo", "date", "label"]}},
)
else:
return self.executeFunction(
"getOsd",
{"OSD": {"name": ["date", "week", "font"], "table": ["label_info"]}},
)
def setOsd(
self,
label,
dateEnabled=True,
labelEnabled=False,
weekEnabled=False,
dateX=0,
dateY=0,
labelX=0,
labelY=500,
weekX=0,
weekY=0,
):
if self.childID:
raise Exception("setOsd not supported for child devices yet")
data = {
"method": "set",
"OSD": {
"date": {
"enabled": "on" if dateEnabled else "off",
"x_coor": dateX,
"y_coor": dateY,
},
"week": {
"enabled": "on" if weekEnabled else "off",
"x_coor": weekX,
"y_coor": weekY,
},
"font": {
"color": "white",
"color_type": "auto",
"display": "ntnb",
"size": "auto",
},
"label_info_1": {
"enabled": "on" if labelEnabled else "off",
"x_coor": labelX,
"y_coor": labelY,
},
},
}
if len(label) >= 16:
raise Exception("Error: Label cannot be longer than 16 characters")
elif len(label) == 0:
data["OSD"]["label_info_1"]["enabled"] = "off"
else:
data["OSD"]["label_info_1"]["text"] = label
if (
dateX > 10000
or dateX < 0
or labelX > 10000
or labelX < 0
or weekX > 10000
or weekX < 0
or dateY > 10000
or dateY < 0
or labelY > 10000
or labelY < 0
or weekY > 10000
or weekY < 0
):
raise Exception("Error: Incorrect corrdinates, must be between 0 and 10000")
return self.performRequest(data)
# does not work for child devices, function discovery needed
def getModuleSpec(self):
return self.performRequest(
{"method": "get", "function": {"name": ["module_spec"]}}
)
def getPrivacyMode(self):
data = self.executeFunction(
"getLensMaskConfig", {"lens_mask": {"name": ["lens_mask_info"]}},
)
return data["lens_mask"]["lens_mask_info"]
def getMediaEncrypt(self):
data = self.executeFunction(
"getMediaEncrypt", {"cet": {"name": ["media_encrypt"]}},
)
return data["cet"]["media_encrypt"]
def getMotionDetection(self):
return self.executeFunction(
"getDetectionConfig", {"motion_detection": {"name": ["motion_det"]}},
)["motion_detection"]["motion_det"]
def getPersonDetection(self):
data = {"method": "get", "people_detection": {"name": ["detection"]}}
return self.performRequest(data)["people_detection"]["detection"]
def getAlarm(self):
# ensure reverse compatibility, simulate the same response for children devices
if self.childID:
data = self.getAlarmConfig()
# replace "siren" with "sound", some cameras call it siren, some sound
for i in range(len(data[0]["result"]["alarm_mode"])):
if data[0]["result"]["alarm_mode"][i] == "siren":
data[0]["result"]["alarm_mode"][i] = "sound"
return {
"alarm_type": "0",
"light_type": "0",
"enabled": data[0]["result"]["enabled"],
"alarm_mode": data[0]["result"]["alarm_mode"],
}
else:
return self.executeFunction(
"getLastAlarmInfo", {"msg_alarm": {"name": ["chn1_msg_alarm_info"]}},
)["msg_alarm"]["chn1_msg_alarm_info"]
def getAlarmConfig(self):
return self.executeFunction(
"multipleRequest",
{
"requests": [
{"method": "getAlarmConfig", "params": {"msg_alarm": {}}},
{"method": "getAlarmPlan", "params": {"msg_alarm_plan": {}}},
{"method": "getSirenTypeList", "params": {"msg_alarm": {}}},
{"method": "getLightTypeList", "params": {"msg_alarm": {}}},
{"method": "getSirenStatus", "params": {"msg_alarm": {}}},
]
},
)
def getRotationStatus(self):
return self.executeFunction(
"getRotationStatus", {"image": {"name": ["switch"]}},
)
def getLED(self):
return self.executeFunction("getLedStatus", {"led": {"name": ["config"]}},)[
"led"
]["config"]
def getAutoTrackTarget(self):
return self.executeFunction(
"getTargetTrackConfig", {"target_track": {"name": ["target_track_info"]}}
)["target_track"]["target_track_info"]
# does not work for child devices, function discovery needed
def getAudioSpec(self):
return self.performRequest(
{
"method": "get",
"audio_capability": {"name": ["device_speaker", "device_microphone"]},
}
)
# does not work for child devices, function discovery needed
def getVhttpd(self):
return self.performRequest({"method": "get", "cet": {"name": ["vhttpd"]}})
def getBasicInfo(self):
return self.executeFunction(
"getDeviceInfo", {"device_info": {"name": ["basic_info"]}}
)
def getTime(self):
return self.executeFunction(
"getClockStatus", {"system": {"name": "clock_status"}}
)
# does not work for child devices, function discovery needed
def getMotorCapability(self):
return self.performRequest({"method": "get", "motor": {"name": ["capability"]}})
def setPrivacyMode(self, enabled):
return self.executeFunction(
"setLensMaskConfig",
{"lens_mask": {"lens_mask_info": {"enabled": "on" if enabled else "off"}}},
)
def setMediaEncrypt(self, enabled):
return self.executeFunction(
"setMediaEncrypt",
{"cet": {"media_encrypt": {"enabled": "on" if enabled else "off"}}},
)
# todo child
def setAlarm(self, enabled, soundEnabled=True, lightEnabled=True):
alarm_mode = []
if not soundEnabled and not lightEnabled:
raise Exception("You need to use at least sound or light for alarm")
if soundEnabled:
if self.childID:
alarm_mode.append("siren")
else:
alarm_mode.append("sound")
if lightEnabled:
alarm_mode.append("light")
if self.childID:
data = {
"msg_alarm": {
"enabled": "on" if enabled else "off",
"alarm_mode": alarm_mode,
}
}
return self.executeFunction("setAlarmConfig", data)
else:
data = {
"method": "set",
"msg_alarm": {
"chn1_msg_alarm_info": {
"alarm_type": "0",
"enabled": "on" if enabled else "off",
"light_type": "0",
"alarm_mode": alarm_mode,
}
},
}
return self.performRequest(data)
# todo child
def moveMotor(self, x, y):
return self.performRequest(
{"method": "do", "motor": {"move": {"x_coord": str(x), "y_coord": str(y)}}}
)
# todo child
def moveMotorStep(self, angle):
if not (0 <= angle < 360):
raise Exception("Angle must be in a range 0 <= angle < 360")
return self.performRequest(
{"method": "do", "motor": {"movestep": {"direction": str(angle)}}}
)
def moveMotorClockWise(self):
return self.moveMotorStep(0)
def moveMotorCounterClockWise(self):
return self.moveMotorStep(180)
def moveMotorVertical(self):
return self.moveMotorStep(90)
def moveMotorHorizontal(self):
return self.moveMotorStep(270)
# todo child
def calibrateMotor(self):
return self.performRequest({"method": "do", "motor": {"manual_cali": ""}})
def format(self):
return self.executeFunction(
"formatSdCard", {"harddisk_manage": {"format_hd": "1"}}
) # pragma: no cover
def setLEDEnabled(self, enabled):
return self.executeFunction(
"setLedStatus", {"led": {"config": {"enabled": "on" if enabled else "off"}}}
)
def getUserID(self):
if not self.userID:
self.userID = self.performRequest(
{
"method": "multipleRequest",
"params": {
"requests": [
{
"method": "getUserID",
"params": {"system": {"get_user_id": "null"}},
}
]
},
}
)["result"]["responses"][0]["result"]["user_id"]
return self.userID
def getRecordings(self, date):
result = self.executeFunction(
"searchVideoOfDay",
{
"playback": {
"search_video_utility": {
"channel": 0,
"date": date,
"end_index": 99,
"id": self.getUserID(),
"start_index": 0,
}
}
},
)
if "playback" not in result:
raise Exception("Video playback is not supported by this camera")
return result["playback"]["search_video_results"]
# does not work for child devices, function discovery needed
def getCommonImage(self):
warn("Prefer to use a specific value getter", DeprecationWarning, stacklevel=2)
return self.performRequest({"method": "get", "image": {"name": "common"}})
def setMotionDetection(self, enabled, sensitivity=False):
data = {
"motion_detection": {"motion_det": {"enabled": "on" if enabled else "off"}},
}
if sensitivity:
if sensitivity == "high":
data["motion_detection"]["motion_det"]["digital_sensitivity"] = "80"
elif sensitivity == "normal":
data["motion_detection"]["motion_det"]["digital_sensitivity"] = "50"
elif sensitivity == "low":
data["motion_detection"]["motion_det"]["digital_sensitivity"] = "20"
else:
raise Exception("Invalid sensitivity, can be low, normal or high")
# child devices always need digital_sensitivity setting
if (
self.childID
and "digital_sensitivity" not in data["motion_detection"]["motion_det"]
):
currentData = self.getMotionDetection()
data["motion_detection"]["motion_det"]["digital_sensitivity"] = currentData[
"digital_sensitivity"
]
return self.executeFunction("setDetectionConfig", data)
def setPersonDetection(self, enabled, sensitivity=False):
data = {
"method": "set",
"people_detection": {"detection": {"enabled": "on" if enabled else "off"}},
}
if sensitivity:
if sensitivity == "high":
data["people_detection"]["detection"]["sensitivity"] = "80"
elif sensitivity == "normal":
data["people_detection"]["detection"]["sensitivity"] = "50"
elif sensitivity == "low":
data["people_detection"]["detection"]["sensitivity"] = "20"
else:
raise Exception("Invalid sensitivity, can be low, normal or high")
return self.performRequest(data)
def setAutoTrackTarget(self, enabled):
return self.executeFunction(
"setTargetTrackConfig",
{
"target_track": {
"target_track_info": {"enabled": "on" if enabled else "off"}
}
},
)
def reboot(self):
return self.executeFunction("rebootDevice", {"system": {"reboot": "null"}})
def getPresets(self):
data = self.executeFunction("getPresetConfig", {"preset": {"name": ["preset"]}})
self.presets = {
id: data["preset"]["preset"]["name"][key]
for key, id in enumerate(data["preset"]["preset"]["id"])
}
return self.presets
def savePreset(self, name):
self.executeFunction(
"addMotorPostion", # yes, there is a typo in function name
{"preset": {"set_preset": {"name": str(name), "save_ptz": "1"}}},
)
self.getPresets()
return True
def deletePreset(self, presetID):
if not str(presetID) in self.presets:
raise Exception("Preset {} is not set in the app".format(str(presetID)))
self.executeFunction(
"deletePreset", {"preset": {"remove_preset": {"id": [presetID]}}}
)
self.getPresets()
return True
def setPreset(self, presetID):
if not str(presetID) in self.presets:
raise Exception("Preset {} is not set in the app".format(str(presetID)))
return self.executeFunction(
"motorMoveToPreset", {"preset": {"goto_preset": {"id": str(presetID)}}}
)
# Switches
def __getImageSwitch(self, switch: str) -> str:
data = self.executeFunction("getLdc", {"image": {"name": ["switch"]}})
switches = data["image"]["switch"]
if switch not in switches:
raise Exception("Switch {} is not supported by this camera".format(switch))
return switches[switch]
def __setImageSwitch(self, switch: str, value: str):
return self.executeFunction("setLdc", {"image": {"switch": {switch: value}}})
def getLensDistortionCorrection(self):
return self.__getImageSwitch("ldc") == "on"
def setLensDistortionCorrection(self, enable):
return self.__setImageSwitch("ldc", "on" if enable else "off")
def getDayNightMode(self) -> str:
if self.childID:
rawValue = self.getNightVisionModeConfig()["image"]["switch"][
"night_vision_mode"
]
if rawValue == "inf_night_vision":
return "on"
elif rawValue == "wtl_night_vision":
return "off"
elif rawValue == "md_night_vision":
return "auto"
else:
return self.__getImageCommon("inf_type")
def setDayNightMode(self, mode):
allowed_modes = ["off", "on", "auto"]
if mode not in allowed_modes:
raise Exception("Day night mode must be one of {}".format(allowed_modes))
if self.childID:
if mode == "on":
return self.setNightVisionModeConfig("inf_night_vision")
elif mode == "off":
return self.setNightVisionModeConfig("wtl_night_vision")
elif mode == "auto":
return self.setNightVisionModeConfig("md_night_vision")
else:
return self.__setImageCommon("inf_type", mode)
def getNightVisionModeConfig(self):
return self.executeFunction(
"getNightVisionModeConfig", {"image": {"name": "switch"}}
)
def setNightVisionModeConfig(self, mode):
return self.executeFunction(
"setNightVisionModeConfig",
{"image": {"switch": {"night_vision_mode": mode}}},
)
def getImageFlipVertical(self):
if self.childID:
return self.getRotationStatus()["image"]["switch"]["flip_type"] == "center"
else:
return self.__getImageSwitch("flip_type") == "center"
def setImageFlipVertical(self, enable):
if self.childID:
return self.setRotationStatus("center" if enable else "off")
else:
return self.__setImageSwitch("flip_type", "center" if enable else "off")
def setRotationStatus(self, flip_type):
return self.executeFunction(
"setRotationStatus", {"image": {"switch": {"flip_type": flip_type}}},
)
def getForceWhitelampState(self) -> bool:
return self.__getImageSwitch("force_wtl_state") == "on"
def setForceWhitelampState(self, enable: bool):
return self.__setImageSwitch("force_wtl_state", "on" if enable else "off")
# Common
def __getImageCommon(self, field: str) -> str:
data = self.executeFunction(
"getLightFrequencyInfo", {"image": {"name": "common"}}
)
if "common" not in data["image"]:
raise Exception("__getImageCommon is not supported by this camera")
fields = data["image"]["common"]
if field not in fields:
raise Exception("Field {} is not supported by this camera".format(field))
return fields[field]
def __setImageCommon(self, field: str, value: str):
return self.executeFunction(
"setLightFrequencyInfo", {"image": {"common": {field: value}}}
)
def getLightFrequencyMode(self) -> str:
return self.__getImageCommon("light_freq_mode")
def setLightFrequencyMode(self, mode):
# todo: auto does not work on some child cameras?
allowed_modes = ["auto", "50", "60"]
if mode not in allowed_modes:
raise Exception(
"Light frequency mode must be one of {}".format(allowed_modes)
)
return self.__setImageCommon("light_freq_mode", mode)
# does not work for child devices, function discovery needed
def startManualAlarm(self):
return self.performRequest(
{"method": "do", "msg_alarm": {"manual_msg_alarm": {"action": "start"}},}
)
# does not work for child devices, function discovery needed
def stopManualAlarm(self):
return self.performRequest(
{"method": "do", "msg_alarm": {"manual_msg_alarm": {"action": "stop"}},}
)
@staticmethod
def getErrorMessage(errorCode):
if str(errorCode) in ERROR_CODES:
return str(ERROR_CODES[str(errorCode)])
else:
return str(errorCode)
def getFirmwareUpdateStatus(self):
return self.executeFunction(
"getFirmwareUpdateStatus", {"cloud_config": {"name": "upgrade_status"}}
)
def isUpdateAvailable(self):
return self.performRequest(
{
"method": "multipleRequest",
"params": {
"requests": [
{
"method": "checkFirmwareVersionByCloud",
"params": {"cloud_config": {"check_fw_version": "null"}},
},
{
"method": "getCloudConfig",
"params": {"cloud_config": {"name": ["upgrade_info"]}},
},
]
},
}
)
def startFirmwareUpgrade(self):
try:
self.performRequest(
{"method": "do", "cloud_config": {"fw_download": "null"}}
)
except Exception:
raise Exception("No new firmware available.")
# Used for purposes of HomeAssistant-Tapo-Control
# Uses method names from https://md.depau.eu/s/r1Ys_oWoP
def getMost(self):
requestData = {
"method": "multipleRequest",
"params": {
"requests": [
{
"method": "getDeviceInfo",
"params": {"device_info": {"name": ["basic_info"]}},
},
{
"method": "getDetectionConfig",
"params": {"motion_detection": {"name": ["motion_det"]}},
},
{
"method": "getPersonDetectionConfig",
"params": {"people_detection": {"name": ["detection"]}},
},
{
"method": "getLensMaskConfig",
"params": {"lens_mask": {"name": ["lens_mask_info"]}},
},
{
"method": "getLdc",
"params": {"image": {"name": ["switch", "common"]}},
},
{
"method": "getLastAlarmInfo",
"params": {"msg_alarm": {"name": ["chn1_msg_alarm_info"]}},
},
{
"method": "getLedStatus",
"params": {"led": {"name": ["config"]}},
},
{
"method": "getTargetTrackConfig",
"params": {"target_track": {"name": ["target_track_info"]}},
},
{
"method": "getPresetConfig",
"params": {"preset": {"name": ["preset"]}},
},
{
"method": "getFirmwareUpdateStatus",
"params": {"cloud_config": {"name": "upgrade_status"}},
},
{
"method": "getMediaEncrypt",
"params": {"cet": {"name": ["media_encrypt"]}},
},
{
"method": "getConnectionType",
"params": {"network": {"get_connection_type": []}},
},
{"method": "getAlarmConfig", "params": {"msg_alarm": {}}},
{"method": "getAlarmPlan", "params": {"msg_alarm_plan": {}}},
{"method": "getSirenTypeList", "params": {"msg_alarm": {}}},
{"method": "getLightTypeList", "params": {"msg_alarm": {}}},
{"method": "getSirenStatus", "params": {"msg_alarm": {}}},
{
"method": "getLightFrequencyInfo",
"params": {"image": {"name": "common"}},
},
{
"method": "getLightFrequencyCapability",
"params": {"image": {"name": "common"}},
},
{
"method": "getChildDeviceList",
"params": {"childControl": {"start_index": 0}},
},
{
"method": "getRotationStatus",
"params": {"image": {"name": ["switch"]}},
},
{
"method": "getNightVisionModeConfig",
"params": {"image": {"name": "switch"}},
},
]
},
}
results = self.performRequest(requestData)
returnData = {}
# todo finish on child
i = 0
for result in results["result"]["responses"]:
if (
"error_code" in result and result["error_code"] == 0
) and "result" in result:
returnData[result["method"]] = result["result"]
else:
if "method" in result:
returnData[result["method"]] = False
else: # some cameras are not returning method for error messages
returnData[requestData["params"]["requests"][i]["method"]] = False
i += 1
return returnData

View File

@ -0,0 +1,11 @@
ERROR_CODES = {
"-40401": "Invalid stok value",
"-64324": "Privacy mode is ON, not able to execute",
"-64302": "Preset ID not found",
"-64321": "Preset ID was deleted so no longer exists",
"-40106": "Parameter to get/do does not exist",
"-40105": "Method does not exist",
"-40101": "Parameter to set does not exist",
"-40209": "Invalid login credentials",
}
MAX_LOGIN_RETRIES = 2

View File

@ -0,0 +1,29 @@
import hashlib
import os
from typing import Mapping, Tuple, Optional
def md5digest(to_hash: bytes) -> bytes:
return hashlib.md5(to_hash).digest().hex().upper().encode()
def generate_nonce(length: int) -> bytes:
return os.urandom(length).hex().encode()
def parse_http_headers(data: bytes) -> Mapping[str, str]:
return {
i[0].strip(): i[1].strip()
for i in (j.split(":", 1) for j in data.decode().strip().split("\r\n"))
}
def parse_http_response(res_line: bytes) -> Tuple[bytes, int, Optional[bytes]]:
http_ver, status_code_and_status = res_line.split(b" ", 1)
if b" " in status_code_and_status:
status_code, status = status_code_and_status.split(b" ", 1)
else:
status_code = status_code_and_status
status = None
return http_ver, int(status_code.decode()), status

View File

@ -0,0 +1,73 @@
import hashlib
import logging
from typing import AnyStr
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from pytapo.media_stream.error import NonceMissingException
logger = logging.getLogger(__name__)
class AESHelper:
def __init__(
self,
username: bytes,
nonce: bytes,
cloud_password: bytes,
super_secret_key: bytes,
):
if not nonce:
raise NonceMissingException()
self.nonce = nonce
hashed_pwd = hashlib.md5(cloud_password).hexdigest().upper().encode()
if username == b"none":
logger.debug(
"Detected turned off media encryption, using super secret key."
)
if super_secret_key == b"":
raise Exception(
"Media encryption is off and super secret key is not set."
)
key = hashlib.md5(nonce + b":" + super_secret_key).digest()
else:
logger.debug("Detected turned on media encryption, using cloud password.")
key = hashlib.md5(nonce + b":" + hashed_pwd).digest()
iv = hashlib.md5(username + b":" + nonce).digest()
self._cipher = AES.new(key, AES.MODE_CBC, iv)
logger.debug("AES cipher set up correctly")
@classmethod
def from_keyexchange_and_password(
cls, key_exchange: AnyStr, cloud_password: AnyStr, super_secret_key: AnyStr
):
if type(cloud_password) == str:
cloud_password = cloud_password.encode()
if type(key_exchange) == str:
key_exchange = key_exchange.encode()
key_exchange = {
i[0].strip().replace(b'"', b""): i[1].strip().replace(b'"', b"")
for i in (j.split(b"=", 1) for j in key_exchange.split(b" "))
}
if b"nonce" not in key_exchange:
raise NonceMissingException()
return cls(
key_exchange[b"username"],
key_exchange[b"nonce"],
cloud_password,
super_secret_key,
)
def decrypt(self, data: bytes) -> bytes:
return unpad(self._cipher.decrypt(data), 16, style="pkcs7")
def encrypt(self, data: bytes) -> bytes:
return self._cipher.encrypt(pad(data, 16, style="pkcs7"))

View File

@ -0,0 +1,17 @@
class HttpMediaSessionException(Exception):
pass
class NonceMissingException(HttpMediaSessionException, ValueError):
def __init__(self) -> None:
super().__init__("Nonce is missing from key exchange")
class HttpStatusCodeException(HttpMediaSessionException):
def __init__(self, status_code: int) -> None:
super().__init__("HTTP request returned {} status code".format(status_code))
class KeyExchangeMissingException(HttpMediaSessionException, RuntimeError):
def __init__(self) -> None:
super().__init__("Server reply does not contain the required Key-Exchange")

View File

@ -0,0 +1,23 @@
from typing import Mapping, Optional
class HttpMediaResponse:
def __init__(
self,
seq: Optional[int],
session: Optional[int],
headers: Mapping[str, str],
encrypted: bool,
mimetype: str,
ciphertext: Optional[bytes],
plaintext: bytes,
json_data,
):
self.seq = seq
self.session = session
self.headers = headers
self.encrypted = encrypted
self.mimetype = mimetype
self.ciphertext = ciphertext
self.plaintext = plaintext
self.json_data = json_data

View File

@ -0,0 +1,509 @@
import asyncio
import hashlib
import json
import logging
import random
import warnings
from asyncio import StreamReader, StreamWriter, Task, Queue
from json import JSONDecodeError
from typing import Optional, Mapping, Generator, MutableMapping
from pytapo.media_stream._utils import (
generate_nonce,
md5digest,
parse_http_response,
parse_http_headers,
)
from pytapo.media_stream.crypto import AESHelper
from pytapo.media_stream.error import (
HttpStatusCodeException,
KeyExchangeMissingException,
)
from pytapo.media_stream.response import HttpMediaResponse
logger = logging.getLogger(__name__)
class HttpMediaSession:
def __init__(
self,
ip: str,
cloud_password: str,
super_secret_key: str,
window_size=50,
port: int = 8800,
username: str = "admin",
multipart_boundary: bytes = b"--client-stream-boundary--",
):
self.ip = ip
self.window_size = window_size
self.cloud_password = cloud_password
self.super_secret_key = super_secret_key
self.hashed_password = md5digest(cloud_password.encode()).decode()
self.port = port
self.username = username
self.client_boundary = multipart_boundary
self._started: bool = False
self._response_handler_task: Optional[Task] = None
self._auth_data: Mapping[str, str] = {}
self._authorization: Optional[str] = None
self._device_boundary = b"--device-stream-boundary--"
self._key_exchange: Optional[str] = None
self._aes: Optional[AESHelper] = None
# Socket stream pair
self._reader: Optional[StreamReader] = None
self._writer: Optional[StreamWriter] = None
self._sequence_numbers: MutableMapping[int, Queue] = {}
self._sessions: MutableMapping[int, Queue] = {}
@property
def started(self) -> bool:
return self._started
async def __aenter__(self):
await self.start()
return self
async def start(self):
req_line = b"POST /stream HTTP/1.1"
headers = {
b"Content-Type": "multipart/mixed;boundary={}".format(
self.client_boundary.decode()
).encode(),
b"Connection": b"keep-alive",
b"Content-Length": b"-1",
}
try:
self._reader, self._writer = await asyncio.open_connection(
self.ip, self.port
)
logger.info("Connected to the media streaming server")
# Step one: perform unauthenticated request
await self._send_http_request(req_line, headers)
data = await self._reader.readuntil(b"\r\n\r\n")
res_line, headers_block = data.split(b"\r\n", 1)
_, status_code, _ = parse_http_response(res_line)
res_headers = parse_http_headers(headers_block)
self._auth_data = {
i[0].strip().replace('"', ""): i[1].strip().replace('"', "")
for i in (
j.split("=")
for j in res_headers["WWW-Authenticate"].split(" ", 1)[1].split(",")
)
}
self._auth_data.update(
{
"username": self.username,
"cnonce": generate_nonce(24).decode(),
"nc": "00000001",
"qop": "auth",
}
)
challenge1 = hashlib.md5(
":".join(
(self.username, self._auth_data["realm"], self.hashed_password)
).encode()
).hexdigest()
challenge2 = hashlib.md5(b"POST:/stream").hexdigest()
self._auth_data["response"] = hashlib.md5(
b":".join(
(
challenge1.encode(),
self._auth_data["nonce"].encode(),
self._auth_data["nc"].encode(),
self._auth_data["cnonce"].encode(),
self._auth_data["qop"].encode(),
challenge2.encode(),
)
)
).hexdigest()
self._authorization = (
'Digest username="{username}",realm="{realm}"'
',uri="/stream",algorithm=MD5,'
'nonce="{nonce}",nc={nc},cnonce="{cnonce}",qop={qop},'
'response="{response}",opaque="{opaque}"'.format(
**self._auth_data
).encode()
)
headers[b"Authorization"] = self._authorization
logger.debug("Authentication data retrieved")
# Step two: start actual communication
await self._send_http_request(req_line, headers)
# Ensure the request was successful
data = await self._reader.readuntil(b"\r\n\r\n")
res_line, headers_block = data.split(b"\r\n", 1)
_, status_code, _ = parse_http_response(res_line)
if status_code != 200:
raise HttpStatusCodeException(status_code)
# Parse important HTTP headers
res_headers = parse_http_headers(headers_block)
if "Key-Exchange" not in res_headers:
raise KeyExchangeMissingException
boundary = None
if "Content-Type" in res_headers:
# noinspection PyBroadException
try:
boundary = filter(
lambda chunk: chunk.startswith("boundary="),
res_headers["Content-Type"].split(";"),
).__next__()
boundary = boundary.split("=")[1].encode()
except Exception:
boundary = None
if not boundary:
warnings.warn(
"Server did not provide a multipart/mixed boundary."
+ " Assuming default."
)
else:
self._device_boundary = boundary
# Prepare for AES decryption of content
self._key_exchange = res_headers["Key-Exchange"]
self._aes = AESHelper.from_keyexchange_and_password(
self._key_exchange.encode(),
self.cloud_password.encode(),
self.super_secret_key.encode(),
)
logger.debug("AES key exchange performed")
# Start the response handler in the background to shuffle
# responses to the correct callers
self._started = True
self._response_handler_task = asyncio.create_task(
self._device_response_handler_loop()
)
except Exception:
# Close socket in case of issues during setup
# noinspection PyBroadException
try:
self._writer.close()
except Exception:
pass
self._started = False
raise
async def _send_http_request(
self, delimiter: bytes, headers: Mapping[bytes, bytes]
):
self._writer.write(delimiter + b"\r\n")
for header, value in headers.items():
self._writer.write(b": ".join((header, value)) + b"\r\n")
await self._writer.drain()
self._writer.write(b"\r\n")
await self._writer.drain()
async def _device_response_handler_loop(self):
logger.debug("Response handler is running")
while self._started:
session = None
seq = None
# We're only interested in what comes after it,
# what's before and the boundary goes to the trash
await self._reader.readuntil(self._device_boundary)
logger.debug("Handling new server response")
# print("got response")
# Read and parse headers
headers_block = await self._reader.readuntil(b"\r\n\r\n")
headers = parse_http_headers(headers_block)
# print(headers)
mimetype = headers["Content-Type"]
length = int(headers["Content-Length"])
encrypted = bool(int(headers["X-If-Encrypt"]))
if "X-Session-Id" in headers:
session = int(headers["X-Session-Id"])
if "X-Data-Sequence" in headers:
seq = int(headers["X-Data-Sequence"])
# Now we know the content length, let's read it and decrypt it
json_data = None
# print("TEST0")
data = await self._reader.readexactly(length)
if encrypted:
# print("encrypted")
ciphertext = data
# print("TEST1")
try:
# print("lolo")
# print(ciphertext)
plaintext = self._aes.decrypt(ciphertext)
# if length == 384:
# print(plaintext)
# print("lala")
# print(plaintext)
except ValueError as e:
# print(e)
if "padding is incorrect" in e.args[0].lower():
e = ValueError(
e.args[0]
+ " - This usually means that"
+ " the cloud password is incorrect."
)
plaintext = e
except Exception as e:
plaintext = e
else:
# print("plaintext")
ciphertext = None
plaintext = data
# print(plaintext)
# JSON responses sometimes have the above info in the payload,
# not the headers. Let's parse it.
if mimetype == "application/json":
try:
json_data = json.loads(plaintext.decode())
if "seq" in json_data:
# print("Setting seq")
seq = json_data["seq"]
if "params" in json_data and "session_id" in json_data["params"]:
session = int(json_data["params"]["session_id"])
# print("Setting session")
except JSONDecodeError:
logger.warning("Unable to parse JSON sent from device")
if (
(session is None)
and (seq is None)
or (
(session is not None)
and (session not in self._sessions)
and (seq is not None)
and (seq not in self._sequence_numbers)
)
):
logger.warning(
"Received response with no or invalid session information "
"(sequence {}, session {}), can't be delivered".format(seq, session)
)
continue
# # Update our own sequence numbers to avoid collisions
# if (seq is not None) and (seq > self._seq_counter):
# self._seq_counter = seq + 1
queue: Optional[Queue] = None
# Move queue to use sessions from now on
if (
(session is not None)
and (seq is not None)
and (session not in self._sessions)
and (seq in self._sequence_numbers)
):
queue = self._sequence_numbers.pop(seq)
self._sessions[session] = queue
elif (session is not None) and (session in self._sessions):
queue = self._sessions[session]
if queue is None:
raise AssertionError("BUG! Queue not retrieved and not caught earlier")
response_obj = HttpMediaResponse(
seq=seq,
session=session,
headers=headers,
encrypted=encrypted,
mimetype=mimetype,
ciphertext=ciphertext,
plaintext=plaintext,
json_data=json_data,
)
if (
seq is not None # never ack live stream
and seq % self.window_size == 0
and (seq < 2000)
): # seq < 2000 is temp
# print("sending ack")
data = {
"type": "notification",
"params": {"event_type": "stream_sequence"},
}
data = json.dumps(data, separators=(",", ":")).encode()
headers = {}
headers[b"X-Session-Id"] = str(session).encode()
headers[b"X-Data-Received"] = str(
self.window_size * (seq // self.window_size)
).encode()
headers[b"Content-Length"] = str(len(data)).encode()
logger.debug("Sending acknowledgement...")
await self._send_http_request(b"--" + self.client_boundary, headers)
chunk_size = 4096
for i in range(0, len(data), chunk_size):
# print(data[i : i + chunk_size])
self._writer.write(data[i : i + chunk_size])
await self._writer.drain()
logger.debug(
(
"{} response of type {} processed (sequence {}, session {})"
", dispatching to queue {}"
).format(
"Encrypted" if encrypted else "Plaintext",
mimetype,
seq,
session,
id(queue),
)
)
await queue.put(response_obj)
async def transceive(
self,
data: str,
mimetype: str = "application/json",
session: int = None,
encrypt: bool = False,
no_data_timeout=1.0,
) -> Generator[HttpMediaResponse, None, None]:
sequence = None
queue = None
if mimetype != "application/json" and session is None:
raise ValueError("Non-JSON streams must always be bound to a session")
if mimetype == "application/json":
j = json.loads(data)
if "type" in j and j["type"] == "request":
# Use random high sequence number to avoid collisions
# with sequence numbers from server in queue
# dispatching
sequence = random.randint(1000, 0x7FFF)
j["seq"] = sequence
data = json.dumps(j, separators=(",", ":"))
if (
(sequence is None)
and (session is None)
or (session is not None and session not in self._sessions)
):
raise ValueError(
"Data is not a request and no existing session has been found"
)
if session is not None:
queue = self._sessions[session]
if sequence is not None:
queue = asyncio.Queue(128)
self._sequence_numbers[sequence] = queue
if type(data) == str:
data = data.encode()
headers = {
b"Content-Type": mimetype.encode(),
}
if encrypt:
data = self._aes.encrypt(data)
headers[b"X-If-Encrypt"] = b"1"
headers[b"Content-Length"] = str(len(data)).encode()
if mimetype != "application/json":
headers[b"X-If-Encrypt"] = str(
int(encrypt)
).encode() # Always sent if data is not JSON
if session is not None:
headers[b"X-Session-Id"] = str(
session
).encode() # If JSON, session is included in the payload
if self.window_size is not None:
headers[b"X-Data-Window-Size"] = str(self.window_size).encode()
await self._send_http_request(b"--" + self.client_boundary, headers)
chunk_size = 4096
# print("Sending:")
for i in range(0, len(data), chunk_size):
# print(data[i : i + chunk_size])
self._writer.write(data[i : i + chunk_size])
await self._writer.drain()
self._writer.write(b"\r\n")
await self._writer.drain()
logger.debug(
(
"{} request of type {} sent (sequence {}, session {})"
", expecting {} responses from queue {}"
).format(
"Encrypted" if encrypt else "Plaintext",
mimetype,
sequence,
session,
self.window_size + 1,
id(queue),
)
)
try:
while True:
coro = queue.get()
if no_data_timeout is not None:
try:
resp: HttpMediaResponse = await asyncio.wait_for(
coro, timeout=no_data_timeout
)
except asyncio.exceptions.TimeoutError:
logger.debug(
"Server did not send a new chunk in {} sec (sequence {}"
", session {}), assuming the stream is over".format(
no_data_timeout, sequence, session
)
)
break
else:
# No timeout, the user needs to cancel this externally
resp: HttpMediaResponse = await coro
logger.debug("Got one response from queue {}".format(id(queue)))
if resp.session is not None:
session = resp.session
if resp.encrypted and isinstance(resp.plaintext, Exception):
raise resp.plaintext
# print(resp.plaintext)
yield resp
finally:
# Ensure the queue is deleted even if the coroutine is canceled externally
if session in self._sessions:
del self._sessions[session]
async def __aexit__(self, exc_type, exc_val, exc_tb):
await self.close()
async def close(self):
if self._started:
self._started = False
self._response_handler_task.cancel()
self._writer.close()
await self._writer.wait_closed()

View File

@ -0,0 +1,22 @@
"""
if not self.sentAudio:
self.sentAudio = True
print("Read")
with open("sample.mp2", mode="rb") as file: # b is important -> binary
fileContent = file.read()
data = fileContent
headers = {}
headers[b"Content-Type"] = str("audio/mp2t").encode()
headers[b"X-Session-Id"] = str(session).encode()
headers[b"Content-Length"] = str(len(data)).encode()
await self._send_http_request(b"--" + self.client_boundary, headers)
chunk_size = 4096
for i in range(0, len(data), chunk_size):
print(data[i : i + chunk_size])
self._writer.write(data[i : i + chunk_size])
await self._writer.drain()
print("sending payload")
"""

View File

@ -0,0 +1,58 @@
def scan(self):
requests = self.performRequest(
{
"method": "multipleRequest",
"params": {
"requests": [
{
"method": "getDeviceInfo",
"params": {"device_info": {"name": ["basic_info"]}},
}, # correct request, OK
{
"method": "getDeviceInfo",
"params": {"device_infoBAD": {"name": ["basic_info"]}},
}, # incorrect param key: -40106
{
"method": "getDeviceInfo",
"params": {"device_info": {"name": ["basic_infoBAD"]}},
}, # incorrect value in array: -40106
{
"method": "getDeviceInfo",
"params": {"device_info": {"name": []}},
}, # empty array: OK
{
"method": "getDeviceInfo",
"params": {"device_info": {"name": "null"}},
}, # incorrect value type: -40106
{
"method": "getDeviceInfoBAD",
"params": {"device_info": {"name": []}},
}, # incorrect function name: -40210
{
"method": "getDeviceInfo",
"paramssssss": {"device_info": {"name": []}},
}, # incorrect params key name, OK
{"method": "getDeviceInfo"}, # only method, OK
{"method": "getDeviceInfoBAD"}, # method does not exist: -40210
{
"method": "getConnectStatus"
}, # -40210 this means the function does not exist
{
"method": "scanApList"
}, # -40210 this means the function does not exist
{
"method": "connectAp"
}, # -40210 this means the function does not exist
{
"method": "getConnectionType",
"params": {"network": {"get_connection_type": []}},
}, # todo: create wifi function
]
},
}
)
for request in requests["result"]["responses"]:
print(request)
return True

View File

@ -23,4 +23,15 @@
# - "Safe"
# - entity: binary_sensor.warning_duisburg_stadt_5
# exclude_states:
# - "Safe"
# - "Safe"
- camera_view: live
type: picture-glance
title: Wintergarten
entities:
- entity: button.wintergarten_move_left
- entity: button.wintergarten_move_up
- entity: button.wintergarten_move_down
- entity: button.wintergarten_move_right
- entity: switch.wintergarten_auto_track
camera_image: camera.wintergarten_hd_stream

View File

@ -3,5 +3,14 @@ recorder:
auto_purge: true
purge_keep_days: 60
exclude:
domains:
- automation
- updater
entity_globs:
- sensor.weather_*
entities:
- sensor.time
- sun.sun # Don't record sun data
- sensor.last_boot # Comes from 'systemmonitor' sensor platform
- sensor.date
event_types:
- call_service # Don't record service calls

BIN
zigbee.db-shm Executable file

Binary file not shown.

BIN
zigbee.db-wal Executable file

Binary file not shown.