diff --git a/.github/workflows/ari-apis.yml b/.github/workflows/ari-apis.yml old mode 100644 new mode 100755 diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100644 new mode 100755 index e80fd646..a29f7034 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,21 +1,29 @@ # ARI4Java Changelog ## [Unreleased] -[Unreleased]: https://github.com/l3nz/ari4java/compare/v0.12.2...HEAD +[Unreleased]: https://github.com/ari4java/ari4java/compare/v0.12.2...HEAD + +## [0.13.0] +[0.13.0]: https://github.com/ari4java/ari4java/compare/v0.12.2...v0.13.0 +### Changed +- Library updates + +### Added +- `AriVersion.ARI_8_0_0` ## [0.12.2] -[0.12.2]: https://github.com/l3nz/ari4java/compare/v0.12.1...v0.12.2 +[0.12.2]: https://github.com/ari4java/ari4java/compare/v0.12.1...v0.12.2 ### Changed - groupId changed from `ch.loway.oss.ari4java` to `io.github.ari4java` ### Added ## [0.12.1] -[0.12.1]: https://github.com/l3nz/ari4java/compare/v0.12.0...v0.12.1 +[0.12.1]: https://github.com/ari4java/ari4java/compare/v0.12.0...v0.12.1 ### Added - ARI 4.1.3, 5.1.1 & 7.0.0 ## [0.12.0] -[0.12.0]: https://github.com/l3nz/ari4java/compare/v0.11.0...v0.12.0 +[0.12.0]: https://github.com/ari4java/ari4java/compare/v0.11.0...v0.12.0 ### Fixes - onFailure long after WS Connect error #156 - execute shutdown immediately #159 @@ -24,13 +32,13 @@ - WS reconnect count #158 ## [0.11.0] -[0.11.0]: https://github.com/l3nz/ari4java/compare/v.0.10.0...v0.11.0 +[0.11.0]: https://github.com/ari4java/ari4java/compare/v.0.10.0...v0.11.0 ### Added - Unit tests to increase coverage #11 - New ARI binding ## [0.10.0] -[0.10.0]: https://github.com/l3nz/ari4java/compare/v0.9.1...v.0.10.0 +[0.10.0]: https://github.com/ari4java/ari4java/compare/v0.9.1...v.0.10.0 ### Fixed - UnsupportedOperationException #15 - Javadoc warnings #149 @@ -42,14 +50,14 @@ - Script to map Asterisk versions to ARI version ## [0.9.1] - 2020-02-23 -[0.9.1]: https://github.com/l3nz/ari4java/compare/REL-0.9.0...v0.9.1 +[0.9.1]: https://github.com/ari4java/ari4java/compare/REL-0.9.0...v0.9.1 ### Added - Test connection when creating ARI #19 ### Fixed - Mistakenly removed the http aggregator ## [0.9.0] - 2020-02-20 -[0.9.0]: https://github.com/l3nz/ari4java/compare/REL-0.8.1...REL-0.9.0 +[0.9.0]: https://github.com/ari4java/ari4java/compare/REL-0.8.1...REL-0.9.0 ### Added - SLF4J Logger - Connection timeouts #85 #86 @@ -58,41 +66,41 @@ - Support SSL, 150MB limit for `ActionRecordings.getStoredFile()` ## [0.8.1] - 2020-01-25 -[0.8.1]: https://github.com/l3nz/ari4java/compare/REL-0.8.0...REL-0.8.1 +[0.8.1]: https://github.com/ari4java/ari4java/compare/REL-0.8.0...REL-0.8.1 ### Changed - Exception messages #6 ### Fixed - Java 8 Compatibility #142 ## [0.8.0] - 2019-12-23 -[0.8.0]: https://github.com/l3nz/ari4java/compare/REL-070...REL-0.8.0 +[0.8.0]: https://github.com/ari4java/ari4java/compare/REL-070...REL-0.8.0 ### :exclamation: **!! BREAKING CHANGES !!** - API Actions signatures only contain manditory params and returns a Request object which follows the builder/factory pattern ## [0.7.0] - 2019-12-22 -[0.7.0]: https://github.com/l3nz/ari4java/compare/REL-061...REL-070 +[0.7.0]: https://github.com/ari4java/ari4java/compare/REL-061...REL-070 ### Fixed - Treat `fields` as `fields` not `variables` in body parameters - fix `ActionRecordings.getStoredFile()` for `byte[]` & add `ARI.mailboxes()` ## [0.6.1] - 2019-11-07 -[0.6.1]: https://github.com/l3nz/ari4java/compare/REL-060...REL-061 +[0.6.1]: https://github.com/ari4java/ari4java/compare/REL-060...REL-061 ### Fixed - Codegen bug fixes for object ## [0.6.0] - 2019-10-15 -[0.6.0]: https://github.com/l3nz/ari4java/compare/REL-051...REL-060 +[0.6.0]: https://github.com/ari4java/ari4java/compare/REL-051...REL-060 ### Change - Project restructure - Script to include all past and present versions of ARI ## [0.5.1] - 2019-10-15 -[0.5.1]: https://github.com/l3nz/ari4java/compare/REL-050...REL-051 +[0.5.1]: https://github.com/ari4java/ari4java/compare/REL-050...REL-051 ### Fixes - Various fixes (Goodbye Naama!) ## [0.5.0] - 2019-01-07 -[0.5.0]: https://github.com/l3nz/ari4java/compare/REL-045...REL-050 +[0.5.0]: https://github.com/ari4java/ari4java/compare/REL-045...REL-050 ### Added - Support java 9 (#108) - code generation from gradle(#110) @@ -101,47 +109,47 @@ - unsubscribing from application correctly(#59) ## [0.4.5] - 2017-12-19 -[0.4.5]: https://github.com/l3nz/ari4java/compare/REL-044...REL-045 +[0.4.5]: https://github.com/ari4java/ari4java/compare/REL-044...REL-045 ### Added - ARI 3.0.0 (#78) ## [0.4.4] - 2017-02-04 -[0.4.4]: https://github.com/l3nz/ari4java/compare/REL-043...REL-044 +[0.4.4]: https://github.com/ari4java/ari4java/compare/REL-043...REL-044 ### Added - ARI 2.0.0 (#62) ### Changed - quicker deserialization (#63) ## [0.4.3] - 2016-11-30 -[0.4.3]: https://github.com/l3nz/ari4java/compare/REL-042...REL-043 +[0.4.3]: https://github.com/ari4java/ari4java/compare/REL-042...REL-043 ### Fixed - Graham's AutoReconnect patch - #60 ## [0.4.2] - 2016-10-21 -[0.4.2]: https://github.com/l3nz/ari4java/compare/REL-041...REL-042 +[0.4.2]: https://github.com/ari4java/ari4java/compare/REL-041...REL-042 ### Fixing - URL Prefix regression #57 - Findbugs string concatenation #55 ## [0.4.1] - 2016-10-17 -[0.4.1]: https://github.com/l3nz/ari4java/compare/REL-040...REL-041 +[0.4.1]: https://github.com/ari4java/ari4java/compare/REL-040...REL-041 ### Added - Graham's AutoReconnect patch #52 ## [0.4.0] - 2016-08-31 -[0.4.0]: https://github.com/l3nz/ari4java/compare/REL-034...REL-040 +[0.4.0]: https://github.com/ari4java/ari4java/compare/REL-034...REL-040 ### Added - ARI 1.10.0 (Asterisk 14) ### Fixed - some bugs ## [0.3.4] - 2016-01-30 -[0.3.4]: https://github.com/l3nz/ari4java/compare/REL-033...REL-034 +[0.3.4]: https://github.com/ari4java/ari4java/compare/REL-033...REL-034 ### Added - ARI 1.9.0 ## [0.3.3] - 2015-09-23 -[0.3.3]: https://github.com/l3nz/ari4java/compare/REL-022...REL-032 +[0.3.3]: https://github.com/ari4java/ari4java/compare/REL-022...REL-032 ### Added - 201 statuses (bug #33) @@ -158,13 +166,13 @@ - ARI 1.7.0 (bug #28) ## [0.2.2] - 2014-11-09 -[0.2.2]: https://github.com/l3nz/ari4java/compare/v011...REL-022 +[0.2.2]: https://github.com/ari4java/ari4java/compare/v011...REL-022 ### Added - ARI bindings for 1.5.0 as coming from the official Asterisk 13.0.0 release - Added a minimal application under tests/ class ch.loway.oss.ari4java.sandbox.sample to be used as a style laboratory ## [0.1.1] - 2013-12-31 -[0.1.1]: https://github.com/l3nz/ari4java/commits/v011 +[0.1.1]: https://github.com/ari4java/ari4java/commits/v011 ### Added - Netty.io based HTTP and WebSocket implementation, factory, sync and async methods - Imported the definitions for Asterisk 12.0.0 - ARI 1.0.0 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/build.gradle b/build.gradle old mode 100644 new mode 100755 index 50099685..c5922268 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group = "io.github.ari4java" -version = "0.12.2" +version = "0.13.0" def projectUrl = "http://github.com/ari4java/ari4java" def build_number = "x" diff --git a/codegen/build.gradle b/codegen/build.gradle old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/DefMapper.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/DefMapper.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/VERSION.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/VERSION.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/gen/JavaGen.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/gen/JavaGen.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/gen/JavaInterface.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/gen/JavaInterface.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/gen/JavaPkgInfo.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/gen/JavaPkgInfo.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/Action.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/Action.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/Apis.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/Apis.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/AriBuilderInterface.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/AriBuilderInterface.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/ClassTranslator.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/ClassTranslator.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/Model.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/Model.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/ModelField.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/ModelField.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/Operation.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/models/Operation.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/java/ch/loway/oss/ari4java/codegen/run.java b/codegen/src/main/java/ch/loway/oss/ari4java/codegen/run.java old mode 100644 new mode 100755 diff --git a/codegen/src/main/resources/codegen-data/COPYING.asterisk b/codegen/src/main/resources/codegen-data/COPYING.asterisk old mode 100644 new mode 100755 diff --git a/codegen/src/main/resources/codegen-data/LICENSE.asterisk b/codegen/src/main/resources/codegen-data/LICENSE.asterisk old mode 100644 new mode 100755 diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/applications.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/applications.json new file mode 100644 index 00000000..09c5cd5c --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/applications.json @@ -0,0 +1,223 @@ +{ + "_copyright": "Copyright (C) 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/applications.{format}", + "apis": [ + { + "path": "/applications", + "description": "Stasis applications", + "operations": [ + { + "httpMethod": "GET", + "summary": "List all applications.", + "nickname": "list", + "responseClass": "List[Application]" + } + ] + }, + { + "path": "/applications/{applicationName}", + "description": "Stasis application", + "operations": [ + { + "httpMethod": "GET", + "summary": "Get details of an application.", + "nickname": "get", + "responseClass": "Application", + "parameters": [ + { + "name": "applicationName", + "description": "Application's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Application does not exist." + } + ] + } + ] + }, + { + "path": "/applications/{applicationName}/subscription", + "description": "Stasis application", + "operations": [ + { + "httpMethod": "POST", + "summary": "Subscribe an application to a event source.", + "notes": "Returns the state of the application after the subscriptions have changed", + "nickname": "subscribe", + "responseClass": "Application", + "parameters": [ + { + "name": "applicationName", + "description": "Application's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "eventSource", + "description": "URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}[/{resource}], deviceState:{deviceName}", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Missing parameter." + }, + { + "code": 404, + "reason": "Application does not exist." + }, + { + "code": 422, + "reason": "Event source does not exist." + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Unsubscribe an application from an event source.", + "notes": "Returns the state of the application after the subscriptions have changed", + "nickname": "unsubscribe", + "responseClass": "Application", + "parameters": [ + { + "name": "applicationName", + "description": "Application's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "eventSource", + "description": "URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}[/{resource}], deviceState:{deviceName}", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Missing parameter; event source scheme not recognized." + }, + { + "code": 404, + "reason": "Application does not exist." + }, + { + "code": 409, + "reason": "Application not subscribed to event source." + }, + { + "code": 422, + "reason": "Event source does not exist." + } + ] + } + ] + }, + { + "path": "/applications/{applicationName}/eventFilter", + "description": "Stasis application", + "operations": [ + { + "httpMethod": "PUT", + "summary": "Filter application events types.", + "notes": "Allowed and/or disallowed event type filtering can be done. The body (parameter) should specify a JSON key/value object that describes the type of event filtering needed. One, or both of the following keys can be designated:

\"allowed\" - Specifies an allowed list of event types
\"disallowed\" - Specifies a disallowed list of event types

Further, each of those key's value should be a JSON array that holds zero, or more JSON key/value objects. Each of these objects must contain the following key with an associated value:

\"type\" - The type name of the event to filter

The value must be the string name (case sensitive) of the event type that needs filtering. For example:

