[FFmpeg-cvslog] r22676 - in trunk/libavformat: Makefile rtsp.c rtsp.h
mstorsjo
subversion
Thu Mar 25 22:47:33 CET 2010
Author: mstorsjo
Date: Thu Mar 25 22:47:33 2010
New Revision: 22676
Log:
Make RTSP use the generic http authentication code
Still hardcoded to use Basic auth, without parsing the reply headers
Modified:
trunk/libavformat/Makefile
trunk/libavformat/rtsp.c
trunk/libavformat/rtsp.h
Modified: trunk/libavformat/Makefile
==============================================================================
--- trunk/libavformat/Makefile Thu Mar 25 22:46:14 2010 (r22675)
+++ trunk/libavformat/Makefile Thu Mar 25 22:47:33 2010 (r22676)
@@ -215,8 +215,8 @@ OBJS-$(CONFIG_RTP_MUXER)
rtpenc.o \
rtpenc_h264.o \
avc.o
-OBJS-$(CONFIG_RTSP_DEMUXER) += rtsp.o
-OBJS-$(CONFIG_RTSP_MUXER) += rtsp.o rtspenc.o
+OBJS-$(CONFIG_RTSP_DEMUXER) += rtsp.o httpauth.o
+OBJS-$(CONFIG_RTSP_MUXER) += rtsp.o rtspenc.o httpauth.o
OBJS-$(CONFIG_SDP_DEMUXER) += rtsp.o \
rdt.o \
rtp.o \
Modified: trunk/libavformat/rtsp.c
==============================================================================
--- trunk/libavformat/rtsp.c Thu Mar 25 22:46:14 2010 (r22675)
+++ trunk/libavformat/rtsp.c Thu Mar 25 22:47:33 2010 (r22676)
@@ -612,7 +612,6 @@ void ff_rtsp_close_streams(AVFormatConte
av_close_input_stream (rt->asf_ctx);
rt->asf_ctx = NULL;
}
- av_freep(&rt->auth_b64);
}
static void *rtsp_rtp_mux_open(AVFormatContext *s, AVStream *st,
@@ -1013,10 +1012,13 @@ void ff_rtsp_send_cmd_with_content_async
snprintf(buf1, sizeof(buf1), "Session: %s\r\n", rt->session_id);
av_strlcat(buf, buf1, sizeof(buf));
}
- if (rt->auth_b64)
- av_strlcatf(buf, sizeof(buf),
- "Authorization: Basic %s\r\n",
- rt->auth_b64);
+ if (rt->auth[0]) {
+ char *str = ff_http_auth_create_response(&rt->auth_state,
+ rt->auth, url, method);
+ if (str)
+ av_strlcat(buf, str, sizeof(buf));
+ av_free(str);
+ }
if (send_content_length > 0 && send_content)
av_strlcatf(buf, sizeof(buf), "Content-Length: %d\r\n", send_content_length);
av_strlcat(buf, "\r\n", sizeof(buf));
@@ -1437,14 +1439,8 @@ redirect:
ff_url_split(NULL, 0, auth, sizeof(auth),
host, sizeof(host), &port, path, sizeof(path), s->filename);
if (*auth) {
- int auth_len = strlen(auth), b64_len = ((auth_len + 2) / 3) * 4 + 1;
-
- if (!(rt->auth_b64 = av_malloc(b64_len)))
- return AVERROR(ENOMEM);
- if (!av_base64_encode(rt->auth_b64, b64_len, auth, auth_len)) {
- err = AVERROR(EINVAL);
- goto fail;
- }
+ av_strlcpy(rt->auth, auth, sizeof(rt->auth));
+ rt->auth_state.auth_type = HTTP_AUTH_BASIC;
}
if (port < 0)
port = RTSP_DEFAULT_PORT;
Modified: trunk/libavformat/rtsp.h
==============================================================================
--- trunk/libavformat/rtsp.h Thu Mar 25 22:46:14 2010 (r22675)
+++ trunk/libavformat/rtsp.h Thu Mar 25 22:47:33 2010 (r22676)
@@ -26,6 +26,7 @@
#include "rtspcodes.h"
#include "rtpdec.h"
#include "network.h"
+#include "httpauth.h"
/**
* Network layer over which RTP/etc packet data will be transported.
@@ -232,8 +233,11 @@ typedef struct RTSPState {
* of RTSPMessageHeader->real_challenge */
enum RTSPServerType server_type;
- /** base64-encoded authorization lines (username:password) */
- char *auth_b64;
+ /** plaintext authorization line (username:password) */
+ char auth[128];
+
+ /** authentication state */
+ HTTPAuthState auth_state;
/** The last reply of the server to a RTSP command */
char last_reply[2048]; /* XXX: allocate ? */
More information about the ffmpeg-cvslog
mailing list