2015-08-15 2 views
0

Итак, я пытаюсь реализовать SNI на моем сервере GNUTLS.SNI в GNUTLS, когда спросить?

Мой код:

if(sniCallback != NULL) { 
    size_t ds = 256; 
    char data[ds]; 
    unsigned int type = (unsigned int)GNUTLS_NAME_DNS; 
    int snir = gnutls_server_name_get(sessiond, &data[0], &ds, &type, (unsigned int)0); 
    data[ds - 1] = 0; // the last one must always be \0 
    if(snir >= 0) { 
     jstring js = (*this)->NewStringUTF(this, data); 
     jlong snicert = (*this)->CallLongMethod(this, sniCallback, (*this)->GetMethodID(this, (*this)->GetObjectClass(this, sniCallback), "getSNICert", "(Ljava/lang/String;)J"), js); 
     if(snicert > 0L) { 
      struct cert* oc = (struct cert*)snicert; 
      gnutls_credentials_set(sessiond, GNUTLS_CRD_CERTIFICATE, oc->cert); 
     } 
    } else { 
     printf("%i\n", snir); 
    } 
} 

(Не возражаете JNI)

Я получаю коды ошибок -56, что является GNUTLS_E_REQUESTED_DATA_NOT_AVAILABLE, которой документация транслирует ни к SNI был послан (пока) , Как я узнаю, КОГДА у меня есть информация SNI? AKA Когда я получу клиент Hello? Я получаю это прямо из Chrome, поэтому я знаю, что есть SNI. Кстати, это все NIO.

ответ

1

Для тех, кто по тому же пути, что и я, то ответ:

gnutls_handshake_set_post_client_hello_function