|
|
|
@@ -719,7 +719,6 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt) |
|
|
|
int i; |
|
|
|
int server_pos, client_pos; |
|
|
|
uint8_t digest[32], signature[32]; |
|
|
|
int encrypted = rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL; |
|
|
|
int ret, type = 0; |
|
|
|
|
|
|
|
av_log(s, AV_LOG_DEBUG, "Handshaking...\n"); |
|
|
|
@@ -729,7 +728,7 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt) |
|
|
|
for (i = 9; i <= RTMP_HANDSHAKE_PACKET_SIZE; i++) |
|
|
|
tosend[i] = av_lfg_get(&rnd) >> 24; |
|
|
|
|
|
|
|
if (encrypted) { |
|
|
|
if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) { |
|
|
|
/* When the client wants to use RTMPE, we have to change the command |
|
|
|
* byte to 0x06 which means to use encrypted data and we have to set |
|
|
|
* the flash version to at least 9.0.115.0. */ |
|
|
|
@@ -745,7 +744,7 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt) |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
client_pos = rtmp_handshake_imprint_with_digest(tosend + 1, encrypted); |
|
|
|
client_pos = rtmp_handshake_imprint_with_digest(tosend + 1, rt->encrypted); |
|
|
|
if (client_pos < 0) |
|
|
|
return client_pos; |
|
|
|
|
|
|
|
@@ -799,7 +798,7 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt) |
|
|
|
if (ret < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
if (encrypted) { |
|
|
|
if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) { |
|
|
|
/* Compute the shared secret key sent by the server and initialize |
|
|
|
* the RC4 encryption. */ |
|
|
|
if ((ret = ff_rtmpe_compute_secret_key(rt->stream, serverdata + 1, |
|
|
|
@@ -829,7 +828,7 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt) |
|
|
|
if (ret < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
if (encrypted) { |
|
|
|
if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) { |
|
|
|
/* Encrypt the signature to be send to the server. */ |
|
|
|
ff_rtmpe_encrypt_sig(rt->stream, tosend + |
|
|
|
RTMP_HANDSHAKE_PACKET_SIZE - 32, digest, |
|
|
|
@@ -841,13 +840,13 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt) |
|
|
|
RTMP_HANDSHAKE_PACKET_SIZE)) < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
if (encrypted) { |
|
|
|
if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) { |
|
|
|
/* Set RC4 keys for encryption and update the keystreams. */ |
|
|
|
if ((ret = ff_rtmpe_update_keystream(rt->stream)) < 0) |
|
|
|
return ret; |
|
|
|
} |
|
|
|
} else { |
|
|
|
if (encrypted) { |
|
|
|
if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) { |
|
|
|
/* Compute the shared secret key sent by the server and initialize |
|
|
|
* the RC4 encryption. */ |
|
|
|
if ((ret = ff_rtmpe_compute_secret_key(rt->stream, serverdata + 1, |
|
|
|
@@ -865,7 +864,7 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt) |
|
|
|
RTMP_HANDSHAKE_PACKET_SIZE)) < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
if (encrypted) { |
|
|
|
if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) { |
|
|
|
/* Set RC4 keys for encryption and update the keystreams. */ |
|
|
|
if ((ret = ff_rtmpe_update_keystream(rt->stream)) < 0) |
|
|
|
return ret; |
|
|
|
|