Методы в SignalPeer без авторизации
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package im.rosetta.executors;
|
package im.rosetta.executors;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import im.rosetta.Failures;
|
import im.rosetta.Failures;
|
||||||
@@ -24,6 +26,19 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
|||||||
private ClientManager clientManager;
|
private ClientManager clientManager;
|
||||||
private ForwardUnitService fus;
|
private ForwardUnitService fus;
|
||||||
private PushNotifyDispatcher pushNotifyDispatcher = new PushNotifyDispatcher();
|
private PushNotifyDispatcher pushNotifyDispatcher = new PushNotifyDispatcher();
|
||||||
|
/**
|
||||||
|
* Сигналы, которые может выполнять только авторизованный пользователь,
|
||||||
|
* все сигналы, которые не входят в этот перечень, будут доступны для
|
||||||
|
* исполнения без авторизации.
|
||||||
|
*/
|
||||||
|
private Set<NetworkSignalType> authentificatedTypes = new HashSet<>(){{
|
||||||
|
add(NetworkSignalType.CALL);
|
||||||
|
/**
|
||||||
|
* Так как комнату создает звонящий, то комнату может создать только
|
||||||
|
* авторизованный пользователь
|
||||||
|
*/
|
||||||
|
add(NetworkSignalType.CREATE_ROOM);
|
||||||
|
}};
|
||||||
|
|
||||||
public Executor26SignalPeer(ClientManager clientManager, ForwardUnitService fus) {
|
public Executor26SignalPeer(ClientManager clientManager, ForwardUnitService fus) {
|
||||||
this.clientManager = clientManager;
|
this.clientManager = clientManager;
|
||||||
@@ -35,15 +50,17 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
|||||||
String src = packet.getSrc();
|
String src = packet.getSrc();
|
||||||
String dst = packet.getDst();
|
String dst = packet.getDst();
|
||||||
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
|
ECIAuthentificate eciAuthentificate = client.getTag(ECIAuthentificate.class);
|
||||||
if (eciAuthentificate == null || !eciAuthentificate.hasAuthorized()) {
|
NetworkSignalType type = packet.getSignalType();
|
||||||
|
if ((eciAuthentificate == null || !eciAuthentificate.hasAuthorized())
|
||||||
|
&& this.authentificatedTypes.contains(type)) {
|
||||||
/**
|
/**
|
||||||
* Если клиент не авторизован, то мы не будем обрабатывать его сигналы на анициализацию звонка
|
* Если клиент не авторизован, то мы не будем обрабатывать его сигналы на инициализацию звонка и создание комнаты
|
||||||
* и просто отключим его от сервера.
|
* и просто отключим его от сервера.
|
||||||
*/
|
*/
|
||||||
client.disconnect(Failures.HANDSHAKE_NOT_COMPLETED);
|
client.disconnect(Failures.HANDSHAKE_NOT_COMPLETED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(!src.equals(eciAuthentificate.getPublicKey())) {
|
if(!src.equals(eciAuthentificate.getPublicKey()) && authentificatedTypes.contains(type)) {
|
||||||
/**
|
/**
|
||||||
* Если src в пакете не совпадает с авторизованным PK клиента, то это может означать, что клиент пытается
|
* Если src в пакете не совпадает с авторизованным PK клиента, то это может означать, что клиент пытается
|
||||||
* отправить сигнал от другого пользователя, отключаем его от сервера.
|
* отправить сигнал от другого пользователя, отключаем его от сервера.
|
||||||
@@ -51,7 +68,6 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
|||||||
client.disconnect(Failures.DATA_MISSMATCH);
|
client.disconnect(Failures.DATA_MISSMATCH);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NetworkSignalType type = packet.getSignalType();
|
|
||||||
if(type == NetworkSignalType.CALL) {
|
if(type == NetworkSignalType.CALL) {
|
||||||
/**
|
/**
|
||||||
* Инициируется звонок от src к dst, проверяем, что dst не занят другим звонком, если занят, то отправляем сигнал END_CALL_BECAUSE_BUSY обратно src
|
* Инициируется звонок от src к dst, проверяем, что dst не занят другим звонком, если занят, то отправляем сигнал END_CALL_BECAUSE_BUSY обратно src
|
||||||
|
|||||||
Reference in New Issue
Block a user