diff options
-rw-r--r-- | desktop/sslcert_viewer.c | 206 | ||||
-rw-r--r-- | desktop/sslcert_viewer.h | 15 |
2 files changed, 136 insertions, 85 deletions
diff --git a/desktop/sslcert_viewer.c b/desktop/sslcert_viewer.c index 09a281c1c..e7f87bd9d 100644 --- a/desktop/sslcert_viewer.c +++ b/desktop/sslcert_viewer.c @@ -17,8 +17,9 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -/** \file - * SSL Certificate verification UI (implementation) +/** + * \file + * SSL Certificate verification UI implementation */ #include <assert.h> @@ -33,6 +34,9 @@ #include "utils/log.h" #include "utils/utils.h" +/** + * ssl certificate viewer data fields + */ enum sslcert_viewer_field { SSLCERT_V_SUBJECT, SSLCERT_V_SERIAL, @@ -45,7 +49,10 @@ enum sslcert_viewer_field { SSLCERT_V_N_FIELDS }; -/** ssl certificate verification context. */ + +/** + * ssl certificate verification context. + */ struct sslcert_session_data { struct ssl_cert_info *certs; /**< Certificates */ unsigned long num; /**< Number of certificates in chain */ @@ -57,6 +64,10 @@ struct sslcert_session_data { struct treeview_field_desc fields[SSLCERT_V_N_FIELDS]; }; + +/** + * ssl certificate tree entry + */ struct sslcert_entry { treeview_node *entry; char version[24]; @@ -67,12 +78,11 @@ struct sslcert_entry { /** - * Free a sll certificate viewer entry's treeview field data. + * Free a ssl certificate viewer entry's treeview field data. * - * \param e Entry to free data from + * \param e Entry to free data from */ -static void sslcert_viewer_free_treeview_field_data( - struct sslcert_entry *e) +static void sslcert_viewer_free_treeview_field_data(struct sslcert_entry *e) { } @@ -80,17 +90,17 @@ static void sslcert_viewer_free_treeview_field_data( /** * Build a sslcert viewer treeview field from given text * - * \param field SSL certificate treeview field to build - * \param data SSL certificate entry field data to set - * \param value Text to set in field, ownership yielded - * \param ssl_d SSL certificate session data + * \param field SSL certificate treeview field to build + * \param data SSL certificate entry field data to set + * \param value Text to set in field, ownership yielded + * \param ssl_d SSL certificate session data * \return NSERROR_OK on success, appropriate error otherwise */ -static inline nserror sslcert_viewer_field_builder( - enum sslcert_viewer_field field, - struct treeview_field_data *data, - const char *value, - struct sslcert_session_data *ssl_d) +static inline nserror +sslcert_viewer_field_builder(enum sslcert_viewer_field field, + struct treeview_field_data *data, + const char *value, + struct sslcert_session_data *ssl_d) { data->field = ssl_d->fields[field].field; data->value = value; @@ -103,15 +113,15 @@ static inline nserror sslcert_viewer_field_builder( /** * Set a sslcert viewer entry's data from the certificate. * - * \param e Entry to set up - * \param cert Data associated with entry's certificate - * \param ssl_d SSL certificate session data + * \param e Entry to set up + * \param cert Data associated with entry's certificate + * \param ssl_d SSL certificate session data * \return NSERROR_OK on success, appropriate error otherwise */ -static nserror sslcert_viewer_set_treeview_field_data( - struct sslcert_entry *e, - const struct ssl_cert_info *cert, - struct sslcert_session_data *ssl_d) +static nserror +sslcert_viewer_set_treeview_field_data(struct sslcert_entry *e, + const struct ssl_cert_info *cert, + struct sslcert_session_data *ssl_d) { unsigned int written; @@ -121,39 +131,39 @@ static nserror sslcert_viewer_set_treeview_field_data( /* Set the fields up */ sslcert_viewer_field_builder(SSLCERT_V_SUBJECT, - &e->data[SSLCERT_V_SUBJECT], - cert->subject, ssl_d); + &e->data[SSLCERT_V_SUBJECT], + cert->subject, ssl_d); written = snprintf(e->serial, sizeof(e->serial), "%li", cert->serial); assert(written < sizeof(e->serial)); sslcert_viewer_field_builder(SSLCERT_V_SERIAL, - &e->data[SSLCERT_V_SERIAL], - e->serial, ssl_d); + &e->data[SSLCERT_V_SERIAL], + e->serial, ssl_d); written = snprintf(e->type, sizeof(e->type), "%i", cert->cert_type); assert(written < sizeof(e->type)); sslcert_viewer_field_builder(SSLCERT_V_TYPE, - &e->data[SSLCERT_V_TYPE], - e->type, ssl_d); + &e->data[SSLCERT_V_TYPE], + e->type, ssl_d); sslcert_viewer_field_builder(SSLCERT_V_VALID_UNTIL, - &e->data[SSLCERT_V_VALID_UNTIL], - cert->not_after, ssl_d); + &e->data[SSLCERT_V_VALID_UNTIL], + cert->not_after, ssl_d); sslcert_viewer_field_builder(SSLCERT_V_VALID_FROM, - &e->data[SSLCERT_V_VALID_FROM], - cert->not_before, ssl_d); + &e->data[SSLCERT_V_VALID_FROM], + cert->not_before, ssl_d); written = snprintf(e->version, sizeof(e->version), - "%li", cert->version); + "%li", cert->version); assert(written < sizeof(e->version)); sslcert_viewer_field_builder(SSLCERT_V_VERSION, - &e->data[SSLCERT_V_VERSION], - e->version, ssl_d); + &e->data[SSLCERT_V_VERSION], + e->version, ssl_d); sslcert_viewer_field_builder(SSLCERT_V_ISSUER, - &e->data[SSLCERT_V_ISSUER], - cert->issuer, ssl_d); + &e->data[SSLCERT_V_ISSUER], + cert->issuer, ssl_d); return NSERROR_OK; } @@ -162,12 +172,12 @@ static nserror sslcert_viewer_set_treeview_field_data( /** * Create a treeview node for a certificate * - * \param ssl_d SSL certificate session data - * \param n Number of SSL certificate in chain, to make node for - * \return true on success, false on memory exhaustion + * \param ssl_d SSL certificate session data + * \param n Number of SSL certificate in chain, to make node for + * \return NSERROR_OK on success otherwise error code. */ -static nserror sslcert_viewer_create_node( - struct sslcert_session_data *ssl_d, int n) +static nserror +sslcert_viewer_create_node(struct sslcert_session_data *ssl_d, int n) { struct sslcert_entry *e; const struct ssl_cert_info *cert = &(ssl_d->certs[n]); @@ -187,8 +197,8 @@ static nserror sslcert_viewer_create_node( /* Create the new treeview node */ err = treeview_create_node_entry(ssl_d->tree, &(e->entry), - NULL, TREE_REL_FIRST_CHILD, - e->data, e, TREE_OPTION_NONE); + NULL, TREE_REL_FIRST_CHILD, + e->data, e, TREE_OPTION_NONE); if (err != NSERROR_OK) { sslcert_viewer_free_treeview_field_data(e); free(e); @@ -200,10 +210,10 @@ static nserror sslcert_viewer_create_node( /** - * Initialise the treeview entry feilds + * Initialise the treeview entry fields * - * \param ssl_d SSL certificate session data - * \return true on success, false on memory exhaustion + * \param ssl_d SSL certificate session data + * \return NSERROR_OK on success otherwise error code. */ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) { @@ -217,8 +227,8 @@ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) label = "TreeviewLabelSubject"; label = messages_get(label); if (lwc_intern_string(label, strlen(label), - &ssl_d->fields[SSLCERT_V_SUBJECT].field) != - lwc_error_ok) { + &ssl_d->fields[SSLCERT_V_SUBJECT].field) != + lwc_error_ok) { goto error; } @@ -226,8 +236,8 @@ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) label = "TreeviewLabelSerial"; label = messages_get(label); if (lwc_intern_string(label, strlen(label), - &ssl_d->fields[SSLCERT_V_SERIAL].field) != - lwc_error_ok) { + &ssl_d->fields[SSLCERT_V_SERIAL].field) != + lwc_error_ok) { goto error; } @@ -235,8 +245,8 @@ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) label = "TreeviewLabelType"; label = messages_get(label); if (lwc_intern_string(label, strlen(label), - &ssl_d->fields[SSLCERT_V_TYPE].field) != - lwc_error_ok) { + &ssl_d->fields[SSLCERT_V_TYPE].field) != + lwc_error_ok) { goto error; } @@ -244,8 +254,8 @@ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) label = "TreeviewLabelValidUntil"; label = messages_get(label); if (lwc_intern_string(label, strlen(label), - &ssl_d->fields[SSLCERT_V_VALID_UNTIL].field) != - lwc_error_ok) { + &ssl_d->fields[SSLCERT_V_VALID_UNTIL].field) != + lwc_error_ok) { goto error; } @@ -253,8 +263,8 @@ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) label = "TreeviewLabelValidFrom"; label = messages_get(label); if (lwc_intern_string(label, strlen(label), - &ssl_d->fields[SSLCERT_V_VALID_FROM].field) != - lwc_error_ok) { + &ssl_d->fields[SSLCERT_V_VALID_FROM].field) != + lwc_error_ok) { goto error; } @@ -262,8 +272,8 @@ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) label = "TreeviewLabelVersion"; label = messages_get(label); if (lwc_intern_string(label, strlen(label), - &ssl_d->fields[SSLCERT_V_VERSION].field) != - lwc_error_ok) { + &ssl_d->fields[SSLCERT_V_VERSION].field) != + lwc_error_ok) { goto error; } @@ -271,8 +281,8 @@ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) label = "TreeviewLabelIssuer"; label = messages_get(label); if (lwc_intern_string(label, strlen(label), - &ssl_d->fields[SSLCERT_V_ISSUER].field) != - lwc_error_ok) { + &ssl_d->fields[SSLCERT_V_ISSUER].field) != + lwc_error_ok) { goto error; } @@ -280,8 +290,8 @@ static nserror sslcert_init_entry_fields(struct sslcert_session_data *ssl_d) label = "TreeviewLabelCertificates"; label = messages_get(label); if (lwc_intern_string(label, strlen(label), - &ssl_d->fields[SSLCERT_V_CERTIFICATES].field) != - lwc_error_ok) { + &ssl_d->fields[SSLCERT_V_CERTIFICATES].field) != + lwc_error_ok) { return false; } @@ -299,7 +309,7 @@ error: /** * Delete ssl certificate viewer entries * - * \param e Entry to delete. + * \param e Entry to delete. */ static void sslcert_viewer_delete_entry(struct sslcert_entry *e) { @@ -308,8 +318,15 @@ static void sslcert_viewer_delete_entry(struct sslcert_entry *e) } -static nserror sslcert_viewer_tree_node_folder_cb( - struct treeview_node_msg msg, void *data) +/** + * folder operation callback + * + * \param msg treeview message + * \param data message context + * \return NSERROR_OK on success + */ +static nserror +sslcert_viewer_tree_node_folder_cb(struct treeview_node_msg msg, void *data) { switch (msg.msg) { case TREE_MSG_NODE_DELETE: @@ -320,8 +337,17 @@ static nserror sslcert_viewer_tree_node_folder_cb( return NSERROR_OK; } -static nserror sslcert_viewer_tree_node_entry_cb( - struct treeview_node_msg msg, void *data) + + +/** + * node entry callback + * + * \param msg treeview message + * \param data message context + * \return NSERROR_OK on success + */ +static nserror +sslcert_viewer_tree_node_entry_cb(struct treeview_node_msg msg, void *data) { struct sslcert_entry *e = data; @@ -338,6 +364,11 @@ static nserror sslcert_viewer_tree_node_entry_cb( return NSERROR_OK; } + + +/** + * ssl certificate treeview callbacks + */ struct treeview_callback_table sslv_tree_cb_t = { .folder = sslcert_viewer_tree_node_folder_cb, .entry = sslcert_viewer_tree_node_entry_cb @@ -345,8 +376,10 @@ struct treeview_callback_table sslv_tree_cb_t = { /* Exported interface, documented in sslcert_viewer.h */ -nserror sslcert_viewer_init(struct core_window_callback_table *cw_t, - void *core_window_handle, struct sslcert_session_data *ssl_d) +nserror +sslcert_viewer_init(struct core_window_callback_table *cw_t, + void *core_window_handle, + struct sslcert_session_data *ssl_d) { nserror err; int cert_loop; @@ -369,8 +402,8 @@ nserror sslcert_viewer_init(struct core_window_callback_table *cw_t, /* Create the certificate treeview */ err = treeview_create(&ssl_d->tree, &sslv_tree_cb_t, - SSLCERT_V_N_FIELDS, ssl_d->fields, - cw_t, core_window_handle, TREEVIEW_READ_ONLY); + SSLCERT_V_N_FIELDS, ssl_d->fields, + cw_t, core_window_handle, TREEVIEW_READ_ONLY); if (err != NSERROR_OK) { ssl_d->tree = NULL; return err; @@ -393,7 +426,7 @@ nserror sslcert_viewer_init(struct core_window_callback_table *cw_t, /** * Free SSL certificate session data * - * \param ssl_d SSL certificate session data + * \param ssl_d SSL certificate session data */ static void sslcert_cleanup_session(struct sslcert_session_data *ssl_d) { @@ -444,10 +477,13 @@ nserror sslcert_viewer_fini(struct sslcert_session_data *ssl_d) /* Exported interface, documented in sslcert_viewer.h */ -nserror sslcert_viewer_create_session_data(unsigned long num, nsurl *url, - llcache_query_response cb, void *cbpw, - const struct ssl_cert_info *certs, - struct sslcert_session_data **ssl_d) +nserror +sslcert_viewer_create_session_data(unsigned long num, + nsurl *url, + llcache_query_response cb, + void *cbpw, + const struct ssl_cert_info *certs, + struct sslcert_session_data **ssl_d) { struct sslcert_session_data *data; @@ -506,9 +542,11 @@ nserror sslcert_viewer_accept(struct sslcert_session_data *ssl_d) /* Exported interface, documented in sslcert_viewer.h */ -void sslcert_viewer_redraw(struct sslcert_session_data *ssl_d, - int x, int y, struct rect *clip, - const struct redraw_context *ctx) +void +sslcert_viewer_redraw(struct sslcert_session_data *ssl_d, + int x, int y, + struct rect *clip, + const struct redraw_context *ctx) { assert(ssl_d != NULL && "sslcert_viewer_redraw() given bad session data"); @@ -518,8 +556,10 @@ void sslcert_viewer_redraw(struct sslcert_session_data *ssl_d, /* Exported interface, documented in sslcert_viewer.h */ -void sslcert_viewer_mouse_action(struct sslcert_session_data *ssl_d, - browser_mouse_state mouse, int x, int y) +void +sslcert_viewer_mouse_action(struct sslcert_session_data *ssl_d, + browser_mouse_state mouse, + int x, int y) { treeview_mouse_action(ssl_d->tree, mouse, x, y); } diff --git a/desktop/sslcert_viewer.h b/desktop/sslcert_viewer.h index 9b21cd1b6..9a57b965c 100644 --- a/desktop/sslcert_viewer.h +++ b/desktop/sslcert_viewer.h @@ -17,9 +17,13 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +/** + * \file + * SSL Certificate verification UI interface + */ -#ifndef _NETSURF_DESKTOP_SSLCERT_VIEWER_H_ -#define _NETSURF_DESKTOP_SSLCERT_VIEWER_H_ +#ifndef NETSURF_DESKTOP_SSLCERT_VIEWER_H +#define NETSURF_DESKTOP_SSLCERT_VIEWER_H #include "content/llcache.h" #include "netsurf/mouse.h" @@ -48,6 +52,7 @@ nserror sslcert_viewer_create_session_data( void *cbpw, const struct ssl_cert_info *certs, struct sslcert_session_data **ssl_d); + /** * Initialise a ssl certificate viewer from session data. * @@ -61,6 +66,7 @@ nserror sslcert_viewer_create_session_data( nserror sslcert_viewer_init(struct core_window_callback_table *cw_t, void *core_window_handle, struct sslcert_session_data *ssl_d); + /** * Finalise a ssl certificate viewer. * @@ -72,6 +78,7 @@ nserror sslcert_viewer_init(struct core_window_callback_table *cw_t, */ nserror sslcert_viewer_fini(struct sslcert_session_data *ssl_d); + /** * Reject a certificate chain. * @@ -80,6 +87,7 @@ nserror sslcert_viewer_fini(struct sslcert_session_data *ssl_d); */ nserror sslcert_viewer_reject(struct sslcert_session_data *ssl_d); + /** * Accept a certificate chain. * @@ -88,6 +96,7 @@ nserror sslcert_viewer_reject(struct sslcert_session_data *ssl_d); */ nserror sslcert_viewer_accept(struct sslcert_session_data *ssl_d); + /** * Redraw the ssl certificate viewer. * @@ -101,6 +110,7 @@ void sslcert_viewer_redraw(struct sslcert_session_data *ssl_d, int x, int y, struct rect *clip, const struct redraw_context *ctx); + /** * Handles all kinds of mouse action * @@ -112,6 +122,7 @@ void sslcert_viewer_redraw(struct sslcert_session_data *ssl_d, void sslcert_viewer_mouse_action(struct sslcert_session_data *ssl_d, browser_mouse_state mouse, int x, int y); + /** * Key press handling. * |