Update Files
This commit is contained in:
		
							
								
								
									
										37
									
								
								Kha/Tools/macos/std/eval/_std/EReg.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								Kha/Tools/macos/std/eval/_std/EReg.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,37 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
// We need this class so that calls to the empty standard implementations
 | 
			
		||||
// don't get optimized away.
 | 
			
		||||
@:coreApi
 | 
			
		||||
extern class EReg {
 | 
			
		||||
	function new(r:String, opt:String):Void;
 | 
			
		||||
	function match(s:String):Bool;
 | 
			
		||||
	function matched(n:Int):String;
 | 
			
		||||
	function matchedLeft():String;
 | 
			
		||||
	function matchedRight():String;
 | 
			
		||||
	function matchedPos():{pos:Int, len:Int};
 | 
			
		||||
	function matchSub(s:String, pos:Int, len:Int = -1):Bool;
 | 
			
		||||
	function split(s:String):Array<String>;
 | 
			
		||||
	function replace(s:String, by:String):String;
 | 
			
		||||
	function map(s:String, f:EReg->String):String;
 | 
			
		||||
	static function escape(s:String):String;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								Kha/Tools/macos/std/eval/_std/StringBuf.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Kha/Tools/macos/std/eval/_std/StringBuf.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
@:coreApi
 | 
			
		||||
extern class StringBuf {
 | 
			
		||||
	var length(get, never):Int;
 | 
			
		||||
	function new():Void;
 | 
			
		||||
	private function get_length():Int;
 | 
			
		||||
	function add<T>(x:T):Void;
 | 
			
		||||
	function addChar(c:Int):Void;
 | 
			
		||||
	function addSub(s:String, pos:Int, ?len:Int):Void;
 | 
			
		||||
	function toString():String;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										96
									
								
								Kha/Tools/macos/std/eval/_std/Sys.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								Kha/Tools/macos/std/eval/_std/Sys.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,96 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import haxe.SysTools;
 | 
			
		||||
 | 
			
		||||
@:require(sys)
 | 
			
		||||
@:coreApi
 | 
			
		||||
class Sys {
 | 
			
		||||
	extern static public function print(v:Dynamic):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function println(v:Dynamic):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function args():Array<String>;
 | 
			
		||||
 | 
			
		||||
	extern static public function getEnv(s:String):String;
 | 
			
		||||
 | 
			
		||||
	extern static public function putEnv(s:String, v:String):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function environment():Map<String, String>;
 | 
			
		||||
 | 
			
		||||
	extern static public function sleep(seconds:Float):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function setTimeLocale(loc:String):Bool;
 | 
			
		||||
 | 
			
		||||
	extern static public function getCwd():String;
 | 
			
		||||
 | 
			
		||||
	extern static public function setCwd(s:String):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function systemName():String;
 | 
			
		||||
 | 
			
		||||
	extern static function _command(cmd:String):Int;
 | 
			
		||||
 | 
			
		||||
	static public function command(cmd:String, ?args:Array<String>):Int {
 | 
			
		||||
		if (args == null) {
 | 
			
		||||
			return _command(cmd);
 | 
			
		||||
		} else {
 | 
			
		||||
			switch (systemName()) {
 | 
			
		||||
				case "Windows":
 | 
			
		||||
					cmd = [
 | 
			
		||||
						for (a in [StringTools.replace(cmd, "/", "\\")].concat(args))
 | 
			
		||||
							SysTools.quoteWinArg(a, true)
 | 
			
		||||
					].join(" ");
 | 
			
		||||
					return _command(cmd);
 | 
			
		||||
				case _:
 | 
			
		||||
					cmd = [cmd].concat(args).map(SysTools.quoteUnixArg).join(" ");
 | 
			
		||||
					return _command(cmd);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static public function executablePath():String {
 | 
			
		||||
		return programPath();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	extern static public function exit(code:Int):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function time():Float;
 | 
			
		||||
 | 
			
		||||
	extern static public function cpuTime():Float;
 | 
			
		||||
 | 
			
		||||
	extern static public function programPath():String;
 | 
			
		||||
 | 
			
		||||
	extern static public function getChar(echo:Bool):Int;
 | 
			
		||||
 | 
			
		||||
	extern static public function stdin():haxe.io.Input;
 | 
			
		||||
 | 
			
		||||
	extern static public function stdout():haxe.io.Output;
 | 
			
		||||
 | 
			
		||||
	extern static public function stderr():haxe.io.Output;
 | 
			
		||||
 | 
			
		||||
	static function __init__():Void {
 | 
			
		||||
		// This nonsense causes the classes to be loaded. Otherwise they might not make
 | 
			
		||||
		// it into the interpreter, and then stderr() et. al. don't work.
 | 
			
		||||
		var _ = (null : sys.io.FileOutput);
 | 
			
		||||
		var _ = (null : sys.io.FileInput);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										89
									
								
								Kha/Tools/macos/std/eval/_std/haxe/Exception.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								Kha/Tools/macos/std/eval/_std/haxe/Exception.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,89 @@
 | 
			
		||||
package haxe;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class Exception {
 | 
			
		||||
	public var message(get,never):String;
 | 
			
		||||
	public var stack(get,never):CallStack;
 | 
			
		||||
	public var previous(get,never):Null<Exception>;
 | 
			
		||||
	public var native(get,never):Any;
 | 
			
		||||
 | 
			
		||||
	@:noCompletion var __exceptionMessage:String;
 | 
			
		||||
	@:noCompletion var __exceptionStack:Null<CallStack>;
 | 
			
		||||
	@:noCompletion var __nativeStack:CallStack;
 | 
			
		||||
	@:noCompletion @:ifFeature("haxe.Exception.get_stack") var __skipStack:Int = 0;
 | 
			
		||||
	@:noCompletion var __nativeException:Any;
 | 
			
		||||
	@:noCompletion var __previousException:Null<Exception>;
 | 
			
		||||
 | 
			
		||||
	static function caught(value:Any):Exception {
 | 
			
		||||
		if(Std.isOfType(value, Exception)) {
 | 
			
		||||
			return value;
 | 
			
		||||
		} else {
 | 
			
		||||
			return new ValueException(value, null, value);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static function thrown(value:Any):Any {
 | 
			
		||||
		if(Std.isOfType(value, Exception)) {
 | 
			
		||||
			return (value:Exception).native;
 | 
			
		||||
		} else {
 | 
			
		||||
			var e = new ValueException(value);
 | 
			
		||||
			e.__shiftStack();
 | 
			
		||||
			return e;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function new(message:String, ?previous:Exception, ?native:Any) {
 | 
			
		||||
		__exceptionMessage = message;
 | 
			
		||||
		__previousException = previous;
 | 
			
		||||
		if(native != null) {
 | 
			
		||||
			__nativeStack = NativeStackTrace.exceptionStack();
 | 
			
		||||
			__nativeException = native;
 | 
			
		||||
		} else {
 | 
			
		||||
			__nativeStack = NativeStackTrace.callStack();
 | 
			
		||||
			__nativeException = this;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function unwrap():Any {
 | 
			
		||||
		return __nativeException;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:ifFeature("haxe.Exception.thrown")
 | 
			
		||||
	public function toString():String {
 | 
			
		||||
		return message;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function details():String {
 | 
			
		||||
		return inline CallStack.exceptionToString(this);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:noCompletion
 | 
			
		||||
	@:ifFeature("haxe.Exception.get_stack")
 | 
			
		||||
	inline function __shiftStack():Void {
 | 
			
		||||
		__skipStack++;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function get_message():String {
 | 
			
		||||
		return __exceptionMessage;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function get_previous():Null<Exception> {
 | 
			
		||||
		return __previousException;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	final function get_native():Any {
 | 
			
		||||
		return __nativeException;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function get_stack():CallStack {
 | 
			
		||||
		return switch __exceptionStack {
 | 
			
		||||
			case null:
 | 
			
		||||
				__exceptionStack = if(__skipStack > 0) {
 | 
			
		||||
					__nativeStack.asArray().slice(__skipStack);
 | 
			
		||||
				} else {
 | 
			
		||||
					__nativeStack;
 | 
			
		||||
				}
 | 
			
		||||
			case s: s;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								Kha/Tools/macos/std/eval/_std/haxe/NativeStackTrace.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								Kha/Tools/macos/std/eval/_std/haxe/NativeStackTrace.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
package haxe;
 | 
			
		||||
 | 
			
		||||
import haxe.CallStack.StackItem;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
	Do not use manually.
 | 
			
		||||
**/
 | 
			
		||||
@:dox(hide)
 | 
			
		||||
@:noCompletion
 | 
			
		||||
class NativeStackTrace {
 | 
			
		||||
	@:ifFeature('haxe.NativeStackTrace.exceptionStack')
 | 
			
		||||
	static public inline function saveStack(exception:Any):Void {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static public function callStack():Array<StackItem> {
 | 
			
		||||
		return _callStack();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//implemented in the compiler
 | 
			
		||||
	static function _callStack():Array<StackItem> {
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//implemented in the compiler
 | 
			
		||||
	static public function exceptionStack():Array<StackItem> {
 | 
			
		||||
		return null;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static public inline function toHaxe(stack:Array<StackItem>, skip:Int = 0):Array<StackItem> {
 | 
			
		||||
		return skip > 0 ? stack.slice(skip) : stack;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								Kha/Tools/macos/std/eval/_std/haxe/Resource.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								Kha/Tools/macos/std/eval/_std/haxe/Resource.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
extern class Resource {
 | 
			
		||||
	static function listNames():Array<String>;
 | 
			
		||||
	static function getString(name:String):String;
 | 
			
		||||
	static function getBytes(name:String):haxe.io.Bytes;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								Kha/Tools/macos/std/eval/_std/haxe/Utf8.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Kha/Tools/macos/std/eval/_std/haxe/Utf8.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
@:deprecated('haxe.Utf8 is deprecated. Use UnicodeString instead.')
 | 
			
		||||
extern class Utf8 {
 | 
			
		||||
	function new(?size:Int):Void;
 | 
			
		||||
	function addChar(c:Int):Void;
 | 
			
		||||
	function toString():String;
 | 
			
		||||
	static function iter(s:String, chars:Int->Void):Void;
 | 
			
		||||
	static function encode(s:String):String;
 | 
			
		||||
	static function decode(s:String):String;
 | 
			
		||||
	static function charCodeAt(s:String, index:Int):Int;
 | 
			
		||||
	static function validate(s:String):Bool;
 | 
			
		||||
	static function length(s:String):Int;
 | 
			
		||||
	static function compare(a:String, b:String):Int;
 | 
			
		||||
	static function sub(s:String, pos:Int, len:Int):String;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								Kha/Tools/macos/std/eval/_std/haxe/io/Bytes.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Kha/Tools/macos/std/eval/_std/haxe/io/Bytes.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.io;
 | 
			
		||||
 | 
			
		||||
// @:coreApi
 | 
			
		||||
extern class Bytes {
 | 
			
		||||
	function new(length:Int, b:BytesData):Void;
 | 
			
		||||
	var length(default, null):Int;
 | 
			
		||||
	function get(pos:Int):Int;
 | 
			
		||||
	function set(pos:Int, v:Int):Void;
 | 
			
		||||
	function blit(pos:Int, src:Bytes, srcpos:Int, len:Int):Void;
 | 
			
		||||
	function fill(pos:Int, len:Int, value:Int):Void;
 | 
			
		||||
	function sub(pos:Int, len:Int):Bytes;
 | 
			
		||||
	function compare(other:Bytes):Int;
 | 
			
		||||
	function getDouble(pos:Int):Float;
 | 
			
		||||
	function getFloat(pos:Int):Float;
 | 
			
		||||
	function setDouble(pos:Int, v:Float):Void;
 | 
			
		||||
	function setFloat(pos:Int, v:Float):Void;
 | 
			
		||||
	function getUInt16(pos:Int):Int;
 | 
			
		||||
	function setUInt16(pos:Int, v:Int):Void;
 | 
			
		||||
	function getInt32(pos:Int):Int;
 | 
			
		||||
	function getInt64(pos:Int):haxe.Int64;
 | 
			
		||||
	function setInt32(pos:Int, v:Int):Void;
 | 
			
		||||
	function setInt64(pos:Int, v:haxe.Int64):Void;
 | 
			
		||||
	function getString(pos:Int, len:Int, ?encoding:Encoding):String;
 | 
			
		||||
	function toString():String;
 | 
			
		||||
	function toHex():String;
 | 
			
		||||
	function getData():BytesData;
 | 
			
		||||
	static function alloc(length:Int):Bytes;
 | 
			
		||||
	@:pure
 | 
			
		||||
	static function ofString(s:String, ?encoding:Encoding):Bytes;
 | 
			
		||||
	static function ofData(b:BytesData):Bytes;
 | 
			
		||||
	static function ofHex(s:String):Bytes;
 | 
			
		||||
	static function fastGet(b:BytesData, pos:Int):Int;
 | 
			
		||||
	static function __init__():Void {
 | 
			
		||||
		haxe.io.Error;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								Kha/Tools/macos/std/eval/_std/haxe/io/BytesBuffer.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Kha/Tools/macos/std/eval/_std/haxe/io/BytesBuffer.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.io;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
extern class BytesBuffer {
 | 
			
		||||
	var length(get, never):Int;
 | 
			
		||||
	function new():Void;
 | 
			
		||||
	private function get_length():Int;
 | 
			
		||||
	function addByte(byte:Int):Void;
 | 
			
		||||
	function add(src:Bytes):Void;
 | 
			
		||||
	function addString(v:String, ?encoding:Encoding):Void;
 | 
			
		||||
	function addInt32(v:Int):Void;
 | 
			
		||||
	function addInt64(v:haxe.Int64):Void;
 | 
			
		||||
	function addFloat(v:Float):Void;
 | 
			
		||||
	function addDouble(v:Float):Void;
 | 
			
		||||
	function addBytes(src:Bytes, pos:Int, len:Int):Void;
 | 
			
		||||
	function getBytes():Bytes;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										34
									
								
								Kha/Tools/macos/std/eval/_std/haxe/io/BytesData.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								Kha/Tools/macos/std/eval/_std/haxe/io/BytesData.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,34 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.io;
 | 
			
		||||
 | 
			
		||||
@:forward
 | 
			
		||||
private abstract NativeBytesDataAbstract(Bytes) from Bytes to Bytes {
 | 
			
		||||
	@:arrayAccess public inline function get(i:Int)
 | 
			
		||||
		return this.get(i);
 | 
			
		||||
 | 
			
		||||
	@:arrayAccess public inline function set(i:Int, v:Dynamic)
 | 
			
		||||
		this.set(i, v);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typedef BytesData = NativeBytesDataAbstract;
 | 
			
		||||
							
								
								
									
										31
									
								
								Kha/Tools/macos/std/eval/_std/haxe/zip/Compress.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Kha/Tools/macos/std/eval/_std/haxe/zip/Compress.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.zip;
 | 
			
		||||
 | 
			
		||||
extern class Compress {
 | 
			
		||||
	function new(level:Int):Void;
 | 
			
		||||
	function execute(src:haxe.io.Bytes, srcPos:Int, dst:haxe.io.Bytes, dstPos:Int):{done:Bool, read:Int, wriet:Int};
 | 
			
		||||
	function setFlushMode(f:FlushMode):Void;
 | 
			
		||||
	function close():Void;
 | 
			
		||||
	static function run(s:haxe.io.Bytes, level:Int):haxe.io.Bytes;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								Kha/Tools/macos/std/eval/_std/haxe/zip/Uncompress.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Kha/Tools/macos/std/eval/_std/haxe/zip/Uncompress.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package haxe.zip;
 | 
			
		||||
 | 
			
		||||
extern class Uncompress {
 | 
			
		||||
	function new(?windowBits:Int):Void;
 | 
			
		||||
	function execute(src:haxe.io.Bytes, srcPos:Int, dst:haxe.io.Bytes, dstPos:Int):{done:Bool, read:Int, write:Int};
 | 
			
		||||
	function setFlushMode(f:FlushMode):Void;
 | 
			
		||||
	function close():Void;
 | 
			
		||||
	static function run(src:haxe.io.Bytes, ?bufsize:Int):haxe.io.Bytes;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/Config.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/Config.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
extern class Config {
 | 
			
		||||
	function new():Void;
 | 
			
		||||
 | 
			
		||||
	function authmode(authmode:SslAuthmode):Void;
 | 
			
		||||
	function ca_chain(ca_chain:X509Crt):Void;
 | 
			
		||||
	function defaults(endpoint:SslEndpoint, transport:SslTransport, preset:SslPreset):Int;
 | 
			
		||||
	function rng<T>(p_rng:T):Void;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/CtrDrbg.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/CtrDrbg.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
import haxe.io.Bytes;
 | 
			
		||||
 | 
			
		||||
extern class CtrDrbg {
 | 
			
		||||
	function new():Void;
 | 
			
		||||
 | 
			
		||||
	function random(output:Bytes, output_len:Int):Int;
 | 
			
		||||
	function seed(entropy:Entropy, ?custom:String):Int;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/Entropy.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/Entropy.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
extern class Entropy {
 | 
			
		||||
	function new():Void;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/Error.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/Error.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
class Error {
 | 
			
		||||
	extern static public function strerror(code:Int):String;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/PkContext.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/PkContext.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
import haxe.io.Bytes;
 | 
			
		||||
 | 
			
		||||
extern class PkContext {
 | 
			
		||||
	function new():Void;
 | 
			
		||||
 | 
			
		||||
	function parse_key(key:Bytes, ?pwd:String):Int;
 | 
			
		||||
	function parse_keyfile(path:String, ?password:String):Int;
 | 
			
		||||
	function parse_public_key(key:Bytes):Int;
 | 
			
		||||
	function parse_public_keyfile(path:String):Int;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										15
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/Ssl.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/Ssl.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
import mbedtls.X509Crt;
 | 
			
		||||
import haxe.io.Bytes;
 | 
			
		||||
 | 
			
		||||
extern class Ssl {
 | 
			
		||||
	function new():Void;
 | 
			
		||||
 | 
			
		||||
	function get_peer_cert():Null<X509Crt>;
 | 
			
		||||
	function handshake():Int;
 | 
			
		||||
	function read(buf:Bytes, pos:Int, len:Int):Int;
 | 
			
		||||
	function set_hostname(hostname:String):Int;
 | 
			
		||||
	function setup(conf:Config):Int;
 | 
			
		||||
	function write(buf:Bytes, pos:Int, len:Int):Int;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/SslAuthmode.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/SslAuthmode.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
@:native("mbedtls.SslAuthmode")
 | 
			
		||||
extern enum abstract SslAuthmode(Int) {
 | 
			
		||||
	var SSL_VERIFY_NONE;
 | 
			
		||||
	var SSL_VERIFY_OPTIONAL;
 | 
			
		||||
	var SSL_VERIFY_REQUIRED;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/SslEndpoint.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/SslEndpoint.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
@:native("mbedtls.SslEndpoint")
 | 
			
		||||
extern enum abstract SslEndpoint(Int) {
 | 
			
		||||
	var SSL_IS_CLIENT;
 | 
			
		||||
	var SSL_IS_SERVER;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/SslPreset.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/SslPreset.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
@:native("mbedtls.SslPreset")
 | 
			
		||||
extern enum abstract SslPreset(Int) {
 | 
			
		||||
	var SSL_PRESET_DEFAULT;
 | 
			
		||||
	var SSL_PRESET_SUITEB;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/SslTransport.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/SslTransport.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
@:native("mbedtls.SslTransport")
 | 
			
		||||
extern enum abstract SslTransport(Int) {
 | 
			
		||||
	var SSL_TRANSPORT_STREAM;
 | 
			
		||||
	var SSL_TRANSPORT_DATAGRAM;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/X509Crt.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Kha/Tools/macos/std/eval/_std/mbedtls/X509Crt.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
package mbedtls;
 | 
			
		||||
 | 
			
		||||
import haxe.io.Bytes;
 | 
			
		||||
 | 
			
		||||
extern class X509Crt {
 | 
			
		||||
	function new():Void;
 | 
			
		||||
 | 
			
		||||
	function next():Null<X509Crt>;
 | 
			
		||||
	function parse(buf:Bytes):Int;
 | 
			
		||||
	function parse_file(path:String):Int;
 | 
			
		||||
	function parse_path(path:String):Int;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								Kha/Tools/macos/std/eval/_std/sys/FileSystem.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								Kha/Tools/macos/std/eval/_std/sys/FileSystem.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys;
 | 
			
		||||
 | 
			
		||||
// This class is here so it re-shadows other FileSystem classes in macros,
 | 
			
		||||
// e.g. from hxnodejs.
 | 
			
		||||
@:coreApi
 | 
			
		||||
class FileSystem {
 | 
			
		||||
	extern static public function exists(path:String):Bool;
 | 
			
		||||
 | 
			
		||||
	extern static public function rename(path:String, newPath:String):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function stat(path:String):FileStat;
 | 
			
		||||
 | 
			
		||||
	extern static public function fullPath(relPath:String):String;
 | 
			
		||||
 | 
			
		||||
	static public function absolutePath(relPath:String):String {
 | 
			
		||||
		if (haxe.io.Path.isAbsolute(relPath))
 | 
			
		||||
			return relPath;
 | 
			
		||||
		return haxe.io.Path.join([Sys.getCwd(), relPath]);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	extern static public function isDirectory(path:String):Bool;
 | 
			
		||||
 | 
			
		||||
	extern static public function createDirectory(path:String):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function deleteFile(path:String):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function deleteDirectory(path:String):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function readDirectory(path:String):Array<String>;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								Kha/Tools/macos/std/eval/_std/sys/io/File.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								Kha/Tools/macos/std/eval/_std/sys/io/File.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,50 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.io;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class File {
 | 
			
		||||
	extern static public function getContent(path:String):String;
 | 
			
		||||
 | 
			
		||||
	extern static public function saveContent(path:String, content:String):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function getBytes(path:String):haxe.io.Bytes;
 | 
			
		||||
 | 
			
		||||
	extern static public function saveBytes(path:String, bytes:haxe.io.Bytes):Void;
 | 
			
		||||
 | 
			
		||||
	extern static public function read(path:String, binary:Bool = true):FileInput;
 | 
			
		||||
 | 
			
		||||
	extern static public function write(path:String, binary:Bool = true):FileOutput;
 | 
			
		||||
 | 
			
		||||
	extern static public function append(path:String, binary:Bool = true):FileOutput;
 | 
			
		||||
 | 
			
		||||
	extern static public function update(path:String, binary:Bool = true):FileOutput;
 | 
			
		||||
 | 
			
		||||
	static public function copy(srcPath:String, dstPath:String):Void {
 | 
			
		||||
		var s = read(srcPath, true);
 | 
			
		||||
		var d = write(dstPath, true);
 | 
			
		||||
		d.writeInput(s);
 | 
			
		||||
		s.close();
 | 
			
		||||
		d.close();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								Kha/Tools/macos/std/eval/_std/sys/io/FileInput.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Kha/Tools/macos/std/eval/_std/sys/io/FileInput.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.io;
 | 
			
		||||
 | 
			
		||||
// This class is not extern because externs overriding non-externs messes with DCE
 | 
			
		||||
@:coreApi
 | 
			
		||||
class FileInput extends haxe.io.Input {
 | 
			
		||||
	extern public override function close():Void;
 | 
			
		||||
 | 
			
		||||
	extern public function eof():Bool;
 | 
			
		||||
 | 
			
		||||
	extern public function seek(p:Int, pos:FileSeek):Void;
 | 
			
		||||
 | 
			
		||||
	extern public function tell():Int;
 | 
			
		||||
 | 
			
		||||
	extern public override function readByte():Int;
 | 
			
		||||
 | 
			
		||||
	extern public override function readBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										39
									
								
								Kha/Tools/macos/std/eval/_std/sys/io/FileOutput.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Kha/Tools/macos/std/eval/_std/sys/io/FileOutput.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.io;
 | 
			
		||||
 | 
			
		||||
// This class is not extern because externs overriding non-externs messes with DCE
 | 
			
		||||
@:coreApi
 | 
			
		||||
class FileOutput extends haxe.io.Output {
 | 
			
		||||
	extern public override function close():Void;
 | 
			
		||||
 | 
			
		||||
	extern public override function flush():Void;
 | 
			
		||||
 | 
			
		||||
	extern public function seek(p:Int, pos:FileSeek):Void;
 | 
			
		||||
 | 
			
		||||
	extern public function tell():Int;
 | 
			
		||||
 | 
			
		||||
	extern public override function writeByte(c:Int):Void;
 | 
			
		||||
 | 
			
		||||
	extern public override function writeBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										133
									
								
								Kha/Tools/macos/std/eval/_std/sys/io/Process.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								Kha/Tools/macos/std/eval/_std/sys/io/Process.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,133 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.io;
 | 
			
		||||
 | 
			
		||||
private extern class NativeProcess {
 | 
			
		||||
	function new(cmd:String, ?args:Array<String>):Void;
 | 
			
		||||
 | 
			
		||||
	function close():Void;
 | 
			
		||||
	function exitCode():Int;
 | 
			
		||||
	function getPid():Int;
 | 
			
		||||
	function kill():Void;
 | 
			
		||||
 | 
			
		||||
	function readStderr(bytes:haxe.io.Bytes, pos:Int, len:Int):Int;
 | 
			
		||||
	function readStdout(bytes:haxe.io.Bytes, pos:Int, len:Int):Int;
 | 
			
		||||
 | 
			
		||||
	function closeStdin():Void;
 | 
			
		||||
	function writeStdin(bytes:haxe.io.Bytes, pos:Int, len:Int):Int;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private class Stdin extends haxe.io.Output {
 | 
			
		||||
	var proc:NativeProcess;
 | 
			
		||||
	var buf:haxe.io.Bytes;
 | 
			
		||||
 | 
			
		||||
	public function new(proc:NativeProcess) {
 | 
			
		||||
		this.proc = proc;
 | 
			
		||||
		buf = haxe.io.Bytes.alloc(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function close() {
 | 
			
		||||
		super.close();
 | 
			
		||||
		proc.closeStdin();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function writeByte(c:Int) {
 | 
			
		||||
		buf.set(0, c);
 | 
			
		||||
		writeBytes(buf, 0, 1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function writeBytes(buf:haxe.io.Bytes, pos:Int, len:Int) {
 | 
			
		||||
		try {
 | 
			
		||||
			return proc.writeStdin(buf, pos, len);
 | 
			
		||||
		} catch (e:Dynamic) {
 | 
			
		||||
			throw new haxe.io.Eof();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private class Stdout extends haxe.io.Input {
 | 
			
		||||
	var proc:NativeProcess;
 | 
			
		||||
	var out:Bool;
 | 
			
		||||
	var buf:haxe.io.Bytes;
 | 
			
		||||
 | 
			
		||||
	public function new(proc:NativeProcess, out:Bool) {
 | 
			
		||||
		this.proc = proc;
 | 
			
		||||
		this.out = out;
 | 
			
		||||
		buf = haxe.io.Bytes.alloc(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function readByte() {
 | 
			
		||||
		if (readBytes(buf, 0, 1) == 0)
 | 
			
		||||
			throw haxe.io.Error.Blocked;
 | 
			
		||||
		return buf.get(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function readBytes(bytes:haxe.io.Bytes, pos:Int, len:Int):Int {
 | 
			
		||||
		try {
 | 
			
		||||
			if (out) {
 | 
			
		||||
				return proc.readStdout(bytes, pos, len);
 | 
			
		||||
			} else {
 | 
			
		||||
				return proc.readStderr(bytes, pos, len);
 | 
			
		||||
			}
 | 
			
		||||
		} catch (e:Dynamic) {
 | 
			
		||||
			throw new haxe.io.Eof();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class Process {
 | 
			
		||||
	public var stdout(default, null):haxe.io.Input;
 | 
			
		||||
	public var stderr(default, null):haxe.io.Input;
 | 
			
		||||
	public var stdin(default, null):haxe.io.Output;
 | 
			
		||||
 | 
			
		||||
	var proc:NativeProcess;
 | 
			
		||||
 | 
			
		||||
	public function new(cmd:String, ?args:Array<String>, ?detached:Bool):Void {
 | 
			
		||||
		if (detached) {
 | 
			
		||||
			throw "Detached process is not supported on this platform";
 | 
			
		||||
		}
 | 
			
		||||
		proc = new NativeProcess(cmd, args);
 | 
			
		||||
		stdout = new Stdout(proc, true);
 | 
			
		||||
		stderr = new Stdout(proc, false);
 | 
			
		||||
		stdin = new Stdin(proc);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function getPid():Int {
 | 
			
		||||
		return proc.getPid();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function exitCode(block:Bool = true):Null<Int> {
 | 
			
		||||
		if (block == false)
 | 
			
		||||
			throw "Non blocking exitCode() not supported on this platform";
 | 
			
		||||
		return proc.exitCode();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function close():Void {
 | 
			
		||||
		proc.close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function kill():Void {
 | 
			
		||||
		proc.kill();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								Kha/Tools/macos/std/eval/_std/sys/net/Host.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								Kha/Tools/macos/std/eval/_std/sys/net/Host.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.net;
 | 
			
		||||
 | 
			
		||||
class Host {
 | 
			
		||||
	public var host(default, null):String;
 | 
			
		||||
	public var ip(default, null):Int;
 | 
			
		||||
 | 
			
		||||
	public function new(name:String) {
 | 
			
		||||
		host = name;
 | 
			
		||||
		init(resolve(name));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function toString() {
 | 
			
		||||
		return hostToString(ip);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function reverse() {
 | 
			
		||||
		return hostReverse(ip);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function init(ip:Int) {
 | 
			
		||||
		this.ip = ip;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	extern static public function localhost();
 | 
			
		||||
 | 
			
		||||
	extern static function hostReverse(ip:Int);
 | 
			
		||||
 | 
			
		||||
	extern static function hostToString(ip:Int);
 | 
			
		||||
 | 
			
		||||
	extern static function resolve(name:String);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										191
									
								
								Kha/Tools/macos/std/eval/_std/sys/net/Socket.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										191
									
								
								Kha/Tools/macos/std/eval/_std/sys/net/Socket.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,191 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.net;
 | 
			
		||||
 | 
			
		||||
import haxe.io.Error;
 | 
			
		||||
import eval.vm.NativeSocket;
 | 
			
		||||
 | 
			
		||||
private class SocketOutput extends haxe.io.Output {
 | 
			
		||||
	var socket:NativeSocket;
 | 
			
		||||
 | 
			
		||||
	public function new(socket:NativeSocket) {
 | 
			
		||||
		this.socket = socket;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function writeByte(c:Int) {
 | 
			
		||||
		try {
 | 
			
		||||
			socket.sendChar(c);
 | 
			
		||||
		} catch (e:Dynamic) {
 | 
			
		||||
			if (e == "Blocking")
 | 
			
		||||
				throw Blocked;
 | 
			
		||||
			else if (e == "EOF")
 | 
			
		||||
				throw new haxe.io.Eof();
 | 
			
		||||
			else
 | 
			
		||||
				throw Custom(e);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function writeBytes(buf:haxe.io.Bytes, pos:Int, len:Int) {
 | 
			
		||||
		return try {
 | 
			
		||||
			socket.send(buf, pos, len);
 | 
			
		||||
		} catch (e:Dynamic) {
 | 
			
		||||
			if (e == "Blocking")
 | 
			
		||||
				throw Blocked;
 | 
			
		||||
			else
 | 
			
		||||
				throw Custom(e);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function close() {
 | 
			
		||||
		super.close();
 | 
			
		||||
		socket.close();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private class SocketInput extends haxe.io.Input {
 | 
			
		||||
	var socket:NativeSocket;
 | 
			
		||||
 | 
			
		||||
	public function new(socket:NativeSocket) {
 | 
			
		||||
		this.socket = socket;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function readByte() {
 | 
			
		||||
		return try {
 | 
			
		||||
			socket.receiveChar();
 | 
			
		||||
		} catch (e:Dynamic) {
 | 
			
		||||
			if (e == "Blocking")
 | 
			
		||||
				throw Blocked;
 | 
			
		||||
			else
 | 
			
		||||
				throw new haxe.io.Eof();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function readBytes(buf:haxe.io.Bytes, pos:Int, len:Int) {
 | 
			
		||||
		var r;
 | 
			
		||||
		try {
 | 
			
		||||
			r = socket.receive(buf, pos, len);
 | 
			
		||||
		} catch (e:Dynamic) {
 | 
			
		||||
			if (e == "Blocking")
 | 
			
		||||
				throw Blocked;
 | 
			
		||||
			else
 | 
			
		||||
				throw Custom(e);
 | 
			
		||||
		}
 | 
			
		||||
		if (r == 0)
 | 
			
		||||
			throw new haxe.io.Eof();
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function close() {
 | 
			
		||||
		super.close();
 | 
			
		||||
		socket.close();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class Socket {
 | 
			
		||||
	public var input(default, null):haxe.io.Input;
 | 
			
		||||
	public var output(default, null):haxe.io.Output;
 | 
			
		||||
	public var custom:Dynamic;
 | 
			
		||||
 | 
			
		||||
	@:ifFeature("sys.net.Socket.select") var socket:NativeSocket;
 | 
			
		||||
 | 
			
		||||
	public function new() {
 | 
			
		||||
		init(new NativeSocket());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private function init(socket:NativeSocket):Void {
 | 
			
		||||
		this.socket = socket;
 | 
			
		||||
		input = new SocketInput(socket);
 | 
			
		||||
		output = new SocketOutput(socket);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function close():Void {
 | 
			
		||||
		socket.close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function read():String {
 | 
			
		||||
		return input.readAll().toString();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function write(content:String):Void {
 | 
			
		||||
		output.writeString(content);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function connect(host:Host, port:Int):Void {
 | 
			
		||||
		socket.connect(host.ip, port);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function listen(connections:Int):Void {
 | 
			
		||||
		socket.listen(connections);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function shutdown(read:Bool, write:Bool):Void {
 | 
			
		||||
		socket.shutdown(read, write);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function bind(host:Host, port:Int):Void {
 | 
			
		||||
		socket.bind(host.ip, port);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function accept():Socket {
 | 
			
		||||
		var nativeSocket = socket.accept();
 | 
			
		||||
		var socket:Socket = Type.createEmptyInstance(Socket);
 | 
			
		||||
		socket.init(nativeSocket);
 | 
			
		||||
		return socket;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:access(sys.net.Host.init)
 | 
			
		||||
	public function peer():{host:Host, port:Int} {
 | 
			
		||||
		var info = socket.peer();
 | 
			
		||||
		var host:Host = Type.createEmptyInstance(Host);
 | 
			
		||||
		host.init(info.ip);
 | 
			
		||||
		return {host: host, port: info.port};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:access(sys.net.Host.init)
 | 
			
		||||
	public function host():{host:Host, port:Int} {
 | 
			
		||||
		var info = socket.host();
 | 
			
		||||
		var host:Host = Type.createEmptyInstance(Host);
 | 
			
		||||
		host.init(info.ip);
 | 
			
		||||
		return {host: host, port: info.port};
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function setTimeout(timeout:Float):Void {
 | 
			
		||||
		socket.setTimeout(timeout);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function waitForRead():Void {
 | 
			
		||||
		select([this], null, null, -1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function setBlocking(b:Bool):Void {} // TODO: Don't know how to implement this...
 | 
			
		||||
 | 
			
		||||
	public function setFastSend(b:Bool):Void {
 | 
			
		||||
		socket.setFastSend(b);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function select(read:Array<Socket>, write:Array<Socket>, others:Array<Socket>,
 | 
			
		||||
			?timeout:Float):{read:Array<Socket>, write:Array<Socket>, others:Array<Socket>} {
 | 
			
		||||
		return NativeSocket.select(read, write, others, timeout);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										102
									
								
								Kha/Tools/macos/std/eval/_std/sys/ssl/Certificate.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								Kha/Tools/macos/std/eval/_std/sys/ssl/Certificate.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,102 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.ssl;
 | 
			
		||||
 | 
			
		||||
import haxe.io.Bytes;
 | 
			
		||||
import sys.ssl.Mbedtls;
 | 
			
		||||
import mbedtls.X509Crt;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class Certificate {
 | 
			
		||||
	var native:X509Crt;
 | 
			
		||||
 | 
			
		||||
	function new(native:X509Crt) {
 | 
			
		||||
		this.native = native;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function loadFile(file:String):Certificate {
 | 
			
		||||
		var cert = new X509Crt();
 | 
			
		||||
		cert.parse_file(file);
 | 
			
		||||
		return new Certificate(cert);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function loadPath(path:String):Certificate {
 | 
			
		||||
		var cert = new X509Crt();
 | 
			
		||||
		cert.parse_path(path);
 | 
			
		||||
		return new Certificate(cert);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function fromString(str:String):Certificate {
 | 
			
		||||
		var cert = new X509Crt();
 | 
			
		||||
		trace(mbedtls.Error.strerror(cert.parse(Bytes.ofString(str))));
 | 
			
		||||
		return new Certificate(cert);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function loadDefaults():Certificate {
 | 
			
		||||
		var cert = new X509Crt();
 | 
			
		||||
		Mbedtls.loadDefaultCertificates(cert);
 | 
			
		||||
		return new Certificate(cert);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public var commonName(get, null):Null<String>;
 | 
			
		||||
 | 
			
		||||
	public var altNames(get, null):Array<String>;
 | 
			
		||||
 | 
			
		||||
	public var notBefore(get, null):Date;
 | 
			
		||||
 | 
			
		||||
	public var notAfter(get, null):Date;
 | 
			
		||||
 | 
			
		||||
	extern public function subject(field:String):Null<String>;
 | 
			
		||||
 | 
			
		||||
	extern public function issuer(field:String):Null<String>;
 | 
			
		||||
 | 
			
		||||
	public function next():Null<Certificate> {
 | 
			
		||||
		var cert = native.next();
 | 
			
		||||
		if (cert == null) {
 | 
			
		||||
			return null;
 | 
			
		||||
		}
 | 
			
		||||
		return new Certificate(cert);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function add(pem:String):Void {
 | 
			
		||||
		native.parse(Bytes.ofString(pem));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function addDER(der:Bytes):Void {
 | 
			
		||||
		native.parse(der);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private function get_commonName():Null<String> {
 | 
			
		||||
		return subject("CN");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	extern private function get_altNames():Array<String>;
 | 
			
		||||
 | 
			
		||||
	extern private function get_notBefore():Date;
 | 
			
		||||
 | 
			
		||||
	extern private function get_notAfter():Date;
 | 
			
		||||
 | 
			
		||||
	private inline function getNative():X509Crt {
 | 
			
		||||
		return native;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										69
									
								
								Kha/Tools/macos/std/eval/_std/sys/ssl/Key.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								Kha/Tools/macos/std/eval/_std/sys/ssl/Key.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,69 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.ssl;
 | 
			
		||||
 | 
			
		||||
import haxe.io.Bytes;
 | 
			
		||||
import mbedtls.PkContext;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class Key {
 | 
			
		||||
	var native:PkContext;
 | 
			
		||||
 | 
			
		||||
	function new() {
 | 
			
		||||
		native = new PkContext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static public function loadFile(file:String, ?isPublic:Bool, ?pass:String):Key {
 | 
			
		||||
		var key = new Key();
 | 
			
		||||
		var code = if (isPublic) {
 | 
			
		||||
			key.native.parse_public_keyfile(file);
 | 
			
		||||
		} else {
 | 
			
		||||
			key.native.parse_keyfile(file, pass);
 | 
			
		||||
		}
 | 
			
		||||
		if (code != 0) {
 | 
			
		||||
			throw(mbedtls.Error.strerror(code));
 | 
			
		||||
		}
 | 
			
		||||
		return key;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static function parse(data:Bytes, isPublic:Bool, ?pass:String):Key {
 | 
			
		||||
		var key = new Key();
 | 
			
		||||
		var code = if (isPublic) {
 | 
			
		||||
			key.native.parse_public_key(data);
 | 
			
		||||
		} else {
 | 
			
		||||
			key.native.parse_key(data);
 | 
			
		||||
		}
 | 
			
		||||
		if (code != 0) {
 | 
			
		||||
			throw(mbedtls.Error.strerror(code));
 | 
			
		||||
		}
 | 
			
		||||
		return key;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static public function readPEM(data:String, isPublic:Bool, ?pass:String):Key {
 | 
			
		||||
		return parse(Bytes.ofString(data), isPublic, pass);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static public function readDER(data:haxe.io.Bytes, isPublic:Bool):Key {
 | 
			
		||||
		return parse(data, isPublic);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										66
									
								
								Kha/Tools/macos/std/eval/_std/sys/ssl/Mbedtls.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								Kha/Tools/macos/std/eval/_std/sys/ssl/Mbedtls.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,66 @@
 | 
			
		||||
package sys.ssl;
 | 
			
		||||
 | 
			
		||||
import eval.vm.NativeSocket;
 | 
			
		||||
import mbedtls.Ssl;
 | 
			
		||||
import mbedtls.Entropy;
 | 
			
		||||
import mbedtls.CtrDrbg;
 | 
			
		||||
import mbedtls.X509Crt;
 | 
			
		||||
 | 
			
		||||
class Mbedtls {
 | 
			
		||||
	static var entropy:Null<Entropy>;
 | 
			
		||||
	static var ctr:Null<CtrDrbg>;
 | 
			
		||||
 | 
			
		||||
	static public function getDefaultEntropy() {
 | 
			
		||||
		if (entropy == null) {
 | 
			
		||||
			entropy = new Entropy();
 | 
			
		||||
		}
 | 
			
		||||
		return entropy;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static public function getDefaultCtrDrbg() {
 | 
			
		||||
		if (ctr == null) {
 | 
			
		||||
			ctr = new CtrDrbg();
 | 
			
		||||
			ctr.seed(getDefaultEntropy());
 | 
			
		||||
		}
 | 
			
		||||
		return ctr;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	static public function loadDefaultCertificates(certificate:X509Crt) {
 | 
			
		||||
		if (loadDefaults(certificate) == 0) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
		var defPaths = switch (Sys.systemName()) {
 | 
			
		||||
			case "Linux":
 | 
			
		||||
				[
 | 
			
		||||
					"/etc/ssl/certs/ca-certificates.crt", // Debian/Ubuntu/Gentoo etc.
 | 
			
		||||
					"/etc/pki/tls/certs/ca-bundle.crt", // Fedora/RHEL
 | 
			
		||||
					"/etc/ssl/ca-bundle.pem", // OpenSUSE
 | 
			
		||||
					"/etc/pki/tls/cacert.pem", // OpenELEC
 | 
			
		||||
					"/etc/ssl/certs", // SLES10/SLES11
 | 
			
		||||
					"/system/etc/security/cacerts" // Android
 | 
			
		||||
				];
 | 
			
		||||
			case "BSD":
 | 
			
		||||
				[
 | 
			
		||||
					"/usr/local/share/certs/ca-root-nss.crt", // FreeBSD/DragonFly
 | 
			
		||||
					"/etc/ssl/cert.pem", // OpenBSD
 | 
			
		||||
					"/etc/openssl/certs/ca-certificates.crt", // NetBSD
 | 
			
		||||
				];
 | 
			
		||||
			case "Android":
 | 
			
		||||
				["/system/etc/security/cacerts"];
 | 
			
		||||
			default:
 | 
			
		||||
				[];
 | 
			
		||||
		}
 | 
			
		||||
		for (path in defPaths) {
 | 
			
		||||
			if (sys.FileSystem.exists(path)) {
 | 
			
		||||
				if (sys.FileSystem.isDirectory(path))
 | 
			
		||||
					certificate.parse_path(path);
 | 
			
		||||
				else
 | 
			
		||||
					certificate.parse_file(path);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	extern static public function setSocket(ssl:Ssl, socket:NativeSocket):Int;
 | 
			
		||||
 | 
			
		||||
	extern static function loadDefaults(certificate:X509Crt):Int;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										206
									
								
								Kha/Tools/macos/std/eval/_std/sys/ssl/Socket.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								Kha/Tools/macos/std/eval/_std/sys/ssl/Socket.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,206 @@
 | 
			
		||||
package sys.ssl;
 | 
			
		||||
 | 
			
		||||
import haxe.io.Bytes;
 | 
			
		||||
import eval.vm.NativeSocket;
 | 
			
		||||
import mbedtls.Config;
 | 
			
		||||
import mbedtls.Ssl;
 | 
			
		||||
 | 
			
		||||
private class SocketInput extends haxe.io.Input {
 | 
			
		||||
	@:allow(sys.ssl.Socket) private var socket:Socket;
 | 
			
		||||
	var readBuf:Bytes;
 | 
			
		||||
 | 
			
		||||
	public function new(s:Socket) {
 | 
			
		||||
		this.socket = s;
 | 
			
		||||
		readBuf = Bytes.alloc(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function readByte() {
 | 
			
		||||
		socket.handshake();
 | 
			
		||||
		var r = @:privateAccess socket.ssl.read(readBuf, 0, 1);
 | 
			
		||||
		if (r == -1)
 | 
			
		||||
			throw haxe.io.Error.Blocked;
 | 
			
		||||
		else if (r < 0)
 | 
			
		||||
			throw new haxe.io.Eof();
 | 
			
		||||
		return readBuf.get(0);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function readBytes(buf:haxe.io.Bytes, pos:Int, len:Int):Int {
 | 
			
		||||
		if (pos < 0 || len < 0 || ((pos + len) : UInt) > (buf.length : UInt))
 | 
			
		||||
			throw haxe.io.Error.OutsideBounds;
 | 
			
		||||
		socket.handshake();
 | 
			
		||||
		var r = @:privateAccess socket.ssl.read(buf, pos, len);
 | 
			
		||||
		if (r == -1)
 | 
			
		||||
			throw haxe.io.Error.Blocked;
 | 
			
		||||
		else if (r <= 0)
 | 
			
		||||
			throw new haxe.io.Eof();
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function close() {
 | 
			
		||||
		super.close();
 | 
			
		||||
		if (socket != null)
 | 
			
		||||
			socket.close();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
private class SocketOutput extends haxe.io.Output {
 | 
			
		||||
	@:allow(sys.ssl.Socket) private var socket:Socket;
 | 
			
		||||
	var writeBuf:Bytes;
 | 
			
		||||
 | 
			
		||||
	public function new(s:Socket) {
 | 
			
		||||
		this.socket = s;
 | 
			
		||||
		writeBuf = Bytes.alloc(1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function writeByte(c:Int) {
 | 
			
		||||
		socket.handshake();
 | 
			
		||||
		writeBuf.set(0, c);
 | 
			
		||||
		var r = @:privateAccess socket.ssl.write(writeBuf, 0, 1);
 | 
			
		||||
		if (r == -1)
 | 
			
		||||
			throw haxe.io.Error.Blocked;
 | 
			
		||||
		else if (r < 0)
 | 
			
		||||
			throw new haxe.io.Eof();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function writeBytes(buf:haxe.io.Bytes, pos:Int, len:Int):Int {
 | 
			
		||||
		if (pos < 0 || len < 0 || ((pos + len) : UInt) > (buf.length : UInt))
 | 
			
		||||
			throw haxe.io.Error.OutsideBounds;
 | 
			
		||||
		socket.handshake();
 | 
			
		||||
		var r = @:privateAccess socket.ssl.write(buf, pos, len);
 | 
			
		||||
		if (r == -1)
 | 
			
		||||
			throw haxe.io.Error.Blocked;
 | 
			
		||||
		else if (r < 0)
 | 
			
		||||
			throw new haxe.io.Eof();
 | 
			
		||||
		return r;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function close() {
 | 
			
		||||
		super.close();
 | 
			
		||||
		if (socket != null)
 | 
			
		||||
			socket.close();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class Socket extends sys.net.Socket {
 | 
			
		||||
	public static var DEFAULT_VERIFY_CERT:Null<Bool> = true;
 | 
			
		||||
 | 
			
		||||
	public static var DEFAULT_CA:Null<Certificate>;
 | 
			
		||||
 | 
			
		||||
	private var conf:Config;
 | 
			
		||||
	private var ssl:Ssl;
 | 
			
		||||
 | 
			
		||||
	public var verifyCert:Null<Bool>;
 | 
			
		||||
 | 
			
		||||
	private var caCert:Null<Certificate>;
 | 
			
		||||
	private var hostname:String;
 | 
			
		||||
 | 
			
		||||
	private var handshakeDone:Bool;
 | 
			
		||||
	private var isBlocking:Bool = true;
 | 
			
		||||
 | 
			
		||||
	override function init(socket:NativeSocket):Void {
 | 
			
		||||
		this.socket = socket;
 | 
			
		||||
		input = new SocketInput(this);
 | 
			
		||||
		output = new SocketOutput(this);
 | 
			
		||||
		if (DEFAULT_VERIFY_CERT && DEFAULT_CA == null) {
 | 
			
		||||
			DEFAULT_CA = Certificate.loadDefaults();
 | 
			
		||||
		}
 | 
			
		||||
		verifyCert = DEFAULT_VERIFY_CERT;
 | 
			
		||||
		caCert = DEFAULT_CA;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function connect(host:sys.net.Host, port:Int):Void {
 | 
			
		||||
		conf = buildConfig(false);
 | 
			
		||||
		ssl = new Ssl();
 | 
			
		||||
		ssl.setup(conf);
 | 
			
		||||
		Mbedtls.setSocket(ssl, socket);
 | 
			
		||||
		handshakeDone = false;
 | 
			
		||||
		if (hostname == null)
 | 
			
		||||
			hostname = host.host;
 | 
			
		||||
		if (hostname != null)
 | 
			
		||||
			ssl.set_hostname(hostname);
 | 
			
		||||
		socket.connect(host.ip, port);
 | 
			
		||||
		if (isBlocking)
 | 
			
		||||
			handshake();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function handshake():Void {
 | 
			
		||||
		if (!handshakeDone) {
 | 
			
		||||
			var r = ssl.handshake();
 | 
			
		||||
			if (r == 0)
 | 
			
		||||
				handshakeDone = true;
 | 
			
		||||
			else if (r == -1)
 | 
			
		||||
				throw haxe.io.Error.Blocked;
 | 
			
		||||
			else
 | 
			
		||||
				throw mbedtls.Error.strerror(r);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	override function setBlocking(b:Bool):Void {
 | 
			
		||||
		super.setBlocking(b);
 | 
			
		||||
		isBlocking = b;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function setCA(cert:Certificate):Void {
 | 
			
		||||
		caCert = cert;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function setHostname(name:String):Void {
 | 
			
		||||
		hostname = name;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function close():Void {
 | 
			
		||||
		super.close();
 | 
			
		||||
		var input:SocketInput = cast input;
 | 
			
		||||
		var output:SocketOutput = cast output;
 | 
			
		||||
		@:privateAccess input.socket = output.socket = null;
 | 
			
		||||
		input.close();
 | 
			
		||||
		output.close();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function bind(host:sys.net.Host, port:Int):Void {
 | 
			
		||||
		conf = buildConfig(true);
 | 
			
		||||
 | 
			
		||||
		socket.bind(host.ip, port);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public override function accept():Socket {
 | 
			
		||||
		var c = socket.accept();
 | 
			
		||||
		var cssl = new Ssl();
 | 
			
		||||
		cssl.setup(conf);
 | 
			
		||||
		Mbedtls.setSocket(cssl, c);
 | 
			
		||||
 | 
			
		||||
		var s = Type.createEmptyInstance(sys.ssl.Socket);
 | 
			
		||||
		s.socket = c;
 | 
			
		||||
		s.ssl = cssl;
 | 
			
		||||
		s.input = new SocketInput(s);
 | 
			
		||||
		s.output = new SocketOutput(s);
 | 
			
		||||
		s.handshakeDone = false;
 | 
			
		||||
 | 
			
		||||
		return s;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function addSNICertificate(cbServernameMatch:String->Bool, cert:Certificate, key:Key):Void {
 | 
			
		||||
		throw new haxe.exceptions.NotImplementedException();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function peerCertificate():Certificate {
 | 
			
		||||
		return @:privateAccess new Certificate(ssl.get_peer_cert());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function setCertificate(cert:Certificate, key:Key):Void {
 | 
			
		||||
		throw new haxe.exceptions.NotImplementedException();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private function buildConfig(server:Bool):Config {
 | 
			
		||||
		var conf = new Config();
 | 
			
		||||
		conf.defaults(server ? SSL_IS_SERVER : SSL_IS_CLIENT, SSL_TRANSPORT_STREAM, SSL_PRESET_DEFAULT);
 | 
			
		||||
		conf.rng(Mbedtls.getDefaultCtrDrbg());
 | 
			
		||||
 | 
			
		||||
		if (caCert != null) {
 | 
			
		||||
			conf.ca_chain(@:privateAccess caCert.getNative());
 | 
			
		||||
		}
 | 
			
		||||
		conf.authmode(if (verifyCert) SSL_VERIFY_REQUIRED else if (verifyCert == null) SSL_VERIFY_OPTIONAL else SSL_VERIFY_NONE);
 | 
			
		||||
		return conf;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										140
									
								
								Kha/Tools/macos/std/eval/_std/sys/thread/EventLoop.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								Kha/Tools/macos/std/eval/_std/sys/thread/EventLoop.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,140 @@
 | 
			
		||||
package sys.thread;
 | 
			
		||||
 | 
			
		||||
import eval.luv.Loop;
 | 
			
		||||
import eval.luv.Async;
 | 
			
		||||
import eval.luv.Timer as LuvTimer;
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
enum NextEventTime {
 | 
			
		||||
	Now;
 | 
			
		||||
	Never;
 | 
			
		||||
	AnyTime(time:Null<Float>);
 | 
			
		||||
	At(time:Float);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
abstract EventHandler(RegularEvent) from RegularEvent to RegularEvent {}
 | 
			
		||||
 | 
			
		||||
private class RegularEvent {
 | 
			
		||||
	public var timer:Null<LuvTimer>;
 | 
			
		||||
	public var event:()->Void;
 | 
			
		||||
 | 
			
		||||
	public function new(e:()->Void) {
 | 
			
		||||
		event = e;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function run() {
 | 
			
		||||
		event();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@:coreApi
 | 
			
		||||
class EventLoop {
 | 
			
		||||
	@:allow(eval.luv.Loop)
 | 
			
		||||
	final handle:Loop;
 | 
			
		||||
 | 
			
		||||
	final mutex = new Mutex();
 | 
			
		||||
	final oneTimeEvents = new Array<Null<()->Void>>();
 | 
			
		||||
	var oneTimeEventsIdx = 0;
 | 
			
		||||
	final wakeup:Async;
 | 
			
		||||
	var promisedEventsCount = 0;
 | 
			
		||||
	var pending:Array<()->Void> = [];
 | 
			
		||||
	var looping = false;
 | 
			
		||||
 | 
			
		||||
	public function new():Void {
 | 
			
		||||
		handle = Loop.init().resolve();
 | 
			
		||||
		wakeup = Async.init(handle, consumePending).resolve();
 | 
			
		||||
		wakeup.unref();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function repeat(event:()->Void, intervalMs:Int):EventHandler {
 | 
			
		||||
		var e = new RegularEvent(event);
 | 
			
		||||
		mutex.acquire();
 | 
			
		||||
		pending.push(() -> {
 | 
			
		||||
			e.timer = LuvTimer.init(handle).resolve();
 | 
			
		||||
			e.timer.start(e.run, intervalMs, intervalMs < 1 ? 1 : intervalMs).resolve();
 | 
			
		||||
		});
 | 
			
		||||
		mutex.release();
 | 
			
		||||
		wakeup.send();
 | 
			
		||||
		return e;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function cancel(eventHandler:EventHandler):Void {
 | 
			
		||||
		mutex.acquire();
 | 
			
		||||
		(eventHandler:RegularEvent).event = noop;
 | 
			
		||||
		pending.push(() -> {
 | 
			
		||||
			var timer = (eventHandler:RegularEvent).timer;
 | 
			
		||||
			timer.stop().resolve();
 | 
			
		||||
			timer.close(noop);
 | 
			
		||||
		});
 | 
			
		||||
		mutex.release();
 | 
			
		||||
		wakeup.send();
 | 
			
		||||
	}
 | 
			
		||||
	static final noop = function() {}
 | 
			
		||||
 | 
			
		||||
	public function promise():Void {
 | 
			
		||||
		mutex.acquire();
 | 
			
		||||
		++promisedEventsCount;
 | 
			
		||||
		pending.push(refUnref);
 | 
			
		||||
		mutex.release();
 | 
			
		||||
		wakeup.send();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function run(event:()->Void):Void {
 | 
			
		||||
		mutex.acquire();
 | 
			
		||||
		pending.push(event);
 | 
			
		||||
		mutex.release();
 | 
			
		||||
		wakeup.send();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function runPromised(event:()->Void):Void {
 | 
			
		||||
		mutex.acquire();
 | 
			
		||||
		--promisedEventsCount;
 | 
			
		||||
		pending.push(refUnref);
 | 
			
		||||
		pending.push(event);
 | 
			
		||||
		mutex.release();
 | 
			
		||||
		wakeup.send();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function refUnref():Void {
 | 
			
		||||
		if(promisedEventsCount > 0) {
 | 
			
		||||
			wakeup.ref();
 | 
			
		||||
		} else {
 | 
			
		||||
			wakeup.unref();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function progress():NextEventTime {
 | 
			
		||||
		//TODO: throw if loop is already running
 | 
			
		||||
		if((handle:Loop).run(NOWAIT)) {
 | 
			
		||||
			return AnyTime(null);
 | 
			
		||||
		} else {
 | 
			
		||||
			return Never;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function wait(?timeout:Float):Bool {
 | 
			
		||||
		//TODO: throw if loop is already running
 | 
			
		||||
		if(timeout == null) {
 | 
			
		||||
			var timer = LuvTimer.init(handle).resolve();
 | 
			
		||||
			timer.start(() -> {
 | 
			
		||||
				timer.stop().resolve();
 | 
			
		||||
				timer.close(() -> {});
 | 
			
		||||
			}, Std.int(timeout * 1000));
 | 
			
		||||
			return (handle:Loop).run(ONCE);
 | 
			
		||||
		} else {
 | 
			
		||||
			return (handle:Loop).run(ONCE);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public function loop():Void {
 | 
			
		||||
		//TODO: throw if loop is already running
 | 
			
		||||
		consumePending();
 | 
			
		||||
		(handle:Loop).run(DEFAULT);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function consumePending(?_:Async):Void {
 | 
			
		||||
		var p = pending;
 | 
			
		||||
		pending = [];
 | 
			
		||||
		for(fn in p) fn();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										105
									
								
								Kha/Tools/macos/std/eval/_std/sys/thread/Thread.hx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								Kha/Tools/macos/std/eval/_std/sys/thread/Thread.hx
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C)2005-2019 Haxe Foundation
 | 
			
		||||
 *
 | 
			
		||||
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
			
		||||
 * copy of this software and associated documentation files (the "Software"),
 | 
			
		||||
 * to deal in the Software without restriction, including without limitation
 | 
			
		||||
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
			
		||||
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
			
		||||
 * Software is furnished to do so, subject to the following conditions:
 | 
			
		||||
 *
 | 
			
		||||
 * The above copyright notice and this permission notice shall be included in
 | 
			
		||||
 * all copies or substantial portions of the Software.
 | 
			
		||||
 *
 | 
			
		||||
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
			
		||||
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
			
		||||
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
			
		||||
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
			
		||||
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
			
		||||
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
			
		||||
 * DEALINGS IN THE SOFTWARE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package sys.thread;
 | 
			
		||||
 | 
			
		||||
import eval.vm.NativeThread;
 | 
			
		||||
 | 
			
		||||
private typedef ThreadImpl = NativeThread;
 | 
			
		||||
 | 
			
		||||
abstract Thread(ThreadImpl) from ThreadImpl {
 | 
			
		||||
	public var events(get,never):EventLoop;
 | 
			
		||||
 | 
			
		||||
	static function __init__() {
 | 
			
		||||
		NativeThread.self().events = new EventLoop();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inline function new(h:NativeThread):Void {
 | 
			
		||||
		this = h;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public inline function sendMessage(msg:Dynamic):Void {
 | 
			
		||||
		this.sendMessage(msg);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static inline function current():Thread {
 | 
			
		||||
		return new Thread(NativeThread.self());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static inline function create(job:()->Void):Thread {
 | 
			
		||||
		return new Thread(new NativeThread(job));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static function runWithEventLoop(job:()->Void):Void {
 | 
			
		||||
		var thread = NativeThread.self();
 | 
			
		||||
		if(thread.events == null) {
 | 
			
		||||
			thread.events = new EventLoop();
 | 
			
		||||
			try {
 | 
			
		||||
				job();
 | 
			
		||||
				thread.events.loop();
 | 
			
		||||
				thread.events = null;
 | 
			
		||||
			} catch(e) {
 | 
			
		||||
				thread.events = null;
 | 
			
		||||
				throw e;
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			job();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static inline function createWithEventLoop(job:()->Void):Thread {
 | 
			
		||||
		return new Thread(new NativeThread(() -> {
 | 
			
		||||
			var thread = NativeThread.self();
 | 
			
		||||
			thread.events = new EventLoop();
 | 
			
		||||
			job();
 | 
			
		||||
			thread.events.loop();
 | 
			
		||||
		}));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static inline function readMessage(block:Bool):Dynamic {
 | 
			
		||||
		return NativeThread.readMessage(block);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public static inline function yield():Void {
 | 
			
		||||
		NativeThread.yield();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:op(A == B)
 | 
			
		||||
	public inline function equals(other:Thread):Bool {
 | 
			
		||||
		return getHandle().id() == other.getHandle().id();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	inline function getHandle():NativeThread {
 | 
			
		||||
		return this;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	function get_events():EventLoop {
 | 
			
		||||
		if(this.events == null)
 | 
			
		||||
			throw new NoEventLoopException();
 | 
			
		||||
		return this.events;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@:keep
 | 
			
		||||
	static function processEvents():Void {
 | 
			
		||||
		NativeThread.self().events.loop();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user