/* * Copyright 2014-2016 CyberVision, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kaaproject.kaa.common.channels.protocols.kaatcp.messages; /** * ConnAck message Class. The CONNACK message is a message sent by the server in response to a * CONNECT request from a client. Variable header byte 1 reserved (0) byte 2 Return Code see enum * ReturnCode * * @author Andrey Panasenko */ public class ConnAck extends MqttFrame { public static final int CONNACK_REMAINING_LEGTH_V1 = 2; private ReturnCode returnCode; /** * Default constructor. * * @param returnCode the return code */ public ConnAck(ReturnCode returnCode) { setMessageType(MessageType.CONNACK); this.setReturnCode(returnCode); this.remainingLength = CONNACK_REMAINING_LEGTH_V1; } /** * Default constructor. */ public ConnAck() { super(); setReturnCode(ReturnCode.ACCEPTED); setMessageType(MessageType.CONNACK); } /* (non-Javadoc) * @see org.kaaproject.kaa.common.channels.protocols.kaatcp.messages.mqttFrame#pack(int) */ @Override protected void pack() { buffer.put((byte) 0); buffer.put(returnCode.getReturnCode()); } /** * Return ConnAck return code. * * @return byte returnCode */ public ReturnCode getReturnCode() { return returnCode; } /** * Set ConnAck return code. * * @param returnCode - ReturnCode */ public void setReturnCode(ReturnCode returnCode) { this.returnCode = returnCode; } /* (non-Javadoc) * @see org.kaaproject.kaa.common.channels.protocols.kaatcp.messages.mqttFrame#decode(int) */ @Override protected void decode() { byte code = buffer.get(1); if (code == ReturnCode.ACCEPTED.getReturnCode()) { returnCode = ReturnCode.ACCEPTED; } else if (code == ReturnCode.REFUSE_BAD_CREDENTIALS.getReturnCode()) { returnCode = ReturnCode.REFUSE_BAD_CREDENTIALS; } else if (code == ReturnCode.REFUSE_BAD_PROTOCOL.getReturnCode()) { returnCode = ReturnCode.REFUSE_BAD_PROTOCOL; } else if (code == ReturnCode.REFUSE_ID_REJECT.getReturnCode()) { returnCode = ReturnCode.REFUSE_ID_REJECT; } else if (code == ReturnCode.REFUSE_NO_AUTH.getReturnCode()) { returnCode = ReturnCode.REFUSE_NO_AUTH; } else if (code == ReturnCode.REFUSE_SERVER_UNAVAILABLE.getReturnCode()) { returnCode = ReturnCode.REFUSE_SERVER_UNAVAILABLE; } else if (code == ReturnCode.REFUSE_VERIFICATION_FAILED.getReturnCode()) { returnCode = ReturnCode.REFUSE_VERIFICATION_FAILED; } else { returnCode = ReturnCode.UNDEFINED; } } /* (non-Javadoc) * @see * org.kaaproject.kaa.common.channels.protocols.kaatcp.messages.MqttFrame#isNeedCloseConnection() */ @Override public boolean isNeedCloseConnection() { return false; } /** * CONNACK return code enum. * ACCEPTED 0x01 Connection Accepted * REFUSE_BAD_PROTOCOL 0x02 Connection Refused: unacceptable protocol version * REFUSE_ID_REJECT 0x03 Connection Refused: identifier rejected * REFUSE_SERVER_UNAVAILABLE 0x04 Connection Refused: server unavailable * REFUSE_BAD_CREDENTIALS 0x05 Connection Refused: invalid authentication parameters * REFUSE_NO_AUTH 0x06 Connection Refused: not authorized * REFUSE_VERIFICATION_FAILED 0x10 Connection Refused: endpoint verification failed */ public enum ReturnCode { ACCEPTED((byte) 0x01), REFUSE_BAD_PROTOCOL((byte) 0x02), REFUSE_ID_REJECT((byte) 0x03), REFUSE_SERVER_UNAVAILABLE((byte) 0x04), REFUSE_BAD_CREDENTIALS((byte) 0x05), REFUSE_NO_AUTH((byte) 0x06), REFUSE_VERIFICATION_FAILED((byte) 0x10), UNDEFINED((byte) 0x07); private byte returnCode; private ReturnCode(byte code) { this.returnCode = code; } /** * Return byte representation of ConnAck return code. * * @return byte returnCode */ public byte getReturnCode() { return returnCode; } } }