public BrickReply OnTunnelCommand(BrickCommand command){
			BrickReply reply = null;
			BrickCommand replyCommand = null;
			if(command is MonoBrick.NXT.Command){
				var nxtCommand = new MonoBrick.NXT.Command (command.Data);
				switch(nxtCommand.CommandByte){
					case MonoBrick.NXT.CommandByte.GetTunnelCommands:
						replyCommand = new MonoBrick.NXT.Command(MonoBrick.NXT.CommandType.ReplyCommand,nxtCommand.CommandByte,true);
						replyCommand.Append((byte) 0x00);//no error
						if(streamingSettings.EnableRTSP){
							replyCommand.Append((byte) MonoBrick.NXT.CommandByte.GetTunnelRTSPSettings);
							replyCommand.Append((byte) MonoBrick.NXT.CommandByte.StartTunnelRTSP);
						}
						if(streamingSettings.EnableGPS){
							replyCommand.Append((byte) MonoBrick.NXT.CommandByte.GetTunnelGPSPosition);
						}
						if(streamingSettings.EnableSpeak){
							replyCommand.Append((byte) MonoBrick.NXT.CommandByte.TunnelSpeak);
						}
						reply = new MonoBrick.NXT.Reply(replyCommand.Data);
					break;
					case MonoBrick.NXT.CommandByte.GetTunnelRTSPSettings:
						if(streamingSettings.EnableRTSP){
							replyCommand = new MonoBrick.NXT.Command(MonoBrick.NXT.CommandType.ReplyCommand,nxtCommand.CommandByte,true);
							replyCommand.Append((byte) 0x00);//no error
							replyCommand.Append((Int32)streamingSettings.RTSPPort);
							replyCommand.Append((Int32)streamingSettings.VideoPort);
							reply = new MonoBrick.NXT.Reply(replyCommand.Data);
						}
						else{
							reply = new MonoBrick.NXT.Reply(MonoBrick.NXT.CommandType.ReplyCommand,nxtCommand.CommandByte,(byte) TunnelError.ErrorExecuting);
						}
					break;

					case MonoBrick. NXT.CommandByte.StartTunnelRTSP:
						if(rtspServer.Start(clientIpAddress.ToString(),streamingSettings.RTSPPort,streamingSettings.VideoPort,streamingSettings.VideoQuality)){
							reply = new MonoBrick.NXT.Reply(MonoBrick.NXT.CommandType.ReplyCommand,nxtCommand.CommandByte);
						}
						else{
							reply = new MonoBrick.NXT.Reply(MonoBrick.NXT.CommandType.ReplyCommand,nxtCommand.CommandByte,(byte) TunnelError.ErrorExecuting);
						}
					break;
					default:
						reply = new MonoBrick.NXT.Reply(MonoBrick.NXT.CommandType.ReplyCommand,nxtCommand.CommandByte,(byte) TunnelError.UnsupportedCommand);
					break;
				}
			}
			else{
				throw new NotImplementedException ("EV3 support has been implemented");
			}




			return reply;
		}
        public BrickReply OnTunnelCommand(BrickCommand command)
        {
            BrickReply   reply        = null;
            BrickCommand replyCommand = null;

            if (command is MonoBrick.NXT.Command)
            {
                var nxtCommand = new MonoBrick.NXT.Command(command.Data);
                switch (nxtCommand.CommandByte)
                {
                case MonoBrick.NXT.CommandByte.GetTunnelCommands:
                    replyCommand = new MonoBrick.NXT.Command(MonoBrick.NXT.CommandType.ReplyCommand, nxtCommand.CommandByte, true);
                    replyCommand.Append((byte)0x00);                             //no error
                    if (streamingSettings.EnableRTSP)
                    {
                        replyCommand.Append((byte)MonoBrick.NXT.CommandByte.GetTunnelRTSPSettings);
                        replyCommand.Append((byte)MonoBrick.NXT.CommandByte.StartTunnelRTSP);
                    }
                    if (streamingSettings.EnableGPS)
                    {
                        replyCommand.Append((byte)MonoBrick.NXT.CommandByte.GetTunnelGPSPosition);
                    }
                    if (streamingSettings.EnableSpeak)
                    {
                        replyCommand.Append((byte)MonoBrick.NXT.CommandByte.TunnelSpeak);
                    }
                    reply = new MonoBrick.NXT.Reply(replyCommand.Data);
                    break;

                case MonoBrick.NXT.CommandByte.GetTunnelRTSPSettings:
                    if (streamingSettings.EnableRTSP)
                    {
                        replyCommand = new MonoBrick.NXT.Command(MonoBrick.NXT.CommandType.ReplyCommand, nxtCommand.CommandByte, true);
                        replyCommand.Append((byte)0x00);                                 //no error
                        replyCommand.Append((Int32)streamingSettings.RTSPPort);
                        replyCommand.Append((Int32)streamingSettings.VideoPort);
                        reply = new MonoBrick.NXT.Reply(replyCommand.Data);
                    }
                    else
                    {
                        reply = new MonoBrick.NXT.Reply(MonoBrick.NXT.CommandType.ReplyCommand, nxtCommand.CommandByte, (byte)TunnelError.ErrorExecuting);
                    }
                    break;

                case MonoBrick.NXT.CommandByte.StartTunnelRTSP:
                    if (rtspServer.Start(clientIpAddress.ToString(), streamingSettings.RTSPPort, streamingSettings.VideoPort, streamingSettings.VideoQuality))
                    {
                        reply = new MonoBrick.NXT.Reply(MonoBrick.NXT.CommandType.ReplyCommand, nxtCommand.CommandByte);
                    }
                    else
                    {
                        reply = new MonoBrick.NXT.Reply(MonoBrick.NXT.CommandType.ReplyCommand, nxtCommand.CommandByte, (byte)TunnelError.ErrorExecuting);
                    }
                    break;

                default:
                    reply = new MonoBrick.NXT.Reply(MonoBrick.NXT.CommandType.ReplyCommand, nxtCommand.CommandByte, (byte)TunnelError.UnsupportedCommand);
                    break;
                }
            }
            else
            {
                throw new NotImplementedException("EV3 support has been implemented");
            }



            return(reply);
        }