1/* NOCW */
2/* demos/eay/conn.c */
3
4/* A minimal program to connect to a port using the sock4a protocol.
5 *
6 * cc -I../../include conn.c -L../.. -lcrypto
7 */
8#include <stdio.h>
9#include <stdlib.h>
10#include <openssl/err.h>
11#include <openssl/bio.h>
12/* #include "proxy.h" */
13
14extern int errno;
15
16int main(argc,argv)
17int argc;
18char *argv[];
19	{
20	PROXY *pxy;
21	char *host;
22	char buf[1024*10],*p;
23	BIO *bio;
24	int i,len,off,ret=1;
25
26	if (argc <= 1)
27		host="localhost:4433";
28	else
29		host=argv[1];
30
31	/* Lets get nice error messages */
32	ERR_load_crypto_strings();
33
34	/* First, configure proxy settings */
35	pxy=PROXY_new();
36	PROXY_add_server(pxy,PROXY_PROTOCOL_SOCKS,"gromit:1080");
37
38	bio=BIO_new(BIO_s_socks4a_connect());
39
40	BIO_set_conn_hostname(bio,host);
41	BIO_set_proxies(bio,pxy);
42	BIO_set_socks_userid(bio,"eay");
43	BIO_set_nbio(bio,1);
44
45	p="GET / HTTP/1.0\r\n\r\n";
46	len=strlen(p);
47
48	off=0;
49	for (;;)
50		{
51		i=BIO_write(bio,&(p[off]),len);
52		if (i <= 0)
53			{
54			if (BIO_should_retry(bio))
55				{
56				fprintf(stderr,"write DELAY\n");
57				sleep(1);
58				continue;
59				}
60			else
61				{
62				goto err;
63				}
64			}
65		off+=i;
66		len-=i;
67		if (len <= 0) break;
68		}
69
70	for (;;)
71		{
72		i=BIO_read(bio,buf,sizeof(buf));
73		if (i == 0) break;
74		if (i < 0)
75			{
76			if (BIO_should_retry(bio))
77				{
78				fprintf(stderr,"read DELAY\n");
79				sleep(1);
80				continue;
81				}
82			goto err;
83			}
84		fwrite(buf,1,i,stdout);
85		}
86
87	ret=1;
88
89	if (0)
90		{
91err:
92		if (ERR_peek_error() == 0) /* system call error */
93			{
94			fprintf(stderr,"errno=%d ",errno);
95			perror("error");
96			}
97		else
98			ERR_print_errors_fp(stderr);
99		}
100	BIO_free_all(bio);
101	if (pxy != NULL) PROXY_free(pxy);
102	exit(!ret);
103	return(ret);
104	}
105
106