| /* Copyright (c) 2014 The Regents of the University of California | 
 |  * Barret Rhoden <brho@cs.berkeley.edu> | 
 |  * See LICENSE for details. | 
 |  * | 
 |  * Simple web client, gets a single page.  Used for debugging mostly. */ | 
 |  | 
 | #include <stdlib.h> | 
 | #include <stdio.h> | 
 | #include <string.h> | 
 | #include <unistd.h> | 
 | #include <assert.h> | 
 | #include <iplib/iplib.h> | 
 | #include <parlib/net.h> | 
 |  | 
 | /* simple test, gets a single web page.  no url parsing, no timeout detection, | 
 |  * etc.  pass it the IP addr and page to fetch. | 
 |  * | 
 |  * check out http://www.d.umn.edu/~gshute/net/http-script.html for some info. */ | 
 | int main(int argc, char *argv[]) | 
 | { | 
 | 	char *host, *page, *port; | 
 | 	int dfd, ret; | 
 | 	char buf[256]; | 
 | 	char addr[256]; | 
 | 	host = "185.199.109.153"; | 
 | 	page = "files/test.html"; | 
 | 	port = "80"; | 
 |  | 
 | 	if (argc > 1) | 
 | 		host = argv[1]; | 
 | 	if (argc > 2) | 
 | 		port = argv[2]; | 
 | 	if (argc > 3) | 
 | 		page = argv[3]; | 
 |  | 
 | 	printf("FYI, Usage: %s [HOST [PORT [PAGE]]]\n", argv[0]); | 
 |  | 
 | 	printf("Trying to access http://%s:%s/%s\n", host, port, page); | 
 | 	/* manually making our own addr (no mkaddr, which was racy anyway) */ | 
 | 	ret = snprintf(addr, sizeof(addr), "tcp!%s!%s", host, port); | 
 | 	if (snprintf_error(ret, sizeof(addr))) { | 
 | 		perror("Addr string too long"); | 
 | 		exit(-1); | 
 | 	} | 
 | 	dfd = dial9(addr, 0, 0, 0, 0); | 
 | 	if (dfd < 0) { | 
 | 		perror("Bad Data FD"); | 
 | 		exit(-1); | 
 | 	} | 
 | 	/* short get style */ | 
 | 	snprintf(buf, sizeof(buf), | 
 | 		 "GET /%s HTTP/1.1\r\nHost: akaros.org\r\nConnection: close\r\n\r\n", | 
 | 		 page); | 
 | 	ret = write(dfd, buf, strlen(buf)); | 
 | 	if (ret < 0) { | 
 | 		perror("Write"); | 
 | 		exit(-1); | 
 | 	} | 
 | 	/* buf - 1, to leave room for a \0 when we print */ | 
 | 	while ((ret = read(dfd, buf, sizeof(buf) - 1)) > 0) { | 
 | 		assert(ret < sizeof(buf)); | 
 | 		/* trim to print only what we received */ | 
 | 		buf[ret] = 0; | 
 | 		printf("%s", buf); | 
 | 	} | 
 | } |