// This file was generated by the Gtk# code generator.
// Any changes made will be lost if regenerated.

namespace Gst.Rtsp {

	using System;
	using System.Runtime.InteropServices;

#region Autogenerated code
	[GLib.GType (typeof (Gst.Rtsp.RTSPStatusCodeGType))]
	public enum RTSPStatusCode {

		Invalid = 0,
		Continue = 100,
		Ok = 200,
		Created = 201,
		LowOnStorage = 250,
		MultipleChoices = 300,
		MovedPermanently = 301,
		MoveTemporarily = 302,
		SeeOther = 303,
		NotModified = 304,
		UseProxy = 305,
		BadRequest = 400,
		Unauthorized = 401,
		PaymentRequired = 402,
		Forbidden = 403,
		NotFound = 404,
		MethodNotAllowed = 405,
		NotAcceptable = 406,
		ProxyAuthRequired = 407,
		RequestTimeout = 408,
		Gone = 410,
		LengthRequired = 411,
		PreconditionFailed = 412,
		RequestEntityTooLarge = 413,
		RequestUriTooLarge = 414,
		UnsupportedMediaType = 415,
		ParameterNotUnderstood = 451,
		ConferenceNotFound = 452,
		NotEnoughBandwidth = 453,
		SessionNotFound = 454,
		MethodNotValidInThisState = 455,
		HeaderFieldNotValidForResource = 456,
		InvalidRange = 457,
		ParameterIsReadonly = 458,
		AggregateOperationNotAllowed = 459,
		OnlyAggregateOperationAllowed = 460,
		UnsupportedTransport = 461,
		DestinationUnreachable = 462,
		KeyManagementFailure = 463,
		InternalServerError = 500,
		NotImplemented = 501,
		BadGateway = 502,
		ServiceUnavailable = 503,
		GatewayTimeout = 504,
		RtspVersionNotSupported = 505,
		OptionNotSupported = 551,
	}

	internal class RTSPStatusCodeGType {
		[DllImport ("gstrtsp-1.0-0.dll", CallingConvention = CallingConvention.Cdecl)]
		static extern IntPtr gst_rtsp_status_code_get_type ();

		public static GLib.GType GType {
			get {
				return new GLib.GType (gst_rtsp_status_code_get_type ());
			}
		}
	}
#endregion
}
