Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -62,15 +62,15 @@
'url' => '/api/{apiVersion}/signaling/settings',
'verb' => 'GET',
'requirements' => [
'apiVersion' => 'v(1|2)',
'apiVersion' => 'v(3)',
],
],
[
'name' => 'Signaling#getWelcomeMessage',
'url' => '/api/{apiVersion}/signaling/welcome/{serverId}',
'verb' => 'GET',
'requirements' => [
'apiVersion' => 'v(1|2)',
'apiVersion' => 'v(3)',
'serverId' => '^\d+$',
],
],
Expand All @@ -79,15 +79,15 @@
'url' => '/api/{apiVersion}/signaling/backend',
'verb' => 'POST',
'requirements' => [
'apiVersion' => 'v(1|2)',
'apiVersion' => 'v(3)',
],
],
[
'name' => 'Signaling#signaling',
'url' => '/api/{apiVersion}/signaling/{token}',
'verb' => 'POST',
'requirements' => [
'apiVersion' => 'v(1|2)',
'apiVersion' => 'v(3)',
'token' => '^[a-z0-9]{4,30}$',
],
],
Expand All @@ -96,7 +96,7 @@
'url' => '/api/{apiVersion}/signaling/{token}',
'verb' => 'GET',
'requirements' => [
'apiVersion' => 'v(1|2)',
'apiVersion' => 'v(3)',
'token' => '^[a-z0-9]{4,30}$',
],
],
Expand Down
18 changes: 9 additions & 9 deletions docs/internal-signaling.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# Signaling API

* Base endpoint for API v1 is: `/ocs/v2.php/apps/spreed/api/v1`
* Base endpoint for API v2 is: `/ocs/v2.php/apps/spreed/api/v2`
* Base endpoint for API v1 is: 🏁 Removed with API v3
* Base endpoint for API v2 is: 🏁 Removed with API v3
* Base endpoint for API v3 is: `/ocs/v2.php/apps/spreed/api/v3`

## Get signaling settings

Expand All @@ -22,22 +23,21 @@
`hideWarning` | string | v1 | Don't show a performance warning although internal signaling is used
`server` | string | v1 | URL of the external signaling server
`ticket` | string | v1 | Ticket for the external signaling server
`stunservers` | array | v1 | STUN servers
`turnservers` | array | v1 | TURN servers
`stunservers` | array | v3 | STUN servers
`turnservers` | array | v3 | TURN servers
`sipDialinInfo` | string | v2 | Generic SIP dial-in information for this conversation (admin free text containing the phone number etc)

- STUN server

field | type | Description
---|---|---
`url` | string | STUN server URL
------|------|------------
`urls` | array | Each element is a STUN server URL as a string

- TURN server

field | type | Description
---|---|---
`url` | array | One element array with TURN server URL
`urls` | array | One element array with TURN server URL
------|------|------------
`urls` | array | Each element is a TURN server URL as a string
`username` | string | User name for the TURN server
`credential` | string | User password for the TURN server

