Commit graph

121 commits

Author SHA1 Message Date
Ognyan Tonchev
f6e07b65a4 rtspconnection: only send new data immediately if there are no queued messages
Even if watch->messages->length is 0 there may still be some
data from a message that was only written partially at the
previous attempt stored in watch->write_data, so check for
that as well. We don't want to write data into the middle
of another message, which could happen when there wasn't
enough bandwidth.

https://bugzilla.gnome.org/show_bug.cgi?id=669039
2012-02-17 14:40:35 +00:00
Tim-Philipp Müller
9f042ae224 rtspconnection: make hostname lookup more thread-safe
Don't write IP number string to return into a static
array which is shared amongst all threads (note: of
course a copy is returned).

https://bugzilla.gnome.org/show_bug.cgi?id=666711
2012-01-07 20:16:41 +00:00
Tim-Philipp Müller
0d98aa25b8 Work around deprecated thread API in glib master
Add private replacements for deprecated functions such as
g_mutex_new(), g_mutex_free(), g_cond_new() etc., mostly
to avoid the deprecation warnings. We'll change these
over to the new API once we depend on glib >= 2.32.

Replace g_thread_create() with g_thread_try_new().
2011-12-04 17:16:30 +00:00
Piotr Fusik
14644457b0 various: typo fixes
Fix typos in code and docs. Fixes. #658984
2011-12-02 12:03:27 +01:00
Alessandro Decina
22cc529409 rtspconnection: add OSX specific hack to detect when a connection is refused
Unlike linux, OSX wakes up select with POLLOUT (instead of POLLERR) when
connect() is done async and the connection is refused. Therefore always check
for the socket error state using getsockopt (..., SO_ERROR, ...) after a
connection attempt.
2011-08-15 23:46:53 +02:00
Edward Hervey
66016eedc7 rtsp: Fix typo which broke the build 2011-05-17 10:20:36 +02:00
Miguel Angel Cabrera Moya
30b2abaddd rtspconnection: not enter in not controllable state unless it is necessary
When closing rtspsrc the state change blocks until the polling in the
connection timeouts. This is because the second time we loop to read a
full message controllable is set to FALSE in the poll group, even though no
message is half read.
This can be avoided by not setting controllable to FALSE the poll group
unless we had begin to read a message.

Fixes #610916
2011-05-17 09:29:47 +02:00
Wim Taymans
ac06dd5d0e rtspconnection: calculate better timeout value
We want to send the keealive message a little earlier than the timeout value
specifies. Scale this based on the value of the timeout instead of just assuming
5 seconds.
2010-10-29 14:22:39 +01:00
Thijs Vermeir
2e888cb784 rtsp: don't let the rtsp connection timeout
Because we should act before the rtsp server does a timeout, we
reduce the timeout-time with 5 seconds, this should be safe to always
keep te rtsp connection alive.

https://bugzilla.gnome.org/show_bug.cgi?id=633455
2010-10-29 14:22:39 +01:00
Stefan Kost
639e1ab2b5 docs: fix wrong doc markup 2010-05-06 09:42:02 +03:00
Tim-Philipp Müller
7fee2c0fe7 rtsp: weekday and month names in RTSP date string should be in C locale
Create date string using C locale weekday and month names.

Fixes #617636.
2010-05-05 13:04:25 +01:00
Wim Taymans
318fbf3310 rtspconnection: Handle closed POST socket in tunneling
Catch more socket errors.
Rework how sockets are managed in the GSource, wake up the maincontext instead
of adding/removing the sockets from the source.
Add callback for when the tunnel connection is lost. Some clients (Quicktime
Player) close the POST connection in tunneled mode and reopen the socket when
needed.

See #612915
2010-04-06 10:59:39 +02:00
Wim Taymans
999cc34c83 rtspconnection: allow for more ipv6 addresses
Use hints in getaddrinfo() so that we can also resolve ipv6 addresses.
2010-03-16 16:24:21 +01:00
Wim Taymans
2221e404de rtsp: make timeout usec more accurate
Adjust the returned usec from the elapsed time so it represents the remaining
timeout.
2010-03-15 11:36:22 +01:00
Benjamin Otte
43b1683421 Add -Wmissing-declarations -Wmissing-prototypes to warning flags
Includes all the fixes necessary to make stuff compile again.
2010-03-11 13:50:31 +01:00
Dake Gu
f37b42b40d rtspconnection: fix handling of x-server-ip-address
Fix handling of x-server-ip-address.
2010-03-08 11:20:51 +01:00
Patrick Radizi
a8f51d61f7 rtspconnection: make sure not to dereference NULL username or password
Fixes #610268.
2010-02-18 18:00:38 +00:00
Wim Taymans
30fd219e63 rtsp: ignore \n and \r as the first line
Be more forgiving for bad servers and ignore \r and \n when we are looking for
the response/request line.

