more gnutls debug code

git-svn-id: http://svn.berlios.de/svnroot/repos/sipsak/trunk@416 75b5f7c7-cfd4-0310-b54c-e118b2c5249a
(cherry picked from commit c77a4d79951742f63003b90f380e12c951215b2c)
(cherry picked from commit 374478471e)
mr4.1.2
nils-ohlmeier 20 years ago committed by Victor Seva
parent 23c4ed2d68
commit 2493b995f2

@ -112,7 +112,82 @@ int rawsock;
#ifdef WITH_TLS_TRANSP
# ifdef USE_GNUTLS
//extern void print_x509_certificate_info(session);
void check_alert(gnutls_session_t session, int ret) {
int last_alert;
if (ret == GNUTLS_E_WARNING_ALERT_RECEIVED ||
ret == GNUTLS_E_FATAL_ALERT_RECEIVED) {
last_alert = gnutls_alert_get(session);
printf("Received TLS alert: '%d': %s\n", last_alert,
gnutls_alert_get_name(last_alert));
}
}
static const char *bin2hex(const void *bin, size_t bin_size) {
static char printable[110];
const unsigned char *_bin = bin;
char *print;
size_t i;
if (bin_size > 50) {
bin_size = 50;
}
print = printable;
for (i=0; i < bin_size; i++) {
sprintf(print, "%.2x ", _bin[i]);
print += 2;
}
return printable;
}
void print_x509_certificate_info(gnutls_session_t session) {
char serial[40];
char dn[128];
size_t size;
unsigned int algo, bits;
time_t expiration_time, activation_time;
const gnutls_datum_t *cert_list;
int cert_list_size = 0;
gnutls_x509_crt_t cert;
// check if we got a X.509 cert
if (gnutls_certificate_type_get(session) != GNUTLS_CRT_X509) {
printf("TLS session did not received a X.509 certificate\n");
return;
}
cert_list = gnutls_certificate_get_peers(session, &cert_list_size);
printf("Peer provided %d certificate(s)\n", cert_list_size);
if (cert_list_size > 0) {
// print only informations about the first cert
gnutls_x509_crt_init(&cert);
gnutls_x509_crt_import(cert, &cert_list[0], GNUTLS_X509_FMT_DER);
printf("Certificate info:\n");
expiration_time = gnutls_x509_crt_get_expiration_time(cert);
activation_time = gnutls_x509_crt_get_activation_time(cert);
printf("\tCertificate is valid since: %s", ctime(&activation_time));
printf("\tCertificate expires: %s", ctime(&expiration_time));
// print the serial number of the certificate
size = sizeof(serial);
gnutls_x509_crt_get_serial(cert, serial, &size);
printf("\tCertificate serail number: %s\n", bin2hex(serial, size));
// extract public key algorithm
algo = gnutls_x509_crt_get_pk_algorithm(cert, &bits);
printf("\tCertificate public key: %s\n", gnutls_pk_algorithm_get_name(algo));
// print version of x509 cert
printf("\tCertificate version: #%d\n", gnutls_x509_crt_get_version(cert));
size = sizeof(dn);
gnutls_x509_crt_get_dn(cert, dn, &size);
printf("\tDN: %s\n", dn);
size = sizeof(dn);
gnutls_x509_crt_get_issuer_dn(cert, dn, &size);
printf("\tIssuer's DN: %s\n", dn);
gnutls_x509_crt_deinit(cert);
}
}
void gnutls_session_info(gnutls_session_t session) {
const char *tmp;
@ -142,7 +217,7 @@ void gnutls_session_info(gnutls_session_t session) {
gnutls_dh_get_prime_bits(session));
}
// print certificate informations if available
//print_x509_certificate_info(session);
print_x509_certificate_info(session);
break;
default:
printf("UNKNOWN GNUTLS authentication type!!!\n");
@ -342,6 +417,27 @@ void create_sockets(struct sipsak_con_data *cd) {
}
}
void close_sockets(struct sipsak_con_data *cd) {
if (transport == SIP_UDP_TRANSPORT) {
}
else {
#ifdef WITH_TLS_TRANSP
if (transport == SIP_TLS_TRANSPORT) {
# ifdef USE_GNUTLS
gnutls_bye(tls_session, GNUTLS_SHUT_RDWR);
# else /* USE_GNUTLS */
# ifdef USE_OPENSSL
# endif /* USE_OPENSSL */
# endif /* USE_GNUTLS */
}
#endif /* WITH_TLS_TRANSP */
shutdown(cd->csock, SHUT_RDWR);
}
#ifdef DEBUG
printf("sockets closed\n");
#endif
}
void send_message(char* mes, struct sipsak_con_data *cd,
struct sipsak_counter *sc, struct sipsak_sr_time *srt) {
struct timezone tz;
@ -821,6 +917,9 @@ int set_target(struct sockaddr_in *adr, unsigned long target, int port, int sock
#ifdef DEBUG
else {
printf("*** TLS Handshake was completed!\n");
#ifdef DEBUG
gnutls_session_info(tls_session);
#endif
}
#endif
# else /* USE_GNUTLS */

@ -72,6 +72,8 @@ struct sipsak_delay {
void create_sockets(struct sipsak_con_data *cd);
void close_sockets(struct sipsak_con_data *cd);
void send_message(char* mes, struct sipsak_con_data *cd,
struct sipsak_counter *sc, struct sipsak_sr_time *srt);

Loading…
Cancel
Save