# HG changeset patch # User mstorsjo # Date 1269553653 0 # Node ID 4b42835727aa1bfbfc36e3419ad508894a4af12e # Parent 4ddbc14bc768f89f49a776a2bb266ceae4d15352 Make RTSP use the generic http authentication code Still hardcoded to use Basic auth, without parsing the reply headers diff -r 4ddbc14bc768 -r 4b42835727aa Makefile --- a/Makefile Thu Mar 25 21:46:14 2010 +0000 +++ b/Makefile Thu Mar 25 21:47:33 2010 +0000 @@ -215,8 +215,8 @@ 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 \ diff -r 4ddbc14bc768 -r 4b42835727aa rtsp.c --- a/rtsp.c Thu Mar 25 21:46:14 2010 +0000 +++ b/rtsp.c Thu Mar 25 21:47:33 2010 +0000 @@ -612,7 +612,6 @@ 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 @@ 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 @@ 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; diff -r 4ddbc14bc768 -r 4b42835727aa rtsp.h --- a/rtsp.h Thu Mar 25 21:46:14 2010 +0000 +++ b/rtsp.h Thu Mar 25 21:47:33 2010 +0000 @@ -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 @@ * 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 ? */