Beispiel #1
0
        public static TunnelingAck Parse(byte[] buffer, int index)
        {
            TunnelingAck request = new TunnelingAck
            {
                Header           = KnxNetIPHeader.Parse(buffer, index),
                ConnectionHeader = KnxNetBodyConnectionHeader.Parse(buffer, index + 6)
            };

            return(request);
        }
 private void ListenTask()
 {
     while (true)
     {
         byte[]         buffer = UdpClient.ReceiveAsync().Result.Buffer;
         KnxNetIPHeader header = KnxNetIPHeader.Parse(buffer, 0);
         ProcessIncomming(buffer, header);
     }
     // ReSharper disable once FunctionNeverReturns
 }
        private void HandleConnectResponse(byte[] buffer, KnxNetIPHeader header)
        {
            ConnectResponse response = ConnectResponse.Parse(buffer, 0);

            if (response.Status == 0)
            {
                _connection.Connected(response.ChannelId);
            }
            else
            {
                Logger?.WriteLine("Connection failed with status:" + response.Status.ToString("X"), LogType.Error);
            }
        }
        private void HandleTunnelingRequest(byte[] buffer, KnxNetIPHeader header)
        {
            TunnelingRequest request = TunnelingRequest.Parse(buffer, 0);
            TunnelingAck     ack     = new TunnelingAck {
                ConnectionHeader = request.ConnectionHeader
            };

            _connection._sender.SendPacket(ack);

            _receivedPackets.Add(new KnxReceivedDataInEventArgs()
            {
                DestinationAddress = request.Message.GetDestinationAddress(),
                SourceAddress      = request.Message.GetSourceAddress(),
                Data        = request.Message.GetData(),
                RequestType = request.Message.GetAPCIType()
            });
        }
        private void ProcessIncomming(byte[] buffer, KnxNetIPHeader header)
        {
            switch ((ServiceType)header.ServiceType)
            {
            case ServiceType.ConnectResponse:
                HandleConnectResponse(buffer, header);
                break;

            case ServiceType.TunnelingRequest:
                HandleTunnelingRequest(buffer, header);
                break;

            case ServiceType.TunnelingAcknowledge:
                /*TunnelingAck ack2 = TunnelingAck.Parse(buffer, 0);//TODO ERROR CHECKING
                 * _socket.Receive(buffer);
                 * TunnelingRequest request1 = TunnelingRequest.Parse(buffer, 0);
                 *
                 * TunnelingAck ack3 = new TunnelingAck
                 * {
                 *      ConnectionHeader = request1.ConnectionHeader
                 * };
                 *
                 * ack3.ConnectionHeader.SequenceCounter &= 0x01;
                 *
                 * byte[] tmep = ack3.GetBytes();
                 * _socket.Send(tmep);*/
                break;

            case ServiceType.ConnectionStateResponse:

                break;

            case ServiceType.DisconnectRequest:
                _connection.Disconnected();
                break;

            default:
                Logger?.WriteLine("Unknown packet with service type: " + (ServiceType)header.ServiceType, LogType.Warning);
                break;
            }
        }
Beispiel #6
0
        public static ConnectResponse Parse(byte[] buffer, int index)
        {
            int             progress = 0;
            ConnectResponse output   = new ConnectResponse();

            output.Header = KnxNetIPHeader.Parse(buffer, index + progress);
            progress     += 6;

            output.ChannelId = buffer[index + progress];
            progress++;
            output.Status = buffer[index + progress];
            progress++;

            if (output.Status == 0)
            {
                output.DataEndpoint = KnxNetIPHPAI.Parse(buffer, index + progress);
                progress           += output.DataEndpoint.Lenght;

                output.ResponseDataBlock = KnxNetIPCRD.Parse(buffer, index + progress);
            }

            return(output);
        }
Beispiel #7
0
        public static TunnelingRequest Parse(byte[] buffer, int index)
        {
            TunnelingRequest request = new TunnelingRequest
            {
                Header           = KnxNetIPHeader.Parse(buffer, index),
                ConnectionHeader = KnxNetBodyConnectionHeader.Parse(buffer, index + 6)
            };

            int cemiFrameSize = request.Header.Size - request.ConnectionHeader.StructureLength -
                                request.Header.HeaderSize;

            if (cemiFrameSize == 0)
            {
                return(request);
            }

            CommonExternalMessageInterface msg;

            CommonExternalMessageInterface.TryParse(buffer, index + 10, cemiFrameSize, out msg);
            request.Message = msg;

            return(request);
        }