rtsp-client: add signals for rtsp requests (fixes #683287)
authorAleix Conchillo Flaque <aleix@oblong.com>
Mon, 3 Sep 2012 17:48:14 +0000 (10:48 -0700)
committerWim Taymans <wim.taymans@collabora.co.uk>
Fri, 7 Sep 2012 14:41:29 +0000 (16:41 +0200)
gst/rtsp-server/rtsp-client.c
gst/rtsp-server/rtsp-client.h

index 4742ad3..89a8b64 100644 (file)
@@ -51,6 +51,14 @@ enum
 {
   SIGNAL_CLOSED,
   SIGNAL_NEW_SESSION,
+  SIGNAL_OPTIONS_REQUEST,
+  SIGNAL_DESCRIBE_REQUEST,
+  SIGNAL_SETUP_REQUEST,
+  SIGNAL_PLAY_REQUEST,
+  SIGNAL_PAUSE_REQUEST,
+  SIGNAL_TEARDOWN_REQUEST,
+  SIGNAL_SET_PARAMETER_REQUEST,
+  SIGNAL_GET_PARAMETER_REQUEST,
   SIGNAL_LAST
 };
 
@@ -108,6 +116,54 @@ gst_rtsp_client_class_init (GstRTSPClientClass * klass)
       G_STRUCT_OFFSET (GstRTSPClientClass, new_session), NULL, NULL,
       g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GST_TYPE_RTSP_SESSION);
 
+  gst_rtsp_client_signals[SIGNAL_OPTIONS_REQUEST] =
+      g_signal_new ("options-request", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPClientClass, options_request),
+      NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+      G_TYPE_POINTER);
+
+  gst_rtsp_client_signals[SIGNAL_DESCRIBE_REQUEST] =
+      g_signal_new ("describe-request", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPClientClass, describe_request),
+      NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+      G_TYPE_POINTER);
+
+  gst_rtsp_client_signals[SIGNAL_SETUP_REQUEST] =
+      g_signal_new ("setup-request", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPClientClass, setup_request),
+      NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+      G_TYPE_POINTER);
+
+  gst_rtsp_client_signals[SIGNAL_PLAY_REQUEST] =
+      g_signal_new ("play-request", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPClientClass, play_request),
+      NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+      G_TYPE_POINTER);
+
+  gst_rtsp_client_signals[SIGNAL_PAUSE_REQUEST] =
+      g_signal_new ("pause-request", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPClientClass, pause_request),
+      NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+      G_TYPE_POINTER);
+
+  gst_rtsp_client_signals[SIGNAL_TEARDOWN_REQUEST] =
+      g_signal_new ("teardown-request", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPClientClass, teardown_request),
+      NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1,
+      G_TYPE_POINTER);
+
+  gst_rtsp_client_signals[SIGNAL_SET_PARAMETER_REQUEST] =
+      g_signal_new ("set-parameter-request", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPClientClass,
+          set_parameter_request), NULL, NULL, g_cclosure_marshal_VOID__POINTER,
+      G_TYPE_NONE, 1, G_TYPE_POINTER);
+
+  gst_rtsp_client_signals[SIGNAL_GET_PARAMETER_REQUEST] =
+      g_signal_new ("get-parameter-request", G_TYPE_FROM_CLASS (klass),
+      G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GstRTSPClientClass,
+          get_parameter_request), NULL, NULL, g_cclosure_marshal_VOID__POINTER,
+      G_TYPE_NONE, 1, G_TYPE_POINTER);
+
   tunnels =
       g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
   g_mutex_init (&tunnels_lock);
@@ -544,6 +600,10 @@ handle_teardown_request (GstRTSPClient * client, GstRTSPClientState * state)
 
   send_response (client, session, state->response);
 
+  /* we emit the signal before closing the connection */
+  g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_TEARDOWN_REQUEST],
+      0, state);
+
   close_connection (client);
 
   return TRUE;
@@ -583,6 +643,10 @@ handle_get_param_request (GstRTSPClient * client, GstRTSPClientState * state)
 
     send_response (client, state->session, state->response);
   }
+
+  g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_GET_PARAMETER_REQUEST],
+      0, state);
+
   return TRUE;
 
   /* ERRORS */
@@ -615,6 +679,10 @@ handle_set_param_request (GstRTSPClient * client, GstRTSPClientState * state)
 
     send_response (client, state->session, state->response);
   }
+
+  g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_SET_PARAMETER_REQUEST],
+      0, state);
+
   return TRUE;
 
   /* ERRORS */
@@ -663,6 +731,9 @@ handle_pause_request (GstRTSPClient * client, GstRTSPClientState * state)
   /* the state is now READY */
   media->state = GST_RTSP_STATE_READY;
 
+  g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_PAUSE_REQUEST],
+      0, state);
+
   return TRUE;
 
   /* ERRORS */
@@ -798,6 +869,9 @@ handle_play_request (GstRTSPClient * client, GstRTSPClientState * state)
 
   media->state = GST_RTSP_STATE_PLAYING;
 
+  g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_PLAY_REQUEST],
+      0, state);
+
   return TRUE;
 
   /* ERRORS */
@@ -1037,6 +1111,9 @@ handle_setup_request (GstRTSPClient * client, GstRTSPClientState * state)
   }
   g_object_unref (session);
 
+  g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_SETUP_REQUEST],
+      0, state);
+
   return TRUE;
 
   /* ERRORS */
@@ -1216,6 +1293,9 @@ handle_describe_request (GstRTSPClient * client, GstRTSPClientState * state)
 
   send_response (client, state->session, state->response);
 
+  g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_DESCRIBE_REQUEST],
+      0, state);
+
   return TRUE;
 
   /* ERRORS */
@@ -1255,6 +1335,9 @@ handle_options_request (GstRTSPClient * client, GstRTSPClientState * state)
 
   send_response (client, state->session, state->response);
 
+  g_signal_emit (client, gst_rtsp_client_signals[SIGNAL_OPTIONS_REQUEST],
+      0, state);
+
   return TRUE;
 }
 
index 9acfa65..5baf21e 100644 (file)
@@ -112,8 +112,16 @@ struct _GstRTSPClientClass {
   GstSDPMessage * (*create_sdp) (GstRTSPClient *client, GstRTSPMedia *media);
 
   /* signals */
-  void     (*closed)        (GstRTSPClient *client);
-  void     (*new_session)   (GstRTSPClient *client, GstRTSPSession *session);
+  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);