forked from MirrorHub/synapse
ignore rogue matrix call events; support verto.media RPC as a horrible hack; fix NA::Matrix dep
This commit is contained in:
parent
f7fb4675a6
commit
08bf2aaab5
3
contrib/vertobot/.gitignore
vendored
3
contrib/vertobot/.gitignore
vendored
|
@ -1 +1,2 @@
|
||||||
vuc.yaml
|
vucbot.yaml
|
||||||
|
vertobot.yaml
|
||||||
|
|
49
contrib/vertobot/bot.pl
Normal file → Executable file
49
contrib/vertobot/bot.pl
Normal file → Executable file
|
@ -6,7 +6,7 @@ use 5.010; # //
|
||||||
use IO::Socket::SSL qw(SSL_VERIFY_NONE);
|
use IO::Socket::SSL qw(SSL_VERIFY_NONE);
|
||||||
use IO::Async::Loop;
|
use IO::Async::Loop;
|
||||||
use Net::Async::WebSocket::Client;
|
use Net::Async::WebSocket::Client;
|
||||||
use Net::Async::Matrix 0.11;
|
use Net::Async::Matrix 0.11_002;
|
||||||
use JSON;
|
use JSON;
|
||||||
use YAML;
|
use YAML;
|
||||||
use Data::UUID;
|
use Data::UUID;
|
||||||
|
@ -148,10 +148,15 @@ sub on_unknown_event
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($event->{type} eq 'm.call.hangup') {
|
elsif ($event->{type} eq 'm.call.hangup') {
|
||||||
send_verto_json_request("verto.bye", {
|
if ($bridgestate->{$room_id}->{matrix_callid} eq $event->{content}->{call_id}) {
|
||||||
"dialogParams" => \%dp,
|
send_verto_json_request("verto.bye", {
|
||||||
"sessid" => $bridgestate->{$room_id}->{sessid},
|
"dialogParams" => \%dp,
|
||||||
})->get;
|
"sessid" => $bridgestate->{$room_id}->{sessid},
|
||||||
|
})->get;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
warn "Ignoring unrecognised callid: ".$event->{content}->{call_id};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
warn "Unhandled event: $event->{type}";
|
warn "Unhandled event: $event->{type}";
|
||||||
|
@ -253,27 +258,33 @@ exit 0;
|
||||||
{
|
{
|
||||||
my $json = JSON->new->decode( $_[0] );
|
my $json = JSON->new->decode( $_[0] );
|
||||||
if ($json->{method}) {
|
if ($json->{method}) {
|
||||||
if ($json->{method} eq 'verto.answer') {
|
if (($json->{method} eq 'verto.answer' && $json->{params}->{sdp}) ||
|
||||||
|
$json->{method} eq 'verto.media') {
|
||||||
|
|
||||||
my $room_id = $roomid_by_callid->{$json->{params}->{callID}};
|
my $room_id = $roomid_by_callid->{$json->{params}->{callID}};
|
||||||
my $room = $bot_matrix_rooms{$room_id};
|
my $room = $bot_matrix_rooms{$room_id};
|
||||||
|
|
||||||
# HACK HACK HACK HACK
|
if ($json->{params}->{sdp}) {
|
||||||
$room->_do_POST_json( "/send/m.call.answer", {
|
# HACK HACK HACK HACK
|
||||||
call_id => $bridgestate->{$room_id}->{matrix_callid},
|
$room->_do_POST_json( "/send/m.call.answer", {
|
||||||
version => 0,
|
call_id => $bridgestate->{$room_id}->{matrix_callid},
|
||||||
answer => {
|
version => 0,
|
||||||
sdp => $json->{params}->{sdp},
|
answer => {
|
||||||
type => "answer",
|
sdp => $json->{params}->{sdp},
|
||||||
},
|
type => "answer",
|
||||||
})->then( sub {
|
},
|
||||||
send_verto_json_response( {
|
})->then( sub {
|
||||||
method => "verto.answer",
|
send_verto_json_response( {
|
||||||
}, $json->{id});
|
method => $json->{method},
|
||||||
})->get;
|
}, $json->{id});
|
||||||
|
})->get;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
warn ("[Verto] unhandled method: " . $json->{method});
|
warn ("[Verto] unhandled method: " . $json->{method});
|
||||||
|
send_verto_json_response( {
|
||||||
|
method => $json->{method},
|
||||||
|
}, $json->{id});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif ($json->{result}) {
|
elsif ($json->{result}) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
requires 'parent', 0;
|
requires 'parent', 0;
|
||||||
requires 'Future', '>= 0.29';
|
requires 'Future', '>= 0.29';
|
||||||
requires 'Net::Async::Matrix', '>= 0.11';
|
requires 'Net::Async::Matrix', '>= 0.11_002';
|
||||||
requires 'Net::Async::Matrix::Utils';
|
requires 'Net::Async::Matrix::Utils';
|
||||||
requires 'Net::Async::WebSocket::Protocol', 0;
|
requires 'Net::Async::WebSocket::Protocol', 0;
|
||||||
requires 'Data::UUID', 0;
|
requires 'Data::UUID', 0;
|
||||||
|
|
Loading…
Reference in a new issue