Mercurial > hg > monetdb-java
annotate src/main/java/org/monetdb/mcl/net/MapiSocket.java @ 756:a39d3a45da56
Resolve warning: [lossy-conversions] implicit cast from long to int in compound assignment is possibly lossy
It was reported by java-20-openjdk/bin/javac -deprecation
author | Martin van Dinther <martin.van.dinther@monetdbsolutions.com> |
---|---|
date | Thu, 04 May 2023 16:31:18 +0200 (2023-05-04) |
parents | 02ad91fb3438 |
children | a80c21fe7bb2 |
rev | line source |
---|---|
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1 /* |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
2 * This Source Code Form is subject to the terms of the Mozilla Public |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
5 * |
716
aeb268156580
Updated Copyright year.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
709
diff
changeset
|
6 * Copyright 1997 - July 2008 CWI, August 2008 - 2023 MonetDB B.V. |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
7 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
8 |
391
f523727db392
Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
368
diff
changeset
|
9 package org.monetdb.mcl.net; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
10 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
11 import java.io.BufferedInputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
12 import java.io.BufferedOutputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
13 import java.io.FileWriter; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
14 import java.io.FilterInputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
15 import java.io.FilterOutputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
16 import java.io.IOException; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
17 import java.io.InputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
18 import java.io.OutputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
19 import java.io.Writer; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
20 import java.net.Socket; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
21 import java.net.SocketException; |
225
5ddb1f20d5d5
Socket may also throw an UnknownHostException. Add it to MapiSocket.connect() and catch it in MonetConnection(Properties props).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
200
diff
changeset
|
22 import java.net.UnknownHostException; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
23 import java.net.URI; |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
24 import java.nio.charset.StandardCharsets; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
25 import java.security.MessageDigest; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
26 import java.security.NoSuchAlgorithmException; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
27 import java.util.ArrayList; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
28 import java.util.HashSet; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
29 import java.util.List; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
30 |
391
f523727db392
Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
368
diff
changeset
|
31 import org.monetdb.mcl.MCLException; |
f523727db392
Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
368
diff
changeset
|
32 import org.monetdb.mcl.io.BufferedMCLReader; |
f523727db392
Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
368
diff
changeset
|
33 import org.monetdb.mcl.io.BufferedMCLWriter; |
497
aed7f32e029a
Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
495
diff
changeset
|
34 import org.monetdb.mcl.io.LineType; |
391
f523727db392
Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
368
diff
changeset
|
35 import org.monetdb.mcl.parser.MCLParseException; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
36 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
37 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
38 * A Socket for communicating with the MonetDB database in MAPI block |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
39 * mode. |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
40 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
41 * The MapiSocket implements the protocol specifics of the MAPI block |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
42 * mode protocol, and interfaces it as a socket that delivers a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
43 * BufferedReader and a BufferedWriter. Because logging in is an |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
44 * integral part of the MAPI protocol, the MapiSocket performs the login |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
45 * procedure. Like the Socket class, various options can be set before |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
46 * calling the connect() method to influence the login process. Only |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
47 * after a successful call to connect() the BufferedReader and |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
48 * BufferedWriter can be retrieved. |
194
1296dbcc4958
Resolved javadoc many errors and warnings, such as:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
180
diff
changeset
|
49 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
50 * For each line read, it is determined what type of line it is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
51 * according to the MonetDB MAPI protocol. This results in a line to be |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
52 * PROMPT, HEADER, RESULT, ERROR or UNKNOWN. Use the getLineType() |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
53 * method on the BufferedMCLReader to retrieve the type of the last |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
54 * line read. |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
55 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
56 * For debugging purposes a socket level debugging is implemented where |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
57 * each and every interaction to and from the MonetDB server is logged |
194
1296dbcc4958
Resolved javadoc many errors and warnings, such as:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
180
diff
changeset
|
58 * to a file on disk. |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
59 * Incoming messages are prefixed by "RX" (received by the driver), |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
60 * outgoing messages by "TX" (transmitted by the driver). Special |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
61 * decoded non-human readable messages are prefixed with "RD" and "TD" |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
62 * instead. Following this two char prefix, a timestamp follows as the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
63 * number of milliseconds since the UNIX epoch. The rest of the line is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
64 * a String representation of the data sent or received. |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
65 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
66 * The general use of this Socket must be seen only in the full context |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
67 * of a MAPI connection to a server. It has the same ingredients as a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
68 * normal Socket, allowing for seamless plugging. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
69 * <pre> |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
70 * Socket \ / InputStream ----> (BufferedMCL)Reader |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
71 * > o < |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
72 * MapiSocket / \ OutputStream ----> (BufferedMCL)Writer |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
73 * </pre> |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
74 * The MapiSocket allows to retrieve Streams for communicating. They |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
75 * are interfaced, so they can be chained in any way. While the Socket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
76 * transparently deals with how data is sent over the wire, the actual |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
77 * data read needs to be interpreted, for which a Reader/Writer |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
78 * interface is most sufficient. In particular the BufferedMCL* |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
79 * implementations of those interfaces supply some extra functionality |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
80 * geared towards the format of the data. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
81 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
82 * @author Fabian Groffen |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
83 * @version 4.2 |
391
f523727db392
Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
368
diff
changeset
|
84 * @see org.monetdb.mcl.io.BufferedMCLReader |
f523727db392
Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
368
diff
changeset
|
85 * @see org.monetdb.mcl.io.BufferedMCLWriter |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
86 */ |
391
f523727db392
Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
368
diff
changeset
|
87 public class MapiSocket { /* cannot (yet) be final as nl.cwi.monetdb.mcl.net.MapiSocket extends this class */ |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
88 /** The TCP Socket to mserver */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
89 private Socket con; |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
90 /** The TCP Socket timeout in milliseconds. Default is 0 meaning the timeout is disabled (i.e., timeout of infinity) */ |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
91 private int soTimeout = 0; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
92 /** Stream from the Socket for reading */ |
501
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
93 private BlockInputStream fromMonet; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
94 /** Stream from the Socket for writing */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
95 private OutputStream toMonet; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
96 /** MCLReader on the InputStream */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
97 private BufferedMCLReader reader; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
98 /** MCLWriter on the OutputStream */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
99 private BufferedMCLWriter writer; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
100 /** protocol version of the connection */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
101 private int version; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
102 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
103 /** The database to connect to */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
104 private String database = null; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
105 /** The language to connect with */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
106 private String language = "sql"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
107 /** The hash methods to use (null = default) */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
108 private String hash = null; |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
109 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
110 /** Whether we should follow redirects */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
111 private boolean followRedirects = true; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
112 /** How many redirections do we follow until we're fed up with it? */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
113 private int ttl = 10; |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
114 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
115 /** Whether we are debugging or not */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
116 private boolean debug = false; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
117 /** The Writer for the debug log-file */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
118 private Writer log; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
119 |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
120 /** The blocksize (hardcoded in compliance with MonetDB common/stream/stream.h) */ |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
121 public final static int BLOCK = 8 * 1024 - 2; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
122 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
123 /** A short in two bytes for holding the block size in bytes */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
124 private final byte[] blklen = new byte[2]; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
125 |
422
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
126 /** Options that can be sent during the auth handshake if the server supports it */ |
684
9cc67e98e9c6
Fix Xlint warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
679
diff
changeset
|
127 private HandshakeOption<?>[] handshakeOptions; |
422
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
128 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
129 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
130 * Constructs a new MapiSocket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
131 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
132 public MapiSocket() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
133 con = null; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
134 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
135 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
136 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
137 * Sets the database to connect to. If database is null, a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
138 * connection is made to the default database of the server. This |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
139 * is also the default. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
140 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
141 * @param db the database |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
142 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
143 public void setDatabase(final String db) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
144 this.database = db; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
145 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
146 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
147 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
148 * Sets the language to use for this connection. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
149 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
150 * @param lang the language |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
151 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
152 public void setLanguage(final String lang) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
153 this.language = lang; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
154 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
155 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
156 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
157 * Sets the hash method to use. Note that this method is intended |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
158 * for debugging purposes. Setting a hash method can yield in |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
159 * connection failures. Multiple hash methods can be given by |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
160 * separating the hashes by commas. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
161 * DON'T USE THIS METHOD if you don't know what you're doing. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
162 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
163 * @param hash the hash method to use |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
164 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
165 public void setHash(final String hash) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
166 this.hash = hash; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
167 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
168 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
169 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
170 * Sets whether MCL redirections should be followed or not. If set |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
171 * to false, an MCLException will be thrown when a redirect is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
172 * encountered during connect. The default bahaviour is to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
173 * automatically follow redirects. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
174 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
175 * @param r whether to follow redirects (true) or not (false) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
176 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
177 public void setFollowRedirects(final boolean r) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
178 this.followRedirects = r; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
179 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
180 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
181 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
182 * Sets the number of redirects that are followed when |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
183 * followRedirects is true. In order to avoid going into an endless |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
184 * loop due to some evil server, or another error, a maximum number |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
185 * of redirects that may be followed can be set here. Note that to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
186 * disable the following of redirects you should use |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
187 * setFollowRedirects. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
188 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
189 * @see #setFollowRedirects(boolean r) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
190 * @param t the number of redirects before an exception is thrown |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
191 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
192 public void setTTL(final int t) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
193 this.ttl = t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
194 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
195 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
196 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
197 * Set the SO_TIMEOUT on the underlying Socket. When for some |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
198 * reason the connection to the database hangs, this setting can be |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
199 * useful to break out of this indefinite wait. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
200 * This option must be enabled prior to entering the blocking |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
201 * operation to have effect. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
202 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
203 * @param s The specified timeout, in milliseconds. A timeout |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
204 * of zero will disable timeout (i.e., timeout of infinity). |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
205 * @throws SocketException Issue with the socket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
206 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
207 public void setSoTimeout(final int s) throws SocketException { |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
208 if (s < 0) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
209 throw new IllegalArgumentException("timeout can't be negative"); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
210 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
211 this.soTimeout = s; |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
212 // limit time to wait on blocking operations |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
213 if (con != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
214 con.setSoTimeout(s); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
215 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
216 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
217 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
218 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
219 * Gets the SO_TIMEOUT from the underlying Socket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
220 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
221 * @return the currently in use timeout in milliseconds |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
222 * @throws SocketException Issue with the socket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
223 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
224 public int getSoTimeout() throws SocketException { |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
225 if (con != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
226 this.soTimeout = con.getSoTimeout(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
227 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
228 return this.soTimeout; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
229 } |
75
db46b4ab2b9f
Correct the condition for when the log can be closed: only when log instanceof FileWriter
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
53
diff
changeset
|
230 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
231 /** |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
232 * Enables/disables debug mode with logging to file |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
233 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
234 * @param debug Value to set |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
235 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
236 public void setDebug(final boolean debug) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
237 this.debug = debug; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
238 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
239 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
240 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
241 * Connects to the given host and port, logging in as the given |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
242 * user. If followRedirect is false, a RedirectionException is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
243 * thrown when a redirect is encountered. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
244 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
245 * @param host the hostname, or null for the loopback address |
225
5ddb1f20d5d5
Socket may also throw an UnknownHostException. Add it to MapiSocket.connect() and catch it in MonetConnection(Properties props).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
200
diff
changeset
|
246 * @param port the port number (must be between 0 and 65535, inclusive) |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
247 * @param user the username |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
248 * @param pass the password |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
249 * @return A List with informational (warning) messages. If this |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
250 * list is empty; then there are no warnings. |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
251 * @throws IOException if an I/O error occurs when creating the socket |
225
5ddb1f20d5d5
Socket may also throw an UnknownHostException. Add it to MapiSocket.connect() and catch it in MonetConnection(Properties props).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
200
diff
changeset
|
252 * @throws SocketException - if there is an error in the underlying protocol, such as a TCP error. |
5ddb1f20d5d5
Socket may also throw an UnknownHostException. Add it to MapiSocket.connect() and catch it in MonetConnection(Properties props).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
200
diff
changeset
|
253 * @throws UnknownHostException if the IP address of the host could not be determined |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
254 * @throws MCLParseException if bogus data is received |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
255 * @throws MCLException if an MCL related error occurs |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
256 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
257 public List<String> connect(final String host, final int port, final String user, final String pass) |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
258 throws IOException, SocketException, UnknownHostException, MCLParseException, MCLException |
180
fdf4c888d5b7
Small code and layout improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
90
diff
changeset
|
259 { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
260 // Wrap around the internal connect that needs to know if it |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
261 // should really make a TCP connection or not. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
262 return connect(host, port, user, pass, true); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
263 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
264 |
721
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
265 /** |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
266 * Connects to the given host and port, logging in as the given |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
267 * user. If followRedirect is false, a RedirectionException is |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
268 * thrown when a redirect is encountered. |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
269 * |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
270 * @param host the hostname, or null for the loopback address |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
271 * @param port the port number (must be between 0 and 65535, inclusive) |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
272 * @param user the username |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
273 * @param pass the password |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
274 * @param makeConnection whether a new socket connection needs to be created |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
275 * @return A List with informational (warning) messages. If this |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
276 * list is empty; then there are no warnings. |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
277 * @throws IOException if an I/O error occurs when creating the socket |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
278 * @throws SocketException - if there is an error in the underlying protocol, such as a TCP error. |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
279 * @throws UnknownHostException if the IP address of the host could not be determined |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
280 * @throws MCLParseException if bogus data is received |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
281 * @throws MCLException if an MCL related error occurs |
b78d8167a997
Remove finalize() method as it is deprecated and marked for removal in a future JDK. See also: https://openjdk.org/jeps/421
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
282 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
283 private List<String> connect(final String host, final int port, final String user, final String pass, final boolean makeConnection) |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
284 throws IOException, SocketException, UnknownHostException, MCLParseException, MCLException |
180
fdf4c888d5b7
Small code and layout improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
90
diff
changeset
|
285 { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
286 if (ttl-- <= 0) |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
287 throw new MCLException("Maximum number of redirects reached, aborting connection attempt."); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
288 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
289 if (makeConnection) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
290 con = new Socket(host, port); |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
291 con.setSoTimeout(this.soTimeout); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
292 // set nodelay, as it greatly speeds up small messages (like we often do) |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
293 con.setTcpNoDelay(true); |
276
fab4e6165be9
use so_keepalive (like the server does)
Niels Nes <niels@cwi.nl>
parents:
261
diff
changeset
|
294 con.setKeepAlive(true); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
295 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
296 fromMonet = new BlockInputStream(con.getInputStream()); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
297 toMonet = new BlockOutputStream(con.getOutputStream()); |
750
02ad91fb3438
UTF-8 is a standard character set, which is always available in Java Runtime. Use it and avoid looking it up every time.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
737
diff
changeset
|
298 reader = new BufferedMCLReader(fromMonet, StandardCharsets.UTF_8); |
02ad91fb3438
UTF-8 is a standard character set, which is always available in Java Runtime. Use it and avoid looking it up every time.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
737
diff
changeset
|
299 writer = new BufferedMCLWriter(toMonet, StandardCharsets.UTF_8); |
02ad91fb3438
UTF-8 is a standard character set, which is always available in Java Runtime. Use it and avoid looking it up every time.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
737
diff
changeset
|
300 writer.registerReader(reader); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
301 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
302 |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
303 reader.advance(); |
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
304 final String c = reader.getLine(); |
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
305 reader.discardRemainder(); |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
306 writer.writeLine(getChallengeResponse(c, user, pass, language, database, hash)); |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
307 |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
308 // read monetdb mserver response till prompt |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
309 final ArrayList<String> redirects = new ArrayList<String>(); |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
310 final List<String> warns = new ArrayList<String>(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
311 String err = "", tmp; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
312 do { |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
313 reader.advance(); |
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
314 tmp = reader.getLine(); |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
315 if (tmp == null) |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
316 throw new IOException("Read from " + |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
317 con.getInetAddress().getHostName() + ":" + |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
318 con.getPort() + ": End of stream reached"); |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
319 if (reader.getLineType() == LineType.ERROR) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
320 err += "\n" + tmp.substring(7); |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
321 } else if (reader.getLineType() == LineType.INFO) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
322 warns.add(tmp.substring(1)); |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
323 } else if (reader.getLineType() == LineType.REDIRECT) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
324 redirects.add(tmp.substring(1)); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
325 } |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
326 } while (reader.getLineType() != LineType.PROMPT); |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
327 |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
328 if (err.length() > 0) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
329 close(); |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
330 throw new MCLException(err); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
331 } |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
332 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
333 if (!redirects.isEmpty()) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
334 if (followRedirects) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
335 // Ok, server wants us to go somewhere else. The list |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
336 // might have multiple clues on where to go. For now we |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
337 // don't support anything intelligent but trying the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
338 // first one. URI should be in form of: |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
339 // "mapi:monetdb://host:port/database?arg=value&..." |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
340 // or |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
341 // "mapi:merovingian://proxy?arg=value&..." |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
342 // note that the extra arguments must be obeyed in both |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
343 // cases |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
344 final String suri = redirects.get(0).toString(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
345 if (!suri.startsWith("mapi:")) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
346 throw new MCLException("unsupported redirect: " + suri); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
347 |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
348 final URI u; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
349 try { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
350 u = new URI(suri.substring(5)); |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
351 } catch (java.net.URISyntaxException e) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
352 throw new MCLParseException(e.toString()); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
353 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
354 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
355 tmp = u.getQuery(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
356 if (tmp != null) { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
357 final String args[] = tmp.split("&"); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
358 for (int i = 0; i < args.length; i++) { |
698
6beecac8aa1b
Use indexOf(char) instead of indexOf(String) where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
684
diff
changeset
|
359 int pos = args[i].indexOf('='); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
360 if (pos > 0) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
361 tmp = args[i].substring(0, pos); |
556
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
362 switch (tmp) { |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
363 case "database": |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
364 tmp = args[i].substring(pos + 1); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
365 if (!tmp.equals(database)) { |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
366 warns.add("redirect points to different database: " + tmp); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
367 setDatabase(tmp); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
368 } |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
369 break; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
370 case "language": |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
371 tmp = args[i].substring(pos + 1); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
372 warns.add("redirect specifies use of different language: " + tmp); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
373 setLanguage(tmp); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
374 break; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
375 case "user": |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
376 tmp = args[i].substring(pos + 1); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
377 if (!tmp.equals(user)) |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
378 warns.add("ignoring different username '" + tmp + "' set by " + |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
379 "redirect, what are the security implications?"); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
380 break; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
381 case "password": |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
382 warns.add("ignoring different password set by redirect, " + |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
383 "what are the security implications?"); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
384 break; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
385 default: |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
386 warns.add("ignoring unknown argument '" + tmp + "' from redirect"); |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
387 break; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
388 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
389 } else { |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
390 warns.add("ignoring illegal argument from redirect: " + args[i]); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
391 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
392 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
393 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
394 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
395 if (u.getScheme().equals("monetdb")) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
396 // this is a redirect to another (monetdb) server, |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
397 // which means a full reconnect |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
398 // avoid the debug log being closed |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
399 if (debug) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
400 debug = false; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
401 close(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
402 debug = true; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
403 } else { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
404 close(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
405 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
406 tmp = u.getPath(); |
180
fdf4c888d5b7
Small code and layout improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
90
diff
changeset
|
407 if (tmp != null && tmp.length() > 0) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
408 tmp = tmp.substring(1).trim(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
409 if (!tmp.isEmpty() && !tmp.equals(database)) { |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
410 warns.add("redirect points to different database: " + tmp); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
411 setDatabase(tmp); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
412 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
413 } |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
414 final int p = u.getPort(); |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
415 warns.addAll(connect(u.getHost(), p == -1 ? port : p, user, pass, true)); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
416 warns.add("Redirect by " + host + ":" + port + " to " + suri); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
417 } else if (u.getScheme().equals("merovingian")) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
418 // reuse this connection to inline connect to the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
419 // right database that Merovingian proxies for us |
737
f03c1e47d819
Reset connection state before restarting the authentication sequence
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
721
diff
changeset
|
420 reader.resetLineType(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
421 warns.addAll(connect(host, port, user, pass, false)); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
422 } else { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
423 throw new MCLException("unsupported scheme in redirect: " + suri); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
424 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
425 } else { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
426 final StringBuilder msg = new StringBuilder("The server sent a redirect for this connection:"); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
427 for (String it : redirects) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
428 msg.append(" [" + it + "]"); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
429 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
430 throw new MCLException(msg.toString()); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
431 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
432 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
433 return warns; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
434 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
435 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
436 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
437 * A little helper function that processes a challenge string, and |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
438 * returns a response string for the server. If the challenge |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
439 * string is null, a challengeless response is returned. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
440 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
441 * @param chalstr the challenge string |
363
34ce6e1b1be8
Remove support for deprecated MD5 encryption algorithm in MapiSocket.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
350
diff
changeset
|
442 * for example: H8sRMhtevGd:mserver:9:PROT10,RIPEMD160,SHA256,SHA1,COMPRESSION_SNAPPY,COMPRESSION_LZ4:LIT:SHA512: |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
443 * @param username the username to use |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
444 * @param password the password to use |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
445 * @param language the language to use |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
446 * @param database the database to connect to |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
447 * @param hash the hash method(s) to use, or NULL for all supported hashes |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
448 * @return the response string for the server |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
449 * @throws MCLParseException when parsing failed |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
450 * @throws MCLException if an MCL related error occurs |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
451 * @throws IOException when IO exception occurred |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
452 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
453 private String getChallengeResponse( |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
454 final String chalstr, |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
455 String username, |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
456 String password, |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
457 final String language, |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
458 final String database, |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
459 final String hash |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
460 ) throws MCLParseException, MCLException, IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
461 // parse the challenge string, split it on ':' |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
462 final String[] chaltok = chalstr.split(":"); |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
463 if (chaltok.length <= 5) |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
464 throw new MCLParseException("Server challenge string unusable! It contains too few (" + chaltok.length + ") tokens: " + chalstr); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
465 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
466 try { |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
467 version = Integer.parseInt(chaltok[2]); // protocol version |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
468 } catch (NumberFormatException e) { |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
469 throw new MCLParseException("Protocol version (" + chaltok[2] + ") unparseable as integer."); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
470 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
471 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
472 // handle the challenge according to the version it is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
473 switch (version) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
474 case 9: |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
475 // proto 9 is like 8, but uses a hash instead of the plain password |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
476 // the server tells us (in 6th token) which hash in the |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
477 // challenge after the byte-order token |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
478 |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
479 String algo; |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
480 String pwhash = chaltok[5]; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
481 /* NOTE: Java doesn't support RIPEMD160 :( */ |
368
af6db116238d
Add javadoc url where the supported hash algorithms are described.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
363
diff
changeset
|
482 /* see: https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html#MessageDigest */ |
556
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
483 switch (pwhash) { |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
484 case "SHA512": |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
485 algo = "SHA-512"; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
486 break; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
487 case "SHA384": |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
488 algo = "SHA-384"; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
489 break; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
490 case "SHA256": |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
491 algo = "SHA-256"; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
492 /* NOTE: Java 7 doesn't support SHA-224. Java 8 does but we have not tested it. It is also not requested yet. */ |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
493 break; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
494 case "SHA1": |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
495 algo = "SHA-1"; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
496 break; |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
497 default: |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
498 /* Note: MD5 has been deprecated by security experts and support is removed from Oct 2020 release */ |
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
499 throw new MCLException("Unsupported password hash: " + pwhash); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
500 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
501 try { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
502 final MessageDigest md = MessageDigest.getInstance(algo); |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
503 md.update(password.getBytes(StandardCharsets.UTF_8)); |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
504 password = toHex(md.digest()); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
505 } catch (NoSuchAlgorithmException e) { |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
506 throw new MCLException("This JVM does not support password hash: " + pwhash + "\n" + e); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
507 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
508 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
509 // proto 7 (finally) used the challenge and works with a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
510 // password hash. The supported implementations come |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
511 // from the server challenge. We chose the best hash |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
512 // we can find, in the order SHA512, SHA1, MD5, plain. |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
513 // Also the byte-order is reported in the challenge string, |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
514 // which makes sense, since only blockmode is supported. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
515 // proto 8 made this obsolete, but retained the |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
516 // byte-order report for future "binary" transports. |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
517 // In proto 8, the byte-order of the blocks is always little |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
518 // endian because most machines today are. |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
519 final String hashes = (hash == null || hash.isEmpty()) ? chaltok[3] : hash; |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
520 final HashSet<String> hashesSet = new HashSet<String>(java.util.Arrays.asList(hashes.toUpperCase().split("[, ]"))); // split on comma or space |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
521 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
522 // if we deal with merovingian, mask our credentials |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
523 if (chaltok[1].equals("merovingian") && !language.equals("control")) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
524 username = "merovingian"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
525 password = "merovingian"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
526 } |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
527 |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
528 // reuse variables algo and pwhash |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
529 algo = null; |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
530 pwhash = null; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
531 if (hashesSet.contains("SHA512")) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
532 algo = "SHA-512"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
533 pwhash = "{SHA512}"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
534 } else if (hashesSet.contains("SHA384")) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
535 algo = "SHA-384"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
536 pwhash = "{SHA384}"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
537 } else if (hashesSet.contains("SHA256")) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
538 algo = "SHA-256"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
539 pwhash = "{SHA256}"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
540 } else if (hashesSet.contains("SHA1")) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
541 algo = "SHA-1"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
542 pwhash = "{SHA1}"; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
543 } else { |
363
34ce6e1b1be8
Remove support for deprecated MD5 encryption algorithm in MapiSocket.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
350
diff
changeset
|
544 /* Note: MD5 has been deprecated by security experts and support is removed from Oct 2020 release */ |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
545 throw new MCLException("no supported hash algorithms found in " + hashes); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
546 } |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
547 try { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
548 final MessageDigest md = MessageDigest.getInstance(algo); |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
549 md.update(password.getBytes(StandardCharsets.UTF_8)); |
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
550 md.update(chaltok[0].getBytes(StandardCharsets.UTF_8)); // salt/key |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
551 pwhash += toHex(md.digest()); |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
552 } catch (NoSuchAlgorithmException e) { |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
553 throw new MCLException("This JVM does not support password hash: " + pwhash + "\n" + e); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
554 } |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
555 |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
556 // TODO: some day when we need this, we should store this |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
557 if (chaltok[4].equals("BIG")) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
558 // byte-order of server is big-endian |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
559 } else if (chaltok[4].equals("LIT")) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
560 // byte-order of server is little-endian |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
561 } else { |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
562 throw new MCLParseException("Invalid byte-order: " + chaltok[4]); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
563 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
564 |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
565 // compose and return response |
422
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
566 String response = "BIG:" // JVM byte-order is big-endian |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
567 + username + ":" |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
568 + pwhash + ":" |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
569 + language + ":" |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
570 + (database == null ? "" : database) + ":" |
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
571 + "FILETRANS:"; // this capability is added in monetdb-jdbc-3.2.jre8.jar |
422
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
572 if (chaltok.length > 6) { |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
573 // if supported, send handshake options |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
574 for (String part : chaltok[6].split(",")) { |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
575 if (part.startsWith("sql=") && handshakeOptions != null) { |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
576 int level; |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
577 try { |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
578 level = Integer.parseInt(chaltok[6].substring(4)); |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
579 } catch (NumberFormatException e) { |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
580 throw new MCLParseException("Invalid handshake level: " + chaltok[6]); |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
581 } |
671
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
582 boolean first = true; |
684
9cc67e98e9c6
Fix Xlint warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
679
diff
changeset
|
583 for (HandshakeOption<?> opt: handshakeOptions) { |
671
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
584 if (opt.getLevel() < level) { |
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
585 // server supports it |
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
586 if (first) { |
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
587 first = false; |
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
588 } else { |
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
589 response += ","; |
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
590 } |
679
a2dfec33dbcb
Simplify.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
671
diff
changeset
|
591 response += opt.getFieldName() + "=" + opt.numericValue(); |
671
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
592 opt.setSent(true); |
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
593 } |
fade6c6960cc
Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
656
diff
changeset
|
594 } |
422
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
595 break; |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
596 } |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
597 } |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
598 // this ':' delimits the handshake options field. |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
599 response += ":"; |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
600 } |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
601 return response; |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
602 default: |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
603 throw new MCLException("Unsupported protocol version: " + version); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
604 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
605 } |
75
db46b4ab2b9f
Correct the condition for when the log can be closed: only when log instanceof FileWriter
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
53
diff
changeset
|
606 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
607 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
608 * Small helper method to convert a byte string to a hexadecimal |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
609 * string representation. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
610 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
611 * @param digest the byte array to convert |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
612 * @return the byte array as hexadecimal string |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
613 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
614 private final static String toHex(final byte[] digest) { |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
615 final char[] result = new char[digest.length * 2]; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
616 int pos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
617 for (int i = 0; i < digest.length; i++) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
618 result[pos++] = hexChar((digest[i] & 0xf0) >> 4); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
619 result[pos++] = hexChar(digest[i] & 0x0f); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
620 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
621 return new String(result); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
622 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
623 |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
624 private final static char hexChar(final int n) { |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
625 return (n > 9) |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
626 ? (char) ('a' + (n - 10)) |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
627 : (char) ('0' + n); |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
628 } |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
629 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
630 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
631 * Returns an InputStream that reads from this open connection on |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
632 * the MapiSocket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
633 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
634 * @return an input stream that reads from this open connection |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
635 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
636 public InputStream getInputStream() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
637 return fromMonet; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
638 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
639 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
640 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
641 * Returns an output stream for this MapiSocket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
642 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
643 * @return an output stream for writing bytes to this MapiSocket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
644 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
645 public OutputStream getOutputStream() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
646 return toMonet; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
647 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
648 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
649 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
650 * Returns a Reader for this MapiSocket. The Reader is a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
651 * BufferedMCLReader which does protocol interpretation of the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
652 * BlockInputStream produced by this MapiSocket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
653 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
654 * @return a BufferedMCLReader connected to this MapiSocket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
655 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
656 public BufferedMCLReader getReader() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
657 return reader; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
658 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
659 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
660 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
661 * Returns a Writer for this MapiSocket. The Writer is a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
662 * BufferedMCLWriter which produces protocol compatible data blocks |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
663 * that the BlockOutputStream can properly translate into blocks. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
664 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
665 * @return a BufferedMCLWriter connected to this MapiSocket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
666 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
667 public BufferedMCLWriter getWriter() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
668 return writer; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
669 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
670 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
671 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
672 * Returns the mapi protocol version used by this socket. The |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
673 * protocol version depends on the server being used. Users of the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
674 * MapiSocket should check this version to act appropriately. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
675 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
676 * @return the mapi protocol version |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
677 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
678 public int getProtocolVersion() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
679 return version; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
680 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
681 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
682 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
683 * Enables logging to a file what is read and written from and to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
684 * the server. Logging can be enabled at any time. However, it is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
685 * encouraged to start debugging before actually connecting the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
686 * socket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
687 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
688 * @param filename the name of the file to write to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
689 * @throws IOException if the file could not be opened for writing |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
690 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
691 public void debug(final String filename) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
692 debug(new FileWriter(filename)); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
693 } |
75
db46b4ab2b9f
Correct the condition for when the log can be closed: only when log instanceof FileWriter
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
53
diff
changeset
|
694 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
695 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
696 * Enables logging to a stream what is read and written from and to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
697 * the server. Logging can be enabled at any time. However, it is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
698 * encouraged to start debugging before actually connecting the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
699 * socket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
700 * |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
701 * @param out to write the log to a print stream |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
702 * @throws IOException if the file could not be opened for writing |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
703 */ |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
704 // disabled as it is not used by JDBC driver code |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
705 // public void debug(PrintStream out) throws IOException { |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
706 // debug(new PrintWriter(out)); |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
707 // } |
75
db46b4ab2b9f
Correct the condition for when the log can be closed: only when log instanceof FileWriter
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
53
diff
changeset
|
708 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
709 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
710 * Enables logging to a stream what is read and written from and to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
711 * the server. Logging can be enabled at any time. However, it is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
712 * encouraged to start debugging before actually connecting the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
713 * socket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
714 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
715 * @param out to write the log to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
716 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
717 public void debug(final Writer out) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
718 log = out; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
719 debug = true; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
720 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
721 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
722 /** |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
723 * Get the log Writer. |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
724 * |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
725 * @return the log writer |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
726 */ |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
727 public Writer getLogWriter() { |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
728 return log; |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
729 } |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
730 |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
731 /** |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
732 * Writes a logline tagged with a timestamp using the given type and message |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
733 * and optionally flushes afterwards. |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
734 * |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
735 * Used for debugging purposes only and represents a message data that is |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
736 * connected to reading (RD or RX) or writing (TD or TX) to the socket. |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
737 * R=Receive, T=Transmit, D=Data, X=?? |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
738 * |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
739 * @param type message type: either RD, RX, TD or TX |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
740 * @param message the message to log |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
741 * @param flush whether we need to flush buffered data to the logfile. |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
742 * @throws IOException if an IO error occurs while writing to the logfile |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
743 */ |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
744 private final void log(final String type, final String message, final boolean flush) throws IOException { |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
745 log.write(type + System.currentTimeMillis() + ": " + message + "\n"); |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
746 if (flush) |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
747 log.flush(); |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
748 } |
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
749 |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
750 /** |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
751 * Set the HandshakeOptions |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
752 * |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
753 * @param handshakeOptions the options array |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
754 */ |
684
9cc67e98e9c6
Fix Xlint warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
679
diff
changeset
|
755 public void setHandshakeOptions(HandshakeOption<?>[] handshakeOptions) { |
422
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
756 this.handshakeOptions = handshakeOptions; |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
757 } |
8368cbc670bf
Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
406
diff
changeset
|
758 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
759 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
760 * For internal use |
626
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
761 * |
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
762 * @param b to enable/disable insert 'fake' newline and prompt |
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
763 * @return previous setting |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
764 */ |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
765 public boolean setInsertFakePrompts(boolean b) { |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
766 return fromMonet.setInsertFakePrompts(b); |
501
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
767 } |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
768 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
769 |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
770 /** |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
771 * Inner class that is used to write data on a normal stream as a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
772 * blocked stream. A call to the flush() method will write a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
773 * "final" block to the underlying stream. Non-final blocks are |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
774 * written as soon as one or more bytes would not fit in the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
775 * current block any more. This allows to write to a block to it's |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
776 * full size, and then flush it explicitly to have a final block |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
777 * being written to the stream. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
778 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
779 final class BlockOutputStream extends FilterOutputStream { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
780 private int writePos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
781 private int blocksize = 0; |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
782 private final byte[] block = new byte[BLOCK]; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
783 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
784 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
785 * Constructs this BlockOutputStream, backed by the given |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
786 * OutputStream. A BufferedOutputStream is internally used. |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
787 * @param out an OutputStream |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
788 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
789 public BlockOutputStream(final OutputStream out) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
790 // always use a buffered stream, even though we know how |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
791 // much bytes to write/read, since this is just faster for |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
792 // some reason |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
793 super(new BufferedOutputStream(out)); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
794 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
795 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
796 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
797 public void flush() throws IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
798 // write the block (as final) then flush. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
799 writeBlock(true); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
800 out.flush(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
801 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
802 // it's a bit nasty if an exception is thrown from the log, |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
803 // but ignoring it can be nasty as well, so it is decided to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
804 // let it go so there is feedback about something going wrong |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
805 // it's a bit nasty if an exception is thrown from the log, |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
806 // but ignoring it can be nasty as well, so it is decided to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
807 // let it go so there is feedback about something going wrong |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
808 if (debug) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
809 log.flush(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
810 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
811 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
812 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
813 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
814 * writeBlock puts the data in the block on the stream. The |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
815 * boolean last controls whether the block is sent with an |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
816 * indicator to note it is the last block of a sequence or not. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
817 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
818 * @param last whether this is the last block |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
819 * @throws IOException if writing to the stream failed |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
820 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
821 public void writeBlock(final boolean last) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
822 if (last) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
823 // always fits, because of BLOCK's size |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
824 blocksize = (short)writePos; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
825 // this is the last block, so encode least |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
826 // significant bit in the first byte (little-endian) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
827 blklen[0] = (byte)(blocksize << 1 & 0xFF | 1); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
828 blklen[1] = (byte)(blocksize >> 7); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
829 } else { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
830 // always fits, because of BLOCK's size |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
831 blocksize = (short)BLOCK; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
832 // another block will follow, encode least |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
833 // significant bit in the first byte (little-endian) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
834 blklen[0] = (byte)(blocksize << 1 & 0xFF); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
835 blklen[1] = (byte)(blocksize >> 7); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
836 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
837 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
838 out.write(blklen); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
839 // write the actual block |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
840 out.write(block, 0, writePos); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
841 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
842 if (debug) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
843 if (last) { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
844 log("TD ", "write final block: " + writePos + " bytes", false); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
845 } else { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
846 log("TD ", "write block: " + writePos + " bytes", false); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
847 } |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
848 log("TX ", new String(block, 0, writePos, StandardCharsets.UTF_8), true); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
849 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
850 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
851 writePos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
852 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
853 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
854 @Override |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
855 public void write(final int b) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
856 if (writePos == BLOCK) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
857 writeBlock(false); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
858 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
859 block[writePos++] = (byte)b; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
860 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
861 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
862 @Override |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
863 public void write(final byte[] b) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
864 write(b, 0, b.length); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
865 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
866 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
867 @Override |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
868 public void write(final byte[] b, int off, int len) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
869 while (len > 0) { |
556
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
870 int t = BLOCK - writePos; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
871 if (len > t) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
872 System.arraycopy(b, off, block, writePos, t); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
873 off += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
874 len -= t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
875 writePos += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
876 writeBlock(false); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
877 } else { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
878 System.arraycopy(b, off, block, writePos, len); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
879 writePos += len; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
880 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
881 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
882 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
883 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
884 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
885 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
886 public void close() throws IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
887 // we don't want the flush() method to be called (default of |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
888 // the FilterOutputStream), so we close manually here |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
889 out.close(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
890 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
891 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
892 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
893 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
894 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
895 * Inner class that is used to make the data on the blocked stream |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
896 * available as a normal stream. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
897 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
898 final class BlockInputStream extends FilterInputStream { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
899 private int readPos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
900 private int blockLen = 0; |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
901 private boolean wasEndBlock = false; |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
902 private final byte[] block = new byte[BLOCK + 3]; // \n.\n |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
903 private boolean insertFakePrompts = true; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
904 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
905 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
906 * Constructs this BlockInputStream, backed by the given |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
907 * InputStream. A BufferedInputStream is internally used. |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
908 * @param in an InputStream |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
909 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
910 public BlockInputStream(final InputStream in) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
911 // always use a buffered stream, even though we know how |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
912 // much bytes to write/read, since this is just faster for |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
913 // some reason |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
914 super(new BufferedInputStream(in)); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
915 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
916 |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
917 public boolean setInsertFakePrompts(boolean doFake) { |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
918 boolean old = insertFakePrompts; |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
919 insertFakePrompts = doFake; |
501
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
920 return old; |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
921 } |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
922 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
923 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
924 public int available() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
925 return blockLen - readPos; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
926 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
927 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
928 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
929 public boolean markSupported() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
930 return false; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
931 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
932 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
933 @Override |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
934 public void mark(final int readlimit) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
935 throw new AssertionError("Not implemented!"); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
936 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
937 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
938 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
939 public void reset() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
940 throw new AssertionError("Not implemented!"); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
941 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
942 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
943 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
944 * Small wrapper to get a blocking variant of the read() method |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
945 * on the BufferedInputStream. We want to benefit from the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
946 * Buffered pre-fetching, but not dealing with half blocks. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
947 * Changing this class to be able to use the partially received |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
948 * data will greatly complicate matters, while a performance |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
949 * improvement is debatable given the relatively small size of |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
950 * our blocks. Maybe it does speed up on slower links, then |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
951 * consider this method a quick bug fix/workaround. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
952 * |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
953 * @param b a byte array to store read bytes |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
954 * @param len number of bytes to read |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
955 * @return false if reading the block failed due to EOF |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
956 * @throws IOException if an IO error occurs while reading |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
957 */ |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
958 private boolean _read(final byte[] b, int len) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
959 int s; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
960 int off = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
961 while (len > 0) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
962 s = in.read(b, off, len); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
963 if (s == -1) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
964 // if we have read something before, we should have been |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
965 // able to read the whole, so make this fatal |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
966 if (off > 0) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
967 if (debug) { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
968 log("RD ", "the following incomplete block was received:", false); |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
969 log("RX ", new String(b, 0, off, StandardCharsets.UTF_8), true); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
970 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
971 throw new IOException("Read from " + |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
972 con.getInetAddress().getHostName() + ":" + |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
973 con.getPort() + ": Incomplete block read from stream"); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
974 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
975 if (debug) |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
976 log("RD ", "server closed the connection (EOF)", true); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
977 return false; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
978 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
979 len -= s; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
980 off += s; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
981 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
982 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
983 return true; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
984 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
985 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
986 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
987 * Reads the next block on the stream into the internal buffer, |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
988 * or writes the prompt in the buffer. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
989 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
990 * The blocked stream protocol consists of first a two byte |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
991 * integer indicating the length of the block, then the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
992 * block, followed by another length + block. The end of |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
993 * such sequence is put in the last bit of the length, and |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
994 * hence this length should be shifted to the right to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
995 * obtain the real length value first. We simply fetch |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
996 * blocks here as soon as they are needed for the stream's |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
997 * read methods. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
998 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
999 * The user-flush, which is an implicit effect of the end of |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1000 * a block sequence, is communicated beyond the stream by |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1001 * inserting a prompt sequence on the stream after the last |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1002 * block. This method makes sure that a final block ends with a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1003 * newline, if it doesn't already, in order to facilitate a |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1004 * Reader that is possibly chained to this InputStream. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1005 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1006 * If the stream is not positioned correctly, hell will break |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1007 * loose. |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1008 * |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1009 * @return blockLen |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1010 * @throws IOException if an IO error occurs while reading |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1011 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1012 private int readBlock() throws IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1013 // read next two bytes (short) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1014 if (!_read(blklen, 2)) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1015 return(-1); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1016 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1017 // Get the short-value and store its value in blockLen. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1018 blockLen = (short)( |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1019 (blklen[0] & 0xFF) >> 1 | |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1020 (blklen[1] & 0xFF) << 7 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1021 ); |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1022 wasEndBlock = (blklen[0] & 0x1) == 1; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1023 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1024 readPos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1025 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1026 if (debug) { |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1027 if (wasEndBlock) { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1028 log("RD ", "read final block: " + blockLen + " bytes", false); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1029 } else { |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1030 log("RD ", "read new block: " + blockLen + " bytes", false); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1031 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1032 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1033 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1034 // sanity check to avoid bad servers make us do an ugly |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1035 // stack trace |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1036 if (blockLen > block.length) |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1037 throw new IOException("Server sent a block larger than BLOCKsize: " + |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1038 blockLen + " > " + block.length); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1039 if (!_read(block, blockLen)) |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1040 return -1; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1041 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1042 if (debug) |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
1043 log("RX ", new String(block, 0, blockLen, StandardCharsets.UTF_8), true); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1044 |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1045 // if this is the last block, make it end with a newline and prompt |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1046 if (wasEndBlock) { |
537
242debd7e866
Fix mistake in comment
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
535
diff
changeset
|
1047 // insert 'fake' newline and prompt |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1048 if (insertFakePrompts) { |
507
1db3398b78f7
If we don't want a fake prompt we probably also don't want a fake newline
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
502
diff
changeset
|
1049 if (blockLen > 0 && block[blockLen - 1] != '\n') { |
1db3398b78f7
If we don't want a fake prompt we probably also don't want a fake newline
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
502
diff
changeset
|
1050 // to terminate the block in a Reader |
1db3398b78f7
If we don't want a fake prompt we probably also don't want a fake newline
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
502
diff
changeset
|
1051 block[blockLen++] = '\n'; |
1db3398b78f7
If we don't want a fake prompt we probably also don't want a fake newline
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
502
diff
changeset
|
1052 } |
501
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
1053 for (byte b : LineType.PROMPT.bytes()) { |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
1054 block[blockLen++] = b; |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
1055 } |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
1056 block[blockLen++] = '\n'; |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1057 if (debug) { |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1058 log("RD ", "inserting prompt", true); |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1059 } |
498
4cfe4991ee63
Use the prompt characters from mapi_prompt.h
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
497
diff
changeset
|
1060 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1061 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1062 |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1063 return blockLen; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1064 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1065 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1066 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1067 public int read() throws IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1068 if (available() == 0) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1069 if (readBlock() == -1) |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1070 return -1; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1071 } |
75
db46b4ab2b9f
Correct the condition for when the log can be closed: only when log instanceof FileWriter
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
53
diff
changeset
|
1072 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1073 if (debug) |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
1074 log("RX ", new String(block, readPos, 1, StandardCharsets.UTF_8), true); |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1075 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1076 return (int)block[readPos++]; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1077 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1078 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1079 @Override |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1080 public int read(final byte[] b) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1081 return read(b, 0, b.length); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1082 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1083 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1084 @Override |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1085 public int read(final byte[] b, int off, int len) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1086 int t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1087 int size = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1088 while (size < len) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1089 t = available(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1090 if (t == 0) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1091 if (size != 0) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1092 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1093 if (readBlock() == -1) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1094 if (size == 0) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1095 size = -1; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1096 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1097 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1098 t = available(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1099 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1100 if (len > t) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1101 System.arraycopy(block, readPos, b, off, t); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1102 off += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1103 len -= t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1104 readPos += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1105 size += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1106 } else { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1107 System.arraycopy(block, readPos, b, off, len); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1108 readPos += len; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1109 size += len; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1110 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1111 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1112 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1113 return size; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1114 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1115 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1116 @Override |
297
bb273e9c7e09
Add "final" keyword to classes, method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
281
diff
changeset
|
1117 public long skip(final long n) throws IOException { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1118 long skip = n; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1119 while (skip > 0) { |
556
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
1120 int t = available(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1121 if (skip > t) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1122 skip -= t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1123 readPos += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1124 readBlock(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1125 } else { |
756
a39d3a45da56
Resolve warning: [lossy-conversions] implicit cast from long to int in compound assignment is possibly lossy
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
750
diff
changeset
|
1126 readPos += (int)skip; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1127 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1128 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1129 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1130 return n; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1131 } |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1132 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1133 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1134 * For internal use |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1135 * @return new Raw object |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1136 */ |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1137 Raw getRaw() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1138 return new Raw(); |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1139 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1140 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1141 /** An alternative I/O interface that exposes the block based nature of the MAPI protocol */ |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1142 final class Raw { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1143 byte[] getBytes() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1144 return block; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1145 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1146 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1147 int getLength() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1148 return blockLen; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1149 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1150 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1151 int getPosition() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1152 return readPos; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1153 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1154 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1155 int consume(int delta) { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1156 int pos = readPos; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1157 readPos += delta; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1158 return pos; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1159 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1160 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1161 int readBlock() throws IOException { |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1162 boolean wasFaking = setInsertFakePrompts(false); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1163 try { |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1164 return BlockInputStream.this.readBlock(); |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1165 } finally { |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1166 setInsertFakePrompts(wasFaking); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1167 } |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1168 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1169 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1170 boolean wasEndBlock() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1171 return wasEndBlock; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1172 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1173 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1174 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1175 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1176 /** |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
1177 * Closes the streams and socket connected to the server if possible. |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
1178 * If an error occurs at closing a resource, it is ignored so as many |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
1179 * resources as possible are closed. |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1180 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1181 public synchronized void close() { |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1182 if (writer != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1183 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1184 writer.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1185 writer = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1186 } catch (IOException e) { /* ignore it */ } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1187 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1188 if (reader != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1189 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1190 reader.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1191 reader = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1192 } catch (IOException e) { /* ignore it */ } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1193 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1194 if (toMonet != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1195 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1196 toMonet.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1197 toMonet = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1198 } catch (IOException e) { /* ignore it */ } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1199 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1200 if (fromMonet != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1201 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1202 fromMonet.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1203 fromMonet = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1204 } catch (IOException e) { /* ignore it */ } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1205 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1206 if (con != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1207 try { |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
1208 con.close(); // close the socket |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1209 con = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1210 } catch (IOException e) { /* ignore it */ } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1211 } |
75
db46b4ab2b9f
Correct the condition for when the log can be closed: only when log instanceof FileWriter
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
53
diff
changeset
|
1212 if (debug && log != null && log instanceof FileWriter) { |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1213 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1214 log.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1215 log = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1216 } catch (IOException e) { /* ignore it */ } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1217 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1218 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1219 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1220 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1221 * Return an UploadStream for use with for example COPY FROM filename ON CLIENT. |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1222 * |
552
7b320303b579
Doc comment improvements
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
547
diff
changeset
|
1223 * Building block for {@link org.monetdb.jdbc.MonetConnection.UploadHandler}. |
626
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1224 * |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1225 * @param chunkSize chunk size for the upload stream |
626
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1226 * @return UploadStream new upload stream with the given chunk size |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1227 */ |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1228 public UploadStream uploadStream(int chunkSize) { |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1229 return new UploadStream(chunkSize); |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1230 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1231 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1232 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1233 * Return an UploadStream for use with for example COPY FROM filename ON CLIENT. |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1234 * |
552
7b320303b579
Doc comment improvements
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
547
diff
changeset
|
1235 * Building block for {@link org.monetdb.jdbc.MonetConnection.UploadHandler}. |
626
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1236 * |
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1237 * @return UploadStream new upload stream |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1238 */ |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1239 public UploadStream uploadStream() { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1240 return new UploadStream(); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1241 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1242 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1243 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1244 * Return a DownloadStream for use with for example COPY INTO filename ON CLIENT |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1245 * |
552
7b320303b579
Doc comment improvements
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
547
diff
changeset
|
1246 * Building block for {@link org.monetdb.jdbc.MonetConnection.DownloadHandler}. |
626
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1247 * |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1248 * @param prependCr convert \n to \r\n |
626
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1249 * @return DownloadStream new download stream |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1250 */ |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1251 public DownloadStream downloadStream(boolean prependCr) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1252 return new DownloadStream(fromMonet.getRaw(), toMonet, prependCr); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1253 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1254 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1255 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1256 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1257 * Stream of data sent to the server |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1258 * |
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1259 * Building block for {@link org.monetdb.jdbc.MonetConnection.UploadHandler}. |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1260 * |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1261 * An UploadStream has a chunk size. Every chunk size bytes, the server gets |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1262 * the opportunity to abort the upload. |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1263 */ |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1264 public class UploadStream extends FilterOutputStream { |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1265 public final static int DEFAULT_CHUNK_SIZE = 1024 * 1024; |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1266 private final int chunkSize; |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1267 private boolean closed = false; |
533
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1268 private boolean serverCancelled = false; |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1269 private int chunkLeft; |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1270 private byte[] promptBuffer; |
557
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1271 private Runnable cancellationCallback = null; |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1272 |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1273 /** |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1274 * Create an UploadStream with the given chunk size |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1275 * @param chunkSize chunk size for the upload stream |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1276 */ |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1277 UploadStream(final int chunkSize) { |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1278 super(toMonet); |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1279 if (chunkSize <= 0) { |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1280 throw new IllegalArgumentException("chunk size must be positive"); |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1281 } |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1282 this.chunkSize = chunkSize; |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1283 assert LineType.MORE.bytes().length == LineType.FILETRANSFER.bytes().length; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1284 int promptLen = LineType.MORE.bytes().length; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1285 promptBuffer = new byte[promptLen + 1]; |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1286 chunkLeft = this.chunkSize; |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1287 } |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1288 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1289 /** Create an UploadStream with the default chunk size */ |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1290 UploadStream() { |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1291 this(DEFAULT_CHUNK_SIZE); |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1292 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1293 |
557
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1294 /** Set a callback to be invoked if the server cancels the upload |
626
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1295 * |
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1296 * @param cancellationCallback callback to call |
557
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1297 */ |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1298 public void setCancellationCallback(final Runnable cancellationCallback) { |
557
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1299 this.cancellationCallback = cancellationCallback; |
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1300 } |
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1301 |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1302 @Override |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1303 public void write(final int b) throws IOException { |
533
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1304 if (serverCancelled) { |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1305 // We have already thrown an exception and apparently that has been ignored. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1306 // Probably because they're calling print methods instead of write. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1307 // Throw another one, maybe they'll catch this one. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1308 throw new IOException("Server aborted the upload"); |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1309 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1310 handleChunking(); |
612
1d44b8a577ca
write to out, not to super when implementing FilterOutputStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
610
diff
changeset
|
1311 out.write(b); |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1312 wrote(1); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1313 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1314 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1315 @Override |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1316 public void write(final byte[] b) throws IOException { |
612
1d44b8a577ca
write to out, not to super when implementing FilterOutputStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
610
diff
changeset
|
1317 this.write(b, 0, b.length); |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1318 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1319 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1320 @Override |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1321 public void write(final byte[] b, int off, int len) throws IOException { |
533
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1322 if (serverCancelled) { |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1323 // We have already thrown an exception and apparently that has been ignored. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1324 // Probably because they're calling print methods instead of write. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1325 // Throw another one, maybe they'll catch this one. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1326 throw new IOException("Server aborted the upload"); |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1327 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1328 while (len > 0) { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1329 handleChunking(); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1330 int toWrite = Integer.min(len, chunkLeft); |
612
1d44b8a577ca
write to out, not to super when implementing FilterOutputStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
610
diff
changeset
|
1331 out.write(b, off, toWrite); |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1332 off += toWrite; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1333 len -= toWrite; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1334 wrote(toWrite); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1335 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1336 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1337 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1338 @Override |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1339 public void flush() throws IOException { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1340 // suppress flushes |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1341 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1342 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1343 @Override |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1344 public void close() throws IOException { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1345 if (closed) { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1346 return; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1347 } |
533
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1348 closed = true; |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1349 |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1350 if (serverCancelled) |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1351 closeAfterServerCancelled(); |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1352 else |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1353 closeAfterSuccesfulUpload(); |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1354 } |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1355 |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1356 private void closeAfterSuccesfulUpload() throws IOException { |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1357 if (chunkLeft != chunkSize) { |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1358 // flush pending data |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1359 flushAndReadPrompt(); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1360 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1361 // send empty block |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1362 out.flush(); |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1363 final LineType acknowledgement = readPrompt(); |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1364 if (acknowledgement != LineType.FILETRANSFER) { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1365 throw new IOException("Expected server to acknowledge end of file"); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1366 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1367 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1368 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1369 private void closeAfterServerCancelled() { |
533
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1370 // nothing to do here, we have already read the error prompt. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1371 } |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1372 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1373 private void wrote(final int i) { |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1374 chunkLeft -= i; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1375 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1376 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1377 private void handleChunking() throws IOException { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1378 if (chunkLeft > 0) { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1379 return; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1380 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1381 flushAndReadPrompt(); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1382 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1383 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1384 private void flushAndReadPrompt() throws IOException { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1385 out.flush(); |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1386 chunkLeft = chunkSize; |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1387 final LineType lineType = readPrompt(); |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1388 switch (lineType) { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1389 case MORE: |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1390 return; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1391 case FILETRANSFER: |
533
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1392 // Note, if the caller is calling print methods instead of write, the IO exception gets hidden. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1393 // This is unfortunate but there's nothing we can do about it. |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1394 serverCancelled = true; |
557
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1395 if (cancellationCallback != null) { |
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1396 cancellationCallback.run(); |
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1397 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1398 throw new IOException("Server aborted the upload"); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1399 default: |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1400 throw new IOException("Expected MORE/DONE from server, got " + lineType); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1401 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1402 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1403 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1404 private LineType readPrompt() throws IOException { |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1405 final int nread = fromMonet.read(promptBuffer); |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1406 if (nread != promptBuffer.length || promptBuffer[promptBuffer.length - 1] != '\n') { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1407 throw new IOException("server return incomplete prompt"); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1408 } |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1409 return LineType.classify(promptBuffer); |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1410 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1411 } |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1412 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1413 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1414 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1415 * Stream of data received from the server |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1416 * |
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1417 * Building block for {@link org.monetdb.jdbc.MonetConnection.DownloadHandler}. |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1418 */ |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1419 public static class DownloadStream extends InputStream { |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1420 private final BlockInputStream.Raw rawIn; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1421 private final OutputStream out; |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1422 private final boolean prependCr; |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1423 private boolean endBlockSeen = false; |
547
8029d7368b5a
Make sure the download stream isn't closed twice
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
541
diff
changeset
|
1424 private boolean closed = false; |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1425 private boolean newlinePending = false; // used for crlf conversion |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1426 |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1427 DownloadStream(BlockInputStream.Raw rawIn, OutputStream out, boolean prependCr) { |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1428 this.rawIn = rawIn; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1429 this.out = out; |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1430 this.prependCr = prependCr; |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1431 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1432 |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1433 void nextBlock() throws IOException { |
547
8029d7368b5a
Make sure the download stream isn't closed twice
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
541
diff
changeset
|
1434 if (endBlockSeen || closed) |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1435 return; |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1436 final int ret = rawIn.readBlock(); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1437 if (ret < 0 || rawIn.wasEndBlock()) { |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1438 endBlockSeen = true; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1439 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1440 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1441 |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1442 @Override |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1443 public void close() throws IOException { |
547
8029d7368b5a
Make sure the download stream isn't closed twice
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
541
diff
changeset
|
1444 if (closed) |
8029d7368b5a
Make sure the download stream isn't closed twice
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
541
diff
changeset
|
1445 return; |
8029d7368b5a
Make sure the download stream isn't closed twice
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
541
diff
changeset
|
1446 closed = true; |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1447 while (!endBlockSeen) { |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1448 nextBlock(); |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1449 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1450 // Send acknowledgement to server |
512
a4000e374a43
Fix silly mistake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
511
diff
changeset
|
1451 out.write('\n'); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1452 out.flush(); |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1453 // Do whatever super has to do |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1454 super.close(); |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1455 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1456 |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1457 @Override |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1458 public int read() throws IOException { |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1459 final byte[] buf = { 0 }; |
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1460 final int nread = read(buf, 0, 1); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1461 if (nread == 1) |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1462 return buf[0]; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1463 else |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1464 return -1; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1465 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1466 |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1467 @Override |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1468 public int read(final byte[] dest, int off, int len) throws IOException { |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1469 final int origOff = off; |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1470 int end = off + len; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1471 |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1472 while (off < end) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1473 // minimum of what's requested and what we have in stock |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1474 int chunk = Integer.min(end - off, rawIn.getLength() - rawIn.getPosition()); |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1475 assert chunk >= 0; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1476 if (chunk == 0) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1477 // make progress by fetching more data |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1478 if (endBlockSeen) |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1479 break; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1480 nextBlock(); |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1481 continue; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1482 } |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1483 // make progress copying some bytes |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1484 if (!prependCr) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1485 // no conversion needed, use arraycopy |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1486 System.arraycopy(rawIn.getBytes(), rawIn.getPosition(), dest, off, chunk); |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1487 off += chunk; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1488 rawIn.consume(chunk); |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1489 } else { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1490 int chunkEnd = off + chunk; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1491 if (newlinePending && off < chunkEnd) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1492 // we were in the middle of a line ending conversion |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1493 dest[off++] = '\n'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1494 newlinePending = false; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1495 } |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1496 while (off < chunkEnd) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1497 byte b = rawIn.getBytes()[rawIn.consume(1)]; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1498 if (b != '\n') { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1499 dest[off++] = b; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1500 } else if (chunkEnd - off >= 2) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1501 dest[off++] = '\r'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1502 dest[off++] = '\n'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1503 } else { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1504 dest[off++] = '\r'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1505 newlinePending = true; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1506 break; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1507 } |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1508 } |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1509 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1510 } |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1511 |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1512 if (off < end && newlinePending) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1513 dest[off++] = '\n'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1514 newlinePending = false; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1515 } |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1516 |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1517 if (off == origOff && endBlockSeen) |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1518 return -1; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1519 else |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1520 return off - origOff; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1521 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1522 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1523 } |