From 96be720cb7d87efd4f19b453c672cb0bf991f48a Mon Sep 17 00:00:00 2001 From: hyc Date: Mon, 22 Mar 2010 00:31:44 +0000 Subject: [PATCH] (ugly) add FP10 support for server handshake git-svn-id: svn://svn.mplayerhq.hu/rtmpdump/trunk@380 400ebc74-4327-4243-bc38-086b20814532 --- librtmp/handshake.h | 49 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/librtmp/handshake.h b/librtmp/handshake.h index 34bfd55..cd6ac74 100644 --- a/librtmp/handshake.h +++ b/librtmp/handshake.h @@ -724,6 +724,9 @@ SHandShake(RTMP * r) if (ReadN(r, &type, 1) != 1) /* 0x03 or 0x06 */ return false; + if (ReadN(r, clientsig, RTMP_SIG_SIZE) != RTMP_SIG_SIZE) + return false; + RTMP_Log(RTMP_LOGDEBUG, "%s: Type Requested : %02X", __FUNCTION__, type); if (type == 3) @@ -735,6 +738,9 @@ SHandShake(RTMP * r) encrypted = true; FP9HandShake = true; r->Link.protocol |= RTMP_FEATURE_ENC; + /* use FP10 if client is capable */ + if (clientsig[4] == 128 || clientsig[4] == -128) + type = 8; } else { @@ -824,9 +830,6 @@ SHandShake(RTMP * r) if (!WriteN(r, serversig-1, RTMP_SIG_SIZE + 1)) return false; - if (ReadN(r, clientsig, RTMP_SIG_SIZE) != RTMP_SIG_SIZE) - return false; - /* decode client response */ memcpy(&uptime, clientsig, 4); uptime = ntohl(uptime); @@ -913,6 +916,26 @@ SHandShake(RTMP * r) GenuineFMSKey, sizeof(GenuineFMSKey), digestResp); HMACsha256(clientsig, RTMP_SIG_SIZE - SHA256_DIGEST_LENGTH, digestResp, SHA256_DIGEST_LENGTH, signatureResp); +#ifdef FP10 + if (type == 8 ) + { + unsigned char *dptr = (unsigned char *)digestResp; + unsigned char *sig = (unsigned char *)signatureResp; + /* encrypt signatureResp */ + for (i=0; i