xref: /csrg-svn/usr.bin/tn3270/api/api_bsd.c (revision 31459)
1*31459Sminshall #include <sys/types.h>
2*31459Sminshall #include <sys/socket.h>
3*31459Sminshall #include <netinet/in.h>
4*31459Sminshall #include <netdb.h>
5*31459Sminshall #include <stdio.h>
6*31459Sminshall 
7*31459Sminshall #include "../api/api.h"
8*31459Sminshall 
9*31459Sminshall 
10*31459Sminshall static int sock = -1;
11*31459Sminshall 
12*31459Sminshall api_open_api(string)
13*31459Sminshall char	*string;		/* if non-zero, where to connect to */
14*31459Sminshall {
15*31459Sminshall     struct sockaddr_in server;
16*31459Sminshall     struct hostent *hp;
17*31459Sminshall     char *getenv();
18*31459Sminshall     char thehostname[100];
19*31459Sminshall     int port;
20*31459Sminshall 
21*31459Sminshall     if (string == 0) {
22*31459Sminshall 	string = getenv("API3270");	/* Get API */
23*31459Sminshall 	if (string == 0) {
24*31459Sminshall 	    fprintf(stderr,
25*31459Sminshall 			"API3270 environmental variable not set - no API.\n");
26*31459Sminshall 	    return -1;			/* Nothing */
27*31459Sminshall 	}
28*31459Sminshall     }
29*31459Sminshall 
30*31459Sminshall     if (sscanf(string, "%[^:]:%d", thehostname, &port) != 2) {
31*31459Sminshall 	fprintf(stderr, "API3270 environmental variable has bad format.\n");
32*31459Sminshall 	return -1;
33*31459Sminshall     }
34*31459Sminshall     /* Now, try to connect */
35*31459Sminshall     sock = socket(AF_INET, SOCK_STREAM, 0);
36*31459Sminshall     if (sock < 0) {
37*31459Sminshall 	perror("opening API socket");
38*31459Sminshall 	return -1;
39*31459Sminshall     }
40*31459Sminshall     server.sin_family = AF_INET;
41*31459Sminshall     hp = gethostbyname(thehostname);
42*31459Sminshall     if (hp == 0) {
43*31459Sminshall 	fprintf(stderr, "%s specifies bad host name.\n", string);
44*31459Sminshall 	return -1;
45*31459Sminshall     }
46*31459Sminshall     bcopy(hp->h_addr, &server.sin_addr, hp->h_length);
47*31459Sminshall     server.sin_port = htons(port);
48*31459Sminshall 
49*31459Sminshall     if (connect(sock, &server, sizeof server) < 0) {
50*31459Sminshall 	perror("connecting to API server");
51*31459Sminshall 	return -1;
52*31459Sminshall     }
53*31459Sminshall     /* YEAH */
54*31459Sminshall     return 0;		/* Happiness! */
55*31459Sminshall }
56*31459Sminshall 
57*31459Sminshall 
58*31459Sminshall api_exch_api(regs, sregs)
59*31459Sminshall union REGS *regs;
60*31459Sminshall struct SREGS *sregs;
61*31459Sminshall {
62*31459Sminshall }
63