Mercurial Hosting > luan
annotate src/luan/modules/IoLuan.java @ 1311:ca742d51b31f
don't delete into symbolic links
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 24 Jan 2019 21:15:03 -0700 |
parents | 781ec0a92bb5 |
children | 15af473045c4 |
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; |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
19 import java.io.StringWriter; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
20 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
|
21 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
|
22 import java.net.URL; |
701 | 23 import java.net.InetAddress; |
735 | 24 import java.net.Inet4Address; |
25 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
|
26 import java.net.MalformedURLException; |
701 | 27 import java.net.UnknownHostException; |
1311
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
28 import java.nio.file.Files; |
735 | 29 import java.util.Enumeration; |
706 | 30 import java.util.Map; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
31 import luan.LuanState; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
32 import luan.LuanTable; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
33 import luan.LuanFunction; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
34 import luan.LuanException; |
725
a741a3a33423
add url support for multipart/form-data
Franklin Schmidt <fschmidt@gmail.com>
parents:
722
diff
changeset
|
35 import luan.modules.url.LuanUrl; |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
36 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
37 |
168
ebe9db183eb7
rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
167
diff
changeset
|
38 public final class IoLuan { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 |
118
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
40 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
|
41 if( prompt==null ) |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
42 prompt = "> "; |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
43 return System.console().readLine(prompt); |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
44 } |
735708619119
add Debug.debug()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
116
diff
changeset
|
45 |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
46 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
47 public interface LuanWriter { |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
48 public Object out(); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
49 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
|
50 public void close() throws IOException; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
51 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
52 |
1280 | 53 public static LuanWriter luanWriter(final PrintStream out) { |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
54 return new LuanWriter() { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
55 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
56 public Object out() { |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
57 return out; |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
58 } |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
59 |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
60 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
|
61 for( Object obj : args ) { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
62 out.print( luan.toString(obj) ); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
63 } |
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 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
66 public void close() { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
67 out.close(); |
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 |
1280 | 72 public static LuanWriter luanWriter(final Writer out) { |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
73 return new LuanWriter() { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
74 |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
75 public Object out() { |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
76 return out; |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
77 } |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
78 |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
79 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
|
80 for( Object obj : args ) { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
81 out.write( luan.toString(obj) ); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
82 } |
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 |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
85 public void close() throws IOException { |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
86 out.close(); |
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 }; |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
89 } |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
90 |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
91 static LuanFunction lines(final BufferedReader in) { |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
92 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
|
93 @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
|
94 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
|
95 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
|
96 if( args.length > 1 || !"close".equals(args[0]) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
97 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
|
98 in.close(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
99 return null; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
100 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
101 String rtn = in.readLine(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
102 if( rtn==null ) |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
103 in.close(); |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
104 return rtn; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
105 } catch(IOException e) { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
106 throw new LuanException(e); |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
107 } |
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 }; |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
110 } |
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
111 |
116
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
112 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
|
113 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
|
114 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
|
115 |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
116 @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
|
117 try { |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
118 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
|
119 if( args.length > 1 || !"close".equals(args[0]) ) |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
120 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
|
121 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
|
122 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
|
123 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
124 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
|
125 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
|
126 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
|
127 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
128 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
|
129 } catch(IOException e) { |
646
cdc70de628b5
simplify LuanException
Franklin Schmidt <fschmidt@gmail.com>
parents:
611
diff
changeset
|
130 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
|
131 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
132 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
133 }; |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
134 } |
1ff1c32417eb
more IoLib work and added init.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
115
diff
changeset
|
135 |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
136 |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
137 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
|
138 if( obj instanceof String ) { |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
139 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
|
140 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
141 if( obj instanceof LuanTable ) { |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
142 LuanTable t = (LuanTable)obj; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
143 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
|
144 if( java instanceof LuanFile ) { |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
145 LuanFile luanFile = (LuanFile)java; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
146 return luanFile.file; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
147 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
148 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
149 return null; |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
150 } |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
151 |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
152 |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
153 public static abstract class LuanIn { |
1278 | 154 protected String charset = null; |
155 | |
1267 | 156 public abstract InputStream inputStream(LuanState luan) throws IOException, LuanException; |
147
cc3a0578edac
fix Io.reverse_pickle
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
145
diff
changeset
|
157 public abstract String to_string(); |
705 | 158 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
|
159 |
1267 | 160 public Reader reader(LuanState luan) throws IOException, LuanException { |
1278 | 161 InputStream in = inputStream(luan); |
162 return charset==null ? new InputStreamReader(in) : new InputStreamReader(in,charset); | |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
163 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
164 |
1267 | 165 public String read_text(LuanState luan) throws IOException, LuanException { |
166 Reader in = reader(luan); | |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
167 String s = Utils.readAll(in); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
168 in.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
169 return s; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
170 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
171 |
1267 | 172 public byte[] read_binary(LuanState luan) throws IOException, LuanException { |
173 InputStream in = inputStream(luan); | |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
174 byte[] a = Utils.readAll(in); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
175 in.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
176 return a; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
177 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
178 |
1267 | 179 public LuanFunction read_lines(LuanState luan) throws IOException, LuanException { |
180 return lines(new BufferedReader(reader(luan))); | |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
181 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
182 |
1267 | 183 public LuanFunction read_blocks(LuanState luan,Integer blockSize) throws IOException, LuanException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
184 int n = blockSize!=null ? blockSize : Utils.bufSize; |
1267 | 185 return blocks(inputStream(luan),n); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
186 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
187 |
1267 | 188 public boolean exists(LuanState luan) 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
|
189 try { |
1267 | 190 inputStream(luan).close(); |
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
|
191 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
|
192 } 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
|
193 return false; |
1251 | 194 } catch(UnknownHostException e) { |
195 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
|
196 } |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
197 } |
454a486d9c19
allow IO on files that don't exist
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
264
diff
changeset
|
198 |
1267 | 199 public long checksum(LuanState luan) throws IOException, LuanException { |
1083
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
200 long cs = 0; |
1267 | 201 InputStream in = new BufferedInputStream(inputStream(luan)); |
1083
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
202 int c; |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
203 while( (c=in.read()) != -1 ) { |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
204 cs = 31 * cs + c; |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
205 } |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
206 in.close(); |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
207 return cs; |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
208 } |
e7fb974e0c26
add Io checksum and use it for push
Franklin Schmidt <fschmidt@gmail.com>
parents:
799
diff
changeset
|
209 |
1278 | 210 public String charset() { |
211 return charset; | |
212 } | |
213 | |
214 public void set_charset(String charset) { | |
215 this.charset = charset; | |
216 } | |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
217 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
218 |
297
899253043270
remove PackageLuan.load_lib()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
296
diff
changeset
|
219 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
|
220 |
1267 | 221 @Override public InputStream inputStream(LuanState luan) { |
261
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
222 return System.in; |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
223 } |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
224 |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
225 @Override public String to_string() { |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
226 return "<stdin>"; |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
227 } |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
228 |
705 | 229 @Override public String to_uri_string() { |
230 return "stdin:"; | |
231 } | |
232 | |
1267 | 233 @Override public String read_text(LuanState luan) throws IOException { |
261
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
234 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
|
235 } |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
236 |
1267 | 237 @Override public byte[] read_binary(LuanState luan) throws IOException { |
261
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
238 return Utils.readAll(System.in); |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
239 } |
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
|
240 |
1267 | 241 @Override public boolean exists(LuanState luan) { |
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
|
242 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
|
243 } |
261
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
244 }; |
715c4a6e1169
simplify Io.stdin
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
245 |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
246 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
|
247 abstract OutputStream outputStream() throws IOException; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
248 |
1278 | 249 private Writer writer() throws IOException { |
250 OutputStream out = outputStream(); | |
251 return charset==null ? new OutputStreamWriter(out) : new OutputStreamWriter(out,charset); | |
252 } | |
253 | |
1267 | 254 public void write(LuanState luan,Object obj) throws LuanException, IOException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
255 if( obj instanceof String ) { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
256 String s = (String)obj; |
1278 | 257 Writer out = writer(); |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
258 out.write(s); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
259 out.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
260 return; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
261 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
262 if( obj instanceof byte[] ) { |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
263 byte[] a = (byte[])obj; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
264 OutputStream out = outputStream(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
265 Utils.copyAll(new ByteArrayInputStream(a),out); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
266 out.close(); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
267 return; |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
268 } |
745
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
269 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
|
270 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
|
271 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
|
272 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
|
273 LuanIn luanIn = (LuanIn)java; |
1267 | 274 InputStream in = luanIn.inputStream(luan); |
745
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
275 OutputStream out = outputStream(); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
276 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
|
277 out.close(); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
278 in.close(); |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
279 return; |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
280 } |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
281 } |
9c1f28b26395
a uri can now write another uri which copies the content
Franklin Schmidt <fschmidt@gmail.com>
parents:
744
diff
changeset
|
282 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
|
283 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
284 |
1280 | 285 public LuanWriter text_writer() throws IOException { |
286 return luanWriter(new BufferedWriter(writer())); | |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
287 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
288 |
1280 | 289 public OutputStream binary_writer() throws IOException { |
290 return new BufferedOutputStream(outputStream()); | |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
291 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
292 |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
293 public void write_text(LuanState luan,Object... args) throws LuanException, IOException { |
1278 | 294 LuanWriter luanWriter = luanWriter(new BufferedWriter(writer())); |
1181
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
295 luanWriter.write(luan,args); |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
296 luanWriter.close(); |
51d1342e25ad
luanhost password handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
1134
diff
changeset
|
297 } |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
298 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
299 |
1280 | 300 public static final LuanIO nullIO = new LuanIO() { |
590 | 301 private final InputStream in = new InputStream() { |
302 @Override public int read() { | |
303 return -1; | |
304 } | |
305 }; | |
306 private final OutputStream out = new OutputStream() { | |
307 @Override public void write(int b) {} | |
308 }; | |
309 | |
1267 | 310 @Override public InputStream inputStream(LuanState luan) { |
590 | 311 return in; |
312 } | |
313 | |
314 @Override OutputStream outputStream() { | |
315 return out; | |
316 } | |
317 | |
318 @Override public String to_string() { | |
319 return "<null>"; | |
320 } | |
321 | |
705 | 322 @Override public String to_uri_string() { |
323 return "null:"; | |
324 } | |
325 | |
590 | 326 }; |
327 | |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
328 public static final class LuanString extends LuanIO { |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
329 private String s; |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
330 |
1280 | 331 public LuanString(String s) throws LuanException { |
332 Utils.checkNotNull(s); | |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
333 this.s = s; |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
334 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
335 |
1267 | 336 @Override public InputStream inputStream(LuanState luan) { |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
337 throw new UnsupportedOperationException(); |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
338 } |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
339 |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
340 @Override OutputStream outputStream() { |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
341 throw new UnsupportedOperationException(); |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
342 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
343 |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
344 @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
|
345 return "<string>"; |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
346 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
347 |
705 | 348 @Override public String to_uri_string() { |
349 return "string:" + s; | |
350 } | |
351 | |
1267 | 352 @Override public Reader reader(LuanState luan) { |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
353 return new StringReader(s); |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
354 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
355 |
1267 | 356 @Override public String read_text(LuanState luan) { |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
357 return s; |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
358 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
359 |
1267 | 360 @Override public boolean exists(LuanState luan) { |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
361 return true; |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
362 } |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
363 |
1280 | 364 @Override public LuanWriter text_writer() { |
365 return new LuanWriter() { | |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
366 private final Writer out = new StringWriter(); |
1257
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
367 |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
368 public Object out() { |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
369 return out; |
e38f5869e9df
don't reset in send_redirect and other improvements
Franklin Schmidt <fschmidt@gmail.com>
parents:
1251
diff
changeset
|
370 } |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
371 |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
372 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
|
373 for( Object obj : args ) { |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
374 out.write( luan.toString(obj) ); |
421
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
375 } |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
376 } |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
377 |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
378 public void close() throws IOException { |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
379 s = out.toString(); |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
380 } |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
381 }; |
b31d614343e8
add Io.LuanString.text_writer();
Franklin Schmidt <fschmidt@gmail.com>
parents:
411
diff
changeset
|
382 } |
314
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
383 } |
7c4f52262213
add Io.schemes.string
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
310
diff
changeset
|
384 |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
385 public static final class LuanFile extends LuanIO { |
710
63cda9eec9a0
make LuanFile.file public
Franklin Schmidt <fschmidt@gmail.com>
parents:
706
diff
changeset
|
386 public final File file; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
387 |
1280 | 388 public LuanFile(LuanState luan,String path) throws LuanException { |
389 this(luan,new File(path)); | |
390 } | |
391 | |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
392 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
|
393 this(file); |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
394 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
|
395 } |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
396 |
202
75750ceb45ee
add LuanState.registry
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
397 private LuanFile(File file) { |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
398 this.file = file; |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
399 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
400 |
1267 | 401 @Override public InputStream inputStream(LuanState luan) throws IOException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
402 return new FileInputStream(file); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
403 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
404 |
144
2e92f0a6fcac
add Reactionary.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
143
diff
changeset
|
405 @Override OutputStream outputStream() throws IOException { |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
406 return new FileOutputStream(file); |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
407 } |
143
fcb81fa2df0d
handle urls and java resources as files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
142
diff
changeset
|
408 |
147
cc3a0578edac
fix Io.reverse_pickle
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
145
diff
changeset
|
409 @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
|
410 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
|
411 } |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
412 |
705 | 413 @Override public String to_uri_string() { |
414 return "file:" + file.toString(); | |
415 } | |
416 | |
1280 | 417 public LuanFile child(LuanState luan,String name) throws LuanException { |
418 return new LuanFile(luan,new File(file,name)); | |
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
|
419 } |
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
|
420 |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
421 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
|
422 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
|
423 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
|
424 return null; |
1267 | 425 LuanTable list = new LuanTable(luan); |
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
|
426 for( File f : files ) { |
1280 | 427 list.rawPut(list.rawLength()+1,new LuanFile(luan,f)); |
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
|
428 } |
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
|
429 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
|
430 } |
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
|
431 |
1280 | 432 public LuanFile parent(LuanState luan) throws LuanException, IOException { |
323
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
433 File parent = file.getParentFile(); |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
434 if( parent==null ) |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
435 parent = file.getCanonicalFile().getParentFile(); |
1280 | 436 return new LuanFile(luan,parent); |
323
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
437 } |
cd2924a1052c
improve testing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
314
diff
changeset
|
438 |
1267 | 439 @Override public boolean exists(LuanState luan) { |
237
97d175772fed
implement mmake
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
221
diff
changeset
|
440 return file.exists(); |
145
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
441 } |
90f38a5d0e0a
add Os.File
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
144
diff
changeset
|
442 |
758
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
443 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
|
444 File dest = objToFile(destObj); |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
445 if( dest==null ) |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
446 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
|
447 if( !file.renameTo(dest) ) |
c29d11d675fd
added Json.toString() and rpc now sends tables as json
Franklin Schmidt <fschmidt@gmail.com>
parents:
755
diff
changeset
|
448 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
|
449 } |
a50e88d3547c
add Web_server.init();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
283
diff
changeset
|
450 |
1280 | 451 public LuanFile canonical(LuanState luan) throws LuanException, IOException { |
452 return new LuanFile(luan,file.getCanonicalFile()); | |
310
9e9bb358b2df
add File.canonical()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
301
diff
changeset
|
453 } |
9e9bb358b2df
add File.canonical()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
301
diff
changeset
|
454 |
1280 | 455 public LuanFile create_temp_file(LuanState luan,String prefix,String suffix) throws LuanException, IOException { |
749
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
456 File tmp = File.createTempFile(prefix,suffix,file); |
1280 | 457 return new LuanFile(luan,tmp); |
749
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
458 } |
85f5444fb7d4
add rcp lucene backup
Franklin Schmidt <fschmidt@gmail.com>
parents:
748
diff
changeset
|
459 |
751
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
460 public void delete() throws LuanException { |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
461 if( file.exists() ) |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
462 delete(file); |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
463 } |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
464 |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
465 private static void delete(File file) throws LuanException { |
1311
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
466 if( !isSymbolicLink(file) ) { |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
467 File[] children = file.listFiles(); |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
468 if( children != null ) { |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
469 for( File child : children ) { |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
470 delete(child); |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
471 } |
751
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
472 } |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
473 } |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
474 if( !file.delete() ) |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
475 throw new LuanException("couldn't delete file "+file); |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
476 } |
558740169005
improve file delete()
Franklin Schmidt <fschmidt@gmail.com>
parents:
749
diff
changeset
|
477 |
752 | 478 public void mkdir() throws LuanException { |
479 if( !file.isDirectory() ) { | |
480 if( !file.mkdirs() ) | |
481 throw new LuanException("couldn't make directory "+file); | |
482 } | |
483 } | |
484 | |
768
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
485 public void set_last_modified(long time) throws LuanException { |
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
486 if( !file.setLastModified(time) ) |
ef0fc9ad30c1
add file.set_last_modified()
Franklin Schmidt <fschmidt@gmail.com>
parents:
765
diff
changeset
|
487 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
|
488 } |
1311
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
489 |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
490 private static boolean isSymbolicLink(File file) { |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
491 return Files.isSymbolicLink(file.toPath()); |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
492 } |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
493 |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
494 public boolean is_symbolic_link() { |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
495 return isSymbolicLink(file); |
ca742d51b31f
don't delete into symbolic links
Franklin Schmidt <fschmidt@gmail.com>
parents:
1280
diff
changeset
|
496 } |
125
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
497 } |
0cd559a16758
add sockets
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
498 |
1280 | 499 public static LuanUrl 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
|
500 if( name.contains("//") ) |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
501 return null; |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
502 String path = name; |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
503 check(luan,"classpath:"+path); |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
504 URL url; |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
505 if( !path.contains("#") ) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
506 url = ClassLoader.getSystemResource(path); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
507 } else { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
508 String[] a = path.split("#"); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
509 url = ClassLoader.getSystemResource(a[0]); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
510 if( url==null ) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
511 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
|
512 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
|
513 if( url != null ) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
514 try { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
515 url = new URL(url,"."); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
516 } catch(MalformedURLException e) { |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
517 throw new RuntimeException(e); |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
518 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
519 break; |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
520 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
521 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
522 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
523 } |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
524 if( url != null ) |
1280 | 525 return new LuanUrl(url,null); |
264
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
526 |
9e0d4452e649
implement URL style module names
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
263
diff
changeset
|
527 return null; |
260
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
528 } |
f1f7d8c7e94e
add Io.protocols
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
237
diff
changeset
|
529 |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
530 |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
531 public static class BaseOs extends LuanIO { |
761
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
532 private final String cmd; |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
533 final File dir; |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
534 Process proc; |
734 | 535 |
1267 | 536 private BaseOs(String cmd,LuanTable options) throws IOException, LuanException { |
761
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
537 this.cmd = cmd; |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
538 File dir = null; |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
539 if( options != null ) { |
1267 | 540 Map map = options.asMap(); |
761
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
541 Object obj = map.remove("dir"); |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
542 dir = objToFile(obj); |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
543 if( dir==null ) |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
544 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
|
545 if( !map.isEmpty() ) |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
546 throw new LuanException( "unrecognized options: "+map ); |
99356cfde2f0
remove horrible java zip
Franklin Schmidt <fschmidt@gmail.com>
parents:
759
diff
changeset
|
547 } |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
548 this.dir = dir; |
734 | 549 } |
550 | |
1267 | 551 @Override public InputStream inputStream(LuanState luan) throws IOException { |
734 | 552 return proc.getInputStream(); |
553 } | |
554 | |
555 @Override OutputStream outputStream() throws IOException { | |
556 return proc.getOutputStream(); | |
557 } | |
558 | |
559 @Override public String to_string() { | |
560 return proc.toString(); | |
561 } | |
562 | |
563 @Override public String to_uri_string() { | |
564 throw new UnsupportedOperationException(); | |
565 } | |
566 | |
1267 | 567 @Override public boolean exists(LuanState luan) { |
734 | 568 return true; |
569 } | |
570 | |
571 public void wait_for() | |
572 throws IOException, LuanException | |
573 { | |
574 try { | |
575 proc.waitFor(); | |
576 } catch(InterruptedException e) { | |
577 throw new RuntimeException(e); | |
578 } | |
579 int exitVal = proc.exitValue(); | |
580 if( exitVal != 0 ) { | |
581 Reader err = new InputStreamReader(proc.getErrorStream()); | |
1107 | 582 String error = "exit value "+exitVal+" in: "+cmd+"\n"+Utils.readAll(err); |
734 | 583 err.close(); |
584 throw new LuanException(error); | |
585 } | |
586 } | |
587 | |
1267 | 588 @Override public String read_text(LuanState luan) throws IOException, LuanException { |
589 String s = super.read_text(luan); | |
734 | 590 wait_for(); |
591 return s; | |
592 } | |
593 } | |
594 | |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
595 public static final class LuanOs extends BaseOs { |
1280 | 596 public LuanOs(LuanState luan,String cmd,LuanTable options) throws IOException, LuanException { |
1267 | 597 super(cmd,options); |
1128 | 598 check(luan,"os:"+cmd); |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
599 this.proc = Runtime.getRuntime().exec(cmd,null,dir); |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
600 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
601 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
602 |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
603 public static final class LuanBash extends BaseOs { |
1280 | 604 public LuanBash(LuanState luan,String cmd,LuanTable options) throws IOException, LuanException { |
1267 | 605 super(cmd,options); |
1128 | 606 check(luan,"bash:"+cmd); |
1105
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
607 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
|
608 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
609 } |
27bf094f0ae3
add "bash" Io scheme
Franklin Schmidt <fschmidt@gmail.com>
parents:
1083
diff
changeset
|
610 |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
611 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
612 public static class LuanInput extends LuanIn { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
613 private final InputStream in; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
614 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
615 public LuanInput(InputStream in) { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
616 this.in = in; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
617 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
618 |
1267 | 619 @Override public InputStream inputStream(LuanState luan) { |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
620 return in; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
621 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
622 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
623 @Override public String to_string() { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
624 return "<input_stream>"; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
625 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
626 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
627 @Override public String to_uri_string() { |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
628 throw new UnsupportedOperationException(); |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
629 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
630 |
1267 | 631 @Override public boolean exists(LuanState luan) { |
1120
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
632 return true; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
633 } |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
634 }; |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
635 |
e8fc6712b468
luan Rpc uses luan.lib.rpc
Franklin Schmidt <fschmidt@gmail.com>
parents:
1107
diff
changeset
|
636 |
701 | 637 public static String ip(String domain) { |
638 try { | |
639 return InetAddress.getByName(domain).getHostAddress(); | |
640 } catch(UnknownHostException e) { | |
641 return null; | |
642 } | |
643 } | |
765 | 644 |
1267 | 645 public static LuanTable my_ips(LuanState luan) throws IOException { |
646 LuanTable tbl = new LuanTable(luan); | |
735 | 647 for( Enumeration<NetworkInterface> e1 = NetworkInterface.getNetworkInterfaces(); e1.hasMoreElements(); ) { |
648 NetworkInterface ni = e1.nextElement(); | |
649 for( Enumeration<InetAddress> e2 = ni.getInetAddresses(); e2.hasMoreElements(); ) { | |
650 InetAddress ia = e2.nextElement(); | |
651 if( ia instanceof Inet4Address ) | |
652 tbl.rawPut(ia.getHostAddress(),true); | |
653 } | |
654 } | |
655 return tbl; | |
656 } | |
765 | 657 |
706 | 658 |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
659 // security |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
660 |
1134 | 661 public static void unrestricted(LuanState luan) throws LuanException { |
662 JavaLuan.check(luan); | |
663 luan.javaOk.unrestrictedIo = true; | |
664 } | |
665 | |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
666 public interface Security { |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
667 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
|
668 } |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
669 |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
670 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
|
671 |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
672 private static void check(LuanState luan,String name) throws LuanException { |
1134 | 673 if( luan.javaOk.unrestrictedIo ) |
1133 | 674 return; |
433
c6bcb8859b93
make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents:
432
diff
changeset
|
675 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
|
676 if( s!=null ) |
301
a6bf8ff720f8
add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
299
diff
changeset
|
677 s.check(luan,name); |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
678 } |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
679 |
204
cee6581b6f56
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
680 public static void setSecurity(LuanState luan,Security s) { |
433
c6bcb8859b93
make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents:
432
diff
changeset
|
681 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
|
682 } |
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
202
diff
changeset
|
683 |
168
ebe9db183eb7
rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
167
diff
changeset
|
684 private void IoLuan() {} // never |
115
eacf6ce1b47d
add IoLib
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
685 } |