2015-02-06 23 views
5
İşte

WebRTC DTLS-SRTP OpenSSL Sunucu Tokalaşma Başarısızlık

SSL Başlatma Bölüm ve BIO değişkenler, OpenSSL Sunucusu Modunda benim prosedürdür

int ServerModeDTLSNegotiation(int iChannel, const char *pBuff, const int iLen, int iFd) 
{ 

    SSL *pServSslFd; 
    BIO *pRbio; 
    BIO *pWbio; 
    pServSslFd = &m_SSLMap[iFd]; 
    pRbio = &m_BioReadMap[iFd]; 
    pWbio = &m_BioWriteMap[iFd]; 


    char buff[4096]; 
    memset(buff, 0, strlen(buff)); 

    BIO_write(pRbio, pBuff, iLen); 

    if(!SSL_is_init_finished(pServSslFd)) 
    { 
     int iRet = SSL_do_handshake(pServSslFd); 
    } 

    int iNewLen = BIO_read(pWbio, buff, 2048); 
    if(iNewLen>0) 
    { 
     char *pNewData = new char[iNewLen+1]; 
     for(int i=0;i<iNewLen;i++) 
     pNewData[i] = buff[i]; 
     m_pEventHandler->SendReply(iChannel, (unsigned char *)pNewData, iNewLen); 
    } 
    else 
    { 
     printf("[DTLS]:: HandShaking Response failed for this data, 
     return -1; 
    } 
    return NEGOTIATION_SUCCESS; 

} 
: DTLS veri sunucusuna geldiğinde İşte

Ben konu hakkında daha iyi izlenmesi için Wireshark TCP-dökümü ekleme.

https://www.dropbox.com/s/quidcs6gilnvt2o/WebRTC%20DTLS%20Handshake%20Failure.pcapng?dl=0

Şimdi, SSL_CTX değişkenin benim başlatma konusunda emin değilim. Çünkü, Bazen Handshake her liman için başarılı bir şekilde pazarlık yapıyor. Ancak bazen bir veya iki port için Handshake başarısız olur. Google Chrome için WebRTC DTLS Sunucusu Modu Müzakere çözmek için 5 gün çalışıyorum. Fakat bu sorunun kök nedenini bulamadım.

cevap

1

TCP-Damper için bağlantı çalışmıyor. Neyse, çözüm çalışması gerekir gibi görünüyor. Bir sunucu programı olarak

, kesinlikle var çoklu dişli. Ancak SSL değişkenlerini ya da kilitleme'u kilitleme olmadan el sıkışma prosedürünü başlatabilirsiniz. Bu iki yöntem birden parçacığı tarafından işlenir Bu durumda aynı pek çok şey olabilir.

Benim önerim, bu yöntemler için kilitleme mekanizması eklemektir.

+0

Aslında bunu uzun zaman önce çözdüm. Ve evet, haklısın. Bu sorunu muteks kilit ekleyerek çözdüm. – RajibTheKing