From: hyc Date: Wed, 7 Apr 2010 07:34:37 +0000 (+0000) Subject: Fix prev commit - hashswf must always be present X-Git-Tag: v2.4~124 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eb35c7172a6628823860c1dd6b352ac1d3ec90ce;p=rtmpdump Fix prev commit - hashswf must always be present git-svn-id: svn://svn.mplayerhq.hu/rtmpdump/trunk@421 400ebc74-4327-4243-bc38-086b20814532 --- diff --git a/librtmp/Makefile b/librtmp/Makefile index a3aa968..a977273 100644 --- a/librtmp/Makefile +++ b/librtmp/Makefile @@ -11,14 +11,11 @@ DEF_OPENSSL=-DCRYPTO -DUSE_OPENSSL DEF_GNUTLS=-DCRYPTO -DUSE_GNUTLS LIB_GNUTLS=-lgnutls LIB_OPENSSL=-lssl -lcrypto -OBJ_OPENSSL=hashswf.o -OBJ_GNUTLS=hashswf.o REQ_GNUTLS=gnutls REQ_OPENSSL=libssl,libcrypto CRYPTO_LIB=$(LIB_$(CRYPTO)) CRYPTO_REQ=$(REQ_$(CRYPTO)) CRYPTO_DEF=$(DEF_$(CRYPTO)) -CRYPTO_OBJ=$(OBJ_$(CRYPTO)) DEF=-DRTMPDUMP_VERSION=\"$(VERSION)\" $(CRYPTO_DEF) OPT=-O2 @@ -31,7 +28,7 @@ all: librtmp.a clean: rm -f *.o *.a -librtmp.a: rtmp.o log.o amf.o parseurl.o $(CRYPTO_OBJ) +librtmp.a: rtmp.o log.o amf.o hashswf.o parseurl.o $(AR) rs $@ $? log.o: log.c log.h Makefile diff --git a/librtmp/hashswf.c b/librtmp/hashswf.c index 5d65135..0d23944 100644 --- a/librtmp/hashswf.c +++ b/librtmp/hashswf.c @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -28,6 +29,7 @@ #include "log.h" #include "http.h" +#ifdef CRYPTO #ifdef USE_GNUTLS #include #include @@ -49,67 +51,13 @@ #define HMAC_finish(ctx, dig, dlen) HMAC_Final(&ctx, (unsigned char *)dig, &dlen); #define HMAC_close(ctx) HMAC_CTX_cleanup(&ctx) #endif -#include - -struct info -{ - z_stream *zs; - HMAC_CTX ctx; - int first; - int zlib; - int size; -}; extern void RTMP_TLS_Init(); extern TLS_CTX RTMP_TLS_ctx; -#define CHUNK 16384 - -static size_t -swfcrunch(void *ptr, size_t size, size_t nmemb, void *stream) -{ - struct info *i = stream; - char *p = ptr; - size_t len = size * nmemb; +#endif /* CRYPTO */ - if (i->first) - { - i->first = 0; - /* compressed? */ - if (!strncmp(p, "CWS", 3)) - { - *p = 'F'; - i->zlib = 1; - } - HMAC_crunch(i->ctx, (unsigned char *)p, 8); - p += 8; - len -= 8; - i->size = 8; - } - - if (i->zlib) - { - unsigned char out[CHUNK]; - i->zs->next_in = (unsigned char *)p; - i->zs->avail_in = len; - do - { - i->zs->avail_out = CHUNK; - i->zs->next_out = out; - inflate(i->zs, Z_NO_FLUSH); - len = CHUNK - i->zs->avail_out; - i->size += len; - HMAC_crunch(i->ctx, out, len); - } - while (i->zs->avail_out == 0); - } - else - { - i->size += len; - HMAC_crunch(i->ctx, (unsigned char *)p, len); - } - return size * nmemb; -} +#include #define AGENT "Mozilla/5.0" @@ -120,7 +68,9 @@ HTTP_get(struct HTTP_ctx *http, const char *url, HTTP_read_callback *cb) char *p1, *p2; char hbuf[256]; int port = 80; +#ifdef CRYPTO int ssl = 0; +#endif int hlen, flen = 0; int rc, i; int len_known; @@ -139,10 +89,14 @@ HTTP_get(struct HTTP_ctx *http, const char *url, HTTP_read_callback *cb) if (url[4] == 's') { +#ifdef CRYPTO ssl = 1; port = 443; if (!RTMP_TLS_ctx) RTMP_TLS_Init(); +#else + return HTTPRES_BAD_REQUEST; +#endif } p1 = strchr(url + 4, ':'); @@ -188,6 +142,7 @@ HTTP_get(struct HTTP_ctx *http, const char *url, HTTP_read_callback *cb) ret = HTTPRES_LOST_CONNECTION; goto leave; } +#ifdef CRYPTO if (ssl) { TLS_client(RTMP_TLS_ctx, sb.sb_ssl); @@ -199,6 +154,7 @@ HTTP_get(struct HTTP_ctx *http, const char *url, HTTP_read_callback *cb) goto leave; } } +#endif RTMPSockBuf_Send(&sb, sb.sb_buf, i); // set timeout @@ -307,6 +263,65 @@ leave: return ret; } +#ifdef CRYPTO + +#define CHUNK 16384 + +struct info +{ + z_stream *zs; + HMAC_CTX ctx; + int first; + int zlib; + int size; +}; + +static size_t +swfcrunch(void *ptr, size_t size, size_t nmemb, void *stream) +{ + struct info *i = stream; + char *p = ptr; + size_t len = size * nmemb; + + if (i->first) + { + i->first = 0; + /* compressed? */ + if (!strncmp(p, "CWS", 3)) + { + *p = 'F'; + i->zlib = 1; + } + HMAC_crunch(i->ctx, (unsigned char *)p, 8); + p += 8; + len -= 8; + i->size = 8; + } + + if (i->zlib) + { + unsigned char out[CHUNK]; + i->zs->next_in = (unsigned char *)p; + i->zs->avail_in = len; + do + { + i->zs->avail_out = CHUNK; + i->zs->next_out = out; + inflate(i->zs, Z_NO_FLUSH); + len = CHUNK - i->zs->avail_out; + i->size += len; + HMAC_crunch(i->ctx, out, len); + } + while (i->zs->avail_out == 0); + } + else + { + i->size += len; + HMAC_crunch(i->ctx, (unsigned char *)p, len); + } + return size * nmemb; +} + static int tzoff; static int tzchecked; @@ -614,3 +629,11 @@ out: fclose(f); return ret; } +#else +int +RTMP_HashSWF(const char *url, unsigned int *size, unsigned char *hash, + int age) +{ + return -1; +} +#endif