See #608417
2010-02-12 11:43:59 +01:00
Wim Taymans
be037e0dc8 rtsp: fail gracefully on bad Content-Length headers
Be careful when allocating the amount of bytes specified in the Content-Length
because it can be an insanely huge value. Try to allocate the memory but fail
gracefully with a nice error when the allocation failed.
2010-02-12 11:43:59 +01:00
Sreerenj B
f3b3dd33f3 rtsp: avoid crashing on SIGPIPE
Use send() instead of write() so that we can pass the MSG_NOSIGNAL flags to
avoid crashing with SIGPIPE when the remote end is not listening to us anymore.

Fixes #601772
2009-11-13 11:18:46 +01:00
Patrick Radizi
48a44f470b rtsp: handle socket errors
gstrtspconnection.c:gst_rtsp_connection_receive() can hang when an error occured
on a socekt. Fix this problem by checking for error on 'other' socket after poll
return.

Fixes #596159
2009-10-12 15:48:46 +02:00
Tim-Philipp Müller
92465ba8ac rtspconnection: we can use GLib 2.18 API unconditionally now 2009-10-07 10:32:17 +01:00
Wim Taymans
730eead9a9 rtsp: use CLOSE_SOCKET() instead of close()
Use CLOSE_SOCKET instead of directly calling close() because it does the right
thing for windows.

Fixes #597539
2009-10-06 22:37:00 +02:00
Wim Taymans
8d2f20d1cb rtsp: properly fix the HTTP manual mode
When we're not parsing HTTP, return EPARSE when we get an HTTP
message.
2009-09-11 12:20:10 +02:00
Wim Taymans
ca3b91b2d0 rtsp: don't return EPARSE
Don't blindly return EPARSE when http mode is disabled.
Restore old http mode after temporarily setting it to TRUE.
2009-09-10 14:04:53 +02:00
Peter Kjellerstedt
066f9be5c9 rtsp: Added new API for sending using GstRTSPWatch.
The new API to send messages using GstRTSPWatch will first try to send the
message immediately. Then, if that failed (or the message was not sent
fully), it will queue the remaining message for later delivery. This avoids
unnecessary context switches, and makes it possible to keep track of
whether the connection is blocked (the unblocking of the connection is
indicated by the reception of the message_sent signal).

This also deprecates the old API (gst_rtsp_watch_queue_data() and
gst_rtsp_watch_queue_message().)

API: gst_rtsp_watch_write_data()
API: gst_rtsp_watch_send_message()
2009-08-24 13:19:46 +02:00
Peter Kjellerstedt
0af04aa4a8 rtsp: Made gst_rtsp_watch_queue_data() thread safe. 2009-08-24 13:19:46 +02:00
Peter Kjellerstedt
fb3b761af5 rtsp: Added gst_rtsp_connection_set_http_mode().
With gst_rtsp_connection_set_http_mode() it is possible to tell the
connection whether to allow HTTP messages to be supported. By enabling HTTP
support the automatic HTTP tunnel support will also be disabled.

