forked from cory/tildefriends
		
	Simplify magic bytes lookup slightly.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4296 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		
							
								
								
									
										65
									
								
								core/core.js
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								core/core.js
									
									
									
									
									
								
							| @@ -7,6 +7,29 @@ let gProcessIndex = 0; | |||||||
| let gProcesses = {}; | let gProcesses = {}; | ||||||
| let gStatsTimer = false; | let gStatsTimer = false; | ||||||
|  |  | ||||||
|  | const k_mime_types = { | ||||||
|  | 	'json': 'text/json', | ||||||
|  | 	'js': 'text/javascript', | ||||||
|  | 	'html': 'text/html', | ||||||
|  | 	'css': 'text/css', | ||||||
|  | 	'map': 'application/json', | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | const k_magic_bytes = [ | ||||||
|  | 	{bytes: [0xff, 0xd8, 0xff, 0xdb], type: 'image/jpeg'}, | ||||||
|  | 	{bytes: [0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01], type: 'image/jpeg'}, | ||||||
|  | 	{bytes: [0xff, 0xd8, 0xff, 0xee], type: 'image/jpeg'}, | ||||||
|  | 	{bytes: [0xff, 0xd8, 0xff, 0xe1, null, null, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00], type: 'image/jpeg'}, | ||||||
|  | 	{bytes: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], type: 'image/png'}, | ||||||
|  | 	{bytes: [0x47, 0x49, 0x46, 0x38, 0x37, 0x61], type: 'image/gif'}, | ||||||
|  | 	{bytes: [0x47, 0x49, 0x46, 0x38, 0x39, 0x61], type: 'image/gif'}, | ||||||
|  | 	{bytes: [0x52, 0x49, 0x46, 0x46, null, null, null, null, 0x57, 0x45, 0x42, 0x50], type: 'image/webp'}, | ||||||
|  | 	{bytes: [0x3c, 0x73, 0x76, 0x67], type: 'image/svg+xml'}, | ||||||
|  | 	{bytes: [null, null, null, null, 0x66, 0x74, 0x79, 0x70, 0x6d, 0x70, 0x34, 0x32], type: 'audio/mpeg'}, | ||||||
|  | 	{bytes: [null, null, null, null, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6f, 0x6d], type: 'video/mp4'}, | ||||||
|  | 	{bytes: [null, null, null, null, 0x66, 0x74, 0x79, 0x70, 0x6d, 0x70, 0x34, 0x32], type: 'video/mp4'}, | ||||||
|  | ]; | ||||||
|  |  | ||||||
| const k_global_settings = { | const k_global_settings = { | ||||||
| 	index: { | 	index: { | ||||||
| 		type: 'string', | 		type: 'string', | ||||||
| @@ -488,14 +511,6 @@ async function staticFileHandler(request, response, blobId, uri) { | |||||||
| 	response.end("File not found"); | 	response.end("File not found"); | ||||||
| } | } | ||||||
|  |  | ||||||
| const k_mime_types = { |  | ||||||
| 	'json': 'text/json', |  | ||||||
| 	'js': 'text/javascript', |  | ||||||
| 	'html': 'text/html', |  | ||||||
| 	'css': 'text/css', |  | ||||||
| 	'map': 'application/json', |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| async function staticDirectoryHandler(request, response, directory, uri) { | async function staticDirectoryHandler(request, response, directory, uri) { | ||||||
| 	let filename = uri || 'index.html'; | 	let filename = uri || 'index.html'; | ||||||
| 	if (filename.indexOf('..') != -1) { | 	if (filename.indexOf('..') != -1) { | ||||||
| @@ -539,36 +554,16 @@ async function wellKnownHandler(request, response, path) { | |||||||
|  |  | ||||||
| function sendData(response, data, type, headers) { | function sendData(response, data, type, headers) { | ||||||
| 	if (data) { | 	if (data) { | ||||||
| 		if (startsWithBytes(data, [0xff, 0xd8, 0xff, 0xdb]) || | 		for (let magic of k_magic_bytes) { | ||||||
| 			startsWithBytes(data, [0xff, 0xd8, 0xff, 0xe0, 0x00, 0x10, 0x4a, 0x46, 0x49, 0x46, 0x00, 0x01]) || | 			if (startsWithBytes(data, magic.bytes)) { | ||||||
| 			startsWithBytes(data, [0xff, 0xd8, 0xff, 0xee]) || | 				response.writeHead(200, Object.assign({"Content-Type": magic.content_type, "Content-Length": data.byteLength}, headers || {})); | ||||||
| 			startsWithBytes(data, [0xff, 0xd8, 0xff, 0xe1, null, null, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00])) { |  | ||||||
| 			response.writeHead(200, Object.assign({"Content-Type": "image/jpeg", "Content-Length": data.byteLength}, headers || {})); |  | ||||||
| 				response.end(data); | 				response.end(data); | ||||||
| 		} else if (startsWithBytes(data, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a])) { | 				return; | ||||||
| 			response.writeHead(200, Object.assign({"Content-Type": "image/png", "Content-Length": data.byteLength}, headers || {})); | 			} | ||||||
| 			response.end(data); | 		} | ||||||
| 		} else if (startsWithBytes(data, [0x47, 0x49, 0x46, 0x38, 0x37, 0x61]) || |  | ||||||
| 			startsWithBytes(data, [0x47, 0x49, 0x46, 0x38, 0x39, 0x61])) { |  | ||||||
| 			response.writeHead(200, Object.assign({"Content-Type": "image/gif", "Content-Length": data.byteLength}, headers || {})); |  | ||||||
| 			response.end(data); |  | ||||||
| 		} else if (startsWithBytes(data, [0x52, 0x49, 0x46, 0x46, null, null, null, null, 0x57, 0x45, 0x42, 0x50])) { |  | ||||||
| 			response.writeHead(200, Object.assign({"Content-Type": "image/webp", "Content-Length": data.byteLength}, headers || {})); |  | ||||||
| 			response.end(data); |  | ||||||
| 		} else if (startsWithBytes(data, [0x3c, 0x73, 0x76, 0x67])) { |  | ||||||
| 			response.writeHead(200, Object.assign({"Content-Type": "image/svg+xml", "Content-Length": data.byteLength}, headers || {})); |  | ||||||
| 			response.end(data); |  | ||||||
| 		} else if (startsWithBytes(data, [null, null, null, null, 0x66, 0x74, 0x79, 0x70, 0x6d, 0x70, 0x34, 0x32])) { |  | ||||||
| 			response.writeHead(200, Object.assign({"Content-Type": "audio/mpeg", "Content-Length": data.byteLength}, headers || {})); |  | ||||||
| 			response.end(data); |  | ||||||
| 		} else if (startsWithBytes(data, [null, null, null, null, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6f, 0x6d]) || |  | ||||||
| 			startsWithBytes(data, [null, null, null, null, 0x66, 0x74, 0x79, 0x70, 0x6d, 0x70, 0x34, 0x32])) { |  | ||||||
| 			response.writeHead(200, Object.assign({"Content-Type": "video/mp4", "Content-Length": data.byteLength}, headers || {})); |  | ||||||
| 			response.end(data); |  | ||||||
| 		} else { |  | ||||||
| 		response.writeHead(200, Object.assign({"Content-Type": type || "application/binary", "Content-Length": data.byteLength}, headers || {})); | 		response.writeHead(200, Object.assign({"Content-Type": type || "application/binary", "Content-Length": data.byteLength}, headers || {})); | ||||||
| 		response.end(data); | 		response.end(data); | ||||||
| 		} |  | ||||||
| 	} else { | 	} else { | ||||||
| 		response.writeHead(404, Object.assign({"Content-Type": "text/plain; charset=utf-8", "Content-Length": "File not found".length}, headers || {})); | 		response.writeHead(404, Object.assign({"Content-Type": "text/plain; charset=utf-8", "Content-Length": "File not found".length}, headers || {})); | ||||||
| 		response.end("File not found"); | 		response.end("File not found"); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user