{ \"allowed\": [ { \"type\": \"StasisStart\" }, { \"type\": \"StasisEnd\" } ] }

As this specifies only an allowed list, then only those two event type messages are sent to the application. No other event messages are sent.

The following rules apply:

* If the body is empty, both the allowed and disallowed filters are set empty.
* If both list types are given then both are set to their respective values (note, specifying an empty array for a given type sets that type to empty).
* If only one list type is given then only that type is set. The other type is not updated.
* An empty \"allowed\" list means all events are allowed.
* An empty \"disallowed\" list means no events are disallowed.
* Disallowed events take precedence over allowed events if the event type is specified in both lists.", + "nickname": "filter", + "responseClass": "Application", + "parameters": [ + { + "name": "applicationName", + "description": "Application's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "filter", + "description": "Specify which event types to allow/disallow", + "paramType": "body", + "required": false, + "dataType": "object", + "allowMultiple": false + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Bad request." + }, + { + "code": 404, + "reason": "Application does not exist." + } + ] + } + ] + } + ], + "models": { + "Application": { + "id": "Application", + "description": "Details of a Stasis application", + "properties": { + "name": { + "type": "string", + "description": "Name of this application", + "required": true + }, + "channel_ids": { + "type": "List[string]", + "description": "Id's for channels subscribed to.", + "required": true + }, + "bridge_ids": { + "type": "List[string]", + "description": "Id's for bridges subscribed to.", + "required": true + }, + "endpoint_ids": { + "type": "List[string]", + "description": "{tech}/{resource} for endpoints subscribed to.", + "required": true + }, + "device_names": { + "type": "List[string]", + "description": "Names of the devices subscribed to.", + "required": true + }, + "events_allowed": { + "type": "List[object]", + "description": "Event types sent to the application.", + "required": true + }, + "events_disallowed": { + "type": "List[object]", + "description": "Event types not sent to the application.", + "required": true + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/asterisk.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/asterisk.json new file mode 100644 index 00000000..841e6cd8 --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/asterisk.json @@ -0,0 +1,725 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/asterisk.{format}", + "apis": [ + { + "path": "/asterisk/config/dynamic/{configClass}/{objectType}/{id}", + "description": "Asterisk dynamic configuration", + "operations": [ + { + "httpMethod": "GET", + "summary": "Retrieve a dynamic configuration object.", + "nickname": "getObject", + "responseClass": "List[ConfigTuple]", + "parameters": [ + { + "name": "configClass", + "description": "The configuration class containing dynamic configuration objects.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "objectType", + "description": "The type of configuration object to retrieve.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "id", + "description": "The unique identifier of the object to retrieve.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "{configClass|objectType|id} not found" + } + ] + }, + { + "httpMethod": "PUT", + "summary": "Create or update a dynamic configuration object.", + "nickname": "updateObject", + "responseClass": "List[ConfigTuple]", + "parameters": [ + { + "name": "configClass", + "description": "The configuration class containing dynamic configuration objects.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "objectType", + "description": "The type of configuration object to create or update.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "id", + "description": "The unique identifier of the object to create or update.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "fields", + "description": "The body object should have a value that is a list of ConfigTuples, which provide the fields to update. Ex. [ { \"attribute\": \"directmedia\", \"value\": \"false\" } ]", + "paramType": "body", + "required": false, + "dataType": "containers", + "allowMultiple": false + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Bad request body" + }, + { + "code": 403, + "reason": "Could not create or update object" + }, + { + "code": 404, + "reason": "{configClass|objectType} not found" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Delete a dynamic configuration object.", + "nickname": "deleteObject", + "responseClass": "void", + "parameters": [ + { + "name": "configClass", + "description": "The configuration class containing dynamic configuration objects.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "objectType", + "description": "The type of configuration object to delete.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "id", + "description": "The unique identifier of the object to delete.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 403, + "reason": "Could not delete object" + }, + { + "code": 404, + "reason": "{configClass|objectType|id} not found" + } + ] + } + ] + }, + { + "path": "/asterisk/info", + "description": "Asterisk system information (similar to core show settings)", + "operations": [ + { + "httpMethod": "GET", + "summary": "Gets Asterisk system information.", + "nickname": "getInfo", + "responseClass": "AsteriskInfo", + "parameters": [ + { + "name": "only", + "description": "Filter information returned", + "paramType": "query", + "required": false, + "allowMultiple": true, + "dataType": "string", + "allowableValues": { + "valueType": "LIST", + "values": [ + "build", + "system", + "config", + "status" + ] + } + } + ] + } + ] + }, + { + "path": "/asterisk/ping", + "description": "Asterisk ping", + "operations": [ + { + "httpMethod": "GET", + "summary": "Response pong message.", + "nickname": "ping", + "responseClass": "AsteriskPing" + } + ] + }, + { + "path": "/asterisk/modules", + "description": "Asterisk modules", + "operations": [ + { + "httpMethod": "GET", + "summary": "List Asterisk modules.", + "nickname": "listModules", + "responseClass": "List[Module]" + } + ] + }, + { + "path": "/asterisk/modules/{moduleName}", + "description": "Asterisk module", + "operations": [ + { + "httpMethod": "GET", + "summary": "Get Asterisk module information.", + "nickname": "getModule", + "responseClass": "Module", + "parameters": [ + { + "name": "moduleName", + "description": "Module's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Module could not be found in running modules." + }, + { + "code": 409, + "reason": "Module information could not be retrieved." + } + ] + }, + { + "httpMethod": "POST", + "summary": "Load an Asterisk module.", + "nickname": "loadModule", + "responseClass": "void", + "parameters": [ + { + "name": "moduleName", + "description": "Module's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 409, + "reason": "Module could not be loaded." + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Unload an Asterisk module.", + "nickname": "unloadModule", + "responseClass": "void", + "parameters": [ + { + "name": "moduleName", + "description": "Module's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Module not found in running modules." + }, + { + "code": 409, + "reason": "Module could not be unloaded." + } + ] + }, + { + "httpMethod": "PUT", + "summary": "Reload an Asterisk module.", + "nickname": "reloadModule", + "responseClass": "void", + "parameters": [ + { + "name": "moduleName", + "description": "Module's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Module not found in running modules." + }, + { + "code": 409, + "reason": "Module could not be reloaded." + } + ] + } + ] + }, + { + "path": "/asterisk/logging", + "description": "Asterisk log channels", + "operations": [ + { + "httpMethod": "GET", + "summary": "Gets Asterisk log channel information.", + "nickname": "listLogChannels", + "responseClass": "List[LogChannel]" + } + ] + }, + { + "path": "/asterisk/logging/{logChannelName}", + "description": "Asterisk log channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Adds a log channel.", + "nickname": "addLog", + "responseClass": "void", + "parameters": [ + { + "name": "logChannelName", + "description": "The log channel to add", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "configuration", + "description": "levels of the log channel", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Bad request body" + }, + { + "code": 409, + "reason": "Log channel could not be created." + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Deletes a log channel.", + "nickname": "deleteLog", + "responseClass": "void", + "parameters": [ + { + "name": "logChannelName", + "description": "Log channels name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Log channel does not exist." + } + ] + } + ] + }, + { + "path": "/asterisk/logging/{logChannelName}/rotate", + "description": "Asterisk log channel", + "operations": [ + { + "httpMethod": "PUT", + "summary": "Rotates a log channel.", + "nickname": "rotateLog", + "responseClass": "void", + "parameters": [ + { + "name": "logChannelName", + "description": "Log channel's name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Log channel does not exist." + } + ] + } + ] + }, + { + "path": "/asterisk/variable", + "description": "Global variables", + "operations": [ + { + "httpMethod": "GET", + "summary": "Get the value of a global variable.", + "nickname": "getGlobalVar", + "responseClass": "Variable", + "parameters": [ + { + "name": "variable", + "description": "The variable to get", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Missing variable parameter." + } + ] + }, + { + "httpMethod": "POST", + "summary": "Set the value of a global variable.", + "nickname": "setGlobalVar", + "responseClass": "void", + "parameters": [ + { + "name": "variable", + "description": "The variable to set", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "value", + "description": "The value to set the variable to", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Missing variable parameter." + } + ] + } + ] + } + ], + "models": { + "BuildInfo": { + "id": "BuildInfo", + "description": "Info about how Asterisk was built", + "properties": { + "os": { + "required": true, + "type": "string", + "description": "OS Asterisk was built on." + }, + "kernel": { + "required": true, + "type": "string", + "description": "Kernel version Asterisk was built on." + }, + "options": { + "required": true, + "type": "string", + "description": "Compile time options, or empty string if default." + }, + "machine": { + "required": true, + "type": "string", + "description": "Machine architecture (x86_64, i686, ppc, etc.)" + }, + "date": { + "required": true, + "type": "string", + "description": "Date and time when Asterisk was built." + }, + "user": { + "required": true, + "type": "string", + "description": "Username that build Asterisk" + } + } + }, + "SystemInfo": { + "id": "SystemInfo", + "description": "Info about Asterisk", + "properties": { + "version": { + "required": true, + "type": "string", + "description": "Asterisk version." + }, + "entity_id": { + "required": true, + "type": "string", + "description": "" + } + } + }, + "SetId": { + "id": "SetId", + "description": "Effective user/group id", + "properties": { + "user": { + "required": true, + "type": "string", + "description": "Effective user id." + }, + "group": { + "required": true, + "type": "string", + "description": "Effective group id." + } + } + }, + "ConfigInfo": { + "id": "ConfigInfo", + "description": "Info about Asterisk configuration", + "properties": { + "name": { + "required": true, + "type": "string", + "description": "Asterisk system name." + }, + "default_language": { + "required": true, + "type": "string", + "description": "Default language for media playback." + }, + "max_channels": { + "required": false, + "type": "int", + "description": "Maximum number of simultaneous channels." + }, + "max_open_files": { + "required": false, + "type": "int", + "description": "Maximum number of open file handles (files, sockets)." + }, + "max_load": { + "required": false, + "type": "double", + "description": "Maximum load avg on system." + }, + "setid": { + "required": true, + "type": "SetId", + "description": "Effective user/group id for running Asterisk." + } + } + }, + "StatusInfo": { + "id": "StatusInfo", + "description": "Info about Asterisk status", + "properties": { + "startup_time": { + "required": true, + "type": "Date", + "description": "Time when Asterisk was started." + }, + "last_reload_time": { + "required": true, + "type": "Date", + "description": "Time when Asterisk was last reloaded." + } + } + }, + "AsteriskInfo": { + "id": "AsteriskInfo", + "description": "Asterisk system information", + "properties": { + "build": { + "required": false, + "type": "BuildInfo", + "description": "Info about how Asterisk was built" + }, + "system": { + "required": false, + "type": "SystemInfo", + "description": "Info about the system running Asterisk" + }, + "config": { + "required": false, + "type": "ConfigInfo", + "description": "Info about Asterisk configuration" + }, + "status": { + "required": false, + "type": "StatusInfo", + "description": "Info about Asterisk status" + } + } + }, + "AsteriskPing": { + "id": "AsteriskPing", + "description": "Asterisk ping information", + "properties": { + "asterisk_id": { + "required": true, + "type": "string", + "description": "Asterisk id info" + }, + "ping": { + "required": true, + "type": "string", + "description": "Always string value is pong" + }, + "timestamp": { + "required": true, + "type": "string", + "description": "The timestamp string of request received time" + } + } + }, + "Module": { + "id": "Module", + "description": "Details of an Asterisk module", + "properties": { + "name": { + "type": "string", + "description": "The name of this module", + "required": true + }, + "description": { + "type": "string", + "description": "The description of this module", + "required": true + }, + "use_count": { + "type": "int", + "description": "The number of times this module is being used", + "required": true + }, + "status": { + "type": "string", + "description": "The running status of this module", + "required": true + }, + "support_level": { + "type": "string", + "description": "The support state of this module", + "required": true + } + } + }, + "LogChannel": { + "id": "LogChannel", + "description": "Details of an Asterisk log channel", + "properties": { + "channel": { + "type": "string", + "description": "The log channel path", + "required": true + }, + "type": { + "type": "string", + "description": "Types of logs for the log channel", + "required": true + }, + "status": { + "type": "string", + "description": "Whether or not a log type is enabled", + "required": true + }, + "configuration": { + "type": "string", + "description": "The various log levels", + "required": true + } + } + }, + "Variable": { + "id": "Variable", + "description": "The value of a channel variable", + "properties": { + "value": { + "required": true, + "type": "string", + "description": "The value of the variable requested" + } + } + }, + "ConfigTuple": { + "id": "ConfigTuple", + "description": "A key/value pair that makes up part of a configuration object.", + "properties": { + "attribute": { + "required": true, + "type": "string", + "description": "A configuration object attribute." + }, + "value": { + "required": true, + "type": "string", + "description": "The value for the attribute." + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/bridges.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/bridges.json new file mode 100644 index 00000000..bf0a0016 --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/bridges.json @@ -0,0 +1,774 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/bridges.{format}", + "requiresModules": [ + "res_stasis_recording", + "res_stasis_playback" + ], + "apis": [ + { + "path": "/bridges", + "description": "Active bridges", + "operations": [ + { + "httpMethod": "GET", + "summary": "List all active bridges in Asterisk.", + "nickname": "list", + "responseClass": "List[Bridge]" + }, + { + "httpMethod": "POST", + "summary": "Create a new bridge.", + "notes": "This bridge persists until it has been shut down, or Asterisk has been shut down.", + "nickname": "create", + "responseClass": "Bridge", + "parameters": [ + { + "name": "type", + "description": "Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media, video_sfu, video_single).", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "bridgeId", + "description": "Unique ID to give to the bridge being created.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "name", + "description": "Name to give to the bridge being created.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ] + } + ] + }, + { + "path": "/bridges/{bridgeId}", + "description": "Individual bridge", + "operations": [ + { + "httpMethod": "POST", + "summary": "Create a new bridge or updates an existing one.", + "notes": "This bridge persists until it has been shut down, or Asterisk has been shut down.", + "nickname": "createWithId", + "responseClass": "Bridge", + "parameters": [ + { + "name": "type", + "description": "Comma separated list of bridge type attributes (mixing, holding, dtmf_events, proxy_media, video_sfu, video_single) to set.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "bridgeId", + "description": "Unique ID to give to the bridge being created.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "name", + "description": "Set the name of the bridge.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ] + }, + { + "httpMethod": "GET", + "summary": "Get bridge details.", + "nickname": "get", + "responseClass": "Bridge", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Bridge not found" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Shut down a bridge.", + "notes": "If any channels are in this bridge, they will be removed and resume whatever they were doing beforehand.", + "nickname": "destroy", + "responseClass": "void", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Bridge not found" + } + ] + } + ] + }, + { + "path": "/bridges/{bridgeId}/addChannel", + "description": "Add a channel to a bridge", + "operations": [ + { + "httpMethod": "POST", + "summary": "Add a channel to a bridge.", + "nickname": "addChannel", + "responseClass": "void", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "channel", + "description": "Ids of channels to add to bridge", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + }, + { + "name": "role", + "description": "Channel's role in the bridge", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "absorbDTMF", + "description": "Absorb DTMF coming from this channel, preventing it to pass through to the bridge", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "boolean", + "defaultValue": false + }, + { + "name": "mute", + "description": "Mute audio from this channel, preventing it to pass through to the bridge", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "boolean", + "defaultValue": false + }, + { + "name": "inhibitConnectedLineUpdates", + "description": "Do not present the identity of the newly connected channel to other bridge members", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "boolean", + "defaultValue": false + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Channel not found" + }, + { + "code": 404, + "reason": "Bridge not found" + }, + { + "code": 409, + "reason": "Bridge not in Stasis application; Channel currently recording" + }, + { + "code": 422, + "reason": "Channel not in Stasis application" + } + ] + } + ] + }, + { + "path": "/bridges/{bridgeId}/removeChannel", + "description": "Remove a channel from a bridge", + "operations": [ + { + "httpMethod": "POST", + "summary": "Remove a channel from a bridge.", + "nickname": "removeChannel", + "responseClass": "void", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "channel", + "description": "Ids of channels to remove from bridge", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Channel not found" + }, + { + "code": 404, + "reason": "Bridge not found" + }, + { + "code": 409, + "reason": "Bridge not in Stasis application" + }, + { + "code": 422, + "reason": "Channel not in this bridge" + } + ] + } + ] + }, + { + "path": "/bridges/{bridgeId}/videoSource/{channelId}", + "description": "Set a channel as the video source in a multi-party bridge", + "operations": [ + { + "httpMethod": "POST", + "summary": "Set a channel as the video source in a multi-party mixing bridge. This operation has no effect on bridges with two or fewer participants.", + "nickname": "setVideoSource", + "responseClass": "void", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Bridge or Channel not found" + }, + { + "code": 409, + "reason": "Channel not in Stasis application" + }, + { + "code": 422, + "reason": "Channel not in this Bridge" + } + ] + } + ] + }, + { + "path": "/bridges/{bridgeId}/videoSource", + "description": "Removes any explicit video source", + "operations": [ + { + "httpMethod": "DELETE", + "summary": "Removes any explicit video source in a multi-party mixing bridge. This operation has no effect on bridges with two or fewer participants. When no explicit video source is set, talk detection will be used to determine the active video stream.", + "nickname": "clearVideoSource", + "responseClass": "void", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Bridge not found" + } + ] + } + ] + }, + { + "path": "/bridges/{bridgeId}/moh", + "description": "Play music on hold to a bridge", + "operations": [ + { + "httpMethod": "POST", + "summary": "Play music on hold to a bridge or change the MOH class that is playing.", + "nickname": "startMoh", + "responseClass": "void", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "mohClass", + "description": "Channel's id", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Bridge not found" + }, + { + "code": 409, + "reason": "Bridge not in Stasis application" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Stop playing music on hold to a bridge.", + "notes": "This will only stop music on hold being played via POST bridges/{bridgeId}/moh.", + "nickname": "stopMoh", + "responseClass": "void", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Bridge not found" + }, + { + "code": 409, + "reason": "Bridge not in Stasis application" + } + ] + } + ] + }, + { + "path": "/bridges/{bridgeId}/play", + "description": "Play media to the participants of a bridge", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start playback of media on a bridge.", + "notes": "The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)", + "nickname": "play", + "responseClass": "Playback", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "media", + "description": "Media URIs to play.", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + }, + { + "name": "lang", + "description": "For sounds, selects language for sound.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "offsetms", + "description": "Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + + }, + { + "name": "skipms", + "description": "Number of milliseconds to skip for forward/reverse operations.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 3000, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + }, + { + "name": "playbackId", + "description": "Playback Id.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Bridge not found" + }, + { + "code": 409, + "reason": "Bridge not in a Stasis application" + } + ] + } + ] + }, + { + "path": "/bridges/{bridgeId}/play/{playbackId}", + "description": "Play media to a bridge", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start playback of media on a bridge.", + "notes": "The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)", + "nickname": "playWithId", + "responseClass": "Playback", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "playbackId", + "description": "Playback ID.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "media", + "description": "Media URIs to play.", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + }, + { + "name": "lang", + "description": "For sounds, selects language for sound.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "offsetms", + "description": "Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + }, + { + "name": "skipms", + "description": "Number of milliseconds to skip for forward/reverse operations.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 3000, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Bridge not found" + }, + { + "code": 409, + "reason": "Bridge not in a Stasis application" + } + ] + + } + ] + }, + { + "path": "/bridges/{bridgeId}/record", + "description": "Record audio on a bridge", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start a recording.", + "notes": "This records the mixed audio from all channels participating in this bridge.", + "nickname": "record", + "responseClass": "LiveRecording", + "parameters": [ + { + "name": "bridgeId", + "description": "Bridge's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "name", + "description": "Recording's filename", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "format", + "description": "Format to encode audio in", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "maxDurationSeconds", + "description": "Maximum duration of the recording, in seconds. 0 for no limit.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + }, + { + "name": "maxSilenceSeconds", + "description": "Maximum duration of silence, in seconds. 0 for no limit.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + }, + { + "name": "ifExists", + "description": "Action to take if a recording with the same name already exists.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "fail", + "allowableValues": { + "valueType": "LIST", + "values": [ + "fail", + "overwrite", + "append" + ] + } + }, + { + "name": "beep", + "description": "Play beep when recording begins", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "boolean", + "defaultValue": false + }, + { + "name": "terminateOn", + "description": "DTMF input to terminate recording.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "none", + "allowableValues": { + "valueType": "LIST", + "values": [ + "none", + "any", + "*", + "#" + ] + } + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters" + }, + { + "code": 404, + "reason": "Bridge not found" + }, + { + "code": 409, + "reason": "Bridge is not in a Stasis application; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail" + }, + { + "code": 422, + "reason": "The format specified is unknown on this system" + } + ] + } + ] + } + ], + "models": { + "Bridge": { + "id": "Bridge", + "description": "The merging of media from one or more channels.\n\nEveryone on the bridge receives the same audio.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for this bridge", + "required": true + }, + "technology": { + "type": "string", + "description": "Name of the current bridging technology", + "required": true + }, + "bridge_type": { + "type": "string", + "description": "Type of bridge technology", + "required": true, + "allowableValues": { + "valueType": "LIST", + "values": [ + "mixing", + "holding" + ] + } + }, + "bridge_class": { + "type": "string", + "description": "Bridging class", + "required": true + }, + "creator": { + "type": "string", + "description": "Entity that created the bridge", + "required": true + }, + "name": { + "type": "string", + "description": "Name the creator gave the bridge", + "required": true + }, + "channels": { + "type": "List[string]", + "description": "Ids of channels participating in this bridge", + "required": true + }, + "video_mode": { + "type": "string", + "description": "The video mode the bridge is using. One of 'none', 'talker', 'sfu', or 'single'.", + "required": false + }, + "video_source_id": { + "type": "string", + "description": "The ID of the channel that is the source of video in this bridge, if one exists.", + "required": false + }, + "creationtime": { + "required": true, + "type": "Date", + "description": "Timestamp when bridge was created" + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/channels.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/channels.json new file mode 100644 index 00000000..04d15773 --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/channels.json @@ -0,0 +1,2189 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/channels.{format}", + "requiresModules": [ + "res_stasis_answer", + "res_stasis_playback", + "res_stasis_recording", + "res_stasis_snoop" + ], + "apis": [ + { + "path": "/channels", + "description": "Active channels", + "operations": [ + { + "httpMethod": "GET", + "summary": "List all active channels in Asterisk.", + "nickname": "list", + "responseClass": "List[Channel]" + }, + { + "httpMethod": "POST", + "summary": "Create a new channel (originate).", + "notes": "The new channel is created immediately and a snapshot of it returned. If a Stasis application is provided it will be automatically subscribed to the originated channel for further events and updates.", + "nickname": "originate", + "responseClass": "Channel", + "parameters": [ + { + "name": "endpoint", + "description": "Endpoint to call.", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "extension", + "description": "The extension to dial after the endpoint answers. Mutually exclusive with 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "context", + "description": "The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "priority", + "description": "The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "long" + }, + { + "name": "label", + "description": "The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "app", + "description": "The application that is subscribed to the originated channel. When the channel is answered, it will be passed to this Stasis application. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "appArgs", + "description": "The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "callerId", + "description": "CallerID to use when dialing the endpoint or extension.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "timeout", + "description": "Timeout (in seconds) before giving up dialing, or -1 for no timeout.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 30 + }, + { + "name": "variables", + "description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\" } }", + "paramType": "body", + "required": false, + "dataType": "containers", + "allowMultiple": false + }, + { + "name": "channelId", + "description": "The unique id to assign the channel on creation.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "otherChannelId", + "description": "The unique id to assign the second channel when using local channels.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "originator", + "description": "The unique id of the channel which is originating this one.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "formats", + "description": "The format name capability list to use if originator is not specified. Ex. \"ulaw,slin16\". Format names can be found with \"core show codecs\".", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters for originating a channel." + }, + { + "code": 409, + "reason": "Channel with given unique ID already exists." + } + ] + } + ] + }, + { + "path": "/channels/create", + "description": "Create a channel and place it in a Stasis app, but do not dial the channel yet.", + "operations": [ + { + "httpMethod": "POST", + "summary": "Create channel.", + "nickname": "create", + "responseClass": "Channel", + "parameters": [ + { + "name": "endpoint", + "description": "Endpoint for channel communication", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "app", + "description": "Stasis Application to place channel into", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "appArgs", + "description": "The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "channelId", + "description": "The unique id to assign the channel on creation.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "otherChannelId", + "description": "The unique id to assign the second channel when using local channels.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "originator", + "description": "Unique ID of the calling channel", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "formats", + "description": "The format name capability list to use if originator is not specified. Ex. \"ulaw,slin16\". Format names can be found with \"core show codecs\".", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "variables", + "description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\" } }", + "paramType": "body", + "required": false, + "dataType": "containers", + "allowMultiple": false + } + ], + "errorResponses": [ + { + "code": 409, + "reason": "Channel with given unique ID already exists." + } + ] + } + ] + }, + { + "path": "/channels/{channelId}", + "description": "Active channel", + "operations": [ + { + "httpMethod": "GET", + "summary": "Channel details.", + "nickname": "get", + "responseClass": "Channel", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + } + ] + }, + { + "httpMethod": "POST", + "summary": "Create a new channel (originate with id).", + "notes": "The new channel is created immediately and a snapshot of it returned. If a Stasis application is provided it will be automatically subscribed to the originated channel for further events and updates.", + "nickname": "originateWithId", + "responseClass": "Channel", + "parameters": [ + { + "name": "channelId", + "description": "The unique id to assign the channel on creation.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "endpoint", + "description": "Endpoint to call.", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "extension", + "description": "The extension to dial after the endpoint answers. Mutually exclusive with 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "context", + "description": "The context to dial after the endpoint answers. If omitted, uses 'default'. Mutually exclusive with 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "priority", + "description": "The priority to dial after the endpoint answers. If omitted, uses 1. Mutually exclusive with 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "long" + }, + { + "name": "label", + "description": "The label to dial after the endpoint answers. Will supersede 'priority' if provided. Mutually exclusive with 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "app", + "description": "The application that is subscribed to the originated channel. When the channel is answered, it will be passed to this Stasis application. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "appArgs", + "description": "The application arguments to pass to the Stasis application provided by 'app'. Mutually exclusive with 'context', 'extension', 'priority', and 'label'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "callerId", + "description": "CallerID to use when dialing the endpoint or extension.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "timeout", + "description": "Timeout (in seconds) before giving up dialing, or -1 for no timeout.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 30 + }, + { + "name": "variables", + "description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\" } }", + "paramType": "body", + "required": false, + "dataType": "containers", + "allowMultiple": false + }, + { + "name": "otherChannelId", + "description": "The unique id to assign the second channel when using local channels.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "originator", + "description": "The unique id of the channel which is originating this one.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "formats", + "description": "The format name capability list to use if originator is not specified. Ex. \"ulaw,slin16\". Format names can be found with \"core show codecs\".", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters for originating a channel." + }, + { + "code": 409, + "reason": "Channel with given unique ID already exists." + } + ] + + }, + { + "httpMethod": "DELETE", + "summary": "Delete (i.e. hangup) a channel.", + "nickname": "hangup", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "reason_code", + "description": "The reason code for hanging up the channel for detail use. Mutually exclusive with 'reason'. See detail hangup codes at here. https://wiki.asterisk.org/wiki/display/AST/Hangup+Cause+Mappings", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "reason", + "description": "Reason for hanging up the channel for simple use. Mutually exclusive with 'reason_code'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "allowableValues": { + "valueType": "LIST", + "values": [ + "normal", + "busy", + "congestion", + "no_answer", + "timeout", + "rejected", + "unallocated", + "normal_unspecified", + "number_incomplete", + "codec_mismatch", + "interworking", + "failure", + "answered_elsewhere" + ] + } + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid reason for hangup provided" + }, + { + "code": 404, + "reason": "Channel not found" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/continue", + "description": "Exit application; continue execution in the dialplan", + "operations": [ + { + "httpMethod": "POST", + "summary": "Exit application; continue execution in the dialplan.", + "nickname": "continueInDialplan", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "context", + "description": "The context to continue to.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "extension", + "description": "The extension to continue to.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "priority", + "description": "The priority to continue to.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int" + }, + { + "name": "label", + "description": "The label to continue to - will supersede 'priority' if both are provided.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/move", + "description": "Move the channel from one Stasis application to another.", + "operations": [ + { + "httpMethod": "POST", + "summary": "Move the channel from one Stasis application to another.", + "nickname": "move", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "app", + "description": "The channel will be passed to this Stasis application.", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "appArgs", + "description": "The application arguments to pass to the Stasis application provided by 'app'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": "404", + "reason": "Channel not found" + }, + { + "code": "409", + "reason": "Channel not in a Stasis application" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/redirect", + "description": "Inform the channel that it should redirect itself to a different location. Note that this will almost certainly cause the channel to exit the application.", + "operations": [ + { + "httpMethod": "POST", + "summary": "Redirect the channel to a different location.", + "nickname": "redirect", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "endpoint", + "description": "The endpoint to redirect the channel to", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Endpoint parameter not provided" + }, + { + "code": 404, + "reason": "Channel or endpoint not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 422, + "reason": "Endpoint is not the same type as the channel" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/answer", + "description": "Answer a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Answer a channel.", + "nickname": "answer", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/ring", + "description": "Send a ringing indication to a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Indicate ringing to a channel.", + "nickname": "ring", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Stop ringing indication on a channel if locally generated.", + "nickname": "ringStop", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/dtmf", + "description": "Send DTMF to a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Send provided DTMF to a given channel.", + "nickname": "sendDTMF", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "dtmf", + "description": "DTMF To send.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "before", + "description": "Amount of time to wait before DTMF digits (specified in milliseconds) start.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0 + }, + { + "name": "between", + "description": "Amount of time in between DTMF digits (specified in milliseconds).", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 100 + }, + { + "name": "duration", + "description": "Length of each DTMF digit (specified in milliseconds).", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 100 + }, + { + "name": "after", + "description": "Amount of time to wait after DTMF digits (specified in milliseconds) end.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0 + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "DTMF is required" + }, + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/mute", + "description": "Mute a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Mute a channel.", + "nickname": "mute", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "direction", + "description": "Direction in which to mute audio", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "both", + "allowableValues": { + "valueType": "LIST", + "values": [ + "both", + "in", + "out" + ] + } + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Unmute a channel.", + "nickname": "unmute", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "direction", + "description": "Direction in which to unmute audio", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "both", + "allowableValues": { + "valueType": "LIST", + "values": [ + "both", + "in", + "out" + ] + } + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/hold", + "description": "Put a channel on hold", + "operations": [ + { + "httpMethod": "POST", + "summary": "Hold a channel.", + "nickname": "hold", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Remove a channel from hold.", + "nickname": "unhold", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/moh", + "description": "Play music on hold to a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Play music on hold to a channel.", + "notes": "Using media operations such as /play on a channel playing MOH in this manner will suspend MOH without resuming automatically. If continuing music on hold is desired, the stasis application must reinitiate music on hold.", + "nickname": "startMoh", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "mohClass", + "description": "Music on hold class to use", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Stop playing music on hold to a channel.", + "nickname": "stopMoh", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/silence", + "description": "Play silence to a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Play silence to a channel.", + "notes": "Using media operations such as /play on a channel playing silence in this manner will suspend silence without resuming automatically.", + "nickname": "startSilence", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Stop playing silence to a channel.", + "nickname": "stopSilence", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/play", + "description": "Play media to a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start playback of media.", + "notes": "The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)", + "nickname": "play", + "responseClass": "Playback", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "media", + "description": "Media URIs to play.", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + }, + { + "name": "lang", + "description": "For sounds, selects language for sound.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "offsetms", + "description": "Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int" + }, + { + "name": "skipms", + "description": "Number of milliseconds to skip for forward/reverse operations.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 3000 + }, + { + "name": "playbackId", + "description": "Playback ID.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/play/{playbackId}", + "description": "Play media to a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start playback of media and specify the playbackId.", + "notes": "The media URI may be any of a number of URI's. Currently sound:, recording:, number:, digits:, characters:, and tone: URI's are supported. This operation creates a playback resource that can be used to control the playback of media (pause, rewind, fast forward, etc.)", + "nickname": "playWithId", + "responseClass": "Playback", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "playbackId", + "description": "Playback ID.", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "media", + "description": "Media URIs to play.", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + }, + { + "name": "lang", + "description": "For sounds, selects language for sound.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "offsetms", + "description": "Number of milliseconds to skip before playing. Only applies to the first URI if multiple media URIs are specified.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int" + }, + { + "name": "skipms", + "description": "Number of milliseconds to skip for forward/reverse operations.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 3000 + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + }, + { + "code": 412, + "reason": "Channel in invalid state" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/record", + "description": "Record audio from a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start a recording.", + "notes": "Record audio from a channel. Note that this will not capture audio sent to the channel. The bridge itself has a record feature if that's what you want.", + "nickname": "record", + "responseClass": "LiveRecording", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "name", + "description": "Recording's filename", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "format", + "description": "Format to encode audio in", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "maxDurationSeconds", + "description": "Maximum duration of the recording, in seconds. 0 for no limit", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + }, + { + "name": "maxSilenceSeconds", + "description": "Maximum duration of silence, in seconds. 0 for no limit", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + }, + { + "name": "ifExists", + "description": "Action to take if a recording with the same name already exists.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "fail", + "allowableValues": { + "valueType": "LIST", + "values": [ + "fail", + "overwrite", + "append" + ] + } + }, + { + "name": "beep", + "description": "Play beep when recording begins", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "boolean", + "defaultValue": false + }, + { + "name": "terminateOn", + "description": "DTMF input to terminate recording", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "none", + "allowableValues": { + "valueType": "LIST", + "values": [ + "none", + "any", + "*", + "#" + ] + } + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters" + }, + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel is not in a Stasis application; the channel is currently bridged with other hcannels; A recording with the same name already exists on the system and can not be overwritten because it is in progress or ifExists=fail" + }, + { + "code": 422, + "reason": "The format specified is unknown on this system" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/variable", + "description": "Variables on a channel", + "operations": [ + { + "httpMethod": "GET", + "summary": "Get the value of a channel variable or function.", + "nickname": "getChannelVar", + "responseClass": "Variable", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "variable", + "description": "The channel variable or function to get", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Missing variable parameter." + }, + { + "code": 404, + "reason": "Channel or variable not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + } + ] + }, + { + "httpMethod": "POST", + "summary": "Set the value of a channel variable or function.", + "nickname": "setChannelVar", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "variable", + "description": "The channel variable or function to set", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "value", + "description": "The value to set the variable to", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Missing variable parameter." + }, + { + "code": 404, + "reason": "Channel not found" + }, + { + "code": 409, + "reason": "Channel not in a Stasis application" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/snoop", + "description": "Snoop (spy/whisper) on a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start snooping.", + "notes": "Snoop (spy/whisper) on a specific channel.", + "nickname": "snoopChannel", + "responseClass": "Channel", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "spy", + "description": "Direction of audio to spy on", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "none", + "allowableValues": { + "valueType": "LIST", + "values": [ + "none", + "both", + "out", + "in" + ] + } + }, + { + "name": "whisper", + "description": "Direction of audio to whisper into", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "none", + "allowableValues": { + "valueType": "LIST", + "values": [ + "none", + "both", + "out", + "in" + ] + } + }, + { + "name": "app", + "description": "Application the snooping channel is placed into", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "appArgs", + "description": "The application arguments to pass to the Stasis application", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "snoopId", + "description": "Unique ID to assign to snooping channel", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters" + }, + { + "code": 404, + "reason": "Channel not found" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/snoop/{snoopId}", + "description": "Snoop (spy/whisper) on a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start snooping.", + "notes": "Snoop (spy/whisper) on a specific channel.", + "nickname": "snoopChannelWithId", + "responseClass": "Channel", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "snoopId", + "description": "Unique ID to assign to snooping channel", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "spy", + "description": "Direction of audio to spy on", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "none", + "allowableValues": { + "valueType": "LIST", + "values": [ + "none", + "both", + "out", + "in" + ] + } + }, + { + "name": "whisper", + "description": "Direction of audio to whisper into", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "none", + "allowableValues": { + "valueType": "LIST", + "values": [ + "none", + "both", + "out", + "in" + ] + } + }, + { + "name": "app", + "description": "Application the snooping channel is placed into", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "appArgs", + "description": "The application arguments to pass to the Stasis application", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters" + }, + { + "code": 404, + "reason": "Channel not found" + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/dial", + "description": "Dial a channel", + "operations": [ + { + "httpMethod": "POST", + "summary": "Dial a created channel.", + "nickname": "dial", + "responseClass": "void", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "caller", + "description": "Channel ID of caller", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "timeout", + "description": "Dial timeout", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "int", + "defaultValue": 0, + "allowableValues": { + "valueType": "RANGE", + "min": 0 + } + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel cannot be found." + }, + { + "code": 409, + "reason": "Channel cannot be dialed." + } + ] + } + ] + }, + { + "path": "/channels/{channelId}/rtp_statistics", + "description": "Get RTP statistics information for RTP on a channel", + "operations": [ + { + "httpMethod": "GET", + "summary": "RTP stats on a channel.", + "nickname": "rtpstatistics", + "responseClass": "RTPstat", + "parameters": [ + { + "name": "channelId", + "description": "Channel's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Channel cannot be found." + } + ] + } + ] + }, + { + "path": "/channels/externalMedia", + "description": "Create a channel to an External Media source/sink.", + "operations": [ + { + "httpMethod": "POST", + "summary": "Start an External Media session.", + "notes": "Create a channel to an External Media source/sink.", + "nickname": "externalMedia", + "responseClass": "Channel", + "parameters": [ + { + "name": "channelId", + "description": "The unique id to assign the channel on creation.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "app", + "description": "Stasis Application to place channel into", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "variables", + "description": "The \"variables\" key in the body object holds variable key/value pairs to set on the channel on creation. Other keys in the body object are interpreted as query parameters. Ex. { \"endpoint\": \"SIP/Alice\", \"variables\": { \"CALLERID(name)\": \"Alice\" } }", + "paramType": "body", + "required": false, + "dataType": "containers", + "allowMultiple": false + }, + { + "name": "external_host", + "description": "Hostname/ip:port of external host", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "encapsulation", + "description": "Payload encapsulation protocol", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "rtp", + "allowableValues": { + "valueType": "LIST", + "values": [ + "rtp", + "audiosocket" + ] + } + }, + { + "name": "transport", + "description": "Transport protocol", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "udp", + "allowableValues": { + "valueType": "LIST", + "values": [ + "udp", + "tcp" + ] + } + }, + { + "name": "connection_type", + "description": "Connection type (client/server)", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "client", + "allowableValues": { + "valueType": "LIST", + "values": [ + "client" + ] + } + }, + { + "name": "format", + "description": "Format to encode audio in", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "direction", + "description": "External media direction", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string", + "defaultValue": "both", + "allowableValues": { + "valueType": "LIST", + "values": [ + "both" + ] + } + }, + { + "name": "data", + "description": "An arbitrary data field", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters" + }, + { + "code": 409, + "reason": "Channel is not in a Stasis application; Channel is already bridged" + } + ] + } + ] + } + ], + "models": { + "Dialed": { + "id": "Dialed", + "description": "Dialed channel information.", + "properties": {} + }, + "DialplanCEP": { + "id": "DialplanCEP", + "description": "Dialplan location (context/extension/priority)", + "properties": { + "context": { + "required": true, + "type": "string", + "description": "Context in the dialplan" + }, + "exten": { + "required": true, + "type": "string", + "description": "Extension in the dialplan" + }, + "priority": { + "required": true, + "type": "long", + "description": "Priority in the dialplan" + }, + "app_name": { + "required": true, + "type": "string", + "description": "Name of current dialplan application" + }, + "app_data": { + "required": true, + "type": "string", + "description": "Parameter of current dialplan application" + } + } + }, + "CallerID": { + "id": "CallerID", + "description": "Caller identification", + "properties": { + "name": { + "required": true, + "type": "string" + }, + "number": { + "required": true, + "type": "string" + } + } + }, + "RTPstat": { + "id": "RTPstat", + "description": "A statistics of a RTP.", + "properties": { + "txcount": { + "required": true, + "type": "int", + "description": "Number of packets transmitted." + }, + "rxcount": { + "required": true, + "type": "int", + "description": "Number of packets received." + }, + "txjitter": { + "required": false, + "type": "double", + "description": "Jitter on transmitted packets." + }, + "rxjitter": { + "required": false, + "type": "double", + "description": "Jitter on received packets." + }, + "remote_maxjitter": { + "required": false, + "type": "double", + "description": "Maximum jitter on remote side." + }, + "remote_minjitter": { + "required": false, + "type": "double", + "description": "Minimum jitter on remote side." + }, + "remote_normdevjitter": { + "required": false, + "type": "double", + "description": "Average jitter on remote side." + }, + "remote_stdevjitter": { + "required": false, + "type": "double", + "description": "Standard deviation jitter on remote side." + }, + "local_maxjitter": { + "required": false, + "type": "double", + "description": "Maximum jitter on local side." + }, + "local_minjitter": { + "required": false, + "type": "double", + "description": "Minimum jitter on local side." + }, + "local_normdevjitter": { + "required": false, + "type": "double", + "description": "Average jitter on local side." + }, + "local_stdevjitter": { + "required": false, + "type": "double", + "description": "Standard deviation jitter on local side." + }, + "txploss": { + "required": true, + "type": "int", + "description": "Number of transmitted packets lost." + }, + "rxploss": { + "required": true, + "type": "int", + "description": "Number of received packets lost." + }, + "remote_maxrxploss": { + "required": false, + "type": "double", + "description": "Maximum number of packets lost on remote side." + }, + "remote_minrxploss": { + "required": false, + "type": "double", + "description": "Minimum number of packets lost on remote side." + }, + "remote_normdevrxploss": { + "required": false, + "type": "double", + "description": "Average number of packets lost on remote side." + }, + "remote_stdevrxploss": { + "required": false, + "type": "double", + "description": "Standard deviation packets lost on remote side." + }, + "local_maxrxploss": { + "required": false, + "type": "double", + "description": "Maximum number of packets lost on local side." + }, + "local_minrxploss": { + "required": false, + "type": "double", + "description": "Minimum number of packets lost on local side." + }, + "local_normdevrxploss": { + "required": false, + "type": "double", + "description": "Average number of packets lost on local side." + }, + "local_stdevrxploss": { + "required": false, + "type": "double", + "description": "Standard deviation packets lost on local side." + }, + "rtt": { + "required": false, + "type": "double", + "description": "Total round trip time." + }, + "maxrtt": { + "required": false, + "type": "double", + "description": "Maximum round trip time." + }, + "minrtt": { + "required": false, + "type": "double", + "description": "Minimum round trip time." + }, + "normdevrtt": { + "required": false, + "type": "double", + "description": "Average round trip time." + }, + "stdevrtt": { + "required": false, + "type": "double", + "description": "Standard deviation round trip time." + }, + "local_ssrc": { + "required": true, + "type": "int", + "description": "Our SSRC." + }, + "remote_ssrc": { + "required": true, + "type": "int", + "description": "Their SSRC." + }, + "txoctetcount": { + "required": true, + "type": "int", + "description": "Number of octets transmitted." + }, + "rxoctetcount": { + "required": true, + "type": "int", + "description": "Number of octets received." + }, + "channel_uniqueid": { + "required": true, + "type": "string", + "description": "The Asterisk channel's unique ID that owns this instance." + } + } + }, + "Channel": { + "id": "Channel", + "description": "A specific communication connection between Asterisk and an Endpoint.", + "properties": { + "id": { + "required": true, + "type": "string", + "description": "Unique identifier of the channel.\n\nThis is the same as the Uniqueid field in AMI." + }, + "name": { + "required": true, + "type": "string", + "description": "Name of the channel (i.e. SIP/foo-0000a7e3)" + }, + "state": { + "required": true, + "type": "string", + "allowableValues": { + "valueType": "LIST", + "values": [ + "Down", + "Rsrved", + "OffHook", + "Dialing", + "Ring", + "Ringing", + "Up", + "Busy", + "Dialing Offhook", + "Pre-ring", + "Unknown" + ] + } + }, + "caller": { + "required": true, + "type": "CallerID" + }, + "connected": { + "required": true, + "type": "CallerID" + }, + "accountcode": { + "required": true, + "type": "string" + }, + "dialplan": { + "required": true, + "type": "DialplanCEP", + "description": "Current location in the dialplan" + }, + "creationtime": { + "required": true, + "type": "Date", + "description": "Timestamp when channel was created" + }, + "language": { + "required": true, + "type": "string", + "description": "The default spoken language" + }, + "channelvars": { + "required": false, + "type": "object", + "description": "Channel variables" + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/deviceStates.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/deviceStates.json new file mode 100644 index 00000000..bd389355 --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/deviceStates.json @@ -0,0 +1,154 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "Kevin Harwell ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/deviceStates.{format}", + "requiresModules": [ + "res_stasis_device_state" + ], + "apis": [ + { + "path": "/deviceStates", + "description": "Device states", + "operations": [ + { + "httpMethod": "GET", + "summary": "List all ARI controlled device states.", + "nickname": "list", + "responseClass": "List[DeviceState]" + } + ] + }, + { + "path": "/deviceStates/{deviceName}", + "description": "Device state", + "operations": [ + { + "httpMethod": "GET", + "summary": "Retrieve the current state of a device.", + "nickname": "get", + "responseClass": "DeviceState", + "parameters": [ + { + "name": "deviceName", + "description": "Name of the device", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ] + }, + { + "httpMethod": "PUT", + "summary": "Change the state of a device controlled by ARI. (Note - implicitly creates the device state).", + "nickname": "update", + "responseClass": "void", + "parameters": [ + { + "name": "deviceName", + "description": "Name of the device", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "deviceState", + "description": "Device state value", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string", + "allowableValues": { + "valueType": "LIST", + "values": [ + "NOT_INUSE", + "INUSE", + "BUSY", + "INVALID", + "UNAVAILABLE", + "RINGING", + "RINGINUSE", + "ONHOLD" + ] + } + + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Device name is missing" + }, + { + "code": 409, + "reason": "Uncontrolled device specified" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Destroy a device-state controlled by ARI.", + "nickname": "delete", + "responseClass": "void", + "parameters": [ + { + "name": "deviceName", + "description": "Name of the device", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Device name is missing" + }, + { + "code": 409, + "reason": "Uncontrolled device specified" + } + ] + } + ] + } + ], + "models": { + "DeviceState": { + "id": "DeviceState", + "description": "Represents the state of a device.", + "properties": { + "name": { + "type": "string", + "description": "Name of the device.", + "required": true + }, + "state": { + "type": "string", + "description": "Device's state", + "required": true, + "allowableValues": { + "valueType": "LIST", + "values": [ + "UNKNOWN", + "NOT_INUSE", + "INUSE", + "BUSY", + "INVALID", + "UNAVAILABLE", + "RINGING", + "RINGINUSE", + "ONHOLD" + ] + } + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/endpoints.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/endpoints.json new file mode 100644 index 00000000..1f77d370 --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/endpoints.json @@ -0,0 +1,263 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/endpoints.{format}", + "apis": [ + { + "path": "/endpoints", + "description": "Asterisk endpoints", + "operations": [ + { + "httpMethod": "GET", + "summary": "List all endpoints.", + "nickname": "list", + "responseClass": "List[Endpoint]" + } + ] + }, + { + "path": "/endpoints/sendMessage", + "description": "Send a message to some technology URI or endpoint.", + "operations": [ + { + "httpMethod": "PUT", + "summary": "Send a message to some technology URI or endpoint.", + "nickname": "sendMessage", + "responseClass": "void", + "parameters": [ + { + "name": "to", + "description": "The endpoint resource or technology specific URI to send the message to. Valid resources are sip, pjsip, and xmpp.", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "from", + "description": "The endpoint resource or technology specific identity to send this message from. Valid resources are sip, pjsip, and xmpp.", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "body", + "description": "The body of the message", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "variables", + "descriptioni": "The \"variables\" key in the body object holds technology specific key/value pairs to append to the message. These can be interpreted and used by the various resource types; for example, pjsip and sip resource types will add the key/value pairs as SIP headers,", + "paramType": "body", + "required": false, + "dataType": "containers", + "allowMultiple": false + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters for sending a message." + }, + { + "code": 404, + "reason": "Endpoint not found" + } + ] + } + ] + }, + { + "path": "/endpoints/{tech}", + "description": "Asterisk endpoints", + "operations": [ + { + "httpMethod": "GET", + "summary": "List available endoints for a given endpoint technology.", + "nickname": "listByTech", + "responseClass": "List[Endpoint]", + "parameters": [ + { + "name": "tech", + "description": "Technology of the endpoints (sip,iax2,...)", + "paramType": "path", + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Endpoints not found" + } + ] + } + ] + }, + { + "path": "/endpoints/{tech}/{resource}", + "description": "Single endpoint", + "operations": [ + { + "httpMethod": "GET", + "summary": "Details for an endpoint.", + "nickname": "get", + "responseClass": "Endpoint", + "parameters": [ + { + "name": "tech", + "description": "Technology of the endpoint", + "paramType": "path", + "dataType": "string" + }, + { + "name": "resource", + "description": "ID of the endpoint", + "paramType": "path", + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters for sending a message." + }, + { + "code": 404, + "reason": "Endpoints not found" + } + ] + } + ] + }, + { + "path": "/endpoints/{tech}/{resource}/sendMessage", + "description": "Send a message to some endpoint in a technology.", + "operations": [ + { + "httpMethod": "PUT", + "summary": "Send a message to some endpoint in a technology.", + "nickname": "sendMessageToEndpoint", + "responseClass": "void", + "parameters": [ + { + "name": "tech", + "description": "Technology of the endpoint", + "paramType": "path", + "dataType": "string" + }, + { + "name": "resource", + "description": "ID of the endpoint", + "paramType": "path", + "dataType": "string" + }, + { + "name": "from", + "description": "The endpoint resource or technology specific identity to send this message from. Valid resources are sip, pjsip, and xmpp.", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "body", + "description": "The body of the message", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "variables", + "descriptioni": "The \"variables\" key in the body object holds technology specific key/value pairs to append to the message. These can be interpreted and used by the various resource types; for example, pjsip and sip resource types will add the key/value pairs as SIP headers,", + "paramType": "body", + "required": false, + "dataType": "containers", + "allowMultiple": false + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "Invalid parameters for sending a message." + }, + { + "code": 404, + "reason": "Endpoint not found" + } + ] + } + ] + } + ], + "models": { + "Endpoint": { + "id": "Endpoint", + "description": "An external device that may offer/accept calls to/from Asterisk.\n\nUnlike most resources, which have a single unique identifier, an endpoint is uniquely identified by the technology/resource pair.", + "properties": { + "technology": { + "type": "string", + "description": "Technology of the endpoint", + "required": true + }, + "resource": { + "type": "string", + "description": "Identifier of the endpoint, specific to the given technology.", + "required": true + }, + "state": { + "type": "string", + "description": "Endpoint's state", + "required": false, + "allowableValues": { + "valueType": "LIST", + "values": [ + "unknown", + "offline", + "online" + ] + } + }, + "channel_ids": { + "type": "List[string]", + "description": "Id's of channels associated with this endpoint", + "required": true + } + } + }, + "TextMessage": { + "id": "TextMessage", + "description": "A text message.", + "properties": { + "from": { + "type": "string", + "description": "A technology specific URI specifying the source of the message. For sip and pjsip technologies, any SIP URI can be specified. For xmpp, the URI must correspond to the client connection being used to send the message.", + "required": true + }, + "to": { + "type": "string", + "description": "A technology specific URI specifying the destination of the message. Valid technologies include sip, pjsip, and xmp. The destination of a message should be an endpoint.", + "required": true + }, + "body": { + "type": "string", + "description": "The text of the message.", + "required": true + }, + "variables": { + "type": "object", + "description": "Technology specific key/value pairs (JSON object) associated with the message.", + "required": false + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/events.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/events.json new file mode 100644 index 00000000..c9822f6c --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/events.json @@ -0,0 +1,918 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.2", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/events.{format}", + "requiresModules": [ + "res_http_websocket" + ], + "apis": [ + { + "path": "/events", + "description": "Events from Asterisk to applications", + "operations": [ + { + "httpMethod": "GET", + "upgrade": "websocket", + "websocketProtocol": "ari", + "summary": "WebSocket connection for events.", + "nickname": "eventWebsocket", + "responseClass": "Message", + "parameters": [ + { + "name": "app", + "description": "Applications to subscribe to.", + "paramType": "query", + "required": true, + "allowMultiple": true, + "dataType": "string" + }, + { + "name": "subscribeAll", + "description": "Subscribe to all Asterisk events. If provided, the applications listed will be subscribed to all events, effectively disabling the application specific subscriptions. Default is 'false'.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "boolean" + } + ] + } + ] + }, + { + "path": "/events/user/{eventName}", + "description": "Stasis application user events", + "operations": [ + { + "httpMethod": "POST", + "summary": "Generate a user event.", + "nickname": "userEvent", + "responseClass": "void", + "parameters": [ + { + "name": "eventName", + "description": "Event name", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "application", + "description": "The name of the application that will receive this event", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "source", + "description": "URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}/{resource}, deviceState:{deviceName}", + "paramType": "query", + "required": false, + "allowMultiple": true, + "dataType": "string" + }, + { + "name": "variables", + "description": "The \"variables\" key in the body object holds custom key/value pairs to add to the user event. Ex. { \"variables\": { \"key\": \"value\" } }", + "paramType": "body", + "required": false, + "allowMultiple": false, + "dataType": "containers" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Application does not exist." + }, + { + "code": 422, + "reason": "Event source not found." + }, + { + "code": 400, + "reason": "Invalid even tsource URI or userevent data." + } + ] + } + ] + } + ], + "models": { + "Message": { + "id": "Message", + "description": "Base type for errors and events", + "discriminator": "type", + "properties": { + "type": { + "type": "string", + "required": true, + "description": "Indicates the type of this message." + }, + "asterisk_id": { + "type": "string", + "required": false, + "description": "The unique ID for the Asterisk instance that raised this event." + } + }, + "subTypes": [ + "MissingParams", + "Event" + ] + }, + "MissingParams": { + "id": "MissingParams", + "description": "Error event sent when required params are missing.", + "properties": { + "params": { + "required": true, + "type": "List[string]", + "description": "A list of the missing parameters" + } + } + }, + "Event": { + "id": "Event", + "description": "Base type for asynchronous events from Asterisk.", + "properties": { + "application": { + "type": "string", + "description": "Name of the application receiving the event.", + "required": true + }, + "timestamp": { + "type": "Date", + "description": "Time at which this event was created.", + "required": true + } + }, + "subTypes": [ + "DeviceStateChanged", + "PlaybackStarted", + "PlaybackContinuing", + "PlaybackFinished", + "RecordingStarted", + "RecordingFinished", + "RecordingFailed", + "ApplicationMoveFailed", + "ApplicationReplaced", + "BridgeCreated", + "BridgeDestroyed", + "BridgeMerged", + "BridgeBlindTransfer", + "BridgeAttendedTransfer", + "BridgeVideoSourceChanged", + "ChannelCreated", + "ChannelDestroyed", + "ChannelEnteredBridge", + "ChannelLeftBridge", + "ChannelStateChange", + "ChannelDtmfReceived", + "ChannelDialplan", + "ChannelCallerId", + "ChannelUserevent", + "ChannelHangupRequest", + "ChannelVarset", + "ChannelTalkingStarted", + "ChannelTalkingFinished", + "ChannelHold", + "ChannelUnhold", + "ContactStatusChange", + "EndpointStateChange", + "Dial", + "StasisEnd", + "StasisStart", + "TextMessageReceived", + "ChannelConnectedLine", + "PeerStatusChange" + ] + }, + "ContactInfo": { + "id": "ContactInfo", + "description": "Detailed information about a contact on an endpoint.", + "properties": { + "uri": { + "type": "string", + "description": "The location of the contact.", + "required": true + }, + "contact_status": { + "type": "string", + "description": "The current status of the contact.", + "required": true, + "allowableValues": { + "valueType": "LIST", + "values": [ + "Unreachable", + "Reachable", + "Unknown", + "NonQualified", + "Removed" + ] + } + }, + "aor": { + "type": "string", + "description": "The Address of Record this contact belongs to.", + "required": true + }, + "roundtrip_usec": { + "type": "string", + "description": "Current round trip time, in microseconds, for the contact.", + "required": false + } + } + }, + "Peer": { + "id": "Peer", + "description": "Detailed information about a remote peer that communicates with Asterisk.", + "properties": { + "peer_status": { + "type": "string", + "description": "The current state of the peer. Note that the values of the status are dependent on the underlying peer technology.", + "required": true + }, + "cause": { + "type": "string", + "description": "An optional reason associated with the change in peer_status.", + "required": false + }, + "address": { + "type": "string", + "description": "The IP address of the peer.", + "required": false + }, + "port": { + "type": "string", + "description": "The port of the peer.", + "required": false + }, + "time": { + "type": "string", + "description": "The last known time the peer was contacted.", + "required": false + } + } + }, + "DeviceStateChanged": { + "id": "DeviceStateChanged", + "description": "Notification that a device state has changed.", + "properties": { + "device_state": { + "type": "DeviceState", + "description": "Device state object", + "required": true + } + } + }, + "PlaybackStarted": { + "id": "PlaybackStarted", + "description": "Event showing the start of a media playback operation.", + "properties": { + "playback": { + "type": "Playback", + "description": "Playback control object", + "required": true + } + } + }, + "PlaybackContinuing": { + "id": "PlaybackContinuing", + "description": "Event showing the continuation of a media playback operation from one media URI to the next in the list.", + "properties": { + "playback": { + "type": "Playback", + "description": "Playback control object", + "required": true + } + } + }, + "PlaybackFinished": { + "id": "PlaybackFinished", + "description": "Event showing the completion of a media playback operation.", + "properties": { + "playback": { + "type": "Playback", + "description": "Playback control object", + "required": true + } + } + }, + "RecordingStarted": { + "id": "RecordingStarted", + "description": "Event showing the start of a recording operation.", + "properties": { + "recording": { + "type": "LiveRecording", + "description": "Recording control object", + "required": true + } + } + }, + "RecordingFinished": { + "id": "RecordingFinished", + "description": "Event showing the completion of a recording operation.", + "properties": { + "recording": { + "type": "LiveRecording", + "description": "Recording control object", + "required": true + } + } + }, + "RecordingFailed": { + "id": "RecordingFailed", + "description": "Event showing failure of a recording operation.", + "properties": { + "recording": { + "type": "LiveRecording", + "description": "Recording control object", + "required": true + } + } + }, + "ApplicationMoveFailed": { + "id": "ApplicationMoveFailed", + "description": "Notification that trying to move a channel to another Stasis application failed.", + "properties": { + "channel": { + "required": true, + "type": "Channel" + }, + "destination": { + "required": true, + "type": "string" + }, + "args": { + "required": true, + "type": "List[string]", + "description": "Arguments to the application" + } + } + }, + "ApplicationReplaced": { + "id": "ApplicationReplaced", + "description": "Notification that another WebSocket has taken over for an application.\n\nAn application may only be subscribed to by a single WebSocket at a time. If multiple WebSockets attempt to subscribe to the same application, the newer WebSocket wins, and the older one receives this event.", + "properties": {} + }, + "BridgeCreated": { + "id": "BridgeCreated", + "description": "Notification that a bridge has been created.", + "properties": { + "bridge": { + "required": true, + "type": "Bridge" + } + } + }, + "BridgeDestroyed": { + "id": "BridgeDestroyed", + "description": "Notification that a bridge has been destroyed.", + "properties": { + "bridge": { + "required": true, + "type": "Bridge" + } + } + }, + "BridgeMerged": { + "id": "BridgeMerged", + "description": "Notification that one bridge has merged into another.", + "properties": { + "bridge": { + "required": true, + "type": "Bridge" + }, + "bridge_from": { + "required": true, + "type": "Bridge" + } + } + }, + "BridgeVideoSourceChanged": { + "id": "BridgeVideoSourceChanged", + "description": "Notification that the source of video in a bridge has changed.", + "properties": { + "bridge": { + "required": true, + "type": "Bridge" + }, + "old_video_source_id": { + "required": false, + "type": "string" + } + } + }, + "BridgeBlindTransfer": { + "id": "BridgeBlindTransfer", + "description": "Notification that a blind transfer has occurred.", + "properties": { + "channel": { + "description": "The channel performing the blind transfer", + "required": true, + "type": "Channel" + }, + "replace_channel": { + "description": "The channel that is replacing transferer when the transferee(s) can not be transferred directly", + "required": false, + "type": "Channel" + }, + "transferee": { + "description": "The channel that is being transferred", + "required": false, + "type": "Channel" + }, + "exten": { + "description": "The extension transferred to", + "required": true, + "type": "string" + }, + "context": { + "description": "The context transferred to", + "required": true, + "type": "string" + }, + "result": { + "description": "The result of the transfer attempt", + "required": true, + "type": "string" + }, + "is_external": { + "description": "Whether the transfer was externally initiated or not", + "required": true, + "type": "boolean" + }, + "bridge": { + "description": "The bridge being transferred", + "type": "Bridge" + } + } + }, + "BridgeAttendedTransfer": { + "id": "BridgeAttendedTransfer", + "description": "Notification that an attended transfer has occurred.", + "properties": { + "transferer_first_leg": { + "description": "First leg of the transferer", + "required": true, + "type": "Channel" + }, + "transferer_second_leg": { + "description": "Second leg of the transferer", + "required": true, + "type": "Channel" + }, + "replace_channel": { + "description": "The channel that is replacing transferer_first_leg in the swap", + "required": false, + "type": "Channel" + }, + "transferee": { + "description": "The channel that is being transferred", + "required": false, + "type": "Channel" + }, + "transfer_target": { + "description": "The channel that is being transferred to", + "required": false, + "type": "Channel" + }, + "result": { + "description": "The result of the transfer attempt", + "required": true, + "type": "string" + }, + "is_external": { + "description": "Whether the transfer was externally initiated or not", + "required": true, + "type": "boolean" + }, + "transferer_first_leg_bridge": { + "description": "Bridge the transferer first leg is in", + "type": "Bridge" + }, + "transferer_second_leg_bridge": { + "description": "Bridge the transferer second leg is in", + "type": "Bridge" + }, + "destination_type": { + "description": "How the transfer was accomplished", + "required": true, + "type": "string" + }, + "destination_bridge": { + "description": "Bridge that survived the merge result", + "type": "string" + }, + "destination_application": { + "description": "Application that has been transferred into", + "type": "string" + }, + "destination_link_first_leg": { + "description": "First leg of a link transfer result", + "type": "Channel" + }, + "destination_link_second_leg": { + "description": "Second leg of a link transfer result", + "type": "Channel" + }, + "destination_threeway_channel": { + "description": "Transferer channel that survived the threeway result", + "type": "Channel" + }, + "destination_threeway_bridge": { + "description": "Bridge that survived the threeway result", + "type": "Bridge" + } + } + }, + "ChannelCreated": { + "id": "ChannelCreated", + "description": "Notification that a channel has been created.", + "properties": { + "channel": { + "required": true, + "type": "Channel" + } + } + }, + "ChannelDestroyed": { + "id": "ChannelDestroyed", + "description": "Notification that a channel has been destroyed.", + "properties": { + "cause": { + "required": true, + "description": "Integer representation of the cause of the hangup", + "type": "int" + }, + "cause_txt": { + "required": true, + "description": "Text representation of the cause of the hangup", + "type": "string" + }, + "channel": { + "required": true, + "type": "Channel" + } + } + }, + "ChannelEnteredBridge": { + "id": "ChannelEnteredBridge", + "description": "Notification that a channel has entered a bridge.", + "properties": { + "bridge": { + "required": true, + "type": "Bridge" + }, + "channel": { + "type": "Channel" + } + } + }, + "ChannelLeftBridge": { + "id": "ChannelLeftBridge", + "description": "Notification that a channel has left a bridge.", + "properties": { + "bridge": { + "required": true, + "type": "Bridge" + }, + "channel": { + "required": true, + "type": "Channel" + } + } + }, + "ChannelStateChange": { + "id": "ChannelStateChange", + "description": "Notification of a channel's state change.", + "properties": { + "channel": { + "required": true, + "type": "Channel" + } + } + }, + "ChannelDtmfReceived": { + "id": "ChannelDtmfReceived", + "description": "DTMF received on a channel.\n\nThis event is sent when the DTMF ends. There is no notification about the start of DTMF", + "properties": { + "digit": { + "required": true, + "type": "string", + "description": "DTMF digit received (0-9, A-E, # or *)" + }, + "duration_ms": { + "required": true, + "type": "int", + "description": "Number of milliseconds DTMF was received" + }, + "channel": { + "required": true, + "type": "Channel", + "description": "The channel on which DTMF was received" + } + } + }, + "ChannelDialplan": { + "id": "ChannelDialplan", + "description": "Channel changed location in the dialplan.", + "properties": { + "channel": { + "required": true, + "type": "Channel", + "description": "The channel that changed dialplan location." + }, + "dialplan_app": { + "required": true, + "type": "string", + "description": "The application about to be executed." + }, + "dialplan_app_data": { + "required": true, + "type": "string", + "description": "The data to be passed to the application." + } + } + }, + "ChannelCallerId": { + "id": "ChannelCallerId", + "description": "Channel changed Caller ID.", + "properties": { + "caller_presentation": { + "required": true, + "type": "int", + "description": "The integer representation of the Caller Presentation value." + }, + "caller_presentation_txt": { + "required": true, + "type": "string", + "description": "The text representation of the Caller Presentation value." + }, + "channel": { + "required": true, + "type": "Channel", + "description": "The channel that changed Caller ID." + } + } + }, + "ChannelUserevent": { + "id": "ChannelUserevent", + "description": "User-generated event with additional user-defined fields in the object.", + "properties": { + "eventname": { + "required": true, + "type": "string", + "description": "The name of the user event." + }, + "channel": { + "required": false, + "type": "Channel", + "description": "A channel that is signaled with the user event." + }, + "bridge": { + "required": false, + "type": "Bridge", + "description": "A bridge that is signaled with the user event." + }, + "endpoint": { + "required": false, + "type": "Endpoint", + "description": "A endpoint that is signaled with the user event." + }, + "userevent": { + "required": true, + "type": "object", + "description": "Custom Userevent data" + } + } + }, + "ChannelHangupRequest": { + "id": "ChannelHangupRequest", + "description": "A hangup was requested on the channel.", + "properties": { + "cause": { + "type": "int", + "description": "Integer representation of the cause of the hangup." + }, + "soft": { + "type": "boolean", + "description": "Whether the hangup request was a soft hangup request." + }, + "channel": { + "required": true, + "type": "Channel", + "description": "The channel on which the hangup was requested." + } + } + }, + "ChannelVarset": { + "id": "ChannelVarset", + "description": "Channel variable changed.", + "properties": { + "variable": { + "required": true, + "type": "string", + "description": "The variable that changed." + }, + "value": { + "required": true, + "type": "string", + "description": "The new value of the variable." + }, + "channel": { + "required": false, + "type": "Channel", + "description": "The channel on which the variable was set.\n\nIf missing, the variable is a global variable." + } + } + }, + "ChannelHold": { + "id": "ChannelHold", + "description": "A channel initiated a media hold.", + "properties": { + "channel": { + "required": true, + "type": "Channel", + "description": "The channel that initiated the hold event." + }, + "musicclass": { + "required": false, + "type": "string", + "description": "The music on hold class that the initiator requested." + } + } + }, + "ChannelUnhold": { + "id": "ChannelUnhold", + "description": "A channel initiated a media unhold.", + "properties": { + "channel": { + "required": true, + "type": "Channel", + "description": "The channel that initiated the unhold event." + } + } + }, + "ChannelTalkingStarted": { + "id": "ChannelTalkingStarted", + "description": "Talking was detected on the channel.", + "properties": { + "channel": { + "required": true, + "type": "Channel", + "description": "The channel on which talking started." + } + } + }, + "ChannelTalkingFinished": { + "id": "ChannelTalkingFinished", + "description": "Talking is no longer detected on the channel.", + "properties": { + "channel": { + "required": true, + "type": "Channel", + "description": "The channel on which talking completed." + }, + "duration": { + "required": true, + "type": "int", + "description": "The length of time, in milliseconds, that talking was detected on the channel" + } + } + }, + "ContactStatusChange": { + "id": "ContactStatusChange", + "description": "The state of a contact on an endpoint has changed.", + "properties": { + "endpoint": { + "required": true, + "type": "Endpoint" + }, + "contact_info": { + "required": true, + "type": "ContactInfo" + } + } + }, + "PeerStatusChange": { + "id": "PeerStatusChange", + "description": "The state of a peer associated with an endpoint has changed.", + "properties": { + "endpoint": { + "required": true, + "type": "Endpoint" + }, + "peer": { + "required": true, + "type": "Peer" + } + } + }, + "EndpointStateChange": { + "id": "EndpointStateChange", + "description": "Endpoint state changed.", + "properties": { + "endpoint": { + "required": true, + "type": "Endpoint" + } + } + }, + "Dial": { + "id": "Dial", + "description": "Dialing state has changed.", + "properties": { + "caller": { + "required": false, + "type": "Channel", + "description": "The calling channel." + }, + "peer": { + "required": true, + "type": "Channel", + "description": "The dialed channel." + }, + "forward": { + "required": false, + "type": "string", + "description": "Forwarding target requested by the original dialed channel." + }, + "forwarded": { + "required": false, + "type": "Channel", + "description": "Channel that the caller has been forwarded to." + }, + "dialstring": { + "required": false, + "type": "string", + "description": "The dial string for calling the peer channel." + }, + "dialstatus": { + "required": true, + "type": "string", + "description": "Current status of the dialing attempt to the peer." + } + } + }, + "StasisEnd": { + "id": "StasisEnd", + "description": "Notification that a channel has left a Stasis application.", + "properties": { + "channel": { + "required": true, + "type": "Channel" + } + } + }, + "StasisStart": { + "id": "StasisStart", + "description": "Notification that a channel has entered a Stasis application.", + "properties": { + "args": { + "required": true, + "type": "List[string]", + "description": "Arguments to the application" + }, + "channel": { + "required": true, + "type": "Channel" + }, + "replace_channel": { + "required": false, + "type": "Channel" + } + } + }, + "TextMessageReceived": { + "id": "TextMessageReceived", + "description": "A text message was received from an endpoint.", + "properties": { + "message": { + "required": true, + "type": "TextMessage" + }, + "endpoint": { + "required": false, + "type": "Endpoint" + } + } + }, + "ChannelConnectedLine": { + "id": "ChannelConnectedLine", + "description": "Channel changed Connected Line.", + "properties": { + "channel": { + "required": true, + "type": "Channel", + "description": "The channel whose connected line has changed." + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/mailboxes.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/mailboxes.json new file mode 100644 index 00000000..8f5941b8 --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/mailboxes.json @@ -0,0 +1,137 @@ +{ + "_copyright": "Copyright (C) 2013, Digium, Inc.", + "_author": "Jonathan Rose ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/mailboxes.{format}", + "requiresModules": [ + "res_stasis_mailbox" + ], + "apis": [ + { + "path": "/mailboxes", + "description": "Mailboxes", + "operations": [ + { + "httpMethod": "GET", + "summary": "List all mailboxes.", + "nickname": "list", + "responseClass": "List[Mailbox]" + } + ] + }, + { + "path": "/mailboxes/{mailboxName}", + "description": "Mailbox state", + "operations": [ + { + "httpMethod": "GET", + "summary": "Retrieve the current state of a mailbox.", + "nickname": "get", + "responseClass": "Mailbox", + "parameters": [ + { + "name": "mailboxName", + "description": "Name of the mailbox", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Mailbox not found" + } + ] + }, + { + "httpMethod": "PUT", + "summary": "Change the state of a mailbox. (Note - implicitly creates the mailbox).", + "nickname": "update", + "responseClass": "void", + "parameters": [ + { + "name": "mailboxName", + "description": "Name of the mailbox", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "oldMessages", + "description": "Count of old messages in the mailbox", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "int" + }, + { + "name": "newMessages", + "description": "Count of new messages in the mailbox", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "int" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Mailbox not found" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Destroy a mailbox.", + "nickname": "delete", + "responseClass": "void", + "parameters": [ + { + "name": "mailboxName", + "description": "Name of the mailbox", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Mailbox not found" + } + ] + } + ] + } + ], + "models": { + "Mailbox": { + "id": "Mailbox", + "description": "Represents the state of a mailbox.", + "properties": { + "name": { + "type": "string", + "description": "Name of the mailbox.", + "required": true + }, + "old_messages": { + "type": "int", + "description": "Count of old messages in the mailbox.", + "required": true + }, + "new_messages": { + "type": "int", + "description": "Count of new messages in the mailbox.", + "required": true + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/playbacks.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/playbacks.json new file mode 100644 index 00000000..793986fc --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/playbacks.json @@ -0,0 +1,165 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/playbacks.{format}", + "requiresModules": [ + "res_stasis_playback" + ], + "apis": [ + { + "path": "/playbacks/{playbackId}", + "description": "Control object for a playback operation.", + "operations": [ + { + "httpMethod": "GET", + "summary": "Get a playback's details.", + "nickname": "get", + "responseClass": "Playback", + "parameters": [ + { + "name": "playbackId", + "description": "Playback's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "The playback cannot be found" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Stop a playback.", + "nickname": "stop", + "responseClass": "void", + "parameters": [ + { + "name": "playbackId", + "description": "Playback's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "The playback cannot be found" + } + ] + } + ] + }, + { + "path": "/playbacks/{playbackId}/control", + "description": "Control object for a playback operation.", + "operations": [ + { + "httpMethod": "POST", + "summary": "Control a playback.", + "nickname": "control", + "responseClass": "void", + "parameters": [ + { + "name": "playbackId", + "description": "Playback's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "operation", + "description": "Operation to perform on the playback.", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string", + "allowableValues": { + "valueType": "LIST", + "values": [ + "restart", + "pause", + "unpause", + "reverse", + "forward" + ] + } + } + ], + "errorResponses": [ + { + "code": 400, + "reason": "The provided operation parameter was invalid" + }, + { + "code": 404, + "reason": "The playback cannot be found" + }, + { + "code": 409, + "reason": "The operation cannot be performed in the playback's current state" + } +] + } + ] + } + ], + "models": { + "Playback": { + "id": "Playback", + "description": "Object representing the playback of media to a channel", + "properties": { + "id": { + "type": "string", + "description": "ID for this playback operation", + "required": true + }, + "media_uri": { + "type": "string", + "description": "The URI for the media currently being played back.", + "required": true + }, + "next_media_uri": { + "type": "string", + "description": "If a list of URIs is being played, the next media URI to be played back.", + "required": false + }, + "target_uri": { + "type": "string", + "description": "URI for the channel or bridge to play the media on", + "required": true + }, + "language": { + "type": "string", + "description": "For media types that support multiple languages, the language requested for playback." + }, + "state": { + "type": "string", + "description": "Current state of the playback operation.", + "required": true, + "allowableValues": { + "valueType": "LIST", + "values": [ + "queued", + "playing", + "continuing", + "done", + "failed" + ] + } + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/recordings.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/recordings.json new file mode 100644 index 00000000..6ffd6d8e --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/recordings.json @@ -0,0 +1,413 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/recordings.{format}", + "requiresModules": [ + "res_stasis_recording" + ], + "apis": [ + { + "path": "/recordings/stored", + "description": "Recordings", + "operations": [ + { + "httpMethod": "GET", + "summary": "List recordings that are complete.", + "nickname": "listStored", + "responseClass": "List[StoredRecording]" + } + ] + }, + { + "path": "/recordings/stored/{recordingName}", + "description": "Individual recording", + "operations": [ + { + "httpMethod": "GET", + "summary": "Get a stored recording's details.", + "nickname": "getStored", + "responseClass": "StoredRecording", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Delete a stored recording.", + "nickname": "deleteStored", + "responseClass": "void", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + } + ] + } + ] + }, + { + "path": "/recordings/stored/{recordingName}/file", + "description": "The actual file associated with the stored recording", + "operations": [ + { + "httpMethod": "GET", + "summary": "Get the file associated with the stored recording.", + "nickname": "getStoredFile", + "responseClass": "binary", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 403, + "reason": "The recording file could not be opened" + }, + { + "code": 404, + "reason": "Recording not found" + } + ] + } + ] + }, + { + "path": "/recordings/stored/{recordingName}/copy", + "description": "Copy an individual recording", + "operations": [ + { + "httpMethod": "POST", + "summary": "Copy a stored recording.", + "nickname": "copyStored", + "responseClass": "StoredRecording", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording to copy", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + }, + { + "name": "destinationRecordingName", + "description": "The destination name of the recording", + "paramType": "query", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + }, + { + "code": 409, + "reason": "A recording with the same name already exists on the system" + } + ] + } + ] + }, + { + "path": "/recordings/live/{recordingName}", + "description": "A recording that is in progress", + "operations": [ + { + "httpMethod": "GET", + "summary": "List live recordings.", + "nickname": "getLive", + "responseClass": "LiveRecording", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Stop a live recording and discard it.", + "nickname": "cancel", + "responseClass": "void", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + } + ] + } + ] + }, + { + "path": "/recordings/live/{recordingName}/stop", + "operations": [ + { + "httpMethod": "POST", + "summary": "Stop a live recording and store it.", + "nickname": "stop", + "responseClass": "void", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + } + ] + } + ] + }, + { + "path": "/recordings/live/{recordingName}/pause", + "operations": [ + { + "httpMethod": "POST", + "summary": "Pause a live recording.", + "notes": "Pausing a recording suspends silence detection, which will be restarted when the recording is unpaused. Paused time is not included in the accounting for maxDurationSeconds.", + "nickname": "pause", + "responseClass": "void", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + }, + { + "code": 409, + "reason": "Recording not in session" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Unpause a live recording.", + "nickname": "unpause", + "responseClass": "void", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + }, + { + "code": 409, + "reason": "Recording not in session" + } + ] + } + ] + }, + { + "path": "/recordings/live/{recordingName}/mute", + "operations": [ + { + "httpMethod": "POST", + "summary": "Mute a live recording.", + "notes": "Muting a recording suspends silence detection, which will be restarted when the recording is unmuted.", + "nickname": "mute", + "responseClass": "void", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + }, + { + "code": 409, + "reason": "Recording not in session" + } + ] + }, + { + "httpMethod": "DELETE", + "summary": "Unmute a live recording.", + "nickname": "unmute", + "responseClass": "void", + "parameters": [ + { + "name": "recordingName", + "description": "The name of the recording", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ], + "errorResponses": [ + { + "code": 404, + "reason": "Recording not found" + }, + { + "code": 409, + "reason": "Recording not in session" + } + ] + } + ] + } + ], + "models": { + "StoredRecording": { + "id": "StoredRecording", + "description": "A past recording that may be played back.", + "properties": { + "name": { + "required": true, + "type": "string" + }, + "format": { + "required": true, + "type": "string" + } + } + }, + "LiveRecording": { + "id": "LiveRecording", + "description": "A recording that is in progress", + "properties": { + "name": { + "required": true, + "type": "string", + "description": "Base name for the recording" + }, + "format": { + "required": true, + "type": "string", + "description": "Recording format (wav, gsm, etc.)" + }, + "target_uri": { + "required": true, + "type": "string", + "description": "URI for the channel or bridge being recorded" + }, + "state": { + "required": true, + "type": "string", + "allowableValues": { + "valueType": "LIST", + "values": [ + "queued", + "recording", + "paused", + "done", + "failed", + "canceled" + ] + } + }, + "duration": { + "required": false, + "type": "int", + "description": "Duration in seconds of the recording" + }, + "talking_duration": { + "required": false, + "type": "int", + "description": "Duration of talking, in seconds, detected in the recording. This is only available if the recording was initiated with a non-zero maxSilenceSeconds." + }, + "silence_duration": { + "required": false, + "type": "int", + "description": "Duration of silence, in seconds, detected in the recording. This is only available if the recording was initiated with a non-zero maxSilenceSeconds." + }, + "cause": { + "required": false, + "type": "string", + "description": "Cause for recording failure if failed" + } + } + } + } +} diff --git a/codegen/src/main/resources/codegen-data/ari_8_0_0/sounds.json b/codegen/src/main/resources/codegen-data/ari_8_0_0/sounds.json new file mode 100644 index 00000000..8fbe1c57 --- /dev/null +++ b/codegen/src/main/resources/codegen-data/ari_8_0_0/sounds.json @@ -0,0 +1,99 @@ +{ + "_copyright": "Copyright (C) 2012 - 2013, Digium, Inc.", + "_author": "David M. Lee, II ", + "_svn_revision": "$Revision$", + "apiVersion": "2.0.0", + "swaggerVersion": "1.1", + "basePath": "http://localhost:8088/ari", + "resourcePath": "/api-docs/sounds.{format}", + "apis": [ + { + "path": "/sounds", + "description": "Sounds", + "operations": [ + { + "httpMethod": "GET", + "summary": "List all sounds.", + "nickname": "list", + "responseClass": "List[Sound]", + "parameters": [ + { + "name": "lang", + "description": "Lookup sound for a specific language.", + "paramType": "query", + "dataType": "string", + "required": false + }, + { + "name": "format", + "description": "Lookup sound in a specific format.", + "paramType": "query", + "dataType": "string", + "required": false, + "__note": "core show translation can show translation paths between formats, along with relative costs. so this could be just installed format, or we could follow that for transcoded formats." + } + ] + } + ] + }, + { + "path": "/sounds/{soundId}", + "description": "Individual sound", + "operations": [ + { + "httpMethod": "GET", + "summary": "Get a sound's details.", + "nickname": "get", + "responseClass": "Sound", + "parameters": [ + { + "name": "soundId", + "description": "Sound's id", + "paramType": "path", + "required": true, + "allowMultiple": false, + "dataType": "string" + } + ] + } + ] + } + ], + "models": { + "FormatLangPair": { + "id": "FormatLangPair", + "description": "Identifies the format and language of a sound file", + "properties": { + "language": { + "required": true, + "type": "string" + }, + "format": { + "required": true, + "type": "string" + } + } + }, + "Sound": { + "id": "Sound", + "description": "A media file that may be played back.", + "properties": { + "id": { + "required": true, + "description": "Sound's identifier.", + "type": "string" + }, + "text": { + "required": false, + "description": "Text description of the sound, usually the words spoken.", + "type": "string" + }, + "formats": { + "required": true, + "description": "The formats and languages in which this sound is available.", + "type": "List[FormatLangPair]" + } + } + } + } +} diff --git a/examples/build.gradle b/examples/build.gradle old mode 100644 new mode 100755 diff --git a/examples/gradle/wrapper/gradle-wrapper.jar b/examples/gradle/wrapper/gradle-wrapper.jar old mode 100644 new mode 100755 diff --git a/examples/gradle/wrapper/gradle-wrapper.properties b/examples/gradle/wrapper/gradle-wrapper.properties old mode 100644 new mode 100755 index 778e15c7..0effb0be --- a/examples/gradle/wrapper/gradle-wrapper.properties +++ b/examples/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ #Sun Mar 08 12:20:19 SAST 2020 -distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStorePath=wrapper/dists diff --git a/examples/gradlew.bat b/examples/gradlew.bat old mode 100644 new mode 100755 diff --git a/examples/settings.gradle b/examples/settings.gradle old mode 100644 new mode 100755 diff --git a/examples/src/main/java/ch/loway/oss/ari4java/examples/ConnectAndDial.java b/examples/src/main/java/ch/loway/oss/ari4java/examples/ConnectAndDial.java old mode 100644 new mode 100755 diff --git a/examples/src/main/java/ch/loway/oss/ari4java/examples/Weasels.java b/examples/src/main/java/ch/loway/oss/ari4java/examples/Weasels.java old mode 100644 new mode 100755 diff --git a/examples/src/main/java/helloworld/HelloAriWorld.java b/examples/src/main/java/helloworld/HelloAriWorld.java old mode 100644 new mode 100755 diff --git a/examples/src/main/resources/log4j2.properties b/examples/src/main/resources/log4j2.properties old mode 100644 new mode 100755 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar old mode 100644 new mode 100755 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties old mode 100644 new mode 100755 diff --git a/gradlew.bat b/gradlew.bat old mode 100644 new mode 100755 diff --git a/settings.gradle b/settings.gradle old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/ARI.java b/src/main/java/ch/loway/oss/ari4java/ARI.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/ARIRuntimeException.java b/src/main/java/ch/loway/oss/ari4java/ARIRuntimeException.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/AriFactory.java b/src/main/java/ch/loway/oss/ari4java/AriFactory.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/AriSubscriber.java b/src/main/java/ch/loway/oss/ari4java/AriSubscriber.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/ARIEncoder.java b/src/main/java/ch/loway/oss/ari4java/tools/ARIEncoder.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/ARIException.java b/src/main/java/ch/loway/oss/ari4java/tools/ARIException.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/AriAsyncHandler.java b/src/main/java/ch/loway/oss/ari4java/tools/AriAsyncHandler.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/AriCallback.java b/src/main/java/ch/loway/oss/ari4java/tools/AriCallback.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/AriConnectionEvent.java b/src/main/java/ch/loway/oss/ari4java/tools/AriConnectionEvent.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/AriWSCallback.java b/src/main/java/ch/loway/oss/ari4java/tools/AriWSCallback.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/BaseAriAction.java b/src/main/java/ch/loway/oss/ari4java/tools/BaseAriAction.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/HttpClient.java b/src/main/java/ch/loway/oss/ari4java/tools/HttpClient.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/HttpParam.java b/src/main/java/ch/loway/oss/ari4java/tools/HttpParam.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/HttpResponse.java b/src/main/java/ch/loway/oss/ari4java/tools/HttpResponse.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/HttpResponseHandler.java b/src/main/java/ch/loway/oss/ari4java/tools/HttpResponseHandler.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/MessageQueue.java b/src/main/java/ch/loway/oss/ari4java/tools/MessageQueue.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/RestException.java b/src/main/java/ch/loway/oss/ari4java/tools/RestException.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/WsClient.java b/src/main/java/ch/loway/oss/ari4java/tools/WsClient.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/WsClientAutoReconnect.java b/src/main/java/ch/loway/oss/ari4java/tools/WsClientAutoReconnect.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/http/HTTPLogger.java b/src/main/java/ch/loway/oss/ari4java/tools/http/HTTPLogger.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/http/NettyHttpClient.java b/src/main/java/ch/loway/oss/ari4java/tools/http/NettyHttpClient.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/http/NettyHttpClientHandler.java b/src/main/java/ch/loway/oss/ari4java/tools/http/NettyHttpClientHandler.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/http/NettyWSClientHandler.java b/src/main/java/ch/loway/oss/ari4java/tools/http/NettyWSClientHandler.java old mode 100644 new mode 100755 diff --git a/src/main/java/ch/loway/oss/ari4java/tools/tags/EventSource.java b/src/main/java/ch/loway/oss/ari4java/tools/tags/EventSource.java old mode 100644 new mode 100755 diff --git a/src/overview.html b/src/overview.html old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/ARITest.java b/src/test/java/ch/loway/oss/ari4java/ARITest.java old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/AriFactoryTest.java b/src/test/java/ch/loway/oss/ari4java/AriFactoryTest.java old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/AriVersionTest.java b/src/test/java/ch/loway/oss/ari4java/AriVersionTest.java old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/generated/ActionSoundsTest.java b/src/test/java/ch/loway/oss/ari4java/generated/ActionSoundsTest.java old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/generated/ActonBridgesTest.java b/src/test/java/ch/loway/oss/ari4java/generated/ActonBridgesTest.java old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/generated/DeserializeToListOfInterfaceTest.java b/src/test/java/ch/loway/oss/ari4java/generated/DeserializeToListOfInterfaceTest.java old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/generated/EventBuilderTest.java b/src/test/java/ch/loway/oss/ari4java/generated/EventBuilderTest.java old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/tools/http/NettyHttpClientHandlerTest.java b/src/test/java/ch/loway/oss/ari4java/tools/http/NettyHttpClientHandlerTest.java old mode 100644 new mode 100755 diff --git a/src/test/java/ch/loway/oss/ari4java/tools/http/NettyHttpClientTest.java b/src/test/java/ch/loway/oss/ari4java/tools/http/NettyHttpClientTest.java old mode 100644 new mode 100755 diff --git a/src/test/resources/log4j2.properties b/src/test/resources/log4j2.properties old mode 100644 new mode 100755