Ejemplo n.º 1
0
// Close closes the underlying connection.
// Close will return an error if it is invoked on a partially or already closed connection.
func (h HTTPSConn) Close() error {
	if (h.ctx != nil) && (h.sslInst != nil) && (h.sslBio != nil) {
		SSL_CTX_free(h.ctx)
		h.ctx = nil
		SSL_free(h.sslInst)
		h.sslInst = nil
		bio.BIO_free_all(h.sslBio)
		h.sslBio = nil
		return nil
	}

	if (h.ctx != nil) || (h.sslInst != nil) || (h.sslBio != nil) {
		return errors.New("HTTPSConn in partially closed state, not all objects freed, unable to close further")
	}

	return errors.New("Attempted to close already closed HTTPSConn")
}
Ejemplo n.º 2
0
			var sslInst SSL
			var conn bio.BIO
			var host, hostport string

			BeforeEach(func() {
				ctx = SSL_CTX_new(SSLv23_method())
				Expect(ctx).NotTo(BeNil())
				SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, nil)
				SSL_CTX_set_verify_depth(ctx, 4)
				Expect(SSL_CTX_load_verify_locations(ctx, "", "/etc/ssl/certs")).To(Equal(1))
				sslInst = SSL_new(ctx)
				Expect(sslInst).NotTo(BeNil())
			})

			AfterEach(func() {
				bio.BIO_free_all(conn)
				SSL_free(sslInst)
				SSL_CTX_free(ctx)
			})

			It("Connects to a known site", func() {
				host = "www.random.org"
				hostport = "www.random.org:443"

				/* Setup the connect BIO, since we're a client */
				conn = bio.BIO_new_ssl_connect(ctx)
				Expect(conn).NotTo(BeNil())
				Expect(bio.BIO_set_conn_hostname(conn, hostport)).To(BeEquivalentTo(1))
				Expect(bio.BIO_get_conn_hostname(conn)).To(Equal(hostport))

				/* Setup SSL */