Add user-id and user-pw properties

So that one doesn't need to modify the URL to have access
to authenticated RTSP streams.

fixes #601728
This commit is contained in:
Bastien Nocera 2009-11-12 19:11:18 +00:00 committed by Wim Taymans
parent 0694be2a82
commit efc611e420
2 changed files with 39 additions and 1 deletions

View file

@ -166,6 +166,8 @@ enum
PROP_DO_RTCP, PROP_DO_RTCP,
PROP_PROXY, PROP_PROXY,
PROP_RTP_BLOCKSIZE, PROP_RTP_BLOCKSIZE,
PROP_USER_ID,
PROP_USER_PW,
PROP_LAST PROP_LAST
}; };
@ -387,6 +389,16 @@ gst_rtspsrc_class_init (GstRTSPSrcClass * klass)
0, 65536, DEFAULT_RTP_BLOCKSIZE, 0, 65536, DEFAULT_RTP_BLOCKSIZE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (gobject_class,
PROP_USER_ID,
g_param_spec_string ("user-id", "user-id",
"RTSP location URI user id for authentication", NULL,
G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_USER_PW,
g_param_spec_string ("user-pw", "user-pw",
"RTSP location URI user password for authentication", NULL,
G_PARAM_READWRITE));
gstelement_class->change_state = gst_rtspsrc_change_state; gstelement_class->change_state = gst_rtspsrc_change_state;
gstbin_class->handle_message = gst_rtspsrc_handle_message; gstbin_class->handle_message = gst_rtspsrc_handle_message;
@ -442,6 +454,8 @@ gst_rtspsrc_finalize (GObject * object)
g_free (rtspsrc->location); g_free (rtspsrc->location);
g_free (rtspsrc->req_location); g_free (rtspsrc->req_location);
gst_rtsp_url_free (rtspsrc->url); gst_rtsp_url_free (rtspsrc->url);
g_free (rtspsrc->user_id);
g_free (rtspsrc->user_pw);
/* free locks */ /* free locks */
g_static_rec_mutex_free (rtspsrc->stream_rec_lock); g_static_rec_mutex_free (rtspsrc->stream_rec_lock);
@ -565,6 +579,16 @@ gst_rtspsrc_set_property (GObject * object, guint prop_id, const GValue * value,
case PROP_RTP_BLOCKSIZE: case PROP_RTP_BLOCKSIZE:
rtspsrc->rtp_blocksize = g_value_get_uint (value); rtspsrc->rtp_blocksize = g_value_get_uint (value);
break; break;
case PROP_USER_ID:
if (rtspsrc->user_id)
g_free (rtspsrc->user_id);
rtspsrc->user_id = g_value_dup_string (value);
break;
case PROP_USER_PW:
if (rtspsrc->user_pw)
g_free (rtspsrc->user_pw);
rtspsrc->user_pw = g_value_dup_string (value);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -632,6 +656,12 @@ gst_rtspsrc_get_property (GObject * object, guint prop_id, GValue * value,
case PROP_RTP_BLOCKSIZE: case PROP_RTP_BLOCKSIZE:
g_value_set_uint (value, rtspsrc->rtp_blocksize); g_value_set_uint (value, rtspsrc->rtp_blocksize);
break; break;
case PROP_USER_ID:
g_value_set_string (value, rtspsrc->user_id);
break;
case PROP_USER_PW:
g_value_set_string (value, rtspsrc->user_pw);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break; break;
@ -3601,12 +3631,18 @@ gst_rtspsrc_setup_auth (GstRTSPSrc * src, GstRTSPMessage * response)
url = gst_rtsp_connection_get_url (src->connection); url = gst_rtsp_connection_get_url (src->connection);
/* Do we have username and password available? */ /* Do we have username and password available? */
if (url != NULL && !src->tried_url_auth) { if (url != NULL && !src->tried_url_auth && url->user != NULL
&& url->passwd != NULL) {
user = url->user; user = url->user;
pass = url->passwd; pass = url->passwd;
src->tried_url_auth = TRUE; src->tried_url_auth = TRUE;
GST_DEBUG_OBJECT (src, GST_DEBUG_OBJECT (src,
"Attempting authentication using credentials from the URL"); "Attempting authentication using credentials from the URL");
} else {
user = src->user_id;
pass = src->user_pw;
GST_DEBUG_OBJECT (src,
"Attempting authentication using credentials from the properties");
} }
/* FIXME: If the url didn't contain username and password or we tried them /* FIXME: If the url didn't contain username and password or we tried them

View file

@ -194,6 +194,8 @@ struct _GstRTSPSrc {
gchar *proxy_user; gchar *proxy_user;
gchar *proxy_passwd; gchar *proxy_passwd;
guint rtp_blocksize; guint rtp_blocksize;
gchar *user_id;
gchar *user_pw;
/* state */ /* state */
GstRTSPState state; GstRTSPState state;