Compare commits

...

69 Commits

Author SHA1 Message Date
e1825ce91b fixes 2023-02-14 17:12:57 +01:00
e667810fb0 „packages/climate/climate_feelslike.yaml“ ändern 2023-02-14 16:03:22 +00:00
94d8d8a01a sensor updates 2023-02-14 16:53:06 +01:00
3bbe44d64e . 2023-02-11 20:27:19 +01:00
cbd532ada1 . 2023-02-11 20:03:41 +01:00
6efcd30515 . 2023-02-11 20:00:53 +01:00
e1d5f94b82 . 2023-02-11 20:00:18 +01:00
7ff81d9a2e . 2023-02-11 19:58:56 +01:00
35a4de6ba9 . 2023-02-11 19:57:02 +01:00
2af2b609c5 . 2023-02-11 19:56:21 +01:00
d1289421b9 updates 2023-02-11 19:37:07 +01:00
15ed948dcd „packages/homeassistant/history.yaml“ ändern 2023-01-10 11:47:26 +00:00
7d037604aa Merge branch 'main' of ssh://truenoobs.de:222/darthsandmann/homeassistant-config 2023-01-10 12:43:25 +01:00
dd84e0380b disable vacuum 2023-01-10 11:43:20 +00:00
2b62b7fa70 Merge branch 'main' of ssh://truenoobs.de:222/darthsandmann/homeassistant-config 2023-01-10 12:42:31 +01:00
2981d38f61 changes 2023-01-10 12:42:22 +01:00
758cfc92eb History 2023-01-10 11:41:07 +00:00
7271e2c0dd disable pfsense 2023-01-10 11:39:07 +00:00
f95de8ee31 iPhone -> Pixel 2023-01-10 11:36:06 +00:00
6b3020e333 „packages/button/button_press.yaml“ ändern 2023-01-01 13:57:50 +00:00
39dd154fb7 „packages/button/button_press.yaml“ ändern 2023-01-01 13:56:18 +00:00
cb1a1596aa „packages/button/button_press.yaml“ ändern 2023-01-01 13:52:20 +00:00
d9f28ef564 „packages/button/button_press.yaml“ ändern 2023-01-01 13:50:35 +00:00
ff461a4048 updates 2023-01-01 14:12:39 +01:00
c74c45998c updates 2022-11-29 19:10:30 +01:00
9b39f1af50 Merge branch 'main' of ssh://truenoobs.de:222/darthsandmann/homeassistant-config 2022-08-30 18:55:07 +02:00
853c1d1716 updates 2022-08-30 18:42:25 +02:00
5a4d3be4d6 minor fix 2022-08-15 14:04:23 +02:00
fc5cf53982 „README.md“ ändern 2022-08-14 23:30:45 +00:00
75dc47bc46 Updates 2022-08-15 00:58:43 +02:00
deab38d904 minor delay fixes + disable adaptive while switching 2022-08-11 23:03:59 +02:00
4390be9d72 Updates 2022-08-11 21:07:23 +02:00
cc620be332 save lights before turn off 2022-08-09 22:27:38 +02:00
bcda160690 summary when entity is already in same state 2022-08-09 18:30:51 +02:00
776d3871b5 inside temp 2022-08-09 18:01:56 +02:00
98d916c4ed summary notification 2022-08-09 17:53:26 +02:00
a05dfeb7ce summary notification 2022-08-09 17:53:10 +02:00
c803b91fea device tracker network 2022-08-09 15:12:46 +02:00
30c91d7e0d add symbol 2022-08-09 13:18:48 +02:00
2a8c96e336 Actionable Notification 2022-08-09 12:49:58 +02:00
e46c7eadab Cleanup 2022-08-09 11:21:13 +02:00
1f3c4e8b6e „README.md“ ändern 2022-08-09 08:38:30 +00:00
a76437de58 offset 2022-08-08 23:33:55 +02:00
a6b5f3714a fixes 2022-08-08 23:30:39 +02:00
bd224ac152 name fix 2022-08-08 22:49:12 +02:00
f479b73b60 updates 2022-08-08 22:47:32 +02:00
47bf872514 Menu Control to Lights View 2022-08-07 20:32:29 +02:00
6b1d46f915 loop begin at start 2022-08-07 20:28:21 +02:00
f2f45782c5 delete scripts folder 2022-08-07 20:20:35 +02:00
d7fedcd96b Button Light Menu 2022-08-07 20:10:43 +02:00
6b07c3b488 „README.md“ ändern 2022-08-07 11:05:28 +00:00
b0a595997b „README.md“ ändern 2022-08-05 18:41:10 +00:00
913acd53e2 „README.md“ ändern 2022-08-05 18:38:04 +00:00
b8b822895a „README.md“ ändern 2022-08-05 18:31:35 +00:00
ff7a978c6b Pirateweather -> Accuweather for current weather 2022-08-05 12:54:01 +02:00
3933d3b42a „README.md“ ändern 2022-08-05 09:29:43 +00:00
51ac800ef1 „README.md“ ändern 2022-08-05 09:29:17 +00:00
f15ef84cce Template Sensor Logic fixes 2022-08-03 11:43:24 +02:00
ff50b2ecac Szenen 2022-08-03 00:59:17 +02:00
34d1ad9367 Recommended: threshold 2022-08-02 20:31:36 +02:00
78259b2dc4 Updates 2022-08-02 18:57:48 +02:00
9db4448fa4 Updates 2022-08-02 14:03:44 +02:00
3b5df0ad86 dashboard fixes 2022-08-01 02:11:03 +02:00
8757dd4e63 recommendation to dashboard 2022-08-01 02:09:44 +02:00
3ddd1568fb Updates 2022-08-01 02:00:02 +02:00
8fc6880290 Updates 2022-07-31 13:28:12 +02:00
3c40ee265d Sync Updates 2022-07-31 02:46:27 +02:00
06493560fe Fix: Time and Date 2022-07-30 18:04:34 +02:00
af43e54c29 Fix: Time and Date 2022-07-30 18:03:16 +02:00
204 changed files with 40237 additions and 761 deletions

60
README.md Normal file → Executable file
View File