Expand Down
1 change: 1 addition & 0 deletions lib/Capabilities.php
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ public function getCapabilities(): array {
'rich-object-sharing',
'temp-user-avatar-api',
'geo-location-sharing',
'signaling-v3',
],
'config' => [
'attachments' => [
Expand Down
32 changes: 15 additions & 17 deletions lib/Controller/SignalingController.php
Original file line number Diff line number Diff line change
Expand Up @@ -118,13 +118,10 @@ public function __construct(string $appName,
/**
* @PublicPage
*
* @param string $apiVersion
* @param string $token
* @return DataResponse
*/
public function getSettings(string $apiVersion, string $token = ''): DataResponse {
$apiV = (int) substr($apiVersion, 1);

public function getSettings(string $token = ''): DataResponse {
try {
if ($token !== '') {
$room = $this->manager->getRoomForUserByToken($token, $this->userId);
Expand All @@ -137,28 +134,32 @@ public function getSettings(string $apiVersion, string $token = ''): DataRespons
}

$stun = [];
$stunUrls = [];
$stunServers = $this->talkConfig->getStunServers();
foreach ($stunServers as $stunServer) {
$stun[] = [
'url' => 'stun:' . $stunServer,
];
$stunUrls[] = 'stun:' . $stunServer;
}
$stun[] = [
'urls' => $stunUrls
];

$turn = [];
$turnSettings = $this->talkConfig->getTurnSettings();
foreach ($turnSettings as $turnServer) {
$turnUrls = [];
$schemes = explode(',', $turnServer['schemes']);
$protocols = explode(',', $turnServer['protocols']);
foreach ($schemes as $scheme) {
foreach ($protocols as $proto) {
$turn[] = [
'url' => [$scheme . ':' . $turnServer['server'] . '?transport=' . $proto],
'urls' => [$scheme . ':' . $turnServer['server'] . '?transport=' . $proto],
'username' => $turnServer['username'],
'credential' => $turnServer['password'],
];
$turnUrls[] = $scheme . ':' . $turnServer['server'] . '?transport=' . $proto;
}
}

$turn[] = [
'urls' => $turnUrls,
'username' => $turnServer['username'],
'credential' => $turnServer['password'],
];
}

$signalingMode = $this->talkConfig->getSignalingMode();
Expand All @@ -172,12 +173,9 @@ public function getSettings(string $apiVersion, string $token = ''): DataRespons
'ticket' => $this->talkConfig->getSignalingTicket($this->userId),
'stunservers' => $stun,
'turnservers' => $turn,
'sipDialinInfo' => $this->talkConfig->isSIPConfigured() ? $this->talkConfig->getDialInInfo() : '',
];

if ($apiV >= 2) {
$data['sipDialinInfo'] = $this->talkConfig->isSIPConfigured() ? $this->talkConfig->getDialInInfo() : '';
}

return new DataResponse($data);
}

Expand Down
6 changes: 3 additions & 3 deletions src/services/signalingService.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,19 @@ import { generateOcsUrl } from '@nextcloud/router'
* @param {object} options options
*/
const fetchSignalingSettings = async({ token }, options) => {
return axios.get(generateOcsUrl('apps/spreed/api/v2/signaling/settings'), Object.assign(options, {
return axios.get(generateOcsUrl('apps/spreed/api/v3/signaling/settings'), Object.assign(options, {
params: {
token,
},
}))
}

const pullSignalingMessages = async(token, options) => {
return axios.get(generateOcsUrl('apps/spreed/api/v2/signaling/{token}', { token }), options)
return axios.get(generateOcsUrl('apps/spreed/api/v3/signaling/{token}', { token }), options)
}

const getWelcomeMessage = async(serverId) => {
return axios.get(generateOcsUrl('apps/spreed/api/v2/signaling/welcome/{serverId}', { serverId }))
return axios.get(generateOcsUrl('apps/spreed/api/v3/signaling/welcome/{serverId}', { serverId }))
}

export {
Expand Down
4 changes: 2 additions & 2 deletions src/utils/signaling.js
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ Signaling.Internal.prototype._sendMessageWithCallback = function(ev) {
}

Signaling.Internal.prototype._sendMessages = function(messages) {
return axios.post(generateOcsUrl('apps/spreed/api/v1/signaling/{token}', { token: this.currentRoomToken }), {
return axios.post(generateOcsUrl('apps/spreed/api/v3/signaling/{token}', { token: this.currentRoomToken }), {
messages: JSON.stringify(messages),
})
}
Expand Down Expand Up @@ -818,7 +818,7 @@ Signaling.Standalone.prototype.sendHello = function() {
} else {
// Already reconnected with a new session.
this._forceReconnect = false
const url = generateOcsUrl('apps/spreed/api/v1/signaling/backend')
const url = generateOcsUrl('apps/spreed/api/v3/signaling/backend')
msg = {
'type': 'hello',
'hello': {
Expand Down
1 change: 1 addition & 0 deletions tests/php/CapabilitiesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public function setUp(): void {
'rich-object-sharing',
'temp-user-avatar-api',
'geo-location-sharing',
'signaling-v3',
];
}

Expand Down