package pl.radical.open.gg.packet.in;
import pl.radical.open.gg.IRemoteStatus;
import pl.radical.open.gg.IUser;
import pl.radical.open.gg.RemoteStatus;
import pl.radical.open.gg.User;
import pl.radical.open.gg.packet.AbstractGGIncomingPacket;
import pl.radical.open.gg.packet.GGIncomingPackage;
import pl.radical.open.gg.packet.IncomingPacket;
import pl.radical.open.gg.packet.dicts.GGStatuses;
import pl.radical.open.gg.packet.handlers.GGStatus60PacketHandler;
import pl.radical.open.gg.utils.GGConversion;
import pl.radical.open.gg.utils.GGUtils;
/**
* @author <a href="mailto:mati@sz.home.pl">Mateusz Szczap</a>
* @author <a href="mailto:lukasz.rzanek@radical.com.pl>Łukasz Rżanek</a>
*/
@IncomingPacket(type = 0x000f, label = "GG_STATUS60", handler = GGStatus60PacketHandler.class)
@Deprecated
public class GGStatus60 extends AbstractGGIncomingPacket implements GGStatuses, GGIncomingPackage {
private IUser user = null;
private RemoteStatus status60 = null;
public GGStatus60(final byte[] data) {
handleUser(data);
handleStatus60(data);
}
public IUser getUser() {
return user;
}
public IRemoteStatus getStatus60() {
return status60;
}
private void handleUser(final byte[] data) {
final byte flag = data[3]; // cache flag
data[3] = GGUtils.intToByte(0)[0]; // remove flag
final int uin = GGUtils.byteToInt(data);
data[3] = flag;
final int protocolStatus = GGUtils.unsignedByteToInt(data[4]);
final User.UserMode userMode = GGConversion.getUserMode(protocolStatus);
user = new User(uin, userMode);
}
private void handleStatus60(final byte[] data) {
final byte flag = data[3]; // cache flag
final int protocolStatus = GGUtils.unsignedByteToInt(data[4]);
final int remoteIP = GGUtils.byteToInt(data, 5);
final byte[] remoteIPArray = GGUtils.convertIntToByteArray(remoteIP);
final int remotePort = GGUtils.byteToShort(data, 9);
final int version = GGUtils.unsignedByteToInt(data[11]);
final int imageSize = GGUtils.unsignedByteToInt(data[12]);
String description = null;
long timeInMillis = -1;
if (protocolStatus == GGStatuses.GG_STATUS_AVAIL_DESCR || protocolStatus == GGStatuses.GG_STATUS_BUSY_DESCR || protocolStatus == GGStatuses.GG_STATUS_INVISIBLE_DESCR || protocolStatus == GGStatuses.GG_STATUS_NOT_AVAIL_DESCR) {
description = GGUtils.byteToString(data, 14);
if (data.length > 14 + description.length()) {
final int timeInSeconds = GGUtils.byteToInt(data, data.length - 4);
timeInMillis = GGUtils.secondsToMillis(timeInSeconds);
}
}
status60 = GGConversion.getClientRemoteStatus(protocolStatus, description, timeInMillis);
status60.setRemoteIP(remoteIPArray);
status60.setImageSize(imageSize);
status60.setGGVersion(version);
if (remotePort == 0) {
status60.setSupportsDirectCommunication(false);
} else if (remotePort == 1) {
status60.setUserBehindFirewall(true);
} else if (remotePort == 2) {
status60.setInRemoteUserBuddyList(false);
} else {
status60.setRemotePort(remotePort);
}
if (flag == 0x40) {
status60.setSupportsVoiceCommunication(true);
}
}
}