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());
        }
Beispiel #2
0
 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);
     }
 }