static void dump_ssl_info(const pj_ssl_sock_info *si) { const char *tmp_st; /* Print cipher name */ tmp_st = pj_ssl_cipher_name(si->cipher); if (tmp_st == NULL) tmp_st = "[Unknown]"; PJ_LOG(3, ("", ".....Cipher: %s", tmp_st)); /* Print remote certificate info and verification result */ if (si->remote_cert_info && si->remote_cert_info->subject.info.slen) { char buf[2048]; const char *verif_msgs[32]; unsigned verif_msg_cnt; /* Dump remote TLS certificate info */ PJ_LOG(3, ("", ".....Remote certificate info:")); pj_ssl_cert_info_dump(si->remote_cert_info, " ", buf, sizeof(buf)); PJ_LOG(3,("", "\n%s", buf)); /* Dump remote TLS certificate verification result */ verif_msg_cnt = PJ_ARRAY_SIZE(verif_msgs); pj_ssl_cert_get_verify_status_strings(si->verify_status, verif_msgs, &verif_msg_cnt); PJ_LOG(3,("", ".....Remote certificate verification result: %s", (verif_msg_cnt == 1? verif_msgs[0]:""))); if (verif_msg_cnt > 1) { unsigned i; for (i = 0; i < verif_msg_cnt; ++i) PJ_LOG(3,("", "..... - %s", verif_msgs[i])); } } }
static int get_cipher_list(void) { pj_status_t status; pj_ssl_cipher ciphers[100]; unsigned cipher_num; unsigned i; cipher_num = PJ_ARRAY_SIZE(ciphers); status = pj_ssl_cipher_get_availables(ciphers, &cipher_num); if (status != PJ_SUCCESS) { app_perror("...FAILED to get available ciphers", status); return status; } PJ_LOG(3, ("", "...Found %u ciphers:", cipher_num)); for (i = 0; i < cipher_num; ++i) { const char* st; st = pj_ssl_cipher_name(ciphers[i]); if (st == NULL) st = "[Unknown]"; PJ_LOG(3, ("", "...%3u: 0x%08x=%s", i+1, ciphers[i], st)); } return PJ_SUCCESS; }
static void cipher_to_str(char **buf, const pj_ssl_cipher *ciphers, unsigned int cipher_num) { struct ast_str *str; int idx; str = ast_str_create(128); if (!str) { *buf = NULL; return; } for (idx = 0; idx < cipher_num; ++idx) { ast_str_append(&str, 0, "%s", pj_ssl_cipher_name(ciphers[idx])); if (idx < cipher_num - 1) { ast_str_append(&str, 0, ", "); } } *buf = ast_strdup(ast_str_buffer(str)); ast_free(str); }
/*! \brief Helper function which turns a cipher name into an identifier */ static pj_ssl_cipher cipher_name_to_id(const char *name) { pj_ssl_cipher ciphers[100]; pj_ssl_cipher id = 0; unsigned int cipher_num = PJ_ARRAY_SIZE(ciphers); int pos; const char *pos_name; if (pj_ssl_cipher_get_availables(ciphers, &cipher_num)) { return 0; } for (pos = 0; pos < cipher_num; ++pos) { pos_name = pj_ssl_cipher_name(ciphers[pos]); if (!pos_name || strcmp(pos_name, name)) { continue; } id = ciphers[pos]; break; } return id; }