Commit aa8bf2fb authored by Martin Storsjö's avatar Martin Storsjö

Make RTSP use the generic http authentication code

Still hardcoded to use Basic auth, without parsing the reply headers

Originally committed as revision 22676 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent b17d11c6
......@@ -215,8 +215,8 @@ OBJS-$(CONFIG_RTP_MUXER) += rtp.o \
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 \
......
......@@ -612,7 +612,6 @@ void ff_rtsp_close_streams(AVFormatContext *s)
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(AVFormatContext *s,
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;
......
......@@ -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 ? */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment