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; } }
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); }
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); }