diff options
Diffstat (limited to 'openssl/demos/bio/sconnect.c')
-rw-r--r-- | openssl/demos/bio/sconnect.c | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/openssl/demos/bio/sconnect.c b/openssl/demos/bio/sconnect.c deleted file mode 100644 index e6eddb1..0000000 --- a/openssl/demos/bio/sconnect.c +++ /dev/null @@ -1,113 +0,0 @@ -/* NOCW */ -/* demos/bio/sconnect.c */ - -/*- - * A minimal program to do SSL to a passed host and port. - * It is actually using non-blocking IO but in a very simple manner - * sconnect host:port - it does a 'GET / HTTP/1.0' - * - * cc -I../../include sconnect.c -L../.. -lssl -lcrypto - */ -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <openssl/err.h> -#include <openssl/ssl.h> - -extern int errno; - -int main(argc, argv) -int argc; -char *argv[]; -{ - char *host; - BIO *out; - char buf[1024 * 10], *p; - SSL_CTX *ssl_ctx = NULL; - SSL *ssl; - BIO *ssl_bio; - int i, len, off, ret = 1; - - if (argc <= 1) - host = "localhost:4433"; - else - host = argv[1]; - -#ifdef WATT32 - dbug_init(); - sock_init(); -#endif - - /* Lets get nice error messages */ - SSL_load_error_strings(); - - /* Setup all the global SSL stuff */ - OpenSSL_add_ssl_algorithms(); - ssl_ctx = SSL_CTX_new(SSLv23_client_method()); - - /* Lets make a SSL structure */ - ssl = SSL_new(ssl_ctx); - SSL_set_connect_state(ssl); - - /* Use it inside an SSL BIO */ - ssl_bio = BIO_new(BIO_f_ssl()); - BIO_set_ssl(ssl_bio, ssl, BIO_CLOSE); - - /* Lets use a connect BIO under the SSL BIO */ - out = BIO_new(BIO_s_connect()); - BIO_set_conn_hostname(out, host); - BIO_set_nbio(out, 1); - out = BIO_push(ssl_bio, out); - - p = "GET / HTTP/1.0\r\n\r\n"; - len = strlen(p); - - off = 0; - for (;;) { - i = BIO_write(out, &(p[off]), len); - if (i <= 0) { - if (BIO_should_retry(out)) { - fprintf(stderr, "write DELAY\n"); - sleep(1); - continue; - } else { - goto err; - } - } - off += i; - len -= i; - if (len <= 0) - break; - } - - for (;;) { - i = BIO_read(out, buf, sizeof(buf)); - if (i == 0) - break; - if (i < 0) { - if (BIO_should_retry(out)) { - fprintf(stderr, "read DELAY\n"); - sleep(1); - continue; - } - goto err; - } - fwrite(buf, 1, i, stdout); - } - - ret = 1; - - if (0) { - err: - if (ERR_peek_error() == 0) { /* system call error */ - fprintf(stderr, "errno=%d ", errno); - perror("error"); - } else - ERR_print_errors_fp(stderr); - } - BIO_free_all(out); - if (ssl_ctx != NULL) - SSL_CTX_free(ssl_ctx); - exit(!ret); - return (ret); -} |