API: gst_rtsp_connection_set_http_mode()
2009-08-24 13:19:46 +02:00
Peter Kjellerstedt
d5b4b5d8af rtsp: Allow gst_rtsp_connection_do_tunnel() to just setup decoding context.
If the second connection passed to gst_rtsp_connection_do_tunnel() is NULL
then just setup the base64 decoding context for the first connection.
2009-08-24 13:19:46 +02:00
Peter Kjellerstedt
01d98fdb5d rtsp: Write as much as possible in gst_rtsp_source_dispatch().
Try to write as much as possible if there are multiple messages queued.
2009-08-24 13:19:45 +02:00
Peter Kjellerstedt
e5ec74c7a9 rtsp: Add error_full callback to GstRTSPWatchFuncs.
The error_full callback is similar to the error callback, but allows for
better error handling. For read errors a partial message is provided to
help an RTSP server generate a more correct error response, and for write
errors the write queue id of the failed message is returned.
2009-08-24 13:19:45 +02:00
Peter Kjellerstedt
ab8bea4555 rtsp: Made read_line() support LWS.
Rewrote read_line() to support LWS (Line White Space), the method used by
RTSP (and HTTP) to break long lines. Also added support for \r and \n as
line endings (in addition to the official \r\n).
2009-08-24 13:19:45 +02:00
Peter Kjellerstedt
607209f121 rtsp: Do not split headers which should not be split.
From RFC 2068 section 4.2: "Multiple message-header fields with the same
field-name may be present in a message if and only if the entire
field-value for that header field is defined as a comma-separated list
[i.e., #(values)]." This means that we should not split other headers which
may contain a comma, e.g., Range and Date.
2009-08-24 13:19:45 +02:00
Peter Kjellerstedt
08d3fe8561 rtsp: Parse WWW-Authenticate headers correctly.
Due to the odd syntax for WWW-Authenticate (and Proxy-Authenticate) which
allows commas both to separate between multiple challenges, and within the
challenges themself, we need to take some extra care to split these headers
correctly.
2009-08-24 13:19:45 +02:00
Peter Kjellerstedt
efc8901a39 rtsp: Improve parse_line().
Make parse_line() handle keys with multiple values on one line correctly.
2009-08-24 13:19:45 +02:00
Peter Kjellerstedt
db66ff4a62 rtsp: Rewrote setup_tunneling().
Rewrote setup_tunneling() to use normal GstRTSPMessages instead of hard
coded strings and duplicates of the message parsing code.
2009-08-24 13:19:45 +02:00
Peter Kjellerstedt
c18e2eec88 rtsp: Rewrote gen_tunnel_reply().
Rewrote gen_tunnel_reply() to generate a normal GstRTSPMessage rather
than a hard coded string.
2009-08-24 13:19:44 +02:00
Peter Kjellerstedt
e1b3393d6b rtsp: Ignore the Content-Length for POST requests.
The Content-Length for POST requests with an x-sessioncookie header should
be ignored as the length is bogus and only there to fool proxies.
2009-08-24 13:19:44 +02:00
Peter Kjellerstedt
11c8b811f3 rtsp: Normalize lines (remove extra whitespace) before parsing. 2009-08-24 13:19:44 +02:00
Peter Kjellerstedt
5716cd102a rtsp: Made parse_string() return a result.
This will catch parsing errors when a too long string is received.
2009-08-24 13:19:44 +02:00
Peter Kjellerstedt
fdd5a65632 rtsp: Improved parsing of messages.
Do not abort message parsing as soon as there is an error. Instead parse
as much as possible to allow a server to return as meaningful an error as
possible.
2009-08-24 13:19:44 +02:00
Peter Kjellerstedt
ca154010fe rtsp: Added support for HTTP messages 2009-08-24 13:19:44 +02:00
Peter Kjellerstedt
dd7d0cfc45 rtsp: Added gst_rtsp_connection_create_from_fd().
API: gst_rtsp_connection_create_from_fd()
2009-08-24 13:19:44 +02:00
Peter Kjellerstedt
814eaa728a rtsp: Add initial buffer support.
The initial buffer contains data for a connection which should be used
before starting to actually read anything from the socket.
2009-08-24 13:19:44 +02:00
Peter Kjellerstedt
3c4fa9274f rtsp: Avoid duplicated headers.
Remove any existing Session and Date headers before adding new ones
when sending a request. This may happen if the user of this code reuses
a request (rtspsrc does this when resending after authorization fails).
2009-08-19 09:31:51 +02:00
Peter Kjellerstedt
3b888cfe2a rtsp: Corrected the HTTP digest authorization computation.
Do not use sizeof() on an array passed as an argument to a function and
expect to get anything but the size of a pointer. As a result only the
first 4 (or 8) bytes of the response buffer were initialized to 0 in
auth_digest_compute_response() which caused it to return a string which
was not NUL-terminated...
2009-08-18 16:50:58 +02:00
Tim-Philipp Müller
cb19626c8c rtspconnection: don't use GLib-2.18 function
g_checksum_reset() was added only in GLib 2.18, but we still require
only 2.16, so work around that if we only have 2.16. Fixes #591357.
2009-08-10 20:18:24 +01:00
Sebastian Dröge
79ade6ad68 rtsp: Use GLib's GChecksum instead of our own MD5 implementation 2009-08-10 10:19:01 +02:00
Wim Taymans
f5962f0a4f rtsp: include in.h for FreeBSD compat
Fixes #586920
2009-06-29 12:20:52 +02:00
Peter Kjellerstedt
c398f2f376 rtsp: Moved a comment. 2009-06-29 09:31:40 +02:00