175 lines
6.7 KiB
Java
175 lines
6.7 KiB
Java
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;
|
||
}
|
||
}
|