[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