private static byte[] generateInitiateRequest(CosemParameters parameters) { System.IO.MemoryStream stream = new System.IO.MemoryStream(); stream.WriteByte(Constants.xDlmsApdu.NoCiphering.INITIATE_REQUEST); stream.WriteByte(0); //Dedicated key stream.WriteByte(0); //Response-allowed stream.WriteByte(0); //Proposed quality of service stream.WriteByte(Constants.DLMS_VERSION); //Dlms version stream.WriteByte(Constants.ConformanceBlock.TAG); //Conformance block tag byte[] conformance = generateConformanceBlock(parameters); stream.WriteByte((byte)(conformance.Length)); stream.Write(conformance, 0, conformance.Length); //Conformance block //stream.WriteByte(ByteBuffer.allocate(2).putShort(parameters.maxPduSize).array()); stream.WriteByte((byte)(parameters.maxPduSize >> 8)); //Max pdu size stream.WriteByte((byte)(parameters.maxPduSize)); System.IO.MemoryStream stream2 = new System.IO.MemoryStream(); if (parameters.securityType != SecurityType.NONE) { stream2.WriteByte(Constants.xDlmsApdu.GlobalCiphering.INITIATE_REQUEST); byte[] data = Security.authenticatedEncryption(parameters, stream.ToArray()); stream2.WriteByte((byte)(data.Length)); stream2.Write(data, 0, data.Length); } else { //stream2.WriteByte(stream.ToArray()); byte[] aux = stream.ToArray(); stream2.Write(aux, 0, aux.Length); } return(stream2.ToArray()); }
private byte[] packFrame(int cmdGlobalCipher, byte[] payload) { try { if (parameters.securityType != SecurityType.NONE) { System.IO.MemoryStream stream = new System.IO.MemoryStream(); byte[] data = Security.authenticatedEncryption(parameters, payload); stream.SetLength(0); stream.WriteByte((byte)cmdGlobalCipher); //Array.Reverse(getSizeBytes(data.Length)); stream.Write(getSizeBytes(data.Length), 0, getSizeBytes(data.Length).Length); //Array.Reverse(data); stream.Write(data, 0, data.Length); return(stream.ToArray()); } return(payload); } catch (IOException) { throw new DlmsException(DlmsException.DlmsExceptionReason.INTERNAL_ERROR); } }