blob: a9e617bb9809ed9785af582b911eb6b5357344cf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2016 Orange.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*******************************************************************************/
package org.eclipse.om2m.sdt.home.lifx.impl.lan.frame;
import java.net.InetAddress;
import java.util.Arrays;
public class LIFXGlobalFrame {
private LIFXFrame frame;
private LIFXFrameAddress frameAddress;
private LIFXProtocolHeader protocolHeader;
private LIFXPayload payload;
private InetAddress remoteHost;
private int remotePort = -1;
public int getRemotePort() {
return remotePort;
}
public void setRemotePort(int remotePort) {
this.remotePort = remotePort;
}
public InetAddress getRemoteHost() {
return remoteHost;
}
public void setRemoteHost(InetAddress remoteHost) {
this.remoteHost = remoteHost;
}
public LIFXPayload getPayload() {
return payload;
}
public void setPayload(LIFXPayload payload) {
this.payload = payload;
getProtocolHeader().setType(payload.getType());
}
public LIFXFrame getFrame() {
if (frame == null) {
frame = new LIFXFrame();
}
return frame;
}
public void setFrame(LIFXFrame frame) {
this.frame = frame;
}
public LIFXFrameAddress getFrameAddress() {
if (frameAddress == null) {
frameAddress = new LIFXFrameAddress();
}
return frameAddress;
}
public void setFrameAddress(LIFXFrameAddress frameAddress) {
this.frameAddress = frameAddress;
}
public LIFXProtocolHeader getProtocolHeader() {
if (protocolHeader == null) {
protocolHeader = new LIFXProtocolHeader();
}
return protocolHeader;
}
public void setProtocolHeader(LIFXProtocolHeader protocolHeader) {
this.protocolHeader = protocolHeader;
}
public byte[] getBytes() {
int payloadSize = 0;
if (payload != null) {
payload.marshal();
payloadSize = payload.getPayloadSize();
getFrame().setPayloadSize(payloadSize);
}
byte[] globalFrame = new byte[36 + payloadSize];
Arrays.fill(globalFrame, (byte) 0);
System.arraycopy(frame.getBytes(), 0, globalFrame, 0, 8);
System.arraycopy(frameAddress.getBytes(), 0, globalFrame, 8, 16);
System.arraycopy(protocolHeader.getBytes(), 0, globalFrame, 24, 12);
if (payloadSize != 0) {
System.arraycopy(payload.getPayload(), 0, globalFrame, 36, payloadSize);
}
return globalFrame;
}
public void setBytes(byte[] globalFrame) throws Exception {
getFrame().setBytes(Arrays.copyOfRange(globalFrame, 0, 8));
getFrameAddress().setBytes(Arrays.copyOfRange(globalFrame, 8, 24));
getProtocolHeader().setBytes(Arrays.copyOfRange(globalFrame, 24, 36));
payload = LIFXPayloadFactory.getLIFXPayload(getProtocolHeader().getType(), Arrays.copyOfRange(globalFrame, 36, 36 + getFrame().getPayloadSize()));
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("LIFXGlobalFrame={");
sb.append("\n");
sb.append("\t remoteHost=");
sb.append(getRemoteHost());
sb.append("\n");
sb.append("\t frame=");
sb.append(getFrame());
sb.append("\n");
sb.append("\t frameAddress=");
sb.append(getFrameAddress());
sb.append("\n");
sb.append("\t protocolHeader=");
sb.append(getProtocolHeader());
sb.append("\n");
sb.append("\t payload=");
sb.append(getPayload());
sb.append("\n");
sb.append("}");
return sb.toString();
}
}