@ -1,30 +1,40 @@
# Homeassistant Config # Homeassistant Config
## Hacs
### Integrations
- Circadian Lighting
- browser_mod
- UI Lovelace Minimalist
### Frontend
- button-card
- Mini Media Player
- Simple Weather Card
- Light Entity Card
- auto-entities
- card-mod
- Sun Card
- mini-graph-card
- My Cards Bundle (https://github.com/AnthonMS/my-cards)
## Todo ## Todo
- Climate control - Climate control
- Temperature warnings/recommendations (inside vs outside)
- Light automations
- Push notifications ## Button Design
### Functions
- Power on/off
- Brightness
- Scenes
- Individual Light Selection
- Adaptive & Sleep Mode
### 4 Button
#### Up
- Press: Brightness Up / Power on (only when no light is selected)
- Hold: Power on (when light is selected)
#### Down
- Press: Brightness Down / Power off (only when no light is selected)
- Hold: Power off (when light is selected)
#### Left
- Press: Switch selected light
- Hold: Adaptive toggle
#### Right
- Press: Switch selected scene
- Hold: Sleep toggle
### 2 Button
#### Up
- Press: Power on
- Hold: Scene Adaptive
#### Down
- Press: Power off
- Hold: Scene Night

0
configuration.yaml Normal file → Executable file
View File

8
deps/bin/eq3cli vendored Executable file
View File

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

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,225 @@
Changelog
=========
0.2 (2022-07-13)
----------------
- Add publish to pypi workflow (#54) [Teemu R]
- Add bleak backend and make it default (#53) [Teemu R]
- Wrap backend exceptions inside BackendException (#52) [Teemu R]
- Add mac property to thermostat class (#51) [Teemu R]
- Update README, pyproject.toml (#49) [Teemu R]
- Support gattlib as an alternative btle library (#48) [Helmut Grohne]
- Use poetry, add pre-commit hooks & mass format to modern standards,
add CI (#47) [Teemu R]
0.1.12 (2021-11-13)
-------------------
- Add bt interface selection (#44) [Hummel95]
0.1.11 (2019-05-27)
-------------------
- Decoding presets in status messages (#33) [Matthias Erll]
- Adding device serial number and firmware (#31) [Matthias Erll]
- Context.invoke() -> Context.forward() (#28) [Till]
- Require python 3.4 or newer in setup.py, closes #23. [Teemu Rytilahti]
0.1.10 (2018-11-09))
------------------------
- Context.invoke() -> Context.forward() (#28) [Till]
- Require python 3.4 or newer in setup.py, closes #23. [Teemu Rytilahti]
0.1.9 (2018-02-18)
------------------------
- Update to the new construct API (#20) [Arkadiusz Bulski]
0.1.8 (2018-01-20)
------------------
- Update to work with the newest construct release, bump version. [Teemu
Rytilahti]
- Update schedule example, fixes #15. [Teemu Rytilahti]
- Do not suppress exceptions from bluepy, but log them to debug logger
and raise exceptions for users to handle. [Teemu Rytilahti]
- Install flake8 and pylint, which are required for the travis build.
[Teemu Rytilahti]
0.1.7 (2017-10-06)
------------------------
- Fixed setting schedule not working (#9) [horsitis
0.1.6 (2017-04-01)
------------------------
- Version 0.1.6. [Teemu Rytilahti]
- Use debug logging for the first round of connection error. [Teemu
Rytilahti]
- Disallow running with python versions older than 3.4. [Teemu
Rytilahti]
The library _may_ still be python2 compatible though for now,
but this is unsupported and should not be relied on.
- On/Off/Manual mode fixes (#6) [Janne Grunau]
* Handle On/Off mode correctly
* Set temperature in [EQ3BT_MIN_TEMP, EQ3BT_MAX_TEMP] for manual mode
* simplify mode setter function
- Be less noisy on connection errors. [Teemu Rytilahti]
- Require and validate mac address at the cli (#4) [Klemens Schölhorn]
- Add missing structures.py. this was already in pypi package, so no
harm done. [Teemu Rytilahti]
0.1.5 (2017-01-28)
------------------------
- Version 0.1.5. [Teemu Rytilahti]
- Fix manual on/off handling, cleanup the code for next release. [Teemu
Rytilahti]
- Make Thermostat testable. [Teemu Rytilahti]
- Use less magic constants and more structures, fix manual mode setting.
[Teemu Rytilahti]
- Fix setup.py typo. [Teemu Rytilahti]
- Eq3cli: add away command. [Teemu Rytilahti]
- Restructuring with construct for more readable code. [Teemu Rytilahti]
* add set_away(away_ends, temperature) for enabling and disabling away mode
- Add hound-ci config. [Teemu Rytilahti]
0.1.4 (2017-01-15)
------------------
- Version 0.1.4. [Teemu Rytilahti]
- Add away_end property. [Teemu Rytilahti]
- Add changelog. [Teemu Rytilahti]
0.1.3 (2017-01-15)
------------------
- Make eq3bt a module. [Teemu Rytilahti]
- Update README. [Teemu Rytilahti]
- Add scheduling and offset functionality. [Teemu Rytilahti]
- Connection: pretty print messaging in hex. [Teemu Rytilahti]
- Setup.py: fix console script location. [Teemu Rytilahti]
0.1.2 (2017-01-14)
------------------
- Fix packaging, add click dependency, bump to 0.1.2. [Teemu Rytilahti]
- Bump bluepy requirement to 1.0.5. [Teemu Rytilahti]
0.1 (2017-01-14)
----------------
- Restructure bluepy_devices to python-eq3bt. [Teemu Rytilahti]
* Complete restructure of the library. All unnecessary and problematic parts are dropped.
* General cleaning up, making flake8 and pylint happy.
* Updated and documented cli tool, named eq3cli
- Add contextmanager for connection to simplify connecting and
disconnecting. Calling writes on device will build and tear down the
connection automatically. [Teemu Rytilahti]
- Eq3btsmart: do not try to connect on init, allows adding the component
to homeassistant even if the device is not connectable at the moment.
[Teemu Rytilahti]
- Add eq3cli tool. [Teemu Rytilahti]
Included command-line tool can be used to control the device.
All current functionality is available through it, check updated README.md for usage.
- Add logger to ease debugging. [Teemu Rytilahti]
- Increase version to 0.3.0 for the enhaced eq3btsmart support. [Janne
Grunau]
- Eq3btsmart: and support for the comfort and eco temperature presets.
[Janne Grunau]
- Eq3btsmart: add a property for the low battery warning. [Janne Grunau]
- Eq3btsmart: add support for the thermostat's operating lock. [Janne
Grunau]
- Eq3btsmart: add window open mode configuration. [Janne Grunau]
- Eq3btsmart: and property to check window open state. [Janne Grunau]
- Eq3btsmart: report valve state. [Janne Grunau]
- Eq3btsmart: control the supported modes of the thermostat. [Janne
Grunau]
The away mode is not really useful yet.
- Eq3btsmart: verify that temperatures are in min/max range. [Janne
Grunau]
- Eq3btsmart: fix the minimal and maximal temperatures. [Janne Grunau]
4.5 and 30 degree celsius have special meanings and can't be set
in 'auto' mode. 4.5 means off (valve closed even if the temperature
below 4.5 degress). 30 means on (valve permanently open even if the
temperature exceeds 30 degrees).
- Eq3btsmart: the update request needs to include the full time. [Janne
Grunau]
Otherwise the thermostat can set a random time. Also fixes the format of
the set time request.
- Initial update in eq3btsmart.py. [Markus Peter]
- +travis. [Markus Peter]
- Update README.md. [Markus Peter]
- Create README.md. [Markus Peter]
- Initial Commit Version 0.2.0. [Markus Peter]
- Initial commit. [Markus Peter]

View File

@ -0,0 +1 @@
pip

View File

@ -0,0 +1,202 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "{}"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright {yyyy} {name of copyright owner}
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@ -0,0 +1,239 @@
Metadata-Version: 2.1
Name: aiofiles
Version: 0.8.0
Summary: File support for asyncio.
License: Apache-2.0
Author: Tin Tvrtkovic
Author-email: tinchester@gmail.com
Requires-Python: >=3.6,<4.0
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Description-Content-Type: text/x-rst
aiofiles: file support for asyncio
==================================
.. image:: https://img.shields.io/pypi/v/aiofiles.svg
:target: https://pypi.python.org/pypi/aiofiles
.. image:: https://travis-ci.org/Tinche/aiofiles.svg?branch=master
:target: https://travis-ci.org/Tinche/aiofiles
.. image:: https://codecov.io/gh/Tinche/aiofiles/branch/master/graph/badge.svg
:target: https://codecov.io/gh/Tinche/aiofiles
.. image:: https://img.shields.io/pypi/pyversions/aiofiles.svg
:target: https://github.com/Tinche/aiofiles
:alt: Supported Python versions
**aiofiles** is an Apache2 licensed library, written in Python, for handling local
disk files in asyncio applications.
Ordinary local file IO is blocking, and cannot easily and portably made
asynchronous. This means doing file IO may interfere with asyncio applications,
which shouldn't block the executing thread. aiofiles helps with this by
introducing asynchronous versions of files that support delegating operations to
a separate thread pool.
.. code-block:: python
async with aiofiles.open('filename', mode='r') as f:
contents = await f.read()
print(contents)
'My file contents'
Asynchronous iteration is also supported.
.. code-block:: python
async with aiofiles.open('filename') as f:
async for line in f:
...
Asynchronous interface to tempfile module.
.. code-block:: python
async with aiofiles.tempfile.TemporaryFile('wb') as f:
await f.write(b'Hello, World!')
Features
--------
- a file API very similar to Python's standard, blocking API
- support for buffered and unbuffered binary files, and buffered text files
- support for ``async``/``await`` (:PEP:`492`) constructs
- async interface to tempfile module
Installation
------------
To install aiofiles, simply:
.. code-block:: bash
$ pip install aiofiles
Usage
-----
Files are opened using the ``aiofiles.open()`` coroutine, which in addition to
mirroring the builtin ``open`` accepts optional ``loop`` and ``executor``
arguments. If ``loop`` is absent, the default loop will be used, as per the
set asyncio policy. If ``executor`` is not specified, the default event loop
executor will be used.
In case of success, an asynchronous file object is returned with an
API identical to an ordinary file, except the following methods are coroutines
and delegate to an executor:
* ``close``
* ``flush``
* ``isatty``
* ``read``
* ``readall``
* ``read1``
* ``readinto``
* ``readline``
* ``readlines``
* ``seek``
* ``seekable``
* ``tell``
* ``truncate``
* ``writable``
* ``write``
* ``writelines``
In case of failure, one of the usual exceptions will be raised.
The ``aiofiles.os`` module contains executor-enabled coroutine versions of
several useful ``os`` functions that deal with files:
* ``stat``
* ``sendfile``
* ``rename``
* ``replace``
* ``remove``
* ``mkdir``
* ``makedirs``
* ``rmdir``
* ``removedirs``
* ``path.exists``
* ``path.isfile``
* ``path.isdir``
* ``path.getsize``
* ``path.getatime``
* ``path.getctime``
* ``path.samefile``
* ``path.sameopenfile``
Tempfile
~~~~~~~~
**aiofiles.tempfile** implements the following interfaces:
- TemporaryFile
- NamedTemporaryFile
- SpooledTemporaryFile
- TemporaryDirectory
Results return wrapped with a context manager allowing use with async with and async for.
.. code-block:: python
async with aiofiles.tempfile.NamedTemporaryFile('wb+') as f:
await f.write(b'Line1\n Line2')
await f.seek(0)
async for line in f:
print(line)
async with aiofiles.tempfile.TemporaryDirectory() as d:
filename = os.path.join(d, "file.ext")
Writing tests for aiofiles
~~~~~~~~~~~~~~~~~~~~~~~~~~
Real file IO can be mocked by patching ``aiofiles.threadpool.sync_open``
as desired. The return type also needs to be registered with the
``aiofiles.threadpool.wrap`` dispatcher:
.. code-block:: python
aiofiles.threadpool.wrap.register(mock.MagicMock)(
lambda *args, **kwargs: threadpool.AsyncBufferedIOBase(*args, **kwargs))
async def test_stuff():
data = 'data'
mock_file = mock.MagicMock()
with mock.patch('aiofiles.threadpool.sync_open', return_value=mock_file) as mock_open:
async with aiofiles.open('filename', 'w') as f:
await f.write(data)
mock_file.write.assert_called_once_with(data)
History
~~~~~~~
0.8.0 (2021-11-27)
``````````````````
* aiofiles is now tested on Python 3.10.
* Added ``aiofiles.os.replace``.
`#107 <https://github.com/Tinche/aiofiles/pull/107>`_
* Added ``aiofiles.os.{makedirs, removedirs}``.
* Added ``aiofiles.os.path.{exists, isfile, isdir, getsize, getatime, getctime, samefile, sameopenfile}``.
`#63 <https://github.com/Tinche/aiofiles/pull/63>`_
* Added `suffix`, `prefix`, `dir` args to ``aiofiles.tempfile.TemporaryDirectory``.
`#116 <https://github.com/Tinche/aiofiles/pull/116>`_
0.7.0 (2021-05-17)
``````````````````
- Added the ``aiofiles.tempfile`` module for async temporary files.
`#56 <https://github.com/Tinche/aiofiles/pull/56>`_
- Switched to Poetry and GitHub actions.
- Dropped 3.5 support.
0.6.0 (2020-10-27)
``````````````````
- `aiofiles` is now tested on ppc64le.
- Added `name` and `mode` properties to async file objects.
`#82 <https://github.com/Tinche/aiofiles/pull/82>`_
- Fixed a DeprecationWarning internally.
`#75 <https://github.com/Tinche/aiofiles/pull/75>`_
- Python 3.9 support and tests.
0.5.0 (2020-04-12)
``````````````````
- Python 3.8 support. Code base modernization (using ``async/await`` instead of ``asyncio.coroutine``/``yield from``).
- Added ``aiofiles.os.remove``, ``aiofiles.os.rename``, ``aiofiles.os.mkdir``, ``aiofiles.os.rmdir``.
`#62 <https://github.com/Tinche/aiofiles/pull/62>`_
0.4.0 (2018-08-11)
``````````````````
- Python 3.7 support.
- Removed Python 3.3/3.4 support. If you use these versions, stick to aiofiles 0.3.x.
0.3.2 (2017-09-23)
``````````````````
- The LICENSE is now included in the sdist.
`#31 <https://github.com/Tinche/aiofiles/pull/31>`_
0.3.1 (2017-03-10)
``````````````````
- Introduced a changelog.
- ``aiofiles.os.sendfile`` will now work if the standard ``os`` module contains a ``sendfile`` function.
Contributing
~~~~~~~~~~~~
Contributions are very welcome. Tests can be run with ``tox``, please ensure
the coverage at least stays the same before you submit a pull request.

View File

@ -0,0 +1,26 @@
aiofiles-0.8.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
aiofiles-0.8.0.dist-info/LICENSE,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
aiofiles-0.8.0.dist-info/METADATA,sha256=9WSIVaJhAbMi93mj4ir3932H5Je3JxAcUvH5hgyD0qU,7022
aiofiles-0.8.0.dist-info/RECORD,,
aiofiles-0.8.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
aiofiles-0.8.0.dist-info/WHEEL,sha256=FMw6u7Kp3jrdDDtJRZ3hkPV-9adLQT8pbM4iifKUGfw,85
aiofiles/__init__.py,sha256=6fPaAw6PXV8rszheTedkYcoLHC3KbbPH--eMODJ_-IE,136
aiofiles/__pycache__/__init__.cpython-310.pyc,,
aiofiles/__pycache__/base.cpython-310.pyc,,
aiofiles/__pycache__/os.cpython-310.pyc,,
aiofiles/__pycache__/ospath.cpython-310.pyc,,
aiofiles/base.py,sha256=_ntjFm4olO13y9JEQchLudmgPJ4mAFug5MRi6Efk7g0,2114
aiofiles/os.py,sha256=A8vZ0paqH14JaepvEdfSCv6BAFoV4D1LVmnKfkEG5tQ,719
aiofiles/ospath.py,sha256=cIyDMoGVHTqKoKFXfXVzuIROJQQRmeNqVuNuc9QgPY0,387
aiofiles/tempfile/__init__.py,sha256=y6siScSCxNkydsoAN0OlxSwvgqpk1XoVTvJ0gTvAmTk,7234
aiofiles/tempfile/__pycache__/__init__.cpython-310.pyc,,
aiofiles/tempfile/__pycache__/temptypes.cpython-310.pyc,,
aiofiles/tempfile/temptypes.py,sha256=ZwWLAV3eiWWW0QoRDPHN2U7XPf0DUQFYPRid7o4Sk9s,2169
aiofiles/threadpool/__init__.py,sha256=JaRiXZRaVvx32RvrUXwgZxAByrzqdmDcxi6t_P2iP6w,2273
aiofiles/threadpool/__pycache__/__init__.cpython-310.pyc,,
aiofiles/threadpool/__pycache__/binary.cpython-310.pyc,,
aiofiles/threadpool/__pycache__/text.cpython-310.pyc,,
aiofiles/threadpool/__pycache__/utils.cpython-310.pyc,,
aiofiles/threadpool/binary.py,sha256=tRdJnH6ragF5Kr13oIBPJrljgTl3hWSOaHSXfHESRBk,1167
aiofiles/threadpool/text.py,sha256=dNweKCxpwRgfqA6XCiWYDDddOTa0lbzH-Fh5o3rho-8,665
aiofiles/threadpool/utils.py,sha256=fcqvRBrcIk2qP-rOdm92zDHyCfgD6itS621V6oOLJwk,1912

View File

@ -0,0 +1,4 @@
Wheel-Version: 1.0
Generator: poetry 1.1.0a6
Root-Is-Purelib: true
Tag: py3-none-any

View File

@ -0,0 +1,5 @@
"""Utilities for asyncio-friendly file handling."""
from .threadpool import open
from . import tempfile
__all__ = ["open", "tempfile"]

View File

@ -0,0 +1,91 @@
"""Various base classes."""
from types import coroutine
from collections.abc import Coroutine
class AsyncBase:
def __init__(self, file, loop, executor):
self._file = file
self._loop = loop
self._executor = executor
def __aiter__(self):
"""We are our own iterator."""
return self
def __repr__(self):
return super().__repr__() + " wrapping " + repr(self._file)
async def __anext__(self):
"""Simulate normal file iteration."""
line = await self.readline()
if line:
return line
else:
raise StopAsyncIteration
class _ContextManager(Coroutine):
__slots__ = ("_coro", "_obj")
def __init__(self, coro):
self._coro = coro
self._obj = None
def send(self, value):
return self._coro.send(value)
def throw(self, typ, val=None, tb=None):
if val is None:
return self._coro.throw(typ)
elif tb is None:
return self._coro.throw(typ, val)
else:
return self._coro.throw(typ, val, tb)
def close(self):
return self._coro.close()
@property
def gi_frame(self):
return self._coro.gi_frame
@property
def gi_running(self):
return self._coro.gi_running
@property
def gi_code(self):
return self._coro.gi_code
def __next__(self):
return self.send(None)
@coroutine
def __iter__(self):
resp = yield from self._coro
return resp
def __await__(self):
resp = yield from self._coro
return resp
async def __anext__(self):
resp = await self._coro
return resp
async def __aenter__(self):
self._obj = await self._coro
return self._obj
async def __aexit__(self, exc_type, exc, tb):
self._obj.close()
self._obj = None
class AiofilesContextManager(_ContextManager):
"""An adjusted async context manager for aiofiles."""
async def __aexit__(self, exc_type, exc_val, exc_tb):
await self._obj.close()
self._obj = None

View File

@ -0,0 +1,31 @@
"""Async executor versions of file functions from the os module."""
import asyncio
from functools import partial, wraps
import os
def wrap(func):
@wraps(func)
async def run(*args, loop=None, executor=None, **kwargs):
if loop is None:
loop = asyncio.get_event_loop()
pfunc = partial(func, *args, **kwargs)
return await loop.run_in_executor(executor, pfunc)
return run
from . import ospath as path
stat = wrap(os.stat)
rename = wrap(os.rename)
replace = wrap(os.replace)
remove = wrap(os.remove)
mkdir = wrap(os.mkdir)
makedirs = wrap(os.makedirs)
rmdir = wrap(os.rmdir)
removedirs = wrap(os.removedirs)
if hasattr(os, "sendfile"):
sendfile = wrap(os.sendfile)

View File

@ -0,0 +1,14 @@
"""Async executor versions of file functions from the os.path module."""
from .os import wrap
from os import path
exists = wrap(path.exists)
isfile = wrap(path.isfile)
isdir = wrap(path.isdir)
getsize = wrap(path.getsize)
getmtime = wrap(path.getmtime)
getatime = wrap(path.getatime)
getctime = wrap(path.getctime)
samefile = wrap(path.samefile)
sameopenfile = wrap(path.sameopenfile)

View File

@ -0,0 +1,263 @@
# Imports
import asyncio
from tempfile import (
TemporaryFile as syncTemporaryFile,
NamedTemporaryFile as syncNamedTemporaryFile,
SpooledTemporaryFile as syncSpooledTemporaryFile,
TemporaryDirectory as syncTemporaryDirectory,
_TemporaryFileWrapper as syncTemporaryFileWrapper,
)
from io import FileIO, TextIOBase, BufferedReader, BufferedWriter, BufferedRandom
from functools import partial, singledispatch
from ..base import AiofilesContextManager
from ..threadpool.text import AsyncTextIOWrapper
from ..threadpool.binary import AsyncBufferedIOBase, AsyncBufferedReader, AsyncFileIO
from .temptypes import AsyncSpooledTemporaryFile, AsyncTemporaryDirectory
__all__ = [
"NamedTemporaryFile",
"TemporaryFile",
"SpooledTemporaryFile",
"TemporaryDirectory",
]
# ================================================================
# Public methods for async open and return of temp file/directory
# objects with async interface
# ================================================================
def NamedTemporaryFile(
mode="w+b",
buffering=-1,
encoding=None,
newline=None,
suffix=None,
prefix=None,
dir=None,
delete=True,
loop=None,
executor=None,
):
"""Async open a named temporary file"""
return AiofilesContextManager(
_temporary_file(
named=True,
mode=mode,
buffering=buffering,
encoding=encoding,
newline=newline,
suffix=suffix,
prefix=prefix,
dir=dir,
delete=delete,
loop=loop,
executor=executor,
)
)
def TemporaryFile(
mode="w+b",
buffering=-1,
encoding=None,
newline=None,
suffix=None,
prefix=None,
dir=None,
loop=None,
executor=None,
):
"""Async open an unnamed temporary file"""
return AiofilesContextManager(
_temporary_file(
named=False,
mode=mode,
buffering=buffering,
encoding=encoding,
newline=newline,
suffix=suffix,
prefix=prefix,
dir=dir,
loop=loop,
executor=executor,
)
)
def SpooledTemporaryFile(
max_size=0,
mode="w+b",
buffering=-1,
encoding=None,
newline=None,
suffix=None,
prefix=None,
dir=None,
loop=None,
executor=None,
):
"""Async open a spooled temporary file"""
return AiofilesContextManager(
_spooled_temporary_file(
max_size=max_size,
mode=mode,
buffering=buffering,
encoding=encoding,
newline=newline,
suffix=suffix,
prefix=prefix,
dir=dir,
loop=loop,
executor=executor,
)
)
def TemporaryDirectory(suffix=None, prefix=None, dir=None, loop=None, executor=None):
"""Async open a temporary directory"""
return AiofilesContextManagerTempDir(
_temporary_directory(
suffix=suffix, prefix=prefix, dir=dir, loop=loop, executor=executor
)
)
# =========================================================
# Internal coroutines to open new temp files/directories
# =========================================================
async def _temporary_file(
named=True,
mode="w+b",
buffering=-1,
encoding=None,
newline=None,
suffix=None,
prefix=None,
dir=None,
delete=True,
loop=None,
executor=None,
max_size=0,
):
"""Async method to open a temporary file with async interface"""
if loop is None:
loop = asyncio.get_event_loop()
if named:
cb = partial(
syncNamedTemporaryFile,
mode=mode,
buffering=buffering,
encoding=encoding,
newline=newline,
suffix=suffix,
prefix=prefix,
dir=dir,
delete=delete,
)
else:
cb = partial(
syncTemporaryFile,
mode=mode,
buffering=buffering,
encoding=encoding,
newline=newline,
suffix=suffix,
prefix=prefix,
dir=dir,
)
f = await loop.run_in_executor(executor, cb)
# Wrap based on type of underlying IO object
if type(f) is syncTemporaryFileWrapper:
# _TemporaryFileWrapper was used (named files)
result = wrap(f.file, f, loop=loop, executor=executor)
# add delete property
result.delete = f.delete
return result
else:
# IO object was returned directly without wrapper
return wrap(f, f, loop=loop, executor=executor)
async def _spooled_temporary_file(
max_size=0,
mode="w+b",
buffering=-1,
encoding=None,
newline=None,
suffix=None,
prefix=None,
dir=None,
loop=None,
executor=None,
):
"""Open a spooled temporary file with async interface"""
if loop is None:
loop = asyncio.get_event_loop()
cb = partial(
syncSpooledTemporaryFile,
max_size=max_size,
mode=mode,
buffering=buffering,
encoding=encoding,
newline=newline,
suffix=suffix,
prefix=prefix,
dir=dir,
)
f = await loop.run_in_executor(executor, cb)
# Single interface provided by SpooledTemporaryFile for all modes
return AsyncSpooledTemporaryFile(f, loop=loop, executor=executor)
async def _temporary_directory(
suffix=None, prefix=None, dir=None, loop=None, executor=None
):
"""Async method to open a temporary directory with async interface"""
if loop is None:
loop = asyncio.get_event_loop()
cb = partial(syncTemporaryDirectory, suffix, prefix, dir)
f = await loop.run_in_executor(executor, cb)
return AsyncTemporaryDirectory(f, loop=loop, executor=executor)
class AiofilesContextManagerTempDir(AiofilesContextManager):
"""With returns the directory location, not the object (matching sync lib)"""
async def __aenter__(self):
self._obj = await self._coro
return self._obj.name
@singledispatch
def wrap(base_io_obj, file, *, loop=None, executor=None):
"""Wrap the object with interface based on type of underlying IO"""
raise TypeError("Unsupported IO type: {}".format(base_io_obj))
@wrap.register(TextIOBase)
def _(base_io_obj, file, *, loop=None, executor=None):
return AsyncTextIOWrapper(file, loop=loop, executor=executor)
@wrap.register(BufferedWriter)
def _(base_io_obj, file, *, loop=None, executor=None):
return AsyncBufferedIOBase(file, loop=loop, executor=executor)
@wrap.register(BufferedReader)
@wrap.register(BufferedRandom)
def _(base_io_obj, file, *, loop=None, executor=None):
return AsyncBufferedReader(file, loop=loop, executor=executor)
@wrap.register(FileIO)
def _(base_io_obj, file, *, loop=None, executor=None):
return AsyncFileIO(file, loop=loop, executor=executor)

View File

@ -0,0 +1,74 @@
"""Async wrappers for spooled temp files and temp directory objects"""
# Imports
import asyncio
from types import coroutine
from ..base import AsyncBase
from ..threadpool.utils import (
delegate_to_executor,
proxy_property_directly,
cond_delegate_to_executor,
)
from functools import partial
@delegate_to_executor("fileno", "rollover")
@cond_delegate_to_executor(
"close",
"flush",
"isatty",
"newlines",
"read",
"readline",
"readlines",
"seek",
"tell",
"truncate",
)
@proxy_property_directly("closed", "encoding", "mode", "name", "softspace")
class AsyncSpooledTemporaryFile(AsyncBase):
"""Async wrapper for SpooledTemporaryFile class"""
async def _check(self):
if self._file._rolled:
return
max_size = self._file._max_size
if max_size and self._file.tell() > max_size:
await self.rollover()
async def write(self, s):
"""Implementation to anticipate rollover"""
if self._file._rolled:
cb = partial(self._file.write, s)
return await self._loop.run_in_executor(self._executor, cb)
else:
file = self._file._file # reference underlying base IO object
rv = file.write(s)
await self._check()
return rv
async def writelines(self, iterable):
"""Implementation to anticipate rollover"""
if self._file._rolled:
cb = partial(self._file.writelines, iterable)
return await self._loop.run_in_executor(self._executor, cb)
else:
file = self._file._file # reference underlying base IO object
rv = file.writelines(iterable)
await self._check()
return rv
@delegate_to_executor("cleanup")
@proxy_property_directly("name")
class AsyncTemporaryDirectory:
"""Async wrapper for TemporaryDirectory class"""
def __init__(self, file, loop, executor):
self._file = file
self._loop = loop
self._executor = executor
async def close(self):
await self.cleanup()

View File

@ -0,0 +1,108 @@
"""Handle files using a thread pool executor."""
import asyncio
from types import coroutine
from io import (
FileIO,
TextIOBase,
BufferedReader,
BufferedWriter,
BufferedRandom,
)
from functools import partial, singledispatch
from .binary import AsyncBufferedIOBase, AsyncBufferedReader, AsyncFileIO
from .text import AsyncTextIOWrapper
from ..base import AiofilesContextManager
sync_open = open
__all__ = ("open",)
def open(
file,
mode="r",
buffering=-1,
encoding=None,
errors=None,
newline=None,
closefd=True,
opener=None,
*,
loop=None,
executor=None
):
return AiofilesContextManager(
_open(
file,
mode=mode,
buffering=buffering,
encoding=encoding,
errors=errors,
newline=newline,
closefd=closefd,
opener=opener,
loop=loop,
executor=executor,
)
)
@coroutine
def _open(
file,
mode="r",
buffering=-1,
encoding=None,
errors=None,
newline=None,
closefd=True,
opener=None,
*,
loop=None,
executor=None
):
"""Open an asyncio file."""
if loop is None:
loop = asyncio.get_event_loop()
cb = partial(
sync_open,
file,
mode=mode,
buffering=buffering,
encoding=encoding,
errors=errors,
newline=newline,
closefd=closefd,
opener=opener,
)
f = yield from loop.run_in_executor(executor, cb)
return wrap(f, loop=loop, executor=executor)
@singledispatch
def wrap(file, *, loop=None, executor=None):
raise TypeError("Unsupported io type: {}.".format(file))
@wrap.register(TextIOBase)
def _(file, *, loop=None, executor=None):
return AsyncTextIOWrapper(file, loop=loop, executor=executor)
@wrap.register(BufferedWriter)
def _(file, *, loop=None, executor=None):
return AsyncBufferedIOBase(file, loop=loop, executor=executor)
@wrap.register(BufferedReader)
@wrap.register(BufferedRandom)
def _(file, *, loop=None, executor=None):
return AsyncBufferedReader(file, loop=loop, executor=executor)
@wrap.register(FileIO)
def _(file, *, loop=None, executor=None):
return AsyncFileIO(file, loop, executor)

View File

@ -0,0 +1,57 @@
from ..base import AsyncBase
from .utils import (
delegate_to_executor,
proxy_method_directly,
proxy_property_directly,
)
@delegate_to_executor(
"close",
"flush",
"isatty",
"read",
"read1",
"readinto",
"readline",
"readlines",
"seek",
"seekable",
"tell",
"truncate",
"writable",
"write",
"writelines",
)
@proxy_method_directly("detach", "fileno", "readable")
@proxy_property_directly("closed", "raw", "name", "mode")
class AsyncBufferedIOBase(AsyncBase):
"""The asyncio executor version of io.BufferedWriter."""
@delegate_to_executor("peek")
class AsyncBufferedReader(AsyncBufferedIOBase):
"""The asyncio executor version of io.BufferedReader and Random."""
@delegate_to_executor(
"close",
"flush",
"isatty",
"read",
"readall",
"readinto",
"readline",
"readlines",
"seek",
"seekable",
"tell",
"truncate",
"writable",
"write",
"writelines",
)
@proxy_method_directly("fileno", "readable")
@proxy_property_directly("closed", "name", "mode")
class AsyncFileIO(AsyncBase):
"""The asyncio executor version of io.FileIO."""

View File

@ -0,0 +1,37 @@
from ..base import AsyncBase
from .utils import (
delegate_to_executor,
proxy_method_directly,
proxy_property_directly,
)
@delegate_to_executor(
"close",
"flush",
"isatty",
"read",
"readable",
"readline",
"readlines",
"seek",
"seekable",
"tell",
"truncate",
"write",
"writable",
"writelines",
)
@proxy_method_directly("detach", "fileno", "readable")
@proxy_property_directly(
"buffer",
"closed",
"encoding",
"errors",
"line_buffering",
"newlines",
"name",
"mode",
)
class AsyncTextIOWrapper(AsyncBase):
"""The asyncio executor version of io.TextIOWrapper."""

View File

@ -0,0 +1,74 @@
import functools
from types import coroutine
def delegate_to_executor(*attrs):
def cls_builder(cls):
for attr_name in attrs:
setattr(cls, attr_name, _make_delegate_method(attr_name))
return cls
return cls_builder
def proxy_method_directly(*attrs):
def cls_builder(cls):
for attr_name in attrs:
setattr(cls, attr_name, _make_proxy_method(attr_name))
return cls
return cls_builder
def proxy_property_directly(*attrs):
def cls_builder(cls):
for attr_name in attrs:
setattr(cls, attr_name, _make_proxy_property(attr_name))
return cls
return cls_builder
def cond_delegate_to_executor(*attrs):
def cls_builder(cls):
for attr_name in attrs:
setattr(cls, attr_name, _make_cond_delegate_method(attr_name))
return cls
return cls_builder
def _make_delegate_method(attr_name):
@coroutine
def method(self, *args, **kwargs):
cb = functools.partial(getattr(self._file, attr_name), *args, **kwargs)
return (yield from self._loop.run_in_executor(self._executor, cb))
return method
def _make_proxy_method(attr_name):
def method(self, *args, **kwargs):
return getattr(self._file, attr_name)(*args, **kwargs)
return method
def _make_proxy_property(attr_name):
def proxy_property(self):
return getattr(self._file, attr_name)
return property(proxy_property)
def _make_cond_delegate_method(attr_name):
"""For spooled temp files, delegate only if rolled to file object"""
async def method(self, *args, **kwargs):
if self._file._rolled:
cb = functools.partial(getattr(self._file, attr_name), *args, **kwargs)
return await self._loop.run_in_executor(self._executor, cb)
else:
return getattr(self._file, attr_name)(*args, **kwargs)
return method

View File

@ -0,0 +1,7 @@
# flake8: noqa
from .eq3btsmart import Mode, TemperatureException, Thermostat
from .structures import *
class BackendException(Exception):
"""Exception to wrap backend exceptions."""

View File

@ -0,0 +1,123 @@
"""
Bleak connection backend.
This creates a new event loop that is used to integrate bleak's
asyncio functions to synchronous architecture of python-eq3bt.
"""
import asyncio
import codecs
import contextlib
import logging
from typing import Optional
from bleak import BleakClient, BleakError
from . import BackendException
DEFAULT_TIMEOUT = 1
# bleak backends are very loud on debug, this reduces the log spam when using --debug
logging.getLogger("bleak.backends").setLevel(logging.WARNING)
_LOGGER = logging.getLogger(__name__)
class BleakConnection:
"""Representation of a BTLE Connection."""
def __init__(self, mac, iface):
"""Initialize the connection."""
self._conn: Optional[BleakClient] = None
self._mac = mac
self._iface = iface
self._callbacks = {}
self._notifyevent = asyncio.Event()
self._notification_handle = None
self._loop = asyncio.new_event_loop()
def __enter__(self):
"""
Context manager __enter__ for connecting the device
:rtype: BTLEConnection
:return:
"""
_LOGGER.debug("Trying to connect to %s", self._mac)
kwargs = {}
if self._iface is not None:
kwargs["adapter"] = self._iface
self._conn = BleakClient(self._mac, **kwargs)
try:
self._loop.run_until_complete(self._conn.connect())
except BleakError as ex:
_LOGGER.debug(
"Unable to connect to the device %s, retrying: %s", self._mac, ex
)
try:
self._loop.run_until_complete(self._conn.connect())
except Exception as ex2:
_LOGGER.debug("Second connection try to %s failed: %s", self._mac, ex2)
raise BackendException(
"unable to connect to device using bleak"
) from ex2
# The notification handles are off-by-one compared to gattlib and bluepy
self._loop.run_until_complete(
self._conn.start_notify(self._notification_handle - 1, self.on_notification)
)
_LOGGER.debug("Connected to %s", self._mac)
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if self._conn:
self._loop.run_until_complete(self._conn.disconnect())
self._conn = None
async def on_notification(self, handle, data):
"""Handle Callback from a Bluetooth (GATT) request."""
# The notification handles are off-by-one compared to gattlib and bluepy
handle = handle + 1
_LOGGER.debug(
"Got notification from %s: %s", handle, codecs.encode(data, "hex")
)
self._notifyevent.set()
if handle in self._callbacks:
self._callbacks[handle](data)
@property
def mac(self):
"""Return the MAC address of the connected device."""
return self._mac
def set_callback(self, handle, function):
"""Set the callback for a Notification handle. It will be called with the parameter data, which is binary."""
self._notification_handle = handle
self._callbacks[handle] = function
async def wait_for_response(self, timeout):
with contextlib.suppress(asyncio.TimeoutError):
await asyncio.wait_for(self._notifyevent.wait(), timeout)
def make_request(self, handle, value, timeout=DEFAULT_TIMEOUT, with_response=True):
"""Write a GATT Command without callback - not utf-8."""
try:
with self:
_LOGGER.debug(
"Writing %s to %s",
codecs.encode(value, "hex"),
handle,
)
self._notifyevent.clear()
self._loop.run_until_complete(
self._conn.write_gatt_char(handle - 1, value)
)
if timeout:
_LOGGER.debug("Waiting for notifications for %s", timeout)
self._loop.run_until_complete(self.wait_for_response(timeout))
except BleakError as ex:
_LOGGER.debug("Got exception from bleak while making a request: %s", ex)
raise BackendException("Exception on write using bleak") from ex

View File

@ -0,0 +1,95 @@
"""
A simple wrapper for bluepy's btle.Connection.
Handles Connection duties (reconnecting etc.) transparently.
"""
import codecs
import logging
from bluepy import btle
from . import BackendException
DEFAULT_TIMEOUT = 1
_LOGGER = logging.getLogger(__name__)
class BTLEConnection(btle.DefaultDelegate):
"""Representation of a BTLE Connection."""
def __init__(self, mac, iface):
"""Initialize the connection."""
btle.DefaultDelegate.__init__(self)
self._conn = None
self._mac = mac
self._iface = iface
self._callbacks = {}
def __enter__(self):
"""
Context manager __enter__ for connecting the device
:rtype: btle.Peripheral
:return:
"""
self._conn = btle.Peripheral()
self._conn.withDelegate(self)
_LOGGER.debug("Trying to connect to %s", self._mac)
try:
self._conn.connect(self._mac, iface=self._iface)
except btle.BTLEException as ex:
_LOGGER.debug(
"Unable to connect to the device %s, retrying: %s", self._mac, ex
)
try:
self._conn.connect(self._mac, iface=self._iface)
except Exception as ex2:
_LOGGER.debug("Second connection try to %s failed: %s", self._mac, ex2)
raise BackendException(
"Unable to connect to device using bluepy"
) from ex2
_LOGGER.debug("Connected to %s", self._mac)
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if self._conn:
self._conn.disconnect()
self._conn = None
def handleNotification(self, handle, data):
"""Handle Callback from a Bluetooth (GATT) request."""
_LOGGER.debug(
"Got notification from %s: %s", handle, codecs.encode(data, "hex")
)
if handle in self._callbacks:
self._callbacks[handle](data)
@property
def mac(self):
"""Return the MAC address of the connected device."""
return self._mac
def set_callback(self, handle, function):
"""Set the callback for a Notification handle. It will be called with the parameter data, which is binary."""
self._callbacks[handle] = function
def make_request(self, handle, value, timeout=DEFAULT_TIMEOUT, with_response=True):
"""Write a GATT Command without callback - not utf-8."""
try:
with self:
_LOGGER.debug(
"Writing %s to %s with with_response=%s",
codecs.encode(value, "hex"),
handle,
with_response,
)
self._conn.writeCharacteristic(
handle, value, withResponse=with_response
)
if timeout:
_LOGGER.debug("Waiting for notifications for %s", timeout)
self._conn.waitForNotifications(timeout)
except btle.BTLEException as ex:
_LOGGER.debug("Got exception from bluepy while making a request: %s", ex)
raise BackendException("Exception on write using bluepy") from ex

View File

@ -0,0 +1,491 @@
"""
Support for eq3 Bluetooth Smart thermostats.
All temperatures in Celsius.
To get the current state, update() has to be called for powersaving reasons.
Schedule needs to be requested with query_schedule() before accessing for similar reasons.
"""
import codecs
import logging
import struct
from datetime import datetime, timedelta
from enum import IntEnum
from construct import Byte
from .structures import AwayDataAdapter, DeviceId, Schedule, Status
_LOGGER = logging.getLogger(__name__)
PROP_WRITE_HANDLE = 0x411
PROP_NTFY_HANDLE = 0x421
PROP_ID_QUERY = 0
PROP_ID_RETURN = 1
PROP_INFO_QUERY = 3
PROP_INFO_RETURN = 2
PROP_COMFORT_ECO_CONFIG = 0x11
PROP_OFFSET = 0x13
PROP_WINDOW_OPEN_CONFIG = 0x14
PROP_SCHEDULE_QUERY = 0x20
PROP_SCHEDULE_RETURN = 0x21
PROP_MODE_WRITE = 0x40
PROP_TEMPERATURE_WRITE = 0x41
PROP_COMFORT = 0x43
PROP_ECO = 0x44
PROP_BOOST = 0x45
PROP_LOCK = 0x80
EQ3BT_AWAY_TEMP = 12.0
EQ3BT_MIN_TEMP = 5.0
EQ3BT_MAX_TEMP = 29.5
EQ3BT_OFF_TEMP = 4.5
EQ3BT_ON_TEMP = 30.0
class Mode(IntEnum):
"""Thermostat modes."""
Unknown = -1
Closed = 0
Open = 1
Auto = 2
Manual = 3
Away = 4
Boost = 5
MODE_NOT_TEMP = [Mode.Unknown, Mode.Closed, Mode.Open]
class TemperatureException(Exception):
"""Temperature out of range error."""
pass
# pylint: disable=too-many-instance-attributes
class Thermostat:
"""Representation of a EQ3 Bluetooth Smart thermostat."""
def __init__(self, _mac, _iface=None, connection_cls=None):
"""Initialize the thermostat."""
self._target_temperature = Mode.Unknown
self._mode = Mode.Unknown
self._valve_state = Mode.Unknown
self._raw_mode = None
self._schedule = {}
self._window_open_temperature = None
self._window_open_time = None
self._comfort_temperature = None
self._eco_temperature = None
self._temperature_offset = None
self._away_temp = EQ3BT_AWAY_TEMP
self._away_duration = timedelta(days=30)
self._away_end = None
self._firmware_version = None
self._device_serial = None
if connection_cls is None:
from .bleakconnection import BleakConnection as connection_cls
self._conn = connection_cls(_mac, _iface)
self._conn.set_callback(PROP_NTFY_HANDLE, self.handle_notification)
def __str__(self):
away_end = "no"
if self.away_end:
away_end = "end: %s" % self._away_end
return "[{}] Target {} (mode: {}, away: {})".format(
self._conn.mac, self.target_temperature, self.mode_readable, away_end
)
def _verify_temperature(self, temp):
"""Verifies that the temperature is valid.
:raises TemperatureException: On invalid temperature.
"""
if temp < self.min_temp or temp > self.max_temp:
raise TemperatureException(
"Temperature {} out of range [{}, {}]".format(
temp, self.min_temp, self.max_temp
)
)
def parse_schedule(self, data):
"""Parses the device sent schedule."""
sched = Schedule.parse(data)
_LOGGER.debug("Got schedule data for day '%s'", sched.day)
return sched
def handle_notification(self, data):
"""Handle Callback from a Bluetooth (GATT) request."""
_LOGGER.debug("Received notification from the device..")
if data[0] == PROP_INFO_RETURN and data[1] == 1:
_LOGGER.debug("Got status: %s" % codecs.encode(data, "hex"))
status = Status.parse(data)
_LOGGER.debug("Parsed status: %s", status)
self._raw_mode = status.mode
self._valve_state = status.valve
self._target_temperature = status.target_temp
if status.mode.BOOST:
self._mode = Mode.Boost
elif status.mode.AWAY:
self._mode = Mode.Away
self._away_end = status.away
elif status.mode.MANUAL:
if status.target_temp == EQ3BT_OFF_TEMP:
self._mode = Mode.Closed
elif status.target_temp == EQ3BT_ON_TEMP:
self._mode = Mode.Open
else:
self._mode = Mode.Manual
else:
self._mode = Mode.Auto
presets = status.presets
if presets:
self._window_open_temperature = presets.window_open_temp
self._window_open_time = presets.window_open_time
self._comfort_temperature = presets.comfort_temp
self._eco_temperature = presets.eco_temp
self._temperature_offset = presets.offset
else:
self._window_open_temperature = None
self._window_open_time = None
self._comfort_temperature = None
self._eco_temperature = None
self._temperature_offset = None
_LOGGER.debug("Valve state: %s", self._valve_state)
_LOGGER.debug("Mode: %s", self.mode_readable)
_LOGGER.debug("Target temp: %s", self._target_temperature)
_LOGGER.debug("Away end: %s", self._away_end)
_LOGGER.debug("Window open temp: %s", self._window_open_temperature)
_LOGGER.debug("Window open time: %s", self._window_open_time)
_LOGGER.debug("Comfort temp: %s", self._comfort_temperature)
_LOGGER.debug("Eco temp: %s", self._eco_temperature)
_LOGGER.debug("Temp offset: %s", self._temperature_offset)
elif data[0] == PROP_SCHEDULE_RETURN:
parsed = self.parse_schedule(data)
self._schedule[parsed.day] = parsed
elif data[0] == PROP_ID_RETURN:
parsed = DeviceId.parse(data)
_LOGGER.debug("Parsed device data: %s", parsed)
self._firmware_version = parsed.version
self._device_serial = parsed.serial
else:
_LOGGER.debug(
"Unknown notification %s (%s)", data[0], codecs.encode(data, "hex")
)
def query_id(self):
"""Query device identification information, e.g. the serial number."""
_LOGGER.debug("Querying id..")
value = struct.pack("B", PROP_ID_QUERY)
self._conn.make_request(PROP_WRITE_HANDLE, value)
def update(self):
"""Update the data from the thermostat. Always sets the current time."""
_LOGGER.debug("Querying the device..")
time = datetime.now()
value = struct.pack(
"BBBBBBB",
PROP_INFO_QUERY,
time.year % 100,
time.month,
time.day,
time.hour,
time.minute,
time.second,
)
self._conn.make_request(PROP_WRITE_HANDLE, value)
def query_schedule(self, day):
_LOGGER.debug("Querying schedule..")
if day < 0 or day > 6:
_LOGGER.error("Invalid day: %s", day)
value = struct.pack("BB", PROP_SCHEDULE_QUERY, day)
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def schedule(self):
"""Returns previously fetched schedule.
:return: Schedule structure or None if not fetched.
"""
return self._schedule
def set_schedule(self, data):
"""Sets the schedule for the given day."""
value = Schedule.build(data)
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def target_temperature(self):
"""Return the temperature we try to reach."""
return self._target_temperature
@target_temperature.setter
def target_temperature(self, temperature):
"""Set new target temperature."""
dev_temp = int(temperature * 2)
if temperature == EQ3BT_OFF_TEMP or temperature == EQ3BT_ON_TEMP:
dev_temp |= 0x40
value = struct.pack("BB", PROP_MODE_WRITE, dev_temp)
else:
self._verify_temperature(temperature)
value = struct.pack("BB", PROP_TEMPERATURE_WRITE, dev_temp)
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def mode(self):
"""Return the current operation mode"""
return self._mode
@mode.setter
def mode(self, mode):
"""Set the operation mode."""
_LOGGER.debug("Setting new mode: %s", mode)
if self.mode == Mode.Boost and mode != Mode.Boost:
self.boost = False
if mode == Mode.Boost:
self.boost = True
return
elif mode == Mode.Away:
end = datetime.now() + self._away_duration
return self.set_away(end, self._away_temp)
elif mode == Mode.Closed:
return self.set_mode(0x40 | int(EQ3BT_OFF_TEMP * 2))
elif mode == Mode.Open:
return self.set_mode(0x40 | int(EQ3BT_ON_TEMP * 2))
if mode == Mode.Manual:
temperature = max(
min(self._target_temperature, self.max_temp), self.min_temp
)
return self.set_mode(0x40 | int(temperature * 2))
else:
return self.set_mode(0)
@property
def away_end(self):
return self._away_end
def set_away(self, away_end=None, temperature=EQ3BT_AWAY_TEMP):
"""Sets away mode with target temperature.
When called without parameters disables away mode."""
if not away_end:
_LOGGER.debug("Disabling away, going to auto mode.")
return self.set_mode(0x00)
_LOGGER.debug("Setting away until %s, temp %s", away_end, temperature)
adapter = AwayDataAdapter(Byte[4])
packed = adapter.build(away_end)
self.set_mode(0x80 | int(temperature * 2), packed)
def set_mode(self, mode, payload=None):
value = struct.pack("BB", PROP_MODE_WRITE, mode)
if payload:
value += payload
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def mode_readable(self):
"""Return a readable representation of the mode.."""
ret = ""
mode = self._raw_mode
if mode.MANUAL:
ret = "manual"
if self.target_temperature < self.min_temp:
ret += " off"
elif self.target_temperature >= self.max_temp:
ret += " on"
else:
ret += " (%sC)" % self.target_temperature
else:
ret = "auto"
if mode.AWAY:
ret += " holiday"
if mode.BOOST:
ret += " boost"
if mode.DST:
ret += " dst"
if mode.WINDOW:
ret += " window"
if mode.LOCKED:
ret += " locked"
if mode.LOW_BATTERY:
ret += " low battery"
return ret
@property
def boost(self):
"""Returns True if the thermostat is in boost mode."""
return self.mode == Mode.Boost
@boost.setter
def boost(self, boost):
"""Sets boost mode."""
_LOGGER.debug("Setting boost mode: %s", boost)
value = struct.pack("BB", PROP_BOOST, bool(boost))
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def valve_state(self):
"""Returns the valve state. Probably reported as percent open."""
return self._valve_state
@property
def window_open(self):
"""Returns True if the thermostat reports a open window
(detected by sudden drop of temperature)"""
return self._raw_mode and self._raw_mode.WINDOW
def window_open_config(self, temperature, duration):
"""Configures the window open behavior. The duration is specified in
5 minute increments."""
_LOGGER.debug(
"Window open config, temperature: %s duration: %s", temperature, duration
)
self._verify_temperature(temperature)
if duration.seconds < 0 and duration.seconds > 3600:
raise ValueError
value = struct.pack(
"BBB",
PROP_WINDOW_OPEN_CONFIG,
int(temperature * 2),
int(duration.seconds / 300),
)
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def window_open_temperature(self):
"""The temperature to set when an open window is detected."""
return self._window_open_temperature
@property
def window_open_time(self):
"""Timeout to reset the thermostat after an open window is detected."""
return self._window_open_time
@property
def locked(self):
"""Returns True if the thermostat is locked."""
return self._raw_mode and self._raw_mode.LOCKED
@locked.setter
def locked(self, lock):
"""Locks or unlocks the thermostat."""
_LOGGER.debug("Setting the lock: %s", lock)
value = struct.pack("BB", PROP_LOCK, bool(lock))
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def low_battery(self):
"""Returns True if the thermostat reports a low battery."""
return self._raw_mode and self._raw_mode.LOW_BATTERY
def temperature_presets(self, comfort, eco):
"""Set the thermostats preset temperatures comfort (sun) and
eco (moon)."""
_LOGGER.debug("Setting temperature presets, comfort: %s eco: %s", comfort, eco)
self._verify_temperature(comfort)
self._verify_temperature(eco)
value = struct.pack(
"BBB", PROP_COMFORT_ECO_CONFIG, int(comfort * 2), int(eco * 2)
)
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def comfort_temperature(self):
"""Returns the comfort temperature preset of the thermostat."""
return self._comfort_temperature
@property
def eco_temperature(self):
"""Returns the eco temperature preset of the thermostat."""
return self._eco_temperature
@property
def temperature_offset(self):
"""Returns the thermostat's temperature offset."""
return self._temperature_offset
@temperature_offset.setter
def temperature_offset(self, offset):
"""Sets the thermostat's temperature offset."""
_LOGGER.debug("Setting offset: %s", offset)
# [-3,5 .. 0 .. 3,5 ]
# [00 .. 07 .. 0e ]
if offset < -3.5 or offset > 3.5:
raise TemperatureException("Invalid value: %s" % offset)
current = -3.5
values = {}
for i in range(15):
values[current] = i
current += 0.5
value = struct.pack("BB", PROP_OFFSET, values[offset])
self._conn.make_request(PROP_WRITE_HANDLE, value)
def activate_comfort(self):
"""Activates the comfort temperature."""
value = struct.pack("B", PROP_COMFORT)
self._conn.make_request(PROP_WRITE_HANDLE, value)
def activate_eco(self):
"""Activates the comfort temperature."""
value = struct.pack("B", PROP_ECO)
self._conn.make_request(PROP_WRITE_HANDLE, value)
@property
def min_temp(self):
"""Return the minimum temperature."""
return EQ3BT_MIN_TEMP
@property
def max_temp(self):
"""Return the maximum temperature."""
return EQ3BT_MAX_TEMP
@property
def firmware_version(self):
"""Return the firmware version."""
return self._firmware_version
@property
def device_serial(self):
"""Return the device serial number."""
return self._device_serial
@property
def mac(self):
"""Return the mac address."""
return self._conn.mac

View File

@ -0,0 +1,212 @@
""" Cli tool for testing connectivity with EQ3 smart thermostats. """
import logging
import re
import click
from eq3bt import Thermostat
pass_dev = click.make_pass_decorator(Thermostat)
def validate_mac(ctx, param, mac):
if re.match("^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$", mac) is None:
raise click.BadParameter(mac + " is no valid mac address")
return mac
@click.group(invoke_without_command=True)
@click.option("--mac", envvar="EQ3_MAC", required=True, callback=validate_mac)
@click.option("--interface", default=None)
@click.option("--debug/--normal", default=False)
@click.option(
"--backend", type=click.Choice(["bleak", "bluepy", "gattlib"]), default="bleak"
)
@click.pass_context
def cli(ctx, mac, interface, debug, backend):
"""Tool to query and modify the state of EQ3 BT smart thermostat."""
if debug:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
if backend == "bluepy":
from .connection import BTLEConnection
connection_cls = BTLEConnection
elif backend == "gattlib":
from .gattlibconnection import BTLEConnection
connection_cls = BTLEConnection
else:
from .bleakconnection import BleakConnection
connection_cls = BleakConnection
thermostat = Thermostat(mac, interface, connection_cls)
thermostat.update()
ctx.obj = thermostat
if ctx.invoked_subcommand is None:
ctx.invoke(state)
@cli.command()
@click.option("--target", type=float, required=False)
@pass_dev
def temp(dev, target):
"""Gets or sets the target temperature."""
click.echo("Current target temp: %s" % dev.target_temperature)
if target:
click.echo("Setting target temp: %s" % target)
dev.target_temperature = target
@cli.command()
@click.option("--target", type=int, required=False)
@pass_dev
def mode(dev, target):
"""Gets or sets the active mode."""
click.echo("Current mode: %s" % dev.mode_readable)
if target:
click.echo("Setting mode: %s" % target)
dev.mode = target
@cli.command()
@click.option("--target", type=bool, required=False)
@pass_dev
def boost(dev, target):
"""Gets or sets the boost mode."""
click.echo("Boost: %s" % dev.boost)
if target is not None:
click.echo("Setting boost: %s" % target)
dev.boost = target
@cli.command()
@pass_dev
def valve_state(dev):
"""Gets the state of the valve."""
click.echo("Valve: %s" % dev.valve_state)
@cli.command()
@click.option("--target", type=bool, required=False)
@pass_dev
def locked(dev, target):
"""Gets or sets the lock."""
click.echo("Locked: %s" % dev.locked)
if target is not None:
click.echo("Setting lock: %s" % target)
dev.locked = target
@cli.command()
@pass_dev
def low_battery(dev):
"""Gets the low battery status."""
click.echo("Batter low: %s" % dev.low_battery)
@cli.command()
@click.option("--temp", type=float, required=False)
@click.option("--duration", type=float, required=False)
@pass_dev
def window_open(dev, temp, duration):
"""Gets and sets the window open settings."""
click.echo("Window open: %s" % dev.window_open)
if dev.window_open_temperature is not None:
click.echo("Window open temp: %s" % dev.window_open_temperature)
if dev.window_open_time is not None:
click.echo("Window open time: %s" % dev.window_open_time)
if temp and duration:
click.echo(f"Setting window open conf, temp: {temp} duration: {duration}")
dev.window_open_config(temp, duration)
@cli.command()
@click.option("--comfort", type=float, required=False)
@click.option("--eco", type=float, required=False)
@pass_dev
def presets(dev, comfort, eco):
"""Sets the preset temperatures for auto mode."""
if dev.comfort_temperature is not None:
click.echo("Current comfort temp: %s" % dev.comfort_temperature)
if dev.eco_temperature is not None:
click.echo("Current eco temp: %s" % dev.eco_temperature)
if comfort and eco:
click.echo(f"Setting presets: comfort {comfort}, eco {eco}")
dev.temperature_presets(comfort, eco)
@cli.command()
@pass_dev
def schedule(dev):
"""Gets the schedule from the thermostat."""
# TODO: expose setting the schedule somehow?
for d in range(7):
dev.query_schedule(d)
for day in dev.schedule.values():
click.echo(f"Day {day.day}, base temp: {day.base_temp}")
current_hour = day.next_change_at
for hour in day.hours:
if current_hour == 0:
continue
click.echo(f"\t[{current_hour}-{hour.next_change_at}] {hour.target_temp}")
current_hour = hour.next_change_at
@cli.command()
@click.argument("offset", type=float, required=False)
@pass_dev
def offset(dev, offset):
"""Sets the temperature offset [-3,5 3,5]"""
if dev.temperature_offset is not None:
click.echo("Current temp offset: %s" % dev.temperature_offset)
if offset is not None:
click.echo("Setting the offset to %s" % offset)
dev.temperature_offset = offset
@cli.command()
@click.argument("away_end", type=click.DateTime(), default=None, required=False)
@click.argument("temperature", type=float, default=None, required=False)
@pass_dev
def away(dev, away_end, temperature):
"""Enables or disables the away mode."""
if away_end:
click.echo(f"Setting away until {away_end}, temperature: {temperature}")
else:
click.echo("Disabling away mode")
dev.set_away(away_end, temperature)
@cli.command()
@pass_dev
def device(dev):
"""Displays basic device information."""
dev.query_id()
click.echo("Firmware version: %s" % dev.firmware_version)
click.echo("Device serial: %s" % dev.device_serial)
@cli.command()
@click.pass_context
def state(ctx):
"""Prints out all available information."""
dev = ctx.obj
click.echo(dev)
ctx.forward(locked)
ctx.forward(low_battery)
ctx.forward(window_open)
ctx.forward(boost)
ctx.forward(temp)
ctx.forward(presets)
ctx.forward(offset)
ctx.forward(mode)
ctx.forward(valve_state)
if __name__ == "__main__":
cli()

View File

@ -0,0 +1,99 @@
"""
A simple adapter to gattlib.
Handles Connection duties (reconnecting etc.) transparently.
"""
import codecs
import logging
import threading
import gattlib
from . import BackendException
DEFAULT_TIMEOUT = 1
_LOGGER = logging.getLogger(__name__)
class BTLEConnection:
"""Representation of a BTLE Connection."""
def __init__(self, mac, iface):
"""Initialize the connection."""
self._conn = None
self._mac = mac
self._iface = iface
self._callbacks = {}
self._notifyevent = None
def __enter__(self):
"""
Context manager __enter__ for connecting the device
:rtype: BTLEConnection
:return:
"""
_LOGGER.debug("Trying to connect to %s", self._mac)
if self._iface is None:
self._conn = gattlib.GATTRequester(self._mac, False)
else:
self._conn = gattlib.GATTRequester(self._mac, False, self._iface)
self._conn.on_notification = self.on_notification
try:
self._conn.connect()
except gattlib.BTBaseException as ex:
_LOGGER.debug(
"Unable to connect to the device %s, retrying: %s", self._mac, ex
)
try:
self._conn.connect()
except Exception as ex2:
_LOGGER.debug("Second connection try to %s failed: %s", self._mac, ex2)
raise BackendException(
"unable to connect to device using gattlib"
) from ex2
_LOGGER.debug("Connected to %s", self._mac)
return self
def __exit__(self, exc_type, exc_val, exc_tb):
if self._conn:
self._conn.disconnect()
self._conn = None
def on_notification(self, handle, data):
"""Handle Callback from a Bluetooth (GATT) request."""
_LOGGER.debug(
"Got notification from %s: %s", handle, codecs.encode(data, "hex")
)
if handle in self._callbacks:
self._callbacks[handle](data[3:])
if self._notifyevent:
self._notifyevent.set()
@property
def mac(self):
"""Return the MAC address of the connected device."""
return self._mac
def set_callback(self, handle, function):
"""Set the callback for a Notification handle. It will be called with the parameter data, which is binary."""
self._callbacks[handle] = function
def make_request(self, handle, value, timeout=DEFAULT_TIMEOUT, with_response=True):
"""Write a GATT Command without callback - not utf-8."""
try:
with self:
_LOGGER.debug(
"Writing %s to %s",
codecs.encode(value, "hex"),
handle,
)
self._notifyevent = threading.Event()
self._conn.write_by_handle(handle, value)
if timeout:
_LOGGER.debug("Waiting for notifications for %s", timeout)
self._notifyevent.wait(timeout)
except gattlib.BTBaseException as ex:
_LOGGER.debug("Got exception from gattlib while making a request: %s", ex)
raise BackendException("Exception on write using gattlib") from ex

View File

@ -0,0 +1,174 @@
""" Contains construct adapters and structures. """
from datetime import datetime, time, timedelta
from construct import (
Adapter,
Bytes,
Const,
Enum,
FlagsEnum,
GreedyRange,
IfThenElse,
Int8ub,
Optional,
Struct,
)
PROP_ID_RETURN = 1
PROP_INFO_RETURN = 2
PROP_SCHEDULE_SET = 0x10
PROP_SCHEDULE_RETURN = 0x21
NAME_TO_DAY = {"sat": 0, "sun": 1, "mon": 2, "tue": 3, "wed": 4, "thu": 5, "fri": 6}
NAME_TO_CMD = {"write": PROP_SCHEDULE_SET, "response": PROP_SCHEDULE_RETURN}
HOUR_24_PLACEHOLDER = 1234
class TimeAdapter(Adapter):
"""Adapter to encode and decode schedule times."""
def _decode(self, obj, ctx, path):
h, m = divmod(obj * 10, 60)
if h == 24: # HACK, can we do better?
return HOUR_24_PLACEHOLDER
return time(hour=h, minute=m)
def _encode(self, obj, ctx, path):
# TODO: encode h == 24 hack
if obj == HOUR_24_PLACEHOLDER:
return int(24 * 60 / 10)
encoded = int((obj.hour * 60 + obj.minute) / 10)
return encoded
class TempAdapter(Adapter):
"""Adapter to encode and decode temperature."""
def _decode(self, obj, ctx, path):
return float(obj / 2.0)
def _encode(self, obj, ctx, path):
return int(obj * 2.0)
class WindowOpenTimeAdapter(Adapter):
"""Adapter to encode and decode window open times (5 min increments)."""
def _decode(self, obj, context, path):
return timedelta(minutes=float(obj * 5.0))
def _encode(self, obj, context, path):
if isinstance(obj, timedelta):
obj = obj.seconds
if 0 <= obj <= 3600.0:
return int(obj / 300.0)
raise ValueError(
"Window open time must be between 0 and 60 minutes "
"in intervals of 5 minutes."
)
class TempOffsetAdapter(Adapter):
"""Adapter to encode and decode the temperature offset."""
def _decode(self, obj, context, path):
return float((obj - 7) / 2.0)
def _encode(self, obj, context, path):
if -3.5 <= obj <= 3.5:
return int(obj * 2.0) + 7
raise ValueError(
"Temperature offset must be between -3.5 and 3.5 (in " "intervals of 0.5)."
)
ModeFlags = "ModeFlags" / FlagsEnum(
Int8ub,
AUTO=0x00, # always True, doesnt affect building
MANUAL=0x01,
AWAY=0x02,
BOOST=0x04,
DST=0x08,
WINDOW=0x10,
LOCKED=0x20,
UNKNOWN=0x40,
LOW_BATTERY=0x80,
)
class AwayDataAdapter(Adapter):
"""Adapter to encode and decode away data."""
def _decode(self, obj, ctx, path):
(day, year, hour_min, month) = obj
year += 2000
min = 0
if hour_min & 0x01:
min = 30
hour = int(hour_min / 2)
return datetime(year=year, month=month, day=day, hour=hour, minute=min)
def _encode(self, obj, ctx, path):
if obj.year < 2000 or obj.year > 2099:
raise Exception("Invalid year, possible [2000,2099]")
year = obj.year - 2000
hour = obj.hour * 2
if obj.minute: # we encode all minute values to h:30
hour |= 0x01
return (obj.day, year, hour, obj.month)
class DeviceSerialAdapter(Adapter):
"""Adapter to decode the device serial number."""
def _decode(self, obj, context, path):
return bytearray(n - 0x30 for n in obj).decode()
Status = "Status" / Struct(
"cmd" / Const(PROP_INFO_RETURN, Int8ub),
Const(0x01, Int8ub),
"mode" / ModeFlags,
"valve" / Int8ub,
Const(0x04, Int8ub),
"target_temp" / TempAdapter(Int8ub),
"away"
/ IfThenElse( # noqa: W503
lambda ctx: ctx.mode.AWAY, AwayDataAdapter(Bytes(4)), Optional(Bytes(4))
),
"presets"
/ Optional( # noqa: W503
Struct(
"window_open_temp" / TempAdapter(Int8ub),
"window_open_time" / WindowOpenTimeAdapter(Int8ub),
"comfort_temp" / TempAdapter(Int8ub),
"eco_temp" / TempAdapter(Int8ub),
"offset" / TempOffsetAdapter(Int8ub),
)
),
)
Schedule = "Schedule" / Struct(
"cmd" / Enum(Int8ub, **NAME_TO_CMD),
"day" / Enum(Int8ub, **NAME_TO_DAY),
"base_temp" / TempAdapter(Int8ub),
"next_change_at" / TimeAdapter(Int8ub),
"hours"
/ GreedyRange( # noqa: W503
Struct(
"target_temp" / TempAdapter(Int8ub),
"next_change_at" / TimeAdapter(Int8ub),
)
),
)
DeviceId = "DeviceId" / Struct(
"cmd" / Const(PROP_ID_RETURN, Int8ub),
"version" / Int8ub,
Int8ub,
Int8ub,
"serial" / DeviceSerialAdapter(Bytes(10)),
Int8ub,
)

View File

@ -0,0 +1,198 @@
import codecs
from datetime import datetime, timedelta
from unittest import TestCase
import pytest
from eq3bt import TemperatureException, Thermostat
from eq3bt.eq3btsmart import PROP_ID_QUERY, PROP_INFO_QUERY, PROP_NTFY_HANDLE, Mode
ID_RESPONSE = b"01780000807581626163606067659e"
STATUS_RESPONSES = {
"auto": b"020100000428",
"manual": b"020101000428",
"window": b"020110000428",
"away": b"0201020004231d132e03",
"boost": b"020104000428",
"low_batt": b"020180000428",
"valve_at_22": b"020100160428",
"presets": b"020100000422000000001803282207",
}
class FakeConnection:
def __init__(self, _iface, mac):
self._callbacks = {}
self._res = "auto"
def set_callback(self, handle, cb):
self._callbacks[handle] = cb
def set_status(self, key):
if key in STATUS_RESPONSES:
self._res = key
else:
raise ValueError("Invalid key for status test response.")
def make_request(self, handle, value, timeout=1, with_response=True):
"""Write a GATT Command without callback - not utf-8."""
if with_response:
cb = self._callbacks.get(PROP_NTFY_HANDLE)
if value[0] == PROP_ID_QUERY:
data = ID_RESPONSE
elif value[0] == PROP_INFO_QUERY:
data = STATUS_RESPONSES[self._res]
else:
return
cb(codecs.decode(data, "hex"))
class TestThermostat(TestCase):
def setUp(self):
self.thermostat = Thermostat(
_mac=None, _iface=None, connection_cls=FakeConnection
)
def test__verify_temperature(self):
with self.assertRaises(TemperatureException):
self.thermostat._verify_temperature(-1)
with self.assertRaises(TemperatureException):
self.thermostat._verify_temperature(35)
self.thermostat._verify_temperature(8)
self.thermostat._verify_temperature(25)
@pytest.mark.skip()
def test_parse_schedule(self):
self.fail()
@pytest.mark.skip()
def test_handle_notification(self):
self.fail()
def test_query_id(self):
self.thermostat.query_id()
self.assertEqual(self.thermostat.firmware_version, 120)
self.assertEqual(self.thermostat.device_serial, "PEQ2130075")
def test_update(self):
th = self.thermostat
th._conn.set_status("auto")
th.update()
self.assertEqual(th.valve_state, 0)
self.assertEqual(th.mode, Mode.Auto)
self.assertEqual(th.target_temperature, 20.0)
self.assertFalse(th.locked)
self.assertFalse(th.low_battery)
self.assertFalse(th.boost)
self.assertFalse(th.window_open)
th._conn.set_status("manual")
th.update()
self.assertTrue(th.mode, Mode.Manual)
th._conn.set_status("away")
th.update()
self.assertEqual(th.mode, Mode.Away)
self.assertEqual(th.target_temperature, 17.5)
self.assertEqual(th.away_end, datetime(2019, 3, 29, 23, 00))
th._conn.set_status("boost")
th.update()
self.assertTrue(th.boost)
self.assertEqual(th.mode, Mode.Boost)
def test_presets(self):
th = self.thermostat
self.thermostat._conn.set_status("presets")
self.thermostat.update()
self.assertEqual(th.window_open_temperature, 12.0)
self.assertEqual(th.window_open_time, timedelta(minutes=15.0))
self.assertEqual(th.comfort_temperature, 20.0)
self.assertEqual(th.eco_temperature, 17.0)
self.assertEqual(th.temperature_offset, 0)
@pytest.mark.skip()
def test_query_schedule(self):
self.fail()
@pytest.mark.skip()
def test_schedule(self):
self.fail()
@pytest.mark.skip()
def test_set_schedule(self):
self.fail()
@pytest.mark.skip()
def test_target_temperature(self):
self.fail()
@pytest.mark.skip()
def test_mode(self):
self.fail()
@pytest.mark.skip()
def test_mode_readable(self):
self.fail()
@pytest.mark.skip()
def test_boost(self):
self.fail()
def test_valve_state(self):
th = self.thermostat
th._conn.set_status("valve_at_22")
th.update()
self.assertEqual(th.valve_state, 22)
def test_window_open(self):
th = self.thermostat
th._conn.set_status("window")
th.update()
self.assertTrue(th.window_open)
@pytest.mark.skip()
def test_window_open_config(self):
self.fail()
@pytest.mark.skip()
def test_locked(self):
self.fail()
@pytest.mark.skip()
def test_low_battery(self):
th = self.thermostat
th._conn.set_status("low_batt")
th.update()
self.assertTrue(th.low_battery)
@pytest.mark.skip()
def test_temperature_offset(self):
self.fail()
@pytest.mark.skip()
def test_activate_comfort(self):
self.fail()
@pytest.mark.skip()
def test_activate_eco(self):
self.fail()
@pytest.mark.skip()
def test_min_temp(self):
self.fail()
@pytest.mark.skip()
def test_max_temp(self):
self.fail()
@pytest.mark.skip()
def test_away_end(self):
self.fail()
@pytest.mark.skip()
def test_decode_mode(self):
self.fail()

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

Some files were not shown because too many files have changed in this diff Show More