Защита от подмены src в пакетах
This commit is contained in:
@@ -18,7 +18,9 @@ public class CallSession {
|
|||||||
* Клиенты в этом списке не могут принимать другие звонки, так как они уже заняты дозвоном,
|
* Клиенты в этом списке не могут принимать другие звонки, так как они уже заняты дозвоном,
|
||||||
* но они еще не в звонке, так как не приняли звонок
|
* но они еще не в звонке, так как не приняли звонок
|
||||||
*
|
*
|
||||||
* Клиенты удаляются из этого списка, когда они принимают звонок или отклоняют его, тогда они либо переходят в звонок, либо становятся свободными для других звонков
|
* Клиенты удаляются из этого списка, когда они принимают звонок или отклоняют его,
|
||||||
|
* тогда они либо переходят в звонок, либо становятся свободными для других звонков
|
||||||
|
* pk -> время начала дозвона (timestamp в миллисекундах)
|
||||||
*/
|
*/
|
||||||
public HashMap<String, Long> ringing;
|
public HashMap<String, Long> ringing;
|
||||||
/**
|
/**
|
||||||
@@ -48,6 +50,16 @@ public class CallSession {
|
|||||||
this.clients.put(publicKey, client);
|
this.clients.put(publicKey, client);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверяет, может ли этот публичный ключ выполнять какие-либо действия в рамках этой сессии звонка,
|
||||||
|
* чтобы не допустить выполнение действий от посторонних публичных ключей, которые не участвуют в звонке
|
||||||
|
* @param publicKey Публичный ключ для проверки
|
||||||
|
* @return true, если этот публичный ключ может выполнять действия в рамках этой сессии звонка, false иначе
|
||||||
|
*/
|
||||||
|
public boolean isValidSource(String publicKey) {
|
||||||
|
return this.ringing.containsKey(publicKey) || this.clients.containsKey(publicKey);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получаем публичный ключ клиента по его сокету, чтобы понимать, кто отправляет сигналы в рамках звонка
|
* Получаем публичный ключ клиента по его сокету, чтобы понимать, кто отправляет сигналы в рамках звонка
|
||||||
* @param client Сокет клиента, для которого нужно получить публичный ключ
|
* @param client Сокет клиента, для которого нужно получить публичный ключ
|
||||||
|
|||||||
@@ -127,6 +127,13 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
|
|||||||
client.disconnect(Failures.NO_CALL_SESSION);
|
client.disconnect(Failures.NO_CALL_SESSION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if(!session.isValidSource(src)) {
|
||||||
|
/**
|
||||||
|
* Клиент не состоит в сессии звонка, отключаем его от сервера, так как он отправляет некорректные данные
|
||||||
|
*/
|
||||||
|
client.disconnect(Failures.DATA_MISSMATCH);
|
||||||
|
return;
|
||||||
|
}
|
||||||
Room room = this.fus.createRoom();
|
Room room = this.fus.createRoom();
|
||||||
session.setRoom(room);
|
session.setRoom(room);
|
||||||
session.joinCall(src, client);
|
session.joinCall(src, client);
|
||||||
|
|||||||
Reference in New Issue
Block a user