Files
rosetta-wss/src/main/java/im/rosetta/packet/Packet26SignalPeer.java

175 lines
6.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package im.rosetta.packet;
import im.rosetta.packet.runtime.NetworkSignalType;
import io.orprotocol.Stream;
import io.orprotocol.packet.Packet;
/**
* Пакет cигналинга для совершения звонка. Учавствует в обмене ключами,
* иницилизации звонка.
*/
public class Packet26SignalPeer extends Packet {
/**
* Идентификатор отправителя сигнала, обычно это PK пользователя, который отправляет пакет
*/
private String src;
/**
* Идентификатор получателя сигнала, обычно это PK пользователя, который должен принять пакет
*/
private String dst;
/**
* Если сигнал предназначен для обмена ключами, то в это поле
* будет помещаться sharedPublic публичная часть ключа DH алгоритма
*/
private String sharedPublic;
/**
* Тип сигнала
*/
private NetworkSignalType signalType;
/**
* callId и joinToken нужны для того, чтобы идентифицировать сессию звонка. Так как roomId это только ID комнаты на sfu
*/
private String callId;
private String joinToken;
@Override
public void read(Stream stream) {
this.signalType = NetworkSignalType.fromCode(stream.readInt8());
if(this.signalType == NetworkSignalType.END_CALL_BECAUSE_BUSY
|| this.signalType == NetworkSignalType.END_CALL_BECAUSE_PEER_DISCONNECTED
|| this.signalType == NetworkSignalType.RINGING_TIMEOUT) {
return;
}
this.src = stream.readString();
this.dst = stream.readString();
if (signalType == NetworkSignalType.KEY_EXCHANGE) {
this.sharedPublic = stream.readString();
}
if(signalType == NetworkSignalType.CALL || signalType == NetworkSignalType.ACCEPT || signalType == NetworkSignalType.END_CALL) {
this.callId = stream.readString();
this.joinToken = stream.readString();
}
}
@Override
public Stream write() {
Stream stream = new Stream();
stream.writeInt16(this.packetId);
stream.writeInt8(this.signalType.getCode());
if(this.signalType == NetworkSignalType.END_CALL_BECAUSE_BUSY
|| this.signalType == NetworkSignalType.END_CALL_BECAUSE_PEER_DISCONNECTED
|| this.signalType == NetworkSignalType.RINGING_TIMEOUT) {
return stream;
}
stream.writeString(this.src);
stream.writeString(this.dst);
if (signalType == NetworkSignalType.KEY_EXCHANGE) {
stream.writeString(this.sharedPublic);
}
if(signalType == NetworkSignalType.CALL || signalType == NetworkSignalType.ACCEPT || signalType == NetworkSignalType.END_CALL) {
stream.writeString(this.callId);
stream.writeString(this.joinToken);
}
return stream;
}
/**
* Получить идентификатор отправителя сигнала
* @return идентификатор отправителя сигнала
*/
public String getSrc() {
return src;
}
/**
* Установить идентификатор отправителя сигнала
* @param src идентификатор отправителя сигнала
*/
public void setSrc(String src) {
this.src = src;
}
/**
* Получить идентификатор получателя сигнала
* @return идентификатор получателя сигнала
*/
public String getDst() {
return dst;
}
/**
* Установить идентификатор получателя сигнала
* @param dst идентификатор получателя сигнала
*/
public void setDst(String dst) {
this.dst = dst;
}
/**
* Получить публичную часть ключа DH алгоритма, если сигнал предназначен для обмена ключами
* @return публичная часть ключа DH алгоритма или null, если сигнал не предназначен для обмена ключами
*/
public String getSharedPublic() {
return sharedPublic;
}
/**
* Установить публичную часть ключа DH алгоритма, если сигнал предназначен для обмена ключами
* @param sharedPublic публичная часть ключа DH алгоритма
*/
public void setSharedPublic(String sharedPublic) {
this.sharedPublic = sharedPublic;
}
/**
* Получить тип сигнала
* @return тип сигнала
*/
public NetworkSignalType getSignalType() {
return signalType;
}
/**
* Установить тип сигнала
* @param signalType тип сигнала
*/
public void setSignalType(NetworkSignalType signalType) {
this.signalType = signalType;
}
/**
* Получить идентификатор сессии звонка, если тип сигнала CALL или ACCEPT
* @return идентификатор сессии звонка, если тип сигнала CALL или ACCEPT, иначе null
*/
public String getCallId() {
return callId;
}
/**
* Установить идентификатор сессии звонка, если тип сигнала CALL или ACCEPT
* @param callId идентификатор сессии звонка, если тип сигнала CALL или ACCEPT
*/
public void setCallId(String callId) {
this.callId = callId;
}
/**
* Получить токен для присоединения к сессии звонка, если тип сигнала CALL или ACCEPT
* @return токен для присоединения к сессии звонка, если тип сигнала CALL или ACCEPT, иначе null
*/
public String getJoinToken() {
return joinToken;
}
/**
* Установить токен для присоединения к сессии звонка, если тип сигнала CALL или ACCEPT
* @param joinToken токен для присоединения к сессии звонка, если тип сигнала CALL или ACCEPT
*/
public void setJoinToken(String joinToken) {
this.joinToken = joinToken;
}
}