[rtmpdump] r447 - in trunk: librtmp/rtmp.c librtmp/rtmp.h rtmpgw.c rtmpsuck.c

hyc subversion at mplayerhq.hu
Sat Apr 24 13:31:17 CEST 2010


Author: hyc
Date: Sat Apr 24 13:31:16 2010
New Revision: 447

Log:
Restructure Link booleans into bitflags

Modified:
   trunk/librtmp/rtmp.c
   trunk/librtmp/rtmp.h
   trunk/rtmpgw.c
   trunk/rtmpsuck.c

Modified: trunk/librtmp/rtmp.c
==============================================================================
--- trunk/librtmp/rtmp.c	Sat Apr 24 13:30:39 2010	(r446)
+++ trunk/librtmp/rtmp.c	Sat Apr 24 13:31:16 2010	(r447)
@@ -214,6 +214,18 @@ RTMP_TLS_Init()
 #endif
 }
 
+RTMP *
+RTMP_Alloc()
+{
+  return calloc(1, sizeof(RTMP));
+}
+
+void
+RTMP_Free(RTMP *r)
+{
+  free(r);
+}
+
 void
 RTMP_Init(RTMP *r)
 {
@@ -376,7 +388,7 @@ RTMP_SetupStream(RTMP *r,
   if (auth && auth->av_len)
     {
       r->Link.auth = *auth;
-      r->Link.authflag = true;
+      r->Link.lFlags |= RTMP_LF_AUTH;
     }
   if (flashVer && flashVer->av_len)
     r->Link.flashVer = *flashVer;
@@ -386,7 +398,8 @@ RTMP_SetupStream(RTMP *r,
     r->Link.subscribepath = *subscribepath;
   r->Link.seekTime = dStart;
   r->Link.stopTime = dStop;
-  r->Link.bLiveStream = bLiveStream;
+  if (bLiveStream)
+    r->Link.lFlags |= RTMP_LF_LIVE;
   r->Link.timeout = timeout;
 
   r->Link.protocol = protocol;
@@ -415,41 +428,42 @@ static struct urlopt {
   AVal name;
   off_t off;
   int otype;
+  int omisc;
   char *use;
 } options[] = {
-  { AVC("socks"),     OFF(Link.sockshost),     OPT_STR,
+  { AVC("socks"),     OFF(Link.sockshost),     OPT_STR, 0,
   	"Use the specified SOCKS proxy" },
-  { AVC("app"),       OFF(Link.app),           OPT_STR,
+  { AVC("app"),       OFF(Link.app),           OPT_STR, 0,
 	"Name of target app on server" },
-  { AVC("tcUrl"),     OFF(Link.tcUrl),         OPT_STR,
+  { AVC("tcUrl"),     OFF(Link.tcUrl),         OPT_STR, 0,
   	"URL to played stream" },
-  { AVC("pageUrl"),   OFF(Link.pageUrl),       OPT_STR,
+  { AVC("pageUrl"),   OFF(Link.pageUrl),       OPT_STR, 0,
   	"URL of played media's web page" },
-  { AVC("swfUrl"),    OFF(Link.swfUrl),        OPT_STR,
+  { AVC("swfUrl"),    OFF(Link.swfUrl),        OPT_STR, 0,
   	"URL to player SWF file" },
-  { AVC("flashver"),  OFF(Link.flashVer),      OPT_STR,
+  { AVC("flashver"),  OFF(Link.flashVer),      OPT_STR, 0,
   	"Flash version string (default " DEF_VERSTR ")" },
-  { AVC("conn"),      OFF(Link.extras),        OPT_CONN,
+  { AVC("conn"),      OFF(Link.extras),        OPT_CONN, 0,
   	"Append arbitrary AMF data to Connect message" },
-  { AVC("playpath"),  OFF(Link.playpath),      OPT_STR,
+  { AVC("playpath"),  OFF(Link.playpath),      OPT_STR, 0,
   	"Path to target media on server" },
-  { AVC("live"),      OFF(Link.bLiveStream),   OPT_BOOL,
+  { AVC("live"),      OFF(Link.lFlags),        OPT_BOOL, RTMP_LF_LIVE,
   	"Stream is live, no seeking possible" },
-  { AVC("subscribe"), OFF(Link.subscribepath), OPT_STR,
+  { AVC("subscribe"), OFF(Link.subscribepath), OPT_STR, 0,
   	"Stream to subscribe to" },
-  { AVC("token"),     OFF(Link.token),	       OPT_STR,
+  { AVC("token"),     OFF(Link.token),	       OPT_STR, 0,
   	"Key for SecureToken response" },
-  { AVC("swfVfy"),    OFF(Link.swfVfy),        OPT_BOOL,
+  { AVC("swfVfy"),    OFF(Link.lFlags),        OPT_BOOL, RTMP_LF_SWFV,
   	"Perform SWF Verification" },
-  { AVC("swfAge"),    OFF(Link.swfAge),        OPT_INT,
+  { AVC("swfAge"),    OFF(Link.swfAge),        OPT_INT, 0,
   	"Number of days to use cached SWF hash" },
-  { AVC("start"),     OFF(Link.seekTime),      OPT_INT,
+  { AVC("start"),     OFF(Link.seekTime),      OPT_INT, 0,
   	"Stream start position in milliseconds" },
-  { AVC("stop"),      OFF(Link.stopTime),      OPT_INT,
+  { AVC("stop"),      OFF(Link.stopTime),      OPT_INT, 0,
   	"Stream stop position in milliseconds" },
-  { AVC("buffer"),    OFF(m_nBufferMS),        OPT_INT,
+  { AVC("buffer"),    OFF(m_nBufferMS),        OPT_INT, 0,
   	"Buffer time in milliseconds" },
-  { AVC("timeout"),   OFF(Link.timeout),       OPT_INT,
+  { AVC("timeout"),   OFF(Link.timeout),       OPT_INT, 0,
   	"Session timeout in seconds" },
   { {NULL,0}, 0, 0}
 };
@@ -585,13 +599,13 @@ bool RTMP_SetOpt(RTMP *r, const AVal *op
       *(int *)v = l; }
       break;
     case OPT_BOOL: {
-      int j;
-      bool b = false;
+      int j, fl;
+      fl = *(int *)v;
       for (j=0; truth[j].av_len; j++) {
         if (arg->av_len != truth[j].av_len) continue;
         if (strcasecmp(arg->av_val, truth[j].av_val)) continue;
-        b = true; break; }
-      *(bool *)v = b;
+        fl |= options[i].omisc; break; }
+      *(int *)v = fl;
       }
       break;
     case OPT_CONN:
@@ -678,7 +692,7 @@ bool RTMP_SetupURL(RTMP *r, char *url)
 	}
 
 #ifdef CRYPTO
-  if (r->Link.swfVfy && r->Link.swfUrl.av_len)
+  if ((r->Link.lFlags & RTMP_LF_SWFV) && r->Link.swfUrl.av_len)
     RTMP_HashSWF(r->Link.swfUrl.av_val, &r->Link.SWFSize,
 	  (unsigned char *)r->Link.SWFHash, r->Link.swfAge);
 #endif
@@ -1446,7 +1460,7 @@ SendConnectPacket(RTMP *r, RTMPPacket *c
   /* add auth string */
   if (r->Link.auth.av_len)
     {
-      enc = AMF_EncodeBoolean(enc, pend, r->Link.authflag);
+      enc = AMF_EncodeBoolean(enc, pend, r->Link.lFlags & RTMP_LF_AUTH);
       if (!enc)
 	return false;
       enc = AMF_EncodeString(enc, pend, &r->Link.auth);
@@ -1676,7 +1690,7 @@ SendPublish(RTMP *r)
   if (!enc)
     return false;
 
-  /* FIXME: should we choose live based on Link.bLiveStream? */
+  /* FIXME: should we choose live based on Link.lFlags & RTMP_LF_LIVE? */
   enc = AMF_EncodeString(enc, pend, &av_live);
   if (!enc)
     return false;
@@ -1933,7 +1947,7 @@ SendPlay(RTMP *r)
    *  -1: plays a live stream
    * >=0: plays a recorded streams from 'start' milliseconds
    */
-  if (r->Link.bLiveStream)
+  if (r->Link.lFlags & RTMP_LF_LIVE)
     enc = AMF_EncodeNumber(enc, pend, -1000.0);
   else
     {
@@ -2191,7 +2205,7 @@ HandleInvoke(RTMP *r, const char *body, 
 	      /* Send the FCSubscribe if live stream or if subscribepath is set */
 	      if (r->Link.subscribepath.av_len)
 	        SendFCSubscribe(r, &r->Link.subscribepath);
-	      else if (r->Link.bLiveStream)
+	      else if (r->Link.lFlags & RTMP_LF_LIVE)
 	        SendFCSubscribe(r, &r->Link.playpath);
 	    }
 	}
@@ -2512,7 +2526,7 @@ HandleCtrl(RTMP *r, const RTMPPacket *pa
 	case 31:
 	  tmp = AMF_DecodeInt32(packet->m_body + 2);
 	  RTMP_Log(RTMP_LOGDEBUG, "%s, Stream BufferEmpty %d", __FUNCTION__, tmp);
-	  if (r->Link.bLiveStream || (r->Link.protocol & RTMP_FEATURE_HTTP))
+	  if ((r->Link.lFlags & RTMP_LF_LIVE) || (r->Link.protocol & RTMP_FEATURE_HTTP))
 	    break;
 	  if (!r->m_pausing)
 	    {
@@ -3887,8 +3901,8 @@ Read_1_Packet(RTMP *r, char *buf, int bu
        * Update ext timestamp with this absolute offset in non-live mode
        * otherwise report the relative one
        */
-      /* RTMP_Log(RTMP_LOGDEBUG, "type: %02X, size: %d, pktTS: %dms, TS: %dms, bLiveStream: %d", packet.m_packetType, nPacketLen, packet.m_nTimeStamp, nTimeStamp, r->Link.bLiveStream); */
-      r->m_read.timestamp = r->Link.bLiveStream ? packet.m_nTimeStamp : nTimeStamp;
+      /* RTMP_Log(RTMP_LOGDEBUG, "type: %02X, size: %d, pktTS: %dms, TS: %dms, bLiveStream: %d", packet.m_packetType, nPacketLen, packet.m_nTimeStamp, nTimeStamp, r->Link.lFlags & RTMP_LF_LIVE); */
+      r->m_read.timestamp = (r->Link.lFlags & RTMP_LF_LIVE) ? packet.m_nTimeStamp : nTimeStamp;
 
       ret = size;
       break;

Modified: trunk/librtmp/rtmp.h
==============================================================================
--- trunk/librtmp/rtmp.h	Sat Apr 24 13:30:39 2010	(r446)
+++ trunk/librtmp/rtmp.h	Sat Apr 24 13:31:16 2010	(r447)
@@ -135,18 +135,25 @@ extern "C"
     AVal subscribepath;
     AVal token;
     AMFObject extras;
-	int edepth;
+    int edepth;
 
     int seekTime;
     int stopTime;
 
+#define RTMP_LF_AUTH	0x0001
+#define RTMP_LF_LIVE	0x0002
+#define RTMP_LF_SWFV	0x0004
+#define RTMP_LF_PLST	0x0008
+    int lFlags;
+#if 0
     bool authflag;
     bool bLiveStream;
     bool swfVfy;
+#endif
     int swfAge;
 
     int protocol;
-    int timeout;		/* number of seconds before connection times out */
+    int timeout;		/* connection timeout in seconds */
 
     unsigned short socksport;
     unsigned short port;
@@ -219,7 +226,6 @@ extern "C"
     int m_numCalls;
     AVal *m_methodCalls;	/* remote method calls queue */
 
-    RTMP_LNK Link;
     RTMPPacket *m_vecChannelsIn[RTMP_CHANNELS];
     RTMPPacket *m_vecChannelsOut[RTMP_CHANNELS];
     int m_channelTimestamp[RTMP_CHANNELS];	/* abs timestamp of last packet */
@@ -237,8 +243,9 @@ extern "C"
     AVal m_clientID;
 
     RTMP_READ m_read;
-	RTMPPacket m_write;
+    RTMPPacket m_write;
     RTMPSockBuf m_sb;
+    RTMP_LNK Link;
   } RTMP;
 
   bool RTMP_ParseURL(const char *url, int *protocol, AVal *host,
@@ -289,6 +296,9 @@ extern "C"
 
   void RTMP_Init(RTMP *r);
   void RTMP_Close(RTMP *r);
+  RTMP *RTMP_Alloc(void);
+  void RTMP_Free(RTMP *r);
+
   int RTMP_LibVersion(void);
   void RTMP_UserInterrupt(void);	/* user typed Ctrl-C */
 

Modified: trunk/rtmpgw.c
==============================================================================
--- trunk/rtmpgw.c	Sat Apr 24 13:30:39 2010	(r446)
+++ trunk/rtmpgw.c	Sat Apr 24 13:31:16 2010	(r447)
@@ -555,7 +555,7 @@ void processTCPrequest(STREAMING_SERVER 
 		   req.bLiveStream, req.timeout);
   /* backward compatibility, we always sent this as true before */
   if (req.auth.av_len)
-    rtmp.Link.authflag = true;
+    rtmp.Link.lFlags |= RTMP_LF_AUTH;
 
   rtmp.Link.extras = req.extras;
   rtmp.Link.token = req.token;

Modified: trunk/rtmpsuck.c
==============================================================================
--- trunk/rtmpsuck.c	Sat Apr 24 13:30:39 2010	(r446)
+++ trunk/rtmpsuck.c	Sat Apr 24 13:31:16 2010	(r447)
@@ -288,7 +288,8 @@ ServeInvoke(STREAMING_SERVER *server, in
         }
       if (obj.o_num > 3)
         {
-          server->rc.Link.authflag = AMFProp_GetBoolean(&obj.o_props[3]);
+          if (AMFProp_GetBoolean(&obj.o_props[3]))
+            server->rc.Link.lFlags |= RTMP_LF_AUTH;
           if (obj.o_num > 4)
           {
             AMFProp_GetString(&obj.o_props[4], &server->rc.Link.auth);


More information about the rtmpdump mailing list