void address_list_release (struct address_list *al) { --al->refcount; DEBUGP (("Releasing 0x%0*lx (new refcount %d).\n", PTR_FORMAT (al), al->refcount)); if (al->refcount <= 0) { DEBUGP (("Deleting unused 0x%0*lx.\n", PTR_FORMAT (al))); address_list_delete (al); } }
bool ssl_connect (int fd) { SSL *conn; struct openssl_transport_context *ctx; DEBUGP (("Initiating SSL handshake.\n")); assert (ssl_ctx != NULL); conn = SSL_new (ssl_ctx); if (!conn) goto error; if (!SSL_set_fd (conn, fd)) goto error; SSL_set_connect_state (conn); if (SSL_connect (conn) <= 0 || conn->state != SSL_ST_OK) goto error; ctx = xnew0 (struct openssl_transport_context); ctx->conn = conn; /* Register FD with Wget's transport layer, i.e. arrange that our functions are used for reading, writing, and polling. */ fd_register_transport (fd, &openssl_transport, ctx); DEBUGP (("Handshake successful; connected socket %d to SSL handle 0x%0*lx\n", fd, PTR_FORMAT (conn))); return true; error: DEBUGP (("SSL handshake failed.\n")); print_errors (); if (conn) SSL_free (conn); return false; }
void xmalloc_debug_stats(void) { #ifdef DEBUG_MALLOC int i; fprintf(stderr, "\nMalloc Size(bytes): \t%lld\n" "Free size(bytes):\t%lld\n" "Balance size(bytes):\t%lld\n" "Malloc count:\t%d\n" "Free count:\t%d\n" "Balance count:\t%d\n\n", malloc_size, free_size, malloc_size - free_size, malloc_count, free_count, malloc_count - free_count); for (i = 0; i < SZ; i++) { if (malloc_table[i].ptr != NULL) { fprintf(stderr, "leak(%x%0*lx size :%u malloc at %s:%d\n", PTR_FORMAT(malloc_table[i].ptr), malloc_table[i].size, malloc_table[i].file, malloc_table[i].line); } } #endif }
bool ssl_connect_wget (int fd, const char *hostname) { SSL *conn; struct scwt_context scwt_ctx; struct openssl_transport_context *ctx; DEBUGP (("Initiating SSL handshake.\n")); assert (ssl_ctx != NULL); conn = SSL_new (ssl_ctx); if (!conn) goto error; #if OPENSSL_VERSION_NUMBER >= 0x0090806fL && !defined(OPENSSL_NO_TLSEXT) /* If the SSL library was build with support for ServerNameIndication then use it whenever we have a hostname. If not, don't, ever. */ if (! is_valid_ip_address (hostname)) { if (! SSL_set_tlsext_host_name (conn, hostname)) { DEBUGP (("Failed to set TLS server-name indication.")); goto error; } } #endif #ifndef FD_TO_SOCKET # define FD_TO_SOCKET(X) (X) #endif if (!SSL_set_fd (conn, FD_TO_SOCKET (fd))) goto error; SSL_set_connect_state (conn); scwt_ctx.ssl = conn; if (run_with_timeout(opt.read_timeout, ssl_connect_with_timeout_callback, &scwt_ctx)) { DEBUGP (("SSL handshake timed out.\n")); goto timeout; } if (scwt_ctx.result <= 0 || conn->state != SSL_ST_OK) goto error; ctx = xnew0 (struct openssl_transport_context); ctx->conn = conn; /* Register FD with Wget's transport layer, i.e. arrange that our functions are used for reading, writing, and polling. */ fd_register_transport (fd, &openssl_transport, ctx); DEBUGP (("Handshake successful; connected socket %d to SSL handle 0x%0*lx\n", fd, PTR_FORMAT (conn))); return true; error: DEBUGP (("SSL handshake failed.\n")); print_errors (); timeout: if (conn) SSL_free (conn); return false; }
static void openssl_close (int fd, void *arg) { struct openssl_transport_context *ctx = arg; SSL *conn = ctx->conn; SSL_shutdown (conn); SSL_free (conn); xfree (ctx->last_error); xfree (ctx); close (fd); DEBUGP (("Closed %d/SSL 0x%0*lx\n", fd, PTR_FORMAT (conn))); }
static void openssl_close (int fd, void *arg) { struct openssl_transport_context *ctx = arg; SSL *conn = ctx->conn; SSL_shutdown (conn); SSL_free (conn); xfree_null (ctx->last_error); xfree (ctx); #if defined(WINDOWS) || defined(MSDOS) closesocket (fd); #else close (fd); #endif DEBUGP (("Closed %d/SSL 0x%0*lx\n", fd, PTR_FORMAT (conn))); }