X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Frtsp-server%2Frtsp-client.h;h=dd4e71230e7e359a88210c32330ed8182943b861;hb=65042a9551a9cf4586d6e3fa49e6a10f25873553;hp=07b81d91809e1ccb13a25dd14539ff2ddf21d0ec;hpb=ebc28a47dad000f8344ab803a43fc981d1fca339;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/rtsp-server/rtsp-client.h b/gst/rtsp-server/rtsp-client.h index 07b81d9..dd4e712 100644 --- a/gst/rtsp-server/rtsp-client.h +++ b/gst/rtsp-server/rtsp-client.h @@ -13,35 +13,29 @@ * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include #include #ifndef __GST_RTSP_CLIENT_H__ #define __GST_RTSP_CLIENT_H__ +G_BEGIN_DECLS + +typedef struct _GstRTSPClient GstRTSPClient; +typedef struct _GstRTSPClientClass GstRTSPClientClass; +typedef struct _GstRTSPClientState GstRTSPClientState; + +#include "rtsp-server.h" #include "rtsp-media.h" #include "rtsp-media-mapping.h" #include "rtsp-session-pool.h" - -G_BEGIN_DECLS +#include "rtsp-session-media.h" +#include "rtsp-auth.h" +#include "rtsp-sdp.h" #define GST_TYPE_RTSP_CLIENT (gst_rtsp_client_get_type ()) #define GST_IS_RTSP_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTSP_CLIENT)) @@ -52,21 +46,45 @@ G_BEGIN_DECLS #define GST_RTSP_CLIENT_CAST(obj) ((GstRTSPClient*)(obj)) #define GST_RTSP_CLIENT_CLASS_CAST(klass) ((GstRTSPClientClass*)(klass)) -typedef struct _GstRTSPClient GstRTSPClient; -typedef struct _GstRTSPClientClass GstRTSPClientClass; +/** + * GstRTSPClientState: + * @request: the complete request + * @uri: the complete url parsed from @request + * @method: the parsed method of @uri + * @session: the session, can be NULL + * @sessmedia: the session media for the url can be NULL + * @factory: the media factory for the url, can be NULL. + * @media: the media for the url can be NULL + * @stream: the stream for the url can be NULL + * @response: the response + * + * Information passed around containing the client state of a request. + */ +struct _GstRTSPClientState { + GstRTSPMessage *request; + GstRTSPUrl *uri; + GstRTSPMethod method; + GstRTSPSession *session; + GstRTSPSessionMedia *sessmedia; + GstRTSPMediaFactory *factory; + GstRTSPMedia *media; + GstRTSPStream *stream; + GstRTSPMessage *response; +}; /** * GstRTSPClient: * * @connection: the connection object handling the client request. * @watch: watch for the connection - * @watchid: id of the watch - * @timeout: the session timeout + * @ip: ip address used by the client to connect to us + * @use_client_settings: whether to allow client transport settings for multicast * @session_pool: handle to the session pool used by the client. * @media_mapping: handle to the media mapping used by the client. * @uri: cached uri * @media: cached media - * @streams: a list of streams using @connection. + * @transports: a list of #GstRTSPStreamTransport using @connection. + * @sessions: a list of sessions managed by @connection. * * The client structure. */ @@ -75,39 +93,80 @@ struct _GstRTSPClient { GstRTSPConnection *connection; GstRTSPWatch *watch; - guint watchid; + gchar *server_ip; + gboolean is_ipv6; + gboolean use_client_settings; - guint timeout; + GstRTSPServer *server; GstRTSPSessionPool *session_pool; GstRTSPMediaMapping *media_mapping; + GstRTSPAuth *auth; GstRTSPUrl *uri; GstRTSPMedia *media; - GList *streams; + GList *transports; + GList *sessions; + + guint teardown_response_seq; }; struct _GstRTSPClientClass { GObjectClass parent_class; + + GstSDPMessage * (*create_sdp) (GstRTSPClient *client, GstRTSPMedia *media); + + /* signals */ + void (*closed) (GstRTSPClient *client); + void (*new_session) (GstRTSPClient *client, GstRTSPSession *session); + void (*options_request) (GstRTSPClient *client, GstRTSPClientState *state); + void (*describe_request) (GstRTSPClient *client, GstRTSPClientState *state); + void (*setup_request) (GstRTSPClient *client, GstRTSPClientState *state); + void (*play_request) (GstRTSPClient *client, GstRTSPClientState *state); + void (*pause_request) (GstRTSPClient *client, GstRTSPClientState *state); + void (*teardown_request) (GstRTSPClient *client, GstRTSPClientState *state); + void (*set_parameter_request) (GstRTSPClient *client, GstRTSPClientState *state); + void (*get_parameter_request) (GstRTSPClient *client, GstRTSPClientState *state); }; GType gst_rtsp_client_get_type (void); GstRTSPClient * gst_rtsp_client_new (void); -void gst_rtsp_client_set_session_pool (GstRTSPClient *client, +void gst_rtsp_client_set_server (GstRTSPClient * client, GstRTSPServer * server); +GstRTSPServer * gst_rtsp_client_get_server (GstRTSPClient * client); + +void gst_rtsp_client_set_session_pool (GstRTSPClient *client, GstRTSPSessionPool *pool); GstRTSPSessionPool * gst_rtsp_client_get_session_pool (GstRTSPClient *client); -void gst_rtsp_client_set_media_mapping (GstRTSPClient *client, +void gst_rtsp_client_set_media_mapping (GstRTSPClient *client, GstRTSPMediaMapping *mapping); GstRTSPMediaMapping * gst_rtsp_client_get_media_mapping (GstRTSPClient *client); -void gst_rtsp_client_set_timeout (GstRTSPClient *client, guint timeout); -guint gst_rtsp_client_get_timeout (GstRTSPClient *client); +void gst_rtsp_client_set_use_client_settings (GstRTSPClient * client, + gboolean use_client_settings); +gboolean gst_rtsp_client_get_use_client_settings (GstRTSPClient * client); + +void gst_rtsp_client_set_auth (GstRTSPClient *client, GstRTSPAuth *auth); +GstRTSPAuth * gst_rtsp_client_get_auth (GstRTSPClient *client); + + +gboolean gst_rtsp_client_accept (GstRTSPClient *client, + GSocket *socket, + GCancellable *cancellable, + GError **error); + +gboolean gst_rtsp_client_use_socket (GstRTSPClient * client, + GSocket *socket, + const gchar * ip, + gint port, + const gchar *initial_buffer, + GError **error); + +guint gst_rtsp_client_attach (GstRTSPClient *client, + GMainContext *context); -gboolean gst_rtsp_client_accept (GstRTSPClient *client, - GIOChannel *channel); G_END_DECLS