Mercurial Hosting > luan
annotate src/luan/modules/IoLuan.java @ 1251:ddd2ec2c0769
minor
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 23 Jul 2018 20:04:14 -0600 |
parents | 5d0cbd908582 |
children | e38f5869e9df |
rev | line source |
---|---|
167
4c0131c2b650
merge luan/lib into modules
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
164
diff
changeset
|
1 package luan.modules; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
3 import java.io.InputStream; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
4 import java.io.OutputStream; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
5 import java.io.PrintStream; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
6 import java.io.Reader; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
7 import java.io.Writer; |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
8 import java.io.StringReader; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
9 import java.io.BufferedReader; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
10 import java.io.BufferedWriter; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
11 import java.io.BufferedInputStream; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
12 import java.io.BufferedOutputStream; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
13 import java.io.File; |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
14 import java.io.FileInputStream; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
15 import java.io.FileOutputStream; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
16 import java.io.InputStreamReader; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
17 import java.io.OutputStreamWriter; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
18 import java.io.ByteArrayInputStream; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
19 import java.io.DataInputStream; |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
20 import java.io.DataOutputStream; |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
21 import java.io.StringWriter; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
22 import java.io.IOException; |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
23 import java.io.FileNotFoundException; |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
24 import java.net.URL; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
25 import java.net.Socket; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
26 import java.net.ServerSocket; |
701 | 27 import java.net.InetAddress; |
735 | 28 import java.net.Inet4Address; |
29 import java.net.NetworkInterface; | |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
30 import java.net.MalformedURLException; |
701 | 31 import java.net.UnknownHostException; |
735 | 32 import java.util.Enumeration; |
748 | 33 import java.util.List; |
706 | 34 import java.util.Map; |
221
ec016471c6eb
make LuanTable an interface
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
220
diff
changeset
|
35 import luan.Luan; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
36 import luan.LuanState; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
37 import luan.LuanTable; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
38 import luan.LuanFunction; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 import luan.LuanJavaFunction; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
40 import luan.LuanException; |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
722
diff
changeset
|
41 import luan.modules.url.LuanUrl; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
42 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
43 |
168
ebe9db183eb7
rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
167
diff
changeset
|
44 public final class IoLuan { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
45 |
435
5b36f663a1b8
make members lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
433
diff
changeset
|
46 private static void add(LuanTable t,String method,Class... parameterTypes) throws NoSuchMethodException { |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
47 t.rawPut( method, new LuanJavaFunction(IoLuan.class.getMethod(method,parameterTypes),null) ); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
48 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
49 |
118
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
50 public static String read_console_line(String prompt) throws IOException { |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
51 if( prompt==null ) |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
52 prompt = "> "; |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
53 return System.console().readLine(prompt); |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
54 } |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
55 |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
56 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
57 public interface LuanWriter { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
58 public void write(LuanState luan,Object... args) throws LuanException, IOException; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
59 public void close() throws IOException; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
60 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
61 |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
62 private static LuanWriter luanWriter(final PrintStream out) { |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
63 return new LuanWriter() { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
64 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
65 public void write(LuanState luan,Object... args) throws LuanException { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
66 for( Object obj : args ) { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
67 out.print( luan.toString(obj) ); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
68 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
69 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
70 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
71 public void close() { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
72 out.close(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
73 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
74 }; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
75 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
76 |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
77 public static LuanTable textWriter(final PrintStream out) { |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
78 return writer(luanWriter(out)); |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
79 } |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
80 |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
81 private static LuanWriter luanWriter(final Writer out) { |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
82 return new LuanWriter() { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
83 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
84 public void write(LuanState luan,Object... args) throws LuanException, IOException { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
85 for( Object obj : args ) { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
86 out.write( luan.toString(obj) ); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
87 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
88 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
89 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
90 public void close() throws IOException { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
91 out.close(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
92 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
93 }; |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
94 } |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
95 |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
96 public static LuanTable textWriter(final Writer out) { |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
97 return writer(luanWriter(out)); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
98 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
99 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
100 private static LuanTable writer(LuanWriter luanWriter) { |
411
23b99a5039b5
remove Luan.newTable()
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
101 LuanTable writer = new LuanTable(); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
102 try { |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
103 writer.rawPut( "write", new LuanJavaFunction( |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
104 LuanWriter.class.getMethod( "write", LuanState.class, new Object[0].getClass() ), luanWriter |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
105 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
106 writer.rawPut( "close", new LuanJavaFunction( |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
107 LuanWriter.class.getMethod( "close" ), luanWriter |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
108 ) ); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
109 } catch(NoSuchMethodException e) { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
110 throw new RuntimeException(e); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
111 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
112 return writer; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
113 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
114 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
115 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
116 public static LuanTable binaryWriter(final OutputStream out) { |
411
23b99a5039b5
remove Luan.newTable()
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
117 LuanTable writer = new LuanTable(); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
118 try { |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
119 writer.rawPut( "write", new LuanJavaFunction( |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
120 OutputStream.class.getMethod( "write", new byte[0].getClass() ), out |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
121 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
122 writer.rawPut( "close", new LuanJavaFunction( |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
123 OutputStream.class.getMethod( "close" ), out |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
124 ) ); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
125 } catch(NoSuchMethodException e) { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
126 throw new RuntimeException(e); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
127 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
128 return writer; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
129 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
130 |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
131 static LuanFunction lines(final BufferedReader in) { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
132 return new LuanFunction() { |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
133 @Override public Object call(LuanState luan,Object[] args) throws LuanException { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
134 try { |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
135 if( args.length > 0 ) { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
136 if( args.length > 1 || !"close".equals(args[0]) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
137 throw new LuanException( "the only argument allowed is 'close'" ); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
138 in.close(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
139 return null; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
140 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
141 String rtn = in.readLine(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
142 if( rtn==null ) |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
143 in.close(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
144 return rtn; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
145 } catch(IOException e) { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
146 throw new LuanException(e); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
147 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
148 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
149 }; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
150 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
151 |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
152 static LuanFunction blocks(final InputStream in,final int blockSize) { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
153 return new LuanFunction() { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
154 final byte[] a = new byte[blockSize]; |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
155 |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
156 @Override public Object call(LuanState luan,Object[] args) throws LuanException { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
157 try { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
158 if( args.length > 0 ) { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
159 if( args.length > 1 || !"close".equals(args[0]) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
160 throw new LuanException( "the only argument allowed is 'close'" ); |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
161 in.close(); |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
162 return null; |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
163 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
164 if( in.read(a) == -1 ) { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
165 in.close(); |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
166 return null; |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
167 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
168 return a; |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
169 } catch(IOException e) { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
170 throw new LuanException(e); |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
171 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
172 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
173 }; |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
174 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
175 |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
176 |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
177 private static File objToFile(Object obj) { |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
178 if( obj instanceof String ) { |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
179 return new File((String)obj); |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
180 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
181 if( obj instanceof LuanTable ) { |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
182 LuanTable t = (LuanTable)obj; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
183 Object java = t.rawGet("java"); |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
184 if( java instanceof LuanFile ) { |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
185 LuanFile luanFile = (LuanFile)java; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
186 return luanFile.file; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
187 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
188 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
189 return null; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
190 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
191 |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
192 |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
193 public static abstract class LuanIn { |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
722
diff
changeset
|
194 public abstract InputStream inputStream() throws IOException, LuanException; |
147
cc3a0578edac
fix Io.reverse_pickle
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
145
diff
changeset
|
195 public abstract String to_string(); |
705 | 196 public abstract String to_uri_string(); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
197 |
722 | 198 public Reader reader() throws IOException, LuanException { |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
199 return new InputStreamReader(inputStream()); |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
200 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
201 |
722 | 202 public String read_text() throws IOException, LuanException { |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
203 Reader in = reader(); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
204 String s = Utils.readAll(in); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
205 in.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
206 return s; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
207 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
208 |
722 | 209 public byte[] read_binary() throws IOException, LuanException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
210 InputStream in = inputStream(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
211 byte[] a = Utils.readAll(in); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
212 in.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
213 return a; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
214 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
215 |
722 | 216 public LuanFunction read_lines() throws IOException, LuanException { |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
217 return lines(new BufferedReader(reader())); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
218 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
219 |
722 | 220 public LuanFunction read_blocks(Integer blockSize) throws IOException, LuanException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
221 int n = blockSize!=null ? blockSize : Utils.bufSize; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
222 return blocks(inputStream(),n); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
223 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
224 |
722 | 225 public boolean exists() throws IOException, LuanException { |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
226 try { |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
227 inputStream().close(); |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
228 return true; |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
229 } catch(FileNotFoundException e) { |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
230 return false; |
1251 | 231 } catch(UnknownHostException e) { |
232 return false; | |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
233 } |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
234 } |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
235 |
1083
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
236 public long checksum() throws IOException, LuanException { |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
237 long cs = 0; |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
238 InputStream in = new BufferedInputStream(inputStream()); |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
239 int c; |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
240 while( (c=in.read()) != -1 ) { |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
241 cs = 31 * cs + c; |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
242 } |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
243 in.close(); |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
244 return cs; |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
245 } |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
246 |
297
899253043270
remove PackageLuan.load_lib()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
296
diff
changeset
|
247 public LuanTable table() { |
411
23b99a5039b5
remove Luan.newTable()
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
248 LuanTable tbl = new LuanTable(); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
249 try { |
610
b4f3dbe1c6e3
add Rpc and change Hosting to use Rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
590
diff
changeset
|
250 tbl.rawPut( "java", this ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
251 tbl.rawPut( "to_string", new LuanJavaFunction( |
147
cc3a0578edac
fix Io.reverse_pickle
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
145
diff
changeset
|
252 LuanIn.class.getMethod( "to_string" ), this |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
253 ) ); |
705 | 254 tbl.rawPut( "to_uri_string", new LuanJavaFunction( |
255 LuanIn.class.getMethod( "to_uri_string" ), this | |
256 ) ); | |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
257 tbl.rawPut( "read_text", new LuanJavaFunction( |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
258 LuanIn.class.getMethod( "read_text" ), this |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
259 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
260 tbl.rawPut( "read_binary", new LuanJavaFunction( |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
261 LuanIn.class.getMethod( "read_binary" ), this |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
262 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
263 tbl.rawPut( "read_lines", new LuanJavaFunction( |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
264 LuanIn.class.getMethod( "read_lines" ), this |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
265 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
266 tbl.rawPut( "read_blocks", new LuanJavaFunction( |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
267 LuanIn.class.getMethod( "read_blocks", Integer.class ), this |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
268 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
269 tbl.rawPut( "exists", new LuanJavaFunction( |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
270 LuanIn.class.getMethod( "exists" ), this |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
271 ) ); |
1083
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
272 tbl.rawPut( "checksum", new LuanJavaFunction( |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
273 LuanIn.class.getMethod( "checksum" ), this |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
274 ) ); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
275 } catch(NoSuchMethodException e) { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
276 throw new RuntimeException(e); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
277 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
278 return tbl; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
279 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
280 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
281 |
297
899253043270
remove PackageLuan.load_lib()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
296
diff
changeset
|
282 public static final LuanIn defaultStdin = new LuanIn() { |
261
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
283 |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
722
diff
changeset
|
284 @Override public InputStream inputStream() { |
261
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
285 return System.in; |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
286 } |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
287 |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
288 @Override public String to_string() { |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
289 return "<stdin>"; |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
290 } |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
291 |
705 | 292 @Override public String to_uri_string() { |
293 return "stdin:"; | |
294 } | |
295 | |
261
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
296 @Override public String read_text() throws IOException { |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
297 return Utils.readAll(new InputStreamReader(System.in)); |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
298 } |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
299 |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
300 @Override public byte[] read_binary() throws IOException { |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
301 return Utils.readAll(System.in); |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
302 } |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
303 |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
304 @Override public boolean exists() { |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
305 return true; |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
306 } |
261
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
307 }; |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
308 |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
309 public static abstract class LuanIO extends LuanIn { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
310 abstract OutputStream outputStream() throws IOException; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
311 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
312 public void write(Object obj) throws LuanException, IOException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
313 if( obj instanceof String ) { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
314 String s = (String)obj; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
315 Writer out = new OutputStreamWriter(outputStream()); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
316 out.write(s); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
317 out.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
318 return; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
319 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
320 if( obj instanceof byte[] ) { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
321 byte[] a = (byte[])obj; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
322 OutputStream out = outputStream(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
323 Utils.copyAll(new ByteArrayInputStream(a),out); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
324 out.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
325 return; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
326 } |
745
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
327 if( obj instanceof LuanTable ) { |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
328 LuanTable t = (LuanTable)obj; |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
329 Object java = t.rawGet("java"); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
330 if( java instanceof LuanIn ) { |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
331 LuanIn luanIn = (LuanIn)java; |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
332 InputStream in = luanIn.inputStream(); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
333 OutputStream out = outputStream(); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
334 Utils.copyAll(in,out); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
335 out.close(); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
336 in.close(); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
337 return; |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
338 } |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
339 } |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
340 throw new LuanException( "bad argument #1 to 'write' (string or binary or Io.uri expected)" ); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
341 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
342 |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
343 public LuanTable text_writer() throws IOException { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
344 return textWriter(new BufferedWriter(new OutputStreamWriter(outputStream()))); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
345 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
346 |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
347 public LuanTable binary_writer() throws IOException { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
348 return binaryWriter(new BufferedOutputStream(outputStream())); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
349 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
350 |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
351 public void write_text(LuanState luan,Object... args) throws LuanException, IOException { |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
352 LuanWriter luanWriter = luanWriter(new BufferedWriter(new OutputStreamWriter(outputStream()))); |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
353 luanWriter.write(luan,args); |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
354 luanWriter.close(); |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
355 } |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
356 |
297
899253043270
remove PackageLuan.load_lib()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
296
diff
changeset
|
357 @Override public LuanTable table() { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
358 LuanTable tbl = super.table(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
359 try { |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
360 tbl.rawPut( "write", new LuanJavaFunction( |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
361 LuanIO.class.getMethod( "write", Object.class ), this |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
362 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
363 tbl.rawPut( "text_writer", new LuanJavaFunction( |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
364 LuanIO.class.getMethod( "text_writer" ), this |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
365 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
366 tbl.rawPut( "binary_writer", new LuanJavaFunction( |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
367 LuanIO.class.getMethod( "binary_writer" ), this |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
368 ) ); |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
369 tbl.rawPut( "write_text", new LuanJavaFunction( |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
370 LuanIO.class.getMethod( "write_text", LuanState.class, new Object[0].getClass() ), this |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
371 ) ); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
372 } catch(NoSuchMethodException e) { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
373 throw new RuntimeException(e); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
374 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
375 return tbl; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
376 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
377 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
378 |
590 | 379 private static final LuanIO nullIO = new LuanIO() { |
380 private final InputStream in = new InputStream() { | |
381 @Override public int read() { | |
382 return -1; | |
383 } | |
384 }; | |
385 private final OutputStream out = new OutputStream() { | |
386 @Override public void write(int b) {} | |
387 }; | |
388 | |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
722
diff
changeset
|
389 @Override public InputStream inputStream() { |
590 | 390 return in; |
391 } | |
392 | |
393 @Override OutputStream outputStream() { | |
394 return out; | |
395 } | |
396 | |
397 @Override public String to_string() { | |
398 return "<null>"; | |
399 } | |
400 | |
705 | 401 @Override public String to_uri_string() { |
402 return "null:"; | |
403 } | |
404 | |
590 | 405 }; |
406 | |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
407 public static final class LuanString extends LuanIO { |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
408 private String s; |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
409 |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
410 private LuanString(String s) { |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
411 this.s = s; |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
412 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
413 |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
722
diff
changeset
|
414 @Override public InputStream inputStream() { |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
415 throw new UnsupportedOperationException(); |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
416 } |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
417 |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
418 @Override OutputStream outputStream() { |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
419 throw new UnsupportedOperationException(); |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
420 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
421 |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
422 @Override public String to_string() { |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
423 return "<string>"; |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
424 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
425 |
705 | 426 @Override public String to_uri_string() { |
427 return "string:" + s; | |
428 } | |
429 | |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
430 @Override public Reader reader() { |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
431 return new StringReader(s); |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
432 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
433 |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
434 @Override public String read_text() { |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
435 return s; |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
436 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
437 |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
438 @Override public boolean exists() { |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
439 return true; |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
440 } |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
441 |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
442 @Override public LuanTable text_writer() throws IOException { |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
443 LuanWriter luanWriter = new LuanWriter() { |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
444 private final Writer out = new StringWriter(); |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
445 |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
446 public void write(LuanState luan,Object... args) throws LuanException, IOException { |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
447 for( Object obj : args ) { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
448 out.write( luan.toString(obj) ); |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
449 } |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
450 } |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
451 |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
452 public void close() throws IOException { |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
453 s = out.toString(); |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
454 } |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
455 }; |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
456 return writer(luanWriter); |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
457 } |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
458 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
459 |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
460 public static final class LuanFile extends LuanIO { |
710
63cda9eec9a0
make LuanFile.file public
Franklin Schmidt <fschmidt@gmail.com>
parents:
706
diff
changeset
|
461 public final File file; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
462 |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
463 private LuanFile(LuanState luan,File file) throws LuanException { |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
464 this(file); |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
465 check(luan,"file:"+file.toString()); |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
466 } |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
467 |
202
75750ceb45ee
add LuanState.registry
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
468 private LuanFile(File file) { |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
469 this.file = file; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
470 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
471 |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
722
diff
changeset
|
472 @Override public InputStream inputStream() throws IOException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
473 return new FileInputStream(file); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
474 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
475 |
144
2e92f0a6fcac
add Reactionary.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
143
diff
changeset
|
476 @Override OutputStream outputStream() throws IOException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
477 return new FileOutputStream(file); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
478 } |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
479 |
147
cc3a0578edac
fix Io.reverse_pickle
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
145
diff
changeset
|
480 @Override public String to_string() { |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
481 return file.toString(); |
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
482 } |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
483 |
705 | 484 @Override public String to_uri_string() { |
485 return "file:" + file.toString(); | |
486 } | |
487 | |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
488 public LuanTable child(LuanState luan,String name) throws LuanException { |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
489 return new LuanFile(luan,new File(file,name)).table(); |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
490 } |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
491 |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
492 public LuanTable children(LuanState luan) throws LuanException { |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
493 File[] files = file.listFiles(); |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
494 if( files==null ) |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
495 return null; |
411
23b99a5039b5
remove Luan.newTable()
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
496 LuanTable list = new LuanTable(); |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
497 for( File f : files ) { |
432
d9df6d6cb927
finish fixing LuanTable to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
431
diff
changeset
|
498 list.rawPut(list.rawLength()+1,new LuanFile(luan,f).table()); |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
499 } |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
500 return list; |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
501 } |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
502 |
323
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
503 public LuanTable parent(LuanState luan) throws LuanException, IOException { |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
504 File parent = file.getParentFile(); |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
505 if( parent==null ) |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
506 parent = file.getCanonicalFile().getParentFile(); |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
507 return new LuanFile(luan,parent).table(); |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
508 } |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
509 |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
510 @Override public boolean exists() { |
237
97d175772fed
implement mmake
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
511 return file.exists(); |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
512 } |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
513 |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
514 public void rename_to(Object destObj) throws LuanException { |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
515 File dest = objToFile(destObj); |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
516 if( dest==null ) |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
517 throw new LuanException( "bad argument #1 to 'objToFile' (string or file table expected)" ); |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
518 if( !file.renameTo(dest) ) |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
519 throw new LuanException("couldn't rename file "+file+" to "+dest); |
293
a50e88d3547c
add Web_server.init();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
283
diff
changeset
|
520 } |
a50e88d3547c
add Web_server.init();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
283
diff
changeset
|
521 |
310
9e9bb358b2df
add File.canonical()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
301
diff
changeset
|
522 public LuanTable canonical(LuanState luan) throws LuanException, IOException { |
9e9bb358b2df
add File.canonical()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
301
diff
changeset
|
523 return new LuanFile(luan,file.getCanonicalFile()).table(); |
9e9bb358b2df
add File.canonical()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
301
diff
changeset
|
524 } |
9e9bb358b2df
add File.canonical()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
301
diff
changeset
|
525 |
749
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
526 public LuanTable create_temp_file(LuanState luan,String prefix,String suffix) throws LuanException, IOException { |
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
527 File tmp = File.createTempFile(prefix,suffix,file); |
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
528 return new LuanFile(luan,tmp).table(); |
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
529 } |
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
530 |
751
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
531 public void delete() throws LuanException { |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
532 if( file.exists() ) |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
533 delete(file); |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
534 } |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
535 |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
536 private static void delete(File file) throws LuanException { |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
537 File[] children = file.listFiles(); |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
538 if( children != null ) { |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
539 for( File child : children ) { |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
540 delete(child); |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
541 } |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
542 } |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
543 if( !file.delete() ) |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
544 throw new LuanException("couldn't delete file "+file); |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
545 } |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
546 |
752 | 547 public void mkdir() throws LuanException { |
548 if( !file.isDirectory() ) { | |
549 if( !file.mkdirs() ) | |
550 throw new LuanException("couldn't make directory "+file); | |
551 } | |
552 } | |
553 | |
768
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
554 public void set_last_modified(long time) throws LuanException { |
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
555 if( !file.setLastModified(time) ) |
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
556 throw new LuanException("couldn't set_last_modified on "+file); |
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
557 } |
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
558 |
297
899253043270
remove PackageLuan.load_lib()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
296
diff
changeset
|
559 @Override public LuanTable table() { |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
560 LuanTable tbl = super.table(); |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
561 try { |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
562 tbl.rawPut( "name", new LuanJavaFunction( |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
563 File.class.getMethod( "getName" ), file |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
564 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
565 tbl.rawPut( "is_directory", new LuanJavaFunction( |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
566 File.class.getMethod( "isDirectory" ), file |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
567 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
568 tbl.rawPut( "is_file", new LuanJavaFunction( |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
569 File.class.getMethod( "isFile" ), file |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
570 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
571 tbl.rawPut( "delete", new LuanJavaFunction( |
751
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
572 LuanFile.class.getMethod( "delete" ), this |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
573 ) ); |
764
d2f61d5be9cc
add file.delete_on_exit()
Franklin Schmidt <fschmidt@gmail.com>
parents:
761
diff
changeset
|
574 tbl.rawPut( "delete_on_exit", new LuanJavaFunction( |
d2f61d5be9cc
add file.delete_on_exit()
Franklin Schmidt <fschmidt@gmail.com>
parents:
761
diff
changeset
|
575 File.class.getMethod( "deleteOnExit" ), file |
d2f61d5be9cc
add file.delete_on_exit()
Franklin Schmidt <fschmidt@gmail.com>
parents:
761
diff
changeset
|
576 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
577 tbl.rawPut( "mkdir", new LuanJavaFunction( |
752 | 578 LuanFile.class.getMethod( "mkdir" ), this |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
579 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
580 tbl.rawPut( "last_modified", new LuanJavaFunction( |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
581 File.class.getMethod( "lastModified" ), file |
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
582 ) ); |
768
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
583 tbl.rawPut( "set_last_modified", new LuanJavaFunction( |
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
584 LuanFile.class.getMethod( "set_last_modified", Long.TYPE ), this |
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
585 ) ); |
759
ae612dfc57cb
better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents:
758
diff
changeset
|
586 tbl.rawPut( "length", new LuanJavaFunction( |
ae612dfc57cb
better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents:
758
diff
changeset
|
587 File.class.getMethod( "length" ), file |
ae612dfc57cb
better handling of longs in rpc and json
Franklin Schmidt <fschmidt@gmail.com>
parents:
758
diff
changeset
|
588 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
589 tbl.rawPut( "child", new LuanJavaFunction( |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
590 LuanFile.class.getMethod( "child", LuanState.class, String.class ), this |
164
78ba371ea1e9
merge Os.File into Io.File and remove Os
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
147
diff
changeset
|
591 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
592 tbl.rawPut( "children", new LuanJavaFunction( |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
593 LuanFile.class.getMethod( "children", LuanState.class ), this |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
594 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
595 tbl.rawPut( "parent", new LuanJavaFunction( |
323
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
596 LuanFile.class.getMethod( "parent", LuanState.class ), this |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
597 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
598 tbl.rawPut( "rename_to", new LuanJavaFunction( |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
599 LuanFile.class.getMethod( "rename_to", Object.class ), this |
293
a50e88d3547c
add Web_server.init();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
283
diff
changeset
|
600 ) ); |
427
dae264ad6a7b
fix LuanTable.put() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
426
diff
changeset
|
601 tbl.rawPut( "canonical", new LuanJavaFunction( |
310
9e9bb358b2df
add File.canonical()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
301
diff
changeset
|
602 LuanFile.class.getMethod( "canonical", LuanState.class ), this |
9e9bb358b2df
add File.canonical()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
301
diff
changeset
|
603 ) ); |
749
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
604 tbl.rawPut( "create_temp_file", new LuanJavaFunction( |
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
605 LuanFile.class.getMethod( "create_temp_file", LuanState.class, String.class, String.class ), this |
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
606 ) ); |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
607 } catch(NoSuchMethodException e) { |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
608 throw new RuntimeException(e); |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
609 } |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
610 return tbl; |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
611 } |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
612 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
613 |
1121
4cf541886663
check for too many arguments to java fns
Franklin Schmidt <fschmidt@gmail.com>
parents:
1120
diff
changeset
|
614 public static LuanTable null_(String ignore) { |
590 | 615 return nullIO.table(); |
616 } | |
617 | |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
618 public static LuanTable string(String s) throws LuanException { |
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
619 Utils.checkNotNull(s); |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
620 return new LuanString(s).table(); |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
621 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
622 |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
623 public static LuanTable file(LuanState luan,String name) throws LuanException { |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
624 File file = new File(name); |
1127 | 625 return new LuanFile(luan,file).table(); |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
626 } |
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
627 |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
628 public static LuanTable classpath(LuanState luan,String name) throws LuanException { |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
629 if( name.contains("//") ) |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
630 return null; |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
631 String path = name; |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
632 check(luan,"classpath:"+path); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
633 URL url; |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
634 if( !path.contains("#") ) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
635 url = ClassLoader.getSystemResource(path); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
636 } else { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
637 String[] a = path.split("#"); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
638 url = ClassLoader.getSystemResource(a[0]); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
639 if( url==null ) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
640 for( int i=1; i<a.length; i++ ) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
641 url = ClassLoader.getSystemResource(a[0]+"/"+a[i]); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
642 if( url != null ) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
643 try { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
644 url = new URL(url,"."); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
645 } catch(MalformedURLException e) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
646 throw new RuntimeException(e); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
647 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
648 break; |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
649 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
650 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
651 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
652 } |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
653 if( url != null ) |
722 | 654 return new LuanUrl(luan,url,null).table(); |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
655 |
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
656 return null; |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
657 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
658 |
722 | 659 private static LuanTable url(LuanState luan,String url,LuanTable options) throws IOException, LuanException { |
660 return new LuanUrl(luan,new URL(url),options).table(); | |
263
54873a389f80
add "http" and "https" protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
262
diff
changeset
|
661 } |
54873a389f80
add "http" and "https" protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
262
diff
changeset
|
662 |
722 | 663 public static LuanTable http(LuanState luan,String path,LuanTable options) throws IOException, LuanException { |
664 return url(luan,"http:"+path,options); | |
263
54873a389f80
add "http" and "https" protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
262
diff
changeset
|
665 } |
54873a389f80
add "http" and "https" protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
262
diff
changeset
|
666 |
722 | 667 public static LuanTable https(LuanState luan,String path,LuanTable options) throws IOException, LuanException { |
668 return url(luan,"https:"+path,options); | |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
669 } |
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
670 |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
671 public static LuanTable luan(LuanState luan,String path) throws LuanException { |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
672 return classpath( luan, "luan/modules/" + path ); |
263
54873a389f80
add "http" and "https" protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
262
diff
changeset
|
673 } |
54873a389f80
add "http" and "https" protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
262
diff
changeset
|
674 |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
675 public static LuanTable stdin(LuanState luan) throws LuanException { |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
676 LuanTable io = (LuanTable)PackageLuan.require(luan,"luan:Io.luan"); |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
677 return (LuanTable)io.get(luan,"stdin"); |
265
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
678 } |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
679 |
297
899253043270
remove PackageLuan.load_lib()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
296
diff
changeset
|
680 public static LuanTable newSchemes() { |
411
23b99a5039b5
remove Luan.newTable()
Franklin Schmidt <fschmidt@gmail.com>
parents:
323
diff
changeset
|
681 LuanTable schemes = new LuanTable(); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
682 try { |
1121
4cf541886663
check for too many arguments to java fns
Franklin Schmidt <fschmidt@gmail.com>
parents:
1120
diff
changeset
|
683 schemes.rawPut( "null", new LuanJavaFunction(IoLuan.class.getMethod("null_",String.class),null) ); |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
684 add( schemes, "string", String.class ); |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
685 add( schemes, "file", LuanState.class, String.class ); |
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
686 add( schemes, "classpath", LuanState.class, String.class ); |
1204
5d0cbd908582
remove Io socket support
Franklin Schmidt <fschmidt@gmail.com>
parents:
1181
diff
changeset
|
687 // add( schemes, "socket", String.class ); |
722 | 688 add( schemes, "http", LuanState.class, String.class, LuanTable.class ); |
689 add( schemes, "https", LuanState.class, String.class, LuanTable.class ); | |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
690 add( schemes, "luan", LuanState.class, String.class ); |
272
eb27e765affb
rename Io.protocols to Io.schemes and "class:" to "java:"
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
267
diff
changeset
|
691 add( schemes, "stdin", LuanState.class ); |
761
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
692 add( schemes, "os", LuanState.class, String.class, LuanTable.class ); |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
693 add( schemes, "bash", LuanState.class, String.class, LuanTable.class ); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
694 } catch(NoSuchMethodException e) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
695 throw new RuntimeException(e); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
696 } |
272
eb27e765affb
rename Io.protocols to Io.schemes and "class:" to "java:"
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
267
diff
changeset
|
697 return schemes; |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
698 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
699 |
426
23a93c118042
fix LuanTable.get() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents:
421
diff
changeset
|
700 private static LuanTable schemes(LuanState luan) throws LuanException { |
693
ca169567ce07
module URIs must now include ".luan"
Franklin Schmidt <fschmidt@gmail.com>
parents:
646
diff
changeset
|
701 LuanTable t = (LuanTable)PackageLuan.loaded(luan).rawGet("luan:Io.luan"); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
702 if( t == null ) |
272
eb27e765affb
rename Io.protocols to Io.schemes and "class:" to "java:"
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
267
diff
changeset
|
703 return newSchemes(); |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
704 t = (LuanTable)t.get(luan,"schemes"); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
705 if( t == null ) |
272
eb27e765affb
rename Io.protocols to Io.schemes and "class:" to "java:"
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
267
diff
changeset
|
706 return newSchemes(); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
707 return t; |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
708 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
709 |
722 | 710 public static LuanTable uri(LuanState luan,String name,LuanTable options) throws LuanException { |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
711 int i = name.indexOf(':'); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
712 if( i == -1 ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
713 throw new LuanException( "invalid Io.uri name '"+name+"', missing scheme" ); |
272
eb27e765affb
rename Io.protocols to Io.schemes and "class:" to "java:"
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
267
diff
changeset
|
714 String scheme = name.substring(0,i); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
715 String location = name.substring(i+1); |
272
eb27e765affb
rename Io.protocols to Io.schemes and "class:" to "java:"
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
267
diff
changeset
|
716 LuanTable schemes = schemes(luan); |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
717 LuanFunction opener = (LuanFunction)schemes.get(luan,scheme); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
718 if( opener == null ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
719 throw new LuanException( "invalid scheme '"+scheme+"' in '"+name+"'" ); |
799
9c13a15a4002
Package.load() now returns false instead of null, and caches the result. This cleans up the luan.isLocked issues.
Franklin Schmidt <fschmidt@gmail.com>
parents:
787
diff
changeset
|
720 return (LuanTable)Luan.first(opener.call(luan,new Object[]{location,options})); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
721 } |
1204
5d0cbd908582
remove Io socket support
Franklin Schmidt <fschmidt@gmail.com>
parents:
1181
diff
changeset
|
722 /* |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
723 public static final class LuanSocket extends LuanIO { |
744 | 724 public final Socket socket; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
725 |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
739
diff
changeset
|
726 private LuanSocket(String host,int port) throws LuanException { |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
739
diff
changeset
|
727 try { |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
739
diff
changeset
|
728 this.socket = new Socket(host,port); |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
739
diff
changeset
|
729 } catch(IOException e) { |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
739
diff
changeset
|
730 throw new LuanException(e.toString()); |
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
739
diff
changeset
|
731 } |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
732 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
733 |
743
2c41f2aec92f
improve Rpc and implement rpc call for local webserver
Franklin Schmidt <fschmidt@gmail.com>
parents:
739
diff
changeset
|
734 private LuanSocket(Socket socket) { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
735 this.socket = socket; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
736 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
737 |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
722
diff
changeset
|
738 @Override public InputStream inputStream() throws IOException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
739 return socket.getInputStream(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
740 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
741 |
144
2e92f0a6fcac
add Reactionary.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
143
diff
changeset
|
742 @Override OutputStream outputStream() throws IOException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
743 return socket.getOutputStream(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
744 } |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
125
diff
changeset
|
745 |
147
cc3a0578edac
fix Io.reverse_pickle
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
145
diff
changeset
|
746 @Override public String to_string() { |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
747 return socket.toString(); |
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
748 } |
705 | 749 |
750 @Override public String to_uri_string() { | |
751 throw new UnsupportedOperationException(); | |
752 } | |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
753 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
754 |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
755 public static LuanTable socket(String name) throws LuanException, IOException { |
262
3ccc5205d04d
add "socket" protocol
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
261
diff
changeset
|
756 int i = name.indexOf(':'); |
3ccc5205d04d
add "socket" protocol
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
261
diff
changeset
|
757 if( i == -1 ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
758 throw new LuanException( "invalid socket '"+name+"', format is: <host>:<port>" ); |
262
3ccc5205d04d
add "socket" protocol
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
261
diff
changeset
|
759 String host = name.substring(0,i); |
3ccc5205d04d
add "socket" protocol
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
261
diff
changeset
|
760 String portStr = name.substring(i+1); |
3ccc5205d04d
add "socket" protocol
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
261
diff
changeset
|
761 int port = Integer.parseInt(portStr); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
762 return new LuanSocket(host,port).table(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
763 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
764 |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
765 public static LuanFunction socket_server(int port) throws IOException { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
766 final ServerSocket ss = new ServerSocket(port); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
767 return new LuanFunction() { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
768 @Override public Object call(LuanState luan,Object[] args) throws LuanException { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
769 try { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
770 if( args.length > 0 ) { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
771 if( args.length > 1 || !"close".equals(args[0]) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
772 throw new LuanException( "the only argument allowed is 'close'" ); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
773 ss.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
774 return null; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
775 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
776 return new LuanSocket(ss.accept()).table(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
777 } catch(IOException e) { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
778 throw new LuanException(e); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
779 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
780 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
781 }; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
782 } |
1204
5d0cbd908582
remove Io socket support
Franklin Schmidt <fschmidt@gmail.com>
parents:
1181
diff
changeset
|
783 */ |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
784 |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
785 public static class BaseOs extends LuanIO { |
761
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
786 private final String cmd; |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
787 final File dir; |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
788 Process proc; |
734 | 789 |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
790 private BaseOs(LuanState luan,String cmd,LuanTable options) throws IOException, LuanException { |
761
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
791 this.cmd = cmd; |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
792 File dir = null; |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
793 if( options != null ) { |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
794 Map map = options.asMap(luan); |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
795 Object obj = map.remove("dir"); |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
796 dir = objToFile(obj); |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
797 if( dir==null ) |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
798 throw new LuanException( "bad option 'dir' (string or file table expected)" ); |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
799 if( !map.isEmpty() ) |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
800 throw new LuanException( "unrecognized options: "+map ); |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
801 } |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
802 this.dir = dir; |
734 | 803 } |
804 | |
805 @Override public InputStream inputStream() throws IOException { | |
806 return proc.getInputStream(); | |
807 } | |
808 | |
809 @Override OutputStream outputStream() throws IOException { | |
810 return proc.getOutputStream(); | |
811 } | |
812 | |
813 @Override public String to_string() { | |
814 return proc.toString(); | |
815 } | |
816 | |
817 @Override public String to_uri_string() { | |
818 throw new UnsupportedOperationException(); | |
819 } | |
820 | |
821 @Override public boolean exists() { | |
822 return true; | |
823 } | |
824 | |
825 public void wait_for() | |
826 throws IOException, LuanException | |
827 { | |
828 try { | |
829 proc.waitFor(); | |
830 } catch(InterruptedException e) { | |
831 throw new RuntimeException(e); | |
832 } | |
833 int exitVal = proc.exitValue(); | |
834 if( exitVal != 0 ) { | |
835 Reader err = new InputStreamReader(proc.getErrorStream()); | |
1107 | 836 String error = "exit value "+exitVal+" in: "+cmd+"\n"+Utils.readAll(err); |
734 | 837 err.close(); |
838 throw new LuanException(error); | |
839 } | |
840 } | |
841 | |
842 @Override public String read_text() throws IOException, LuanException { | |
843 String s = super.read_text(); | |
844 wait_for(); | |
845 return s; | |
846 } | |
847 | |
848 @Override public LuanTable table() { | |
849 LuanTable tbl = super.table(); | |
850 try { | |
851 tbl.rawPut( "wait_for", new LuanJavaFunction( | |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
852 BaseOs.class.getMethod( "wait_for" ), this |
734 | 853 ) ); |
854 } catch(NoSuchMethodException e) { | |
855 throw new RuntimeException(e); | |
856 } | |
857 return tbl; | |
858 } | |
859 } | |
860 | |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
861 public static final class LuanOs extends BaseOs { |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
862 private LuanOs(LuanState luan,String cmd,LuanTable options) throws IOException, LuanException { |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
863 super(luan,cmd,options); |
1128 | 864 check(luan,"os:"+cmd); |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
865 this.proc = Runtime.getRuntime().exec(cmd,null,dir); |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
866 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
867 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
868 |
761
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
869 public static LuanTable os(LuanState luan,String cmd,LuanTable options) throws IOException, LuanException { |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
870 return new LuanOs(luan,cmd,options).table(); |
734 | 871 } |
872 | |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
873 public static final class LuanBash extends BaseOs { |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
874 private LuanBash(LuanState luan,String cmd,LuanTable options) throws IOException, LuanException { |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
875 super(luan,cmd,options); |
1128 | 876 check(luan,"bash:"+cmd); |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
877 this.proc = Runtime.getRuntime().exec(new String[]{"bash","-c",cmd},null,dir); |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
878 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
879 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
880 |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
881 public static LuanTable bash(LuanState luan,String cmd,LuanTable options) throws IOException, LuanException { |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
882 return new LuanBash(luan,cmd,options).table(); |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
883 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
884 |
734 | 885 |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
886 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
887 public static class LuanInput extends LuanIn { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
888 private final InputStream in; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
889 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
890 public LuanInput(InputStream in) { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
891 this.in = in; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
892 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
893 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
894 @Override public InputStream inputStream() { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
895 return in; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
896 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
897 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
898 @Override public String to_string() { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
899 return "<input_stream>"; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
900 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
901 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
902 @Override public String to_uri_string() { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
903 throw new UnsupportedOperationException(); |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
904 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
905 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
906 @Override public boolean exists() { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
907 return true; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
908 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
909 }; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
910 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
911 |
701 | 912 public static String ip(String domain) { |
913 try { | |
914 return InetAddress.getByName(domain).getHostAddress(); | |
915 } catch(UnknownHostException e) { | |
916 return null; | |
917 } | |
918 } | |
765 | 919 |
735 | 920 public static LuanTable my_ips() throws IOException { |
921 LuanTable tbl = new LuanTable(); | |
922 for( Enumeration<NetworkInterface> e1 = NetworkInterface.getNetworkInterfaces(); e1.hasMoreElements(); ) { | |
923 NetworkInterface ni = e1.nextElement(); | |
924 for( Enumeration<InetAddress> e2 = ni.getInetAddresses(); e2.hasMoreElements(); ) { | |
925 InetAddress ia = e2.nextElement(); | |
926 if( ia instanceof Inet4Address ) | |
927 tbl.rawPut(ia.getHostAddress(),true); | |
928 } | |
929 } | |
930 return tbl; | |
931 } | |
765 | 932 |
746 | 933 /* |
706 | 934 // files maps zip name to uri |
935 public static void zip(LuanState luan,String zipUri,LuanTable files) throws LuanException, IOException { | |
722 | 936 Object obj = uri(luan,zipUri,null).rawGet("java"); |
706 | 937 if( !(obj instanceof LuanIO) ) |
938 throw new LuanException("invalid uri for zip"); | |
939 LuanIO zipIo = (LuanIO)obj; | |
940 ZipOutputStream out = new ZipOutputStream(zipIo.outputStream()); | |
941 for( Map.Entry<Object,Object> entry : files.iterable(luan) ) { | |
942 obj = entry.getKey(); | |
943 if( !(obj instanceof String) ) | |
944 throw new LuanException("zip file table keys must be strings"); | |
945 String fileName = (String)obj; | |
946 obj = entry.getValue(); | |
947 if( !(obj instanceof String) ) | |
948 throw new LuanException("zip file table values must be strings"); | |
949 String uriStr = (String)obj; | |
950 out.putNextEntry(new ZipEntry(fileName)); | |
722 | 951 obj = uri(luan,uriStr,null).rawGet("java"); |
706 | 952 if( !(obj instanceof LuanIn) ) |
953 throw new LuanException("invalid uri for zip"); | |
954 LuanIn zipIn = (LuanIn)obj; | |
955 InputStream in = zipIn.inputStream(); | |
956 Utils.copyAll(in,out); | |
957 in.close(); | |
958 out.closeEntry(); | |
959 } | |
960 out.close(); | |
961 } | |
746 | 962 */ |
706 | 963 |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
964 // security |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
965 |
1134 | 966 public static void unrestricted(LuanState luan) throws LuanException { |
967 JavaLuan.check(luan); | |
968 luan.javaOk.unrestrictedIo = true; | |
969 } | |
970 | |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
971 public interface Security { |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
972 public void check(LuanState luan,String name) throws LuanException; |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
973 } |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
974 |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
975 private static String SECURITY_KEY = "Io.Security"; |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
976 |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
977 private static void check(LuanState luan,String name) throws LuanException { |
1134 | 978 if( luan.javaOk.unrestrictedIo ) |
1133 | 979 return; |
433
c6bcb8859b93
make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents:
432
diff
changeset
|
980 Security s = (Security)luan.registry().get(SECURITY_KEY); |
204
cee6581b6f56
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
981 if( s!=null ) |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
982 s.check(luan,name); |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
983 } |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
984 |
204
cee6581b6f56
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
985 public static void setSecurity(LuanState luan,Security s) { |
433
c6bcb8859b93
make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents:
432
diff
changeset
|
986 luan.registry().put(SECURITY_KEY,s); |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
987 } |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
988 |
168
ebe9db183eb7
rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
167
diff
changeset
|
989 private void IoLuan() {} // never |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
990 } |