forked from cory/tildefriends
		
	Some http client fixes.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@3366 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		| @@ -1,6 +1,11 @@ | |||||||
| "use strict"; | "use strict"; | ||||||
|  |  | ||||||
| //! {"permissions": ["network"]} | //! { | ||||||
|  | //!   "permissions": ["network"], | ||||||
|  | //!   "require": ["libencoding"] | ||||||
|  | //! } | ||||||
|  |  | ||||||
|  | require("libencoding"); | ||||||
|  |  | ||||||
| function parseUrl(url) { | function parseUrl(url) { | ||||||
| 	// XXX: Hack. | 	// XXX: Hack. | ||||||
| @@ -37,33 +42,32 @@ function parseResponse(data) { | |||||||
|  |  | ||||||
| function get(url) { | function get(url) { | ||||||
| 	return new Promise(async function(resolve, reject) { | 	return new Promise(async function(resolve, reject) { | ||||||
| 		try { | 		let parsed = parseUrl(url); | ||||||
| 			let parsed = parseUrl(url); | 		if (!parsed) { | ||||||
| 			if (!parsed) { | 			throw new Error("Failed to parse: " + url); | ||||||
| 				throw new Error("Failed to parse: " + url); |  | ||||||
| 			} |  | ||||||
| 			let buffer = ""; |  | ||||||
|  |  | ||||||
| 			let socket = await network.newConnection(); |  | ||||||
|  |  | ||||||
| 			await socket.connect(parsed.host, parsed.port); |  | ||||||
| 			socket.read(function(data) { |  | ||||||
| 				if (data) { |  | ||||||
| 					buffer += data; |  | ||||||
| 				} else { |  | ||||||
| 					resolve(parseResponse(buffer)); |  | ||||||
| 				} |  | ||||||
| 			}); |  | ||||||
|  |  | ||||||
| 			if (parsed.port == 443) { |  | ||||||
| 				await socket.startTls(); |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			socket.write(`GET ${parsed.path} HTTP/1.0\r\nHost: ${parsed.host}\r\nConnection: close\r\n\r\n`); |  | ||||||
| 			//socket.close(); |  | ||||||
| 		} catch(error) { |  | ||||||
| 			reject(error); |  | ||||||
| 		} | 		} | ||||||
|  | 		let buffer = new Uint8Array(0); | ||||||
|  |  | ||||||
|  | 		let socket = await network.newConnection(); | ||||||
|  |  | ||||||
|  | 		await socket.connect(parsed.host, parsed.port); | ||||||
|  | 		socket.read(function(data) { | ||||||
|  | 			if (data) { | ||||||
|  | 				let newBuffer = new Uint8Array(buffer.length + data.length); | ||||||
|  | 				newBuffer.set(buffer, 0); | ||||||
|  | 				newBuffer.set(data, buffer.length); | ||||||
|  | 				buffer = newBuffer; | ||||||
|  | 			} else { | ||||||
|  | 				resolve(parseResponse(new TextDecoder("UTF-8").decode(buffer))); | ||||||
|  | 				socket.close(); | ||||||
|  | 			} | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		if (parsed.port == 443) { | ||||||
|  | 			await socket.startTls(); | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		socket.write(`GET ${parsed.path} HTTP/1.0\r\nHost: ${parsed.host}\r\nConnection: close\r\n\r\n`); | ||||||
| 	}); | 	}); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| "use strict"; | "use strict"; | ||||||
|  |  | ||||||
| //! {"category": "libraries", "require": ["libhttp", "libxml"], "permissions": ["network"]} | //! {"category": "libraries", "require": ["libencoding", "libhttp", "libxml"], "permissions": ["network"]} | ||||||
|  |  | ||||||
| let libxml = require("libxml"); | let libxml = require("libxml"); | ||||||
| let libhttp = require("libhttp"); | let libhttp = require("libhttp"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user