#include <openssl/ssl.h>
#include <openssl/rc4.h>
#endif
+TLS_CTX RTMP_TLS_ctx;
#endif
#define RTMP_SIG_SIZE 1536
#define RTMP_LARGE_HEADER_SIZE 12
-TLS_CTX RTMP_TLS_ctx;
static const int packetSize[] = { 12, 8, 4, 1 };
bool RTMP_ctrlC;
void
RTMP_TLS_Init()
{
+#ifdef CRYPTO
#ifdef USE_GNUTLS
gnutls_global_init();
RTMP_TLS_ctx = malloc(sizeof(struct tls_ctx));
SSL_CTX_set_options(RTMP_TLS_ctx, SSL_OP_ALL);
SSL_CTX_set_default_verify_paths(RTMP_TLS_ctx);
#endif
+#endif
}
void
RTMP_Init(RTMP *r)
{
+#ifdef CRYPTO
if (!RTMP_TLS_ctx)
RTMP_TLS_Init();
+#endif
memset(r, 0, sizeof(RTMP));
r->m_sb.sb_socket = -1;
{
if (r->Link.protocol & RTMP_FEATURE_SSL)
{
+#ifdef CRYPTO
TLS_client(RTMP_TLS_ctx, r->m_sb.sb_ssl);
TLS_setfd(r->m_sb.sb_ssl, r->m_sb.sb_socket);
if (TLS_connect(r->m_sb.sb_ssl) < 0)
RTMP_Close(r);
return false;
}
+#else
+ RTMP_Log(RTMP_LOGERROR, "%s, no CRYPTO support", __FUNCTION__);
+ RTMP_Close(r);
+ return false;
+
+#endif
}
if (r->Link.protocol & RTMP_FEATURE_HTTP)
{
while (1)
{
nBytes = sizeof(sb->sb_buf) - sb->sb_size - (sb->sb_start - sb->sb_buf);
+#ifdef CRYPTO
if (sb->sb_ssl)
{
nBytes = TLS_read(sb->sb_ssl, sb->sb_start + sb->sb_size, nBytes);
}
else
+#endif
{
nBytes = recv(sb->sb_socket, sb->sb_start + sb->sb_size, nBytes, 0);
}
fwrite(buf, 1, len, netstackdump);
#endif
+#ifdef CRYPTO
if (sb->sb_ssl)
{
rc = TLS_write(sb->sb_ssl, buf, len);
}
else
+#endif
{
rc = send(sb->sb_socket, buf, len, 0);
}
int
RTMPSockBuf_Close(RTMPSockBuf *sb)
{
+#ifdef CRYPTO
if (sb->sb_ssl)
{
TLS_shutdown(sb->sb_ssl);
TLS_close(sb->sb_ssl);
sb->sb_ssl = NULL;
}
+#endif
return closesocket(sb->sb_socket);
}
uint32_t dStartOffset;
uint32_t dStopOffset;
+#ifdef CRYPTO
unsigned char hash[HASHLEN];
+#endif
} RTMP_REQUEST;
#define STR2AVAL(av,str) av.av_val = str; av.av_len = strlen(av.av_val)
if (req.swfVfy)
{
+#ifdef CRYPTO
if (RTMP_HashSWF(req.swfUrl.av_val, &req.swfSize, req.hash, req.swfAge) == 0)
{
req.swfHash.av_val = (char *)req.hash;
req.swfHash.av_len = HASHLEN;
}
+#endif
}
// after validation of the http request send response header