Top |
This object manages the RTSP connection to the server. It provides function to receive and send bytes and messages.
GstRTSPResult gst_rtsp_connection_create (const GstRTSPUrl *url
,GstRTSPConnection **conn
);
Create a newly allocated GstRTSPConnection from url
and store it in conn
.
The connection will not yet attempt to connect to url
, use
gst_rtsp_connection_connect()
.
A copy of url
will be made.
GstRTSPResult gst_rtsp_connection_create_from_socket (GSocket *socket
,const gchar *ip
,guint16 port
,const gchar *initial_buffer
,GstRTSPConnection **conn
);
Create a new GstRTSPConnection for handling communication on the existing
socket socket
. The initial_buffer
contains zero terminated data already
read from socket
which should be used before starting to read new data.
socket |
a GSocket |
|
ip |
the IP address of the other end |
|
port |
the port used by the other end |
|
initial_buffer |
data already read from |
|
conn |
storage for a GstRTSPConnection. |
[out][transfer full] |
GstRTSPResult gst_rtsp_connection_accept (GSocket *socket
,GstRTSPConnection **conn
,GCancellable *cancellable
);
Accept a new connection on socket
and create a new GstRTSPConnection for
handling communication on new socket.
socket |
a socket |
|
conn |
storage for a GstRTSPConnection. |
[out][transfer full] |
cancellable |
a GCancellable to cancel the operation |
GstRTSPResult gst_rtsp_connection_connect (GstRTSPConnection *conn
,GTimeVal *timeout
);
Attempt to connect to the url of conn
made with
gst_rtsp_connection_create()
. If timeout
is NULL this function can block
forever. If timeout
contains a valid timeout, this function will return
GST_RTSP_ETIMEOUT after the timeout expired.
This function can be cancelled with gst_rtsp_connection_flush()
.
GstRTSPResult gst_rtsp_connection_connect_with_response (GstRTSPConnection *conn
,GTimeVal *timeout
,GstRTSPMessage *response
);
Attempt to connect to the url of conn
made with
gst_rtsp_connection_create()
. If timeout
is NULL this function can block
forever. If timeout
contains a valid timeout, this function will return
GST_RTSP_ETIMEOUT after the timeout expired. If conn
is set to tunneled,
response
will contain a response to the tunneling request messages.
This function can be cancelled with gst_rtsp_connection_flush()
.
GstRTSPResult
gst_rtsp_connection_close (GstRTSPConnection *conn
);
Close the connected conn
. After this call, the connection is in the same
state as when it was first created.
GstRTSPResult
gst_rtsp_connection_free (GstRTSPConnection *conn
);
Close and free conn
.
GstRTSPResult gst_rtsp_connection_read (GstRTSPConnection *conn
,guint8 *data
,guint size
,GTimeVal *timeout
);
Attempt to read size
bytes into data
from the connected conn
, blocking up to
the specified timeout
. timeout
can be NULL, in which case this function
might block forever.
This function can be cancelled with gst_rtsp_connection_flush()
.
GstRTSPResult gst_rtsp_connection_write (GstRTSPConnection *conn
,const guint8 *data
,guint size
,GTimeVal *timeout
);
Attempt to write size
bytes of data
to the connected conn
, blocking up to
the specified timeout
. timeout
can be NULL, in which case this function
might block forever.
This function can be cancelled with gst_rtsp_connection_flush()
.
GstRTSPResult gst_rtsp_connection_poll (GstRTSPConnection *conn
,GstRTSPEvent events
,GstRTSPEvent *revents
,GTimeVal *timeout
);
Wait up to the specified timeout
for the connection to become available for
at least one of the operations specified in events
. When the function returns
with GST_RTSP_OK, revents
will contain a bitmask of available operations on
conn
.
timeout
can be NULL, in which case this function might block forever.
This function can be cancelled with gst_rtsp_connection_flush()
.
conn |
||
events |
a bitmask of GstRTSPEvent flags to check |
|
revents |
location for result flags |
|
timeout |
a timeout |
GstRTSPResult gst_rtsp_connection_send (GstRTSPConnection *conn
,GstRTSPMessage *message
,GTimeVal *timeout
);
Attempt to send message
to the connected conn
, blocking up to
the specified timeout
. timeout
can be NULL, in which case this function
might block forever.
This function can be cancelled with gst_rtsp_connection_flush()
.
GstRTSPResult gst_rtsp_connection_receive (GstRTSPConnection *conn
,GstRTSPMessage *message
,GTimeVal *timeout
);
Attempt to read into message
from the connected conn
, blocking up to
the specified timeout
. timeout
can be NULL, in which case this function
might block forever.
This function can be cancelled with gst_rtsp_connection_flush()
.
GstRTSPResult gst_rtsp_connection_next_timeout (GstRTSPConnection *conn
,GTimeVal *timeout
);
Calculate the next timeout for conn
, storing the result in timeout
.
GstRTSPResult
gst_rtsp_connection_reset_timeout (GstRTSPConnection *conn
);
Reset the timeout of conn
.
GstRTSPResult gst_rtsp_connection_flush (GstRTSPConnection *conn
,gboolean flush
);
Start or stop the flushing action on conn
. When flushing, all current
and future actions on conn
will return GST_RTSP_EINTR until the connection
is set to non-flushing mode again.
GstRTSPResult gst_rtsp_connection_set_auth (GstRTSPConnection *conn
,GstRTSPAuthMethod method
,const gchar *user
,const gchar *pass
);
Configure conn
for authentication mode method
with user
and pass
as the
user and password respectively.
void gst_rtsp_connection_set_auth_param (GstRTSPConnection *conn
,const gchar *param
,const gchar *value
);
Setup conn
with authentication directives. This is not necesary for
methods GST_RTSP_AUTH_NONE and GST_RTSP_AUTH_BASIC. For
GST_RTSP_AUTH_DIGEST, directives should be taken from the digest challenge
in the WWW-Authenticate response header and can include realm, domain,
nonce, opaque, stale, algorithm, qop as per RFC2617.
void
gst_rtsp_connection_clear_auth_params (GstRTSPConnection *conn
);
Clear the list of authentication directives stored in conn
.
GstRTSPResult gst_rtsp_connection_set_qos_dscp (GstRTSPConnection *conn
,guint qos_dscp
);
Configure conn
to use the specified DSCP value.
void gst_rtsp_connection_set_ip (GstRTSPConnection *conn
,const gchar *ip
);
Set the IP address of the server.
const gchar *
gst_rtsp_connection_get_ip (const GstRTSPConnection *conn
);
Retrieve the IP address of the other end of conn
.
GstRTSPUrl *
gst_rtsp_connection_get_url (const GstRTSPConnection *conn
);
Retrieve the URL of the other end of conn
.
void gst_rtsp_connection_set_tunneled (GstRTSPConnection *conn
,gboolean tunneled
);
Set the HTTP tunneling state of the connection. This must be configured before
the conn
is connected.
gboolean
gst_rtsp_connection_is_tunneled (const GstRTSPConnection *conn
);
Get the tunneling state of the connection.
const gchar *
gst_rtsp_connection_get_tunnelid (const GstRTSPConnection *conn
);
Get the tunnel session id the connection.
GstRTSPResult gst_rtsp_connection_do_tunnel (GstRTSPConnection *conn
,GstRTSPConnection *conn2
);
If conn
received the first tunnel connection and conn2
received
the second tunnel connection, link the two connections together so that
conn
manages the tunneled connection.
After this call, conn2
cannot be used anymore and must be freed with
gst_rtsp_connection_free()
.
If conn2
is NULL
then only the base64 decoding context will be setup for
conn
.
void gst_rtsp_connection_set_http_mode (GstRTSPConnection *conn
,gboolean enable
);
By setting the HTTP mode to TRUE
the message parsing will support HTTP
messages in addition to the RTSP messages. It will also disable the
automatic handling of setting up an HTTP tunnel.
GstRTSPResult gst_rtsp_connection_set_proxy (GstRTSPConnection *conn
,const gchar *host
,guint port
);
Set the proxy host and port.
GSocket *
gst_rtsp_connection_get_read_socket (const GstRTSPConnection *conn
);
Get the file descriptor for reading.
the file descriptor used for reading or NULL
on
error. The file descriptor remains valid until the connection is closed.
[transfer none]
GSocket *
gst_rtsp_connection_get_write_socket (const GstRTSPConnection *conn
);
Get the file descriptor for writing.
GTlsConnection * gst_rtsp_connection_get_tls (GstRTSPConnection *conn
,GError **error
);
Get the TLS connection of conn
.
For client side this will return the GTlsClientConnection when connected over TLS.
For server side connections, this function will create a GTlsServerConnection when called the first time and will return that same connection on subsequent calls. The server is then responsible for configuring the TLS connection.
Since: 1.2
gboolean gst_rtsp_connection_set_tls_validation_flags (GstRTSPConnection *conn
,GTlsCertificateFlags flags
);
Sets the TLS validation flags to be used to verify the peer certificate when a TLS connection is established.
TRUE if the validation flags are set correctly, or FALSE if
conn
is NULL or is not a TLS connection.
Since: 1.2.1
GTlsCertificateFlags
gst_rtsp_connection_get_tls_validation_flags
(GstRTSPConnection *conn
);
Gets the TLS validation flags used to verify the peer certificate when a TLS connection is established.
Since: 1.2.1
void gst_rtsp_connection_set_tls_database (GstRTSPConnection *conn
,GTlsDatabase *database
);
Sets the anchor certificate authorities database. This certificate database will be used to verify the server's certificate in case it can't be verified with the default certificate database first.
Since: 1.4
GTlsDatabase *
gst_rtsp_connection_get_tls_database (GstRTSPConnection *conn
);
Gets the anchor certificate authorities database that will be used after a server certificate can't be verified with the default certificate database.
the anchor certificate authorities database, or NULL if no
database has been previously set. Use g_object_unref()
to release the
certificate database.
[transfer full]
Since: 1.4
void gst_rtsp_connection_set_tls_interaction (GstRTSPConnection *conn
,GTlsInteraction *interaction
);
Sets a GTlsInteraction object to be used when the connection or certificate database need to interact with the user. This will be used to prompt the user for passwords where necessary.
Since: 1.6
GTlsInteraction *
gst_rtsp_connection_get_tls_interaction
(GstRTSPConnection *conn
);
Gets a GTlsInteraction object to be used when the connection or certificate database need to interact with the user. This will be used to prompt the user for passwords where necessary.
Since: 1.6
GstRTSPWatch * gst_rtsp_watch_new (GstRTSPConnection *conn
,GstRTSPWatchFuncs *funcs
,gpointer user_data
,GDestroyNotify notify
);
Create a watch object for conn
. The functions provided in funcs
will be
called with user_data
when activity happened on the watch.
The new watch is usually created so that it can be attached to a
maincontext with gst_rtsp_watch_attach()
.
conn
must exist for the entire lifetime of the watch.
[skip]
conn |
||
funcs |
watch functions |
|
user_data |
user data to pass to |
|
notify |
notify when |
a GstRTSPWatch that can be used for asynchronous RTSP
communication. Free with gst_rtsp_watch_unref()
after usage.
void
gst_rtsp_watch_unref (GstRTSPWatch *watch
);
Decreases the reference count of watch
by one. If the resulting reference
count is zero the watch and associated memory will be destroyed.
guint gst_rtsp_watch_attach (GstRTSPWatch *watch
,GMainContext *context
);
Adds a GstRTSPWatch to a context so that it will be executed within that context.
void
gst_rtsp_watch_reset (GstRTSPWatch *watch
);
Reset watch
, this is usually called after gst_rtsp_connection_do_tunnel()
when the file descriptors of the connection might have changed.
GstRTSPResult gst_rtsp_watch_send_message (GstRTSPWatch *watch
,GstRTSPMessage *message
,guint *id
);
Send a message
using the connection of the watch
. If it cannot be sent
immediately, it will be queued for transmission in watch
. The contents of
message
will then be serialized and transmitted when the connection of the
watch
becomes writable. In case the message
is queued, the ID returned in
id
will be non-zero and used as the ID argument in the message_sent
callback.
GstRTSPResult gst_rtsp_watch_write_data (GstRTSPWatch *watch
,const guint8 *data
,guint size
,guint *id
);
Write data
using the connection of the watch
. If it cannot be sent
immediately, it will be queued for transmission in watch
. The contents of
message
will then be serialized and transmitted when the connection of the
watch
becomes writable. In case the message
is queued, the ID returned in
id
will be non-zero and used as the ID argument in the message_sent
callback.
This function will take ownership of data
and g_free()
it after use.
If the amount of queued data exceeds the limits set with
gst_rtsp_watch_set_send_backlog()
, this function will return
GST_RTSP_ENOMEM.
watch |
||
data |
the data to queue. |
[array length=size][transfer full] |
size |
the size of |
|
id |
location for a message ID or |
[out][allow-none] |
GST_RTSP_OK on success. GST_RTSP_ENOMEM when the backlog limits
are reached. GST_RTSP_EINTR when watch
was flushing.
void gst_rtsp_watch_get_send_backlog (GstRTSPWatch *watch
,gsize *bytes
,guint *messages
);
Get the maximum amount of bytes and messages that will be queued in watch
.
See gst_rtsp_watch_set_send_backlog()
.
watch |
||
bytes |
maximum bytes. |
[out][allow-none] |
messages |
maximum messages. |
[out][allow-none] |
Since: 1.2
void gst_rtsp_watch_set_send_backlog (GstRTSPWatch *watch
,gsize bytes
,guint messages
);
Set the maximum amount of bytes and messages that will be queued in watch
.
When the maximum amounts are exceeded, gst_rtsp_watch_write_data()
and
gst_rtsp_watch_send_message()
will return GST_RTSP_ENOMEM.
A value of 0 for bytes
or messages
means no limits.
Since: 1.2
void gst_rtsp_watch_set_flushing (GstRTSPWatch *watch
,gboolean flushing
);
When flushing
is TRUE
, abort a call to gst_rtsp_watch_wait_backlog()
and make sure gst_rtsp_watch_write_data()
returns immediately with
GST_RTSP_EINTR. And empty the queue.
Since: 1.4
GstRTSPResult gst_rtsp_watch_wait_backlog (GstRTSPWatch *watch
,GTimeVal *timeout
);
Wait until there is place in the backlog queue, timeout
is reached
or watch
is set to flushing.
If timeout
is NULL
this function can block forever. If timeout
contains a valid timeout, this function will return GST_RTSP_ETIMEOUT
after the timeout expired.
The typically use of this function is when gst_rtsp_watch_write_data
returns GST_RTSP_ENOMEM
. The caller then calls this function to wait for
free space in the backlog queue and try again.
GST_RTSP_OK
when if there is room in queue.
GST_RTSP_ETIMEOUT
when timeout
was reached.
GST_RTSP_EINTR
when watch
is flushing
GST_RTSP_EINVAL
when called with invalid parameters.
Since: 1.4
typedef struct _GstRTSPConnection GstRTSPConnection;
Opaque RTSP connection object.
typedef struct _GstRTSPWatch GstRTSPWatch;
Opaque RTSP watch object that can be used for asynchronous RTSP operations.
typedef struct { GstRTSPResult (*message_received) (GstRTSPWatch *watch, GstRTSPMessage *message, gpointer user_data); GstRTSPResult (*message_sent) (GstRTSPWatch *watch, guint id, gpointer user_data); GstRTSPResult (*closed) (GstRTSPWatch *watch, gpointer user_data); GstRTSPResult (*error) (GstRTSPWatch *watch, GstRTSPResult result, gpointer user_data); GstRTSPStatusCode (*tunnel_start) (GstRTSPWatch *watch, gpointer user_data); GstRTSPResult (*tunnel_complete) (GstRTSPWatch *watch, gpointer user_data); GstRTSPResult (*error_full) (GstRTSPWatch *watch, GstRTSPResult result, GstRTSPMessage *message, guint id, gpointer user_data); GstRTSPResult (*tunnel_lost) (GstRTSPWatch *watch, gpointer user_data); GstRTSPResult (*tunnel_http_response) (GstRTSPWatch *watch, GstRTSPMessage *request, GstRTSPMessage *response, gpointer user_data); } GstRTSPWatchFuncs;
Callback functions from a GstRTSPWatch.
callback when a message was received |
||
callback when a message was sent |
||
callback when the connection is closed |
||
callback when an error occured |
||
a client started a tunneled connection. The tunnelid of the connection must be saved. |
||
a client finished a tunneled connection. In this callback
you usually pair the tunnelid of this connection with the saved one using
|
||
callback when an error occured with more information than
the |
||
callback when the post connection of a tunnel is closed. |
||
callback when an HTTP response to the GET request is about to be sent for a tunneled connection. The response can be modified in the callback. Since 1.4. |