Mercurial > hg > monetdb-java
annotate src/main/java/org/monetdb/mcl/net/MapiSocket.java @ 903:778959b2e0a4
Send ClientInfo on startup
Configurable through the client_info=bool, client_application=NAME,
client_remark=MESSAGE properties.
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Fri, 14 Jun 2024 15:57:49 +0200 (10 months ago) |
parents | 5a59910e8f87 |
children | 2d880f90be2a |
rev | line source |
---|---|
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1 /* |
833
e890195256ac
Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents:
816
diff
changeset
|
2 * SPDX-License-Identifier: MPL-2.0 |
e890195256ac
Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents:
816
diff
changeset
|
3 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
4 * 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
|
5 * 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
|
6 * 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
|
7 * |
833
e890195256ac
Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents:
816
diff
changeset
|
8 * Copyright 2024 MonetDB Foundation; |
e890195256ac
Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents:
816
diff
changeset
|
9 * Copyright August 2008 - 2023 MonetDB B.V.; |
e890195256ac
Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents:
816
diff
changeset
|
10 * Copyright 1997 - July 2008 CWI. |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
11 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
12 |
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
|
13 package org.monetdb.mcl.net; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
14 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
15 import java.io.BufferedInputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
16 import java.io.BufferedOutputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
17 import java.io.FileWriter; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
18 import java.io.FilterInputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
19 import java.io.FilterOutputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
20 import java.io.IOException; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
21 import java.io.InputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
22 import java.io.OutputStream; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
23 import java.io.Writer; |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
24 import java.net.*; |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
25 import java.nio.charset.StandardCharsets; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
26 import java.security.MessageDigest; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
27 import java.security.NoSuchAlgorithmException; |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
28 import java.sql.SQLClientInfoException; |
811
ede3a59ff4f2
Add MapiSocket.connect(url, properties) method
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
803
diff
changeset
|
29 import java.util.*; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
30 |
840
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
31 import javax.net.ssl.SSLException; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
32 |
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
|
33 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
|
34 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
|
35 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
|
36 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
|
37 import org.monetdb.mcl.parser.MCLParseException; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
38 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
39 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
40 * 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
|
41 * mode. |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
42 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
43 * 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
|
44 * 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
|
45 * 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
|
46 * 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
|
47 * 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
|
48 * 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
|
49 * 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
|
50 * 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
|
51 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
52 * 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
|
53 * 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
|
54 * 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
|
55 * 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
|
56 * line read. |
53
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
57 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
58 * 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
|
59 * 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
|
60 * to a file on disk. |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
61 * 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
|
62 * 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
|
63 * 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
|
64 * 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
|
65 * 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
|
66 * 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
|
67 * |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
68 * 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
|
69 * 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
|
70 * normal Socket, allowing for seamless plugging. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
71 * <pre> |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
72 * Socket \ / InputStream ----> (BufferedMCL)Reader |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
73 * > o < |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
74 * MapiSocket / \ OutputStream ----> (BufferedMCL)Writer |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
75 * </pre> |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
76 * 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
|
77 * 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
|
78 * 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
|
79 * 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
|
80 * interface is most sufficient. In particular the BufferedMCL* |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
81 * implementations of those interfaces supply some extra functionality |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
82 * geared towards the format of the data. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
83 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
84 * @author Fabian Groffen |
867
5a59910e8f87
Resolve some javadoc errors and warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
852
diff
changeset
|
85 * @version 4.4 |
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
|
86 * @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
|
87 * @see org.monetdb.mcl.io.BufferedMCLWriter |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
88 */ |
768
a80c21fe7bb2
Removed deprecated nl.cwi.monetdb.*.* classes and package.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
756
diff
changeset
|
89 public final class MapiSocket { |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
90 /* an even number of NUL bytes used during the handshake */ |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
91 private static final byte[] NUL_BYTES = new byte[]{ 0, 0, 0, 0, 0, 0, 0, 0 }; |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
92 |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
93 /* A mapping between hash algorithm names as used in the MAPI |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
94 * protocol, and the names by which the Java runtime knows them. |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
95 */ |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
96 private static final String[][] KNOWN_ALGORITHMS = new String[][] { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
97 {"SHA512", "SHA-512"}, |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
98 {"SHA384", "SHA-384"}, |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
99 {"SHA256", "SHA-256"}, |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
100 // should we deprecate this by now? |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
101 {"SHA1", "SHA-1"}, |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
102 }; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
103 |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
104 // MUST be lowercase! |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
105 private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
106 |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
107 /** Connection parameters */ |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
108 private Target target; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
109 /** The TCP Socket to mserver */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
110 private Socket con; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
111 /** 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
|
112 private BlockInputStream fromMonet; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
113 /** Stream from the Socket for writing */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
114 private OutputStream toMonet; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
115 /** MCLReader on the InputStream */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
116 private BufferedMCLReader reader; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
117 /** MCLWriter on the OutputStream */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
118 private BufferedMCLWriter writer; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
119 /** protocol version of the connection */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
120 private int version; |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
121 private ClientInfo clientInfo; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
122 |
836
aad275e042b2
Heed followRedirect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
835
diff
changeset
|
123 /** Whether we should follow redirects. |
aad275e042b2
Heed followRedirect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
835
diff
changeset
|
124 * Not sure why this needs to be separate |
aad275e042b2
Heed followRedirect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
835
diff
changeset
|
125 * from 'ttl' but someone someday explicitly documented setTtl |
aad275e042b2
Heed followRedirect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
835
diff
changeset
|
126 * with 'to disable completely, use followRedirects' so |
aad275e042b2
Heed followRedirect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
835
diff
changeset
|
127 * apparently there is a use case. |
aad275e042b2
Heed followRedirect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
835
diff
changeset
|
128 */ |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
129 private boolean followRedirects = true; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
130 /** 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
|
131 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
|
132 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
133 /** The Writer for the debug log-file */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
134 private Writer log; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
135 |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
136 /** The blocksize (hardcoded in compliance with MonetDB common/stream/stream.h) */ |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
137 public final static int BLOCK = 8190; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
138 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
139 /** 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
|
140 private final byte[] blklen = new byte[2]; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
141 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
142 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
143 * Constructs a new MapiSocket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
144 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
145 public MapiSocket() { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
146 target = new Target(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
147 con = null; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
148 } |
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 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
151 * 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
|
152 * 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
|
153 * is also the default. |
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 * @param db the database |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
156 */ |
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
|
157 public void setDatabase(final String db) { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
158 target.setDatabase(db); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
159 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
160 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
161 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
162 * Sets the language to use for this connection. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
163 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
164 * @param lang the language |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
165 */ |
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
|
166 public void setLanguage(final String lang) { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
167 target.setLanguage(lang); |
0
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 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
171 * 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
|
172 * 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
|
173 * 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
|
174 * separating the hashes by commas. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
175 * 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
|
176 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
177 * @param hash the hash method to use |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
178 */ |
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
|
179 public void setHash(final String hash) { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
180 target.setHash(hash); |
0
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 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
183 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
184 * 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
|
185 * 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
|
186 * encountered during connect. The default bahaviour is to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
187 * automatically follow redirects. |
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 * @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
|
190 */ |
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
|
191 public void setFollowRedirects(final boolean r) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
192 this.followRedirects = r; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
193 } |
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 * 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
|
197 * 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
|
198 * 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
|
199 * 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
|
200 * disable the following of redirects you should use |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
201 * setFollowRedirects. |
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 * @see #setFollowRedirects(boolean r) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
204 * @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
|
205 */ |
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
|
206 public void setTTL(final int t) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
207 this.ttl = t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
208 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
209 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
210 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
211 * 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
|
212 * 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
|
213 * useful to break out of this indefinite wait. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
214 * 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
|
215 * operation to have effect. |
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 * @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
|
218 * 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
|
219 * @throws SocketException Issue with the socket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
220 */ |
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
|
221 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
|
222 if (s < 0) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
223 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
|
224 } |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
225 target.setSoTimeout(s); |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
226 // 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
|
227 if (con != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
228 con.setSoTimeout(s); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
229 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
230 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
231 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
232 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
233 * Gets the SO_TIMEOUT from the underlying Socket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
234 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
235 * @return the currently in use timeout in milliseconds |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
236 * @throws SocketException Issue with the socket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
237 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
238 public int getSoTimeout() throws SocketException { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
239 return target.getSoTimeout(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
240 } |
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
|
241 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
242 /** |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
243 * 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
|
244 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
245 * @param debug Value to set |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
246 */ |
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
|
247 public void setDebug(final boolean debug) { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
248 target.setDebug(debug); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
249 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
250 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
251 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
252 * 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
|
253 * user. If followRedirect is false, a RedirectionException is |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
254 * thrown when a redirect is encountered. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
255 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
256 * @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
|
257 * @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
|
258 * @param user the username |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
259 * @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
|
260 * @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
|
261 * 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
|
262 * @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
|
263 * @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
|
264 * @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
|
265 * @throws MCLParseException if bogus data is received |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
266 * @throws MCLException if an MCL related error occurs |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
267 */ |
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
|
268 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
|
269 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
|
270 { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
271 target.setHost(host); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
272 target.setPort(port); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
273 target.setUser(user); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
274 target.setPassword(pass); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
275 return connect(target, null); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
276 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
277 |
811
ede3a59ff4f2
Add MapiSocket.connect(url, properties) method
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
803
diff
changeset
|
278 public List<String> connect(String url, Properties props) throws URISyntaxException, ValidationError, MCLException, MCLParseException, IOException { |
ede3a59ff4f2
Add MapiSocket.connect(url, properties) method
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
803
diff
changeset
|
279 return connect(new Target(url, props), null); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
280 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
281 |
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
|
282 /** |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
283 * Connect according to the settings in the 'target' parameter. |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
284 * If followRedirect is false, a RedirectionException is |
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
|
285 * 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
|
286 * |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
287 * Some settings, such as the initial reply size, can already be configured |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
288 * during the handshake, saving a command round-trip later on. |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
289 * To do so, create and pass a subclass of {@link MapiSocket.OptionsCallback}. |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
290 * |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
291 * @param target the connection settings |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
292 * @param callback will be called if the server allows options to be set during the |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
293 * initial handshake |
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
|
294 * @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
|
295 * 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
|
296 * @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
|
297 * @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
|
298 * @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
|
299 * @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
|
300 * @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
|
301 */ |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
302 public List<String> connect(Target target, OptionsCallback callback) throws MCLException, MCLParseException, IOException { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
303 // get rid of any earlier connection state, including the existing target |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
304 close(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
305 this.target = target; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
306 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
307 Target.Validated validated; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
308 try { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
309 validated = target.validate(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
310 } catch (ValidationError e) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
311 throw new MCLException(e.getMessage()); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
312 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
313 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
314 if (validated.connectScan()) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
315 return scanUnixSockets(callback); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
316 } |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
317 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
318 ArrayList<String> warnings = new ArrayList<>(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
319 int attempts = 0; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
320 do { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
321 boolean ok = false; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
322 try { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
323 boolean done = tryConnect(callback, warnings); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
324 ok = true; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
325 if (done) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
326 return warnings; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
327 } |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
328 } finally { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
329 if (!ok) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
330 close(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
331 } |
836
aad275e042b2
Heed followRedirect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
835
diff
changeset
|
332 } while (followRedirects && attempts++ < this.ttl); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
333 throw new MCLException("max redirect count exceeded"); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
334 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
335 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
336 private List<String> scanUnixSockets(OptionsCallback callback) throws MCLException, MCLParseException, IOException { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
337 // Because we do not support Unix Domain sockets, we just go back to connect(). |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
338 // target.connectScan() will now return false; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
339 target.setHost("localhost"); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
340 return connect(target, callback); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
341 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
342 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
343 private boolean tryConnect(OptionsCallback callback, ArrayList<String> warningBuffer) throws MCLException, IOException { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
344 try { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
345 // We need a valid target |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
346 Target.Validated validated = target.validate(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
347 // con will be non-null if the previous attempt ended in a redirect to mapi:monetdb://proxy |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
348 if (con == null) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
349 connectSocket(validated); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
350 return handshake(validated, callback, warningBuffer); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
351 } catch (IOException | MCLException e) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
352 close(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
353 throw e; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
354 } catch (ValidationError e) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
355 close(); |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
356 throw new MCLException(e.getMessage()); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
357 } |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
358 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
359 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
360 private void connectSocket(Target.Validated validated) throws MCLException, IOException { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
361 // This method performs steps 2-6 of the procedure outlined in the URL spec |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
362 String tcpHost = validated.connectTcp(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
363 if (tcpHost.isEmpty()) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
364 throw new MCLException("Unix domain sockets are not supported, only TCP"); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
365 } |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
366 int port = validated.connectPort(); |
840
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
367 Socket sock = null; |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
368 try { |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
369 sock = new Socket(tcpHost, port); |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
370 sock.setSoTimeout(validated.getSoTimeout()); |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
371 sock.setTcpNoDelay(true); |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
372 sock.setKeepAlive(true); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
373 |
840
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
374 sock = wrapTLS(sock, validated); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
375 |
840
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
376 fromMonet = new BlockInputStream(sock.getInputStream()); |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
377 toMonet = new BlockOutputStream(sock.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
|
378 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
|
379 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
|
380 writer.registerReader(reader); |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
381 reader.advance(); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
382 |
840
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
383 // Only assign to sock when everything went ok so far |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
384 con = sock; |
850
9f200daffa35
Ensure sock is closed on errors
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
848
diff
changeset
|
385 sock = null; |
840
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
386 } catch (SSLException e) { |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
387 throw new MCLException("SSL error: " + e.getMessage(), e); |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
388 } catch (IOException e) { |
a2b1ae53565e
Improve error messages
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
839
diff
changeset
|
389 throw new MCLException("Could not connect to " + tcpHost + ":" + port + ": " + e.getMessage(), e); |
850
9f200daffa35
Ensure sock is closed on errors
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
848
diff
changeset
|
390 } finally { |
9f200daffa35
Ensure sock is closed on errors
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
848
diff
changeset
|
391 if (sock != null) |
9f200daffa35
Ensure sock is closed on errors
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
848
diff
changeset
|
392 try { |
9f200daffa35
Ensure sock is closed on errors
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
848
diff
changeset
|
393 sock.close(); |
9f200daffa35
Ensure sock is closed on errors
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
848
diff
changeset
|
394 } catch (IOException e) { |
9f200daffa35
Ensure sock is closed on errors
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
848
diff
changeset
|
395 // ignore |
9f200daffa35
Ensure sock is closed on errors
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
848
diff
changeset
|
396 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
397 } |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
398 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
399 |
800
09f463444dde
TLS support in its most basic form
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
799
diff
changeset
|
400 private Socket wrapTLS(Socket sock, Target.Validated validated) throws IOException { |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
401 if (validated.getTls()) |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
402 return SecureSocket.wrap(validated, sock); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
403 else { |
848
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
404 // Send an even number of NUL bytes to avoid a deadlock if |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
405 // we're accidentally connecting to a TLS-protected server. |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
406 // The cause of the deadlock is that we speak MAPI and we wait |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
407 // for the server to send a MAPI challenge. |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
408 // However, if the server is trying to set up TLS, it will be |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
409 // waiting for us to send a TLS 'Client Hello' packet. |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
410 // Hence, deadlock. |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
411 // NUL NUL is a no-op in MAPI and will hopefully force an error |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
412 // in the TLS server. This does not always work, some |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
413 // TLS implementations abort on the first NUL, some need more NULs |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
414 // than we are prepared to send here. 8 seems to be a good number. |
803
1671f2eb130b
Send NUL bytes on non-TLS connect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
801
diff
changeset
|
415 sock.getOutputStream().write(NUL_BYTES); |
1671f2eb130b
Send NUL bytes on non-TLS connect
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
801
diff
changeset
|
416 } |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
417 return sock; |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
418 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
419 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
420 private boolean handshake(Target.Validated validated, OptionsCallback callback, ArrayList<String> warnings) throws IOException, MCLException { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
421 String challenge = reader.getLine(); |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
422 reader.advance(); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
423 if (reader.getLineType() != LineType.PROMPT) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
424 throw new MCLException("Garbage after server challenge: " + reader.getLine()); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
425 String response = challengeResponse(validated, challenge, callback); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
426 writer.writeLine(response); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
427 reader.advance(); |
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
|
428 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
429 // Process the response lines. |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
430 String redirect = null; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
431 StringBuilder errors = new StringBuilder(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
432 while (reader.getLineType() != LineType.PROMPT) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
433 switch (reader.getLineType()) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
434 case REDIRECT: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
435 if (redirect == null) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
436 redirect = reader.getLine(1); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
437 break; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
438 case ERROR: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
439 if (errors.length() > 0) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
440 errors.append("\n"); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
441 errors.append(reader.getLine(7)); // 7 not 1! |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
442 break; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
443 case INFO: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
444 warnings.add(reader.getLine(1)); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
445 break; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
446 default: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
447 // ignore??!! |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
448 break; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
449 } |
700
940e266eeccd
Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
698
diff
changeset
|
450 reader.advance(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
451 } |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
452 if (errors.length() > 0) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
453 throw new MCLException(errors.toString()); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
454 |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
455 if (redirect == null) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
456 return true; // we're happy |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
457 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
458 // process redirect |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
459 try { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
460 MonetUrlParser.parse(target, redirect); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
461 } catch (URISyntaxException | ValidationError e) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
462 throw new MCLException("While processing redirect " + redirect + ": " + e.getMessage(), e); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
463 } |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
464 if (redirect.startsWith("mapi:merovingian://proxy")) { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
465 // The reader is stuck at LineType.PROMPT but actually the |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
466 // next challenge is already there. |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
467 reader.resetLineType(); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
468 reader.advance(); |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
469 } else { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
470 close(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
471 } |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
472 |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
473 return false; // we need another go |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
474 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
475 |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
476 private String challengeResponse(Target.Validated validated, final String challengeLine, OptionsCallback callback) throws MCLException { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
477 // The challengeLine looks like this: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
478 // |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
479 // 45IYyVyRnbgEnK92ad:merovingian:9:RIPEMD160,SHA512,SHA384,SHA256,SHA224,SHA1:LIT:SHA512: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
480 // WgHIibSyH:mserver:9:RIPEMD160,SHA512,SHA384,SHA256,SHA224,SHA1:LIT:SHA512:sql=6:BINARY=1: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
481 // 0 1 2 3 4 5 6 7 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
482 |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
483 String[] parts = challengeLine.split(":"); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
484 if (parts.length < 3) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
485 throw new MCLException("Invalid challenge: expect at least 3 fields"); |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
486 String saltPart = parts[0]; |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
487 String serverTypePart = parts[1]; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
488 String versionPart = parts[2]; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
489 int version; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
490 if (versionPart.equals("9")) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
491 version = 9; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
492 else |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
493 throw new MCLException("Protocol versions other than 9 are note supported: " + versionPart); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
494 if (parts.length < 6) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
495 throw new MCLException("Protocol version " + version + " requires at least 6 fields, found " + parts.length + ": " + challengeLine); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
496 String serverHashesPart = parts[3]; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
497 // String endianPart = parts[4]; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
498 String passwordHashPart = parts[5]; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
499 String optionsPart = parts.length > 6 ? parts[6] : null; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
500 // String binaryPart = parts.length > 7 ? parts[7] : null; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
501 |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
502 if (parts.length > 9 && target.isClientInfo()) { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
503 clientInfo = new ClientInfo(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
504 try { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
505 clientInfo.set("ApplicationName", target.getClientApplication()); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
506 clientInfo.set("ClientRemark", target.getClientRemark()); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
507 } catch (SQLClientInfoException e) { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
508 String keys = String.join(", ", e.getFailedProperties().keySet()); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
509 throw new MCLException("Could not set ClientInfo properties: " + keys, e); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
510 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
511 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
512 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
513 String userResponse; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
514 String password = target.getPassword(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
515 if (serverTypePart.equals("merovingian") && !target.getLanguage().equals("control")) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
516 userResponse = "merovingian"; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
517 password = "merovingian"; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
518 } else { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
519 userResponse = target.getUser(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
520 } |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
521 String optionsResponse = handleOptions(callback, optionsPart); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
522 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
523 // Response looks like this: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
524 // |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
525 // LIT:monetdb:{RIPEMD160}f2236256e5a9b20a5ecab4396e36c14f66c3e3c5:sql:demo |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
526 // :FILETRANS:auto_commit=1,reply_size=1000,size_header=0,columnar_protocol=0,time_zone=3600: |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
527 StringBuilder response = new StringBuilder(80); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
528 response.append("BIG:"); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
529 response.append(userResponse).append(":"); |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
530 hashPassword(response, saltPart, password, passwordHashPart, validated.getHash(), serverHashesPart); |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
531 response.append(":"); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
532 response.append(validated.getLanguage()).append(":"); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
533 response.append(validated.getDatabase()).append(":"); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
534 response.append("FILETRANS:"); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
535 response.append(optionsResponse).append(":"); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
536 |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
537 return response.toString(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
538 } |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
539 |
839
33fadeb034a7
fix comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
838
diff
changeset
|
540 private String hashPassword(StringBuilder responseBuffer, String salt, String password, String passwordAlgo, String configuredHashes, String serverSupportedAlgos) throws MCLException { |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
541 // First determine which hash algorithms we can choose from for the challenge response. |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
542 // This defaults to whatever the server offers but may be restricted by the user. |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
543 Set<String> algoSet = new HashSet<>(Arrays.asList(serverSupportedAlgos.split(","))); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
544 if (!configuredHashes.isEmpty()) { |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
545 String[] allowedList = configuredHashes.toUpperCase().split("[, ]"); |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
546 Set<String> allowedSet = new HashSet<>(Arrays.asList(allowedList)); |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
547 algoSet.retainAll(allowedSet); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
548 if (algoSet.isEmpty()) { |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
549 throw new MCLException("None of the hash algorithms in <" + configuredHashes + "> are supported, server only supports <" + serverSupportedAlgos + ">"); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
550 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
551 } |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
552 |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
553 int maxHashDigits = 512 / 4; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
554 |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
555 // We'll collect the result in the responseBuffer. |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
556 // It will start with '{' HASHNAME '}' followed by hexdigits |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
557 |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
558 // This is where we accumulate what will eventually be hashed into the hexdigits above. |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
559 // It consists of the hexadecimal pre-hash of the password, |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
560 // followed by the salt from the server |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
561 StringBuilder intermediate = new StringBuilder(maxHashDigits + salt.length()); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
562 |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
563 MessageDigest passwordDigest = pickBestAlgorithm(Collections.singleton(passwordAlgo), null); |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
564 // Here's the password.. |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
565 hexhash(intermediate, passwordDigest, password); |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
566 // .. and here's the salt |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
567 intermediate.append(salt); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
568 |
848
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
569 responseBuffer.append('{'); |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
570 MessageDigest responseDigest = pickBestAlgorithm(algoSet, responseBuffer); |
848
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
571 // the call above has appended the HASHNAME, now add '}' |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
572 responseBuffer.append('}'); |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
573 // pickBestAlgorithm has appended HASHNAME, buffer now contains '{' HASHNAME '}' |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
574 hexhash(responseBuffer, responseDigest, intermediate.toString()); |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
575 // response buffer now contains '{' HASHNAME '}' HEX_DIGITS_OF_INTERMEDIATE_BUFFER |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
576 |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
577 return responseBuffer.toString(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
578 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
579 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
580 /** |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
581 * Pick the most preferred digest algorithm and return a MessageDigest instance for that. |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
582 * |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
583 * @param algos the MAPI names of permitted algorithms |
848
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
584 * @param appendMapiName if not null, append MAPI name of chose algorithm to this buffer |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
585 * @return instance of the chosen digester |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
586 * @throws MCLException if none of the options is supported |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
587 */ |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
588 private MessageDigest pickBestAlgorithm(Set<String> algos, StringBuilder appendMapiName) throws MCLException { |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
589 for (String[] choice : KNOWN_ALGORITHMS) { |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
590 String mapiName = choice[0]; |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
591 String algoName = choice[1]; |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
592 MessageDigest digest; |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
593 if (!algos.contains(mapiName)) |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
594 continue; |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
595 try { |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
596 digest = MessageDigest.getInstance(algoName); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
597 } catch (NoSuchAlgorithmException e) { |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
598 continue; |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
599 } |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
600 // we found a match |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
601 if (appendMapiName != null) { |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
602 appendMapiName.append(mapiName); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
603 } |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
604 return digest; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
605 } |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
606 String algoNames = String.join(",", algos); |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
607 throw new MCLException("No supported hash algorithm: " + algoNames); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
608 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
609 |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
610 /** |
848
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
611 * Hash the text into the MessageDigest and append the hexadecimal form of the |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
612 * resulting digest to buffer. |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
613 * |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
614 * @param buffer where the hex digits are appended |
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
615 * @param digest where the hex digits come from after the text has been digested |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
616 * @param text text to digest |
838
3a477cf520f6
Debug and clarify pasword hashing code
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
836
diff
changeset
|
617 */ |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
618 private void hexhash(StringBuilder buffer, MessageDigest digest, String text) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
619 byte[] bytes = text.getBytes(StandardCharsets.UTF_8); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
620 digest.update(bytes); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
621 byte[] output = digest.digest(); |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
622 for (byte b : output) { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
623 int hi = (b & 0xF0) >> 4; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
624 int lo = b & 0x0F; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
625 buffer.append(HEXDIGITS[hi]); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
626 buffer.append(HEXDIGITS[lo]); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
627 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
628 } |
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
|
629 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
630 private String handleOptions(OptionsCallback callback, String optionsPart) throws MCLException { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
631 if (callback == null || optionsPart == null || optionsPart.isEmpty()) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
632 return ""; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
633 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
634 StringBuilder buffer = new StringBuilder(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
635 callback.setBuffer(buffer); |
847
4d80fd66541d
formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
846
diff
changeset
|
636 for (String optlevel : optionsPart.split(",")) { |
846
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
637 int eqindex = optlevel.indexOf('='); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
638 if (eqindex < 0) |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
639 throw new MCLException("Invalid options part in server challenge: " + optionsPart); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
640 String lang = optlevel.substring(0, eqindex); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
641 int level; |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
642 try { |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
643 level = Integer.parseInt(optlevel.substring(eqindex + 1)); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
644 } catch (NumberFormatException e) { |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
645 throw new MCLException("Invalid option level in server challenge: " + optlevel); |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
646 } |
f2689a3e9a95
convert space indents to tabs
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
843
diff
changeset
|
647 callback.addOptions(lang, level); |
0
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 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
650 return buffer.toString(); |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
651 } |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
652 |
0
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 * 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
|
655 * the MapiSocket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
656 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
657 * @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
|
658 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
659 public InputStream getInputStream() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
660 return fromMonet; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
661 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
662 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
663 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
664 * Returns an output stream for this MapiSocket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
665 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
666 * @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
|
667 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
668 public OutputStream getOutputStream() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
669 return toMonet; |
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 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
673 * 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
|
674 * BufferedMCLReader which does protocol interpretation of the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
675 * BlockInputStream produced by this MapiSocket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
676 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
677 * @return a BufferedMCLReader connected to this MapiSocket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
678 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
679 public BufferedMCLReader getReader() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
680 return reader; |
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 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
684 * 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
|
685 * BufferedMCLWriter which produces protocol compatible data blocks |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
686 * that the BlockOutputStream can properly translate into blocks. |
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 * @return a BufferedMCLWriter connected to this MapiSocket |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
689 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
690 public BufferedMCLWriter getWriter() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
691 return writer; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
692 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
693 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
694 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
695 * 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
|
696 * 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
|
697 * MapiSocket should check this version to act appropriately. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
698 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
699 * @return the mapi protocol version |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
700 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
701 public int getProtocolVersion() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
702 return version; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
703 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
704 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
705 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
706 * 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
|
707 * 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
|
708 * encouraged to start debugging before actually connecting the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
709 * socket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
710 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
711 * @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
|
712 * @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
|
713 */ |
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
|
714 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
|
715 debug(new FileWriter(filename)); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
716 } |
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
|
717 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
718 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
719 * 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
|
720 * 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
|
721 * encouraged to start debugging before actually connecting the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
722 * socket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
723 * |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
724 * @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
|
725 * @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
|
726 */ |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
727 // 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
|
728 // 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
|
729 // 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
|
730 // } |
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
|
731 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
732 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
733 * 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
|
734 * 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
|
735 * encouraged to start debugging before actually connecting the |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
736 * socket. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
737 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
738 * @param out to write the log to |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
739 */ |
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
|
740 public void debug(final Writer out) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
741 log = out; |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
742 setDebug(true); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
743 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
744 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
745 /** |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
746 * 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
|
747 * |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
748 * @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
|
749 */ |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
750 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
|
751 return log; |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
752 } |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
753 |
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
754 /** |
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
|
755 * 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
|
756 * 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
|
757 * |
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
|
758 * 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
|
759 * 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
|
760 * 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
|
761 * |
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
|
762 * @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
|
763 * @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
|
764 * @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
|
765 * @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
|
766 */ |
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
|
767 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
|
768 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
|
769 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
|
770 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
|
771 } |
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
|
772 |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
773 /** |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
774 * For internal use |
626
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
775 * |
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
776 * @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
|
777 * @return previous setting |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
778 */ |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
779 public boolean setInsertFakePrompts(boolean b) { |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
780 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
|
781 } |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
782 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
783 public boolean isDebug() { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
784 return target.isDebug(); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
785 } |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
786 |
903
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
787 public boolean hasClientInfo() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
788 return clientInfo != null; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
789 } |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
790 |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
791 public ClientInfo getClientInfo() { |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
792 if (clientInfo == null) |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
793 clientInfo = new ClientInfo(); |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
794 return clientInfo; |
778959b2e0a4
Send ClientInfo on startup
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
867
diff
changeset
|
795 } |
867
5a59910e8f87
Resolve some javadoc errors and warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
852
diff
changeset
|
796 |
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
|
797 /** |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
798 * 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
|
799 * 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
|
800 * "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
|
801 * 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
|
802 * 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
|
803 * 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
|
804 * being written to the stream. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
805 */ |
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
|
806 final class BlockOutputStream extends FilterOutputStream { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
807 private int writePos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
808 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
|
809 private final byte[] block = new byte[BLOCK]; |
0
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 * Constructs this BlockOutputStream, backed by the given |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
813 * 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
|
814 * @param out an OutputStream |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
815 */ |
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
|
816 public BlockOutputStream(final OutputStream out) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
817 // 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
|
818 // 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
|
819 // some reason |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
820 super(new BufferedOutputStream(out)); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
821 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
822 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
823 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
824 public void flush() throws IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
825 // write the block (as final) then flush. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
826 writeBlock(true); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
827 out.flush(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
828 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
829 // 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
|
830 // 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
|
831 // 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
|
832 // 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
|
833 // 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
|
834 // let it go so there is feedback about something going wrong |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
835 if (isDebug()) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
836 log.flush(); |
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 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
839 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
840 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
841 * 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
|
842 * 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
|
843 * 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
|
844 * |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
845 * @param last whether this is the last block |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
846 * @throws IOException if writing to the stream failed |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
847 */ |
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
|
848 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
|
849 if (last) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
850 // always fits, because of BLOCK's size |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
851 blocksize = (short)writePos; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
852 // this is the last block, so encode least |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
853 // significant bit in the first byte (little-endian) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
854 blklen[0] = (byte)(blocksize << 1 & 0xFF | 1); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
855 blklen[1] = (byte)(blocksize >> 7); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
856 } else { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
857 // always fits, because of BLOCK's size |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
858 blocksize = (short)BLOCK; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
859 // another block will follow, encode least |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
860 // significant bit in the first byte (little-endian) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
861 blklen[0] = (byte)(blocksize << 1 & 0xFF); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
862 blklen[1] = (byte)(blocksize >> 7); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
863 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
864 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
865 out.write(blklen); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
866 // write the actual block |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
867 out.write(block, 0, writePos); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
868 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
869 if (isDebug()) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
870 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
|
871 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
|
872 } 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
|
873 log("TD ", "write block: " + writePos + " bytes", false); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
874 } |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
875 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
|
876 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
877 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
878 writePos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
879 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
880 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
881 @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
|
882 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
|
883 if (writePos == BLOCK) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
884 writeBlock(false); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
885 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
886 block[writePos++] = (byte)b; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
887 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
888 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
889 @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
|
890 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
|
891 write(b, 0, b.length); |
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 @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
|
895 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
|
896 while (len > 0) { |
556
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
897 int t = BLOCK - writePos; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
898 if (len > t) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
899 System.arraycopy(b, off, block, writePos, t); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
900 off += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
901 len -= t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
902 writePos += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
903 writeBlock(false); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
904 } else { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
905 System.arraycopy(b, off, block, writePos, len); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
906 writePos += len; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
907 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
908 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
909 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
910 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
911 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
912 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
913 public void close() throws IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
914 // 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
|
915 // the FilterOutputStream), so we close manually here |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
916 out.close(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
917 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
918 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
919 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
920 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
921 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
922 * 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
|
923 * available as a normal stream. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
924 */ |
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
|
925 final class BlockInputStream extends FilterInputStream { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
926 private int readPos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
927 private int blockLen = 0; |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
928 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
|
929 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
|
930 private boolean insertFakePrompts = true; |
0
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 * Constructs this BlockInputStream, backed by the given |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
934 * 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
|
935 * @param in an InputStream |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
936 */ |
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
|
937 public BlockInputStream(final InputStream in) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
938 // 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
|
939 // 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
|
940 // some reason |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
941 super(new BufferedInputStream(in)); |
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 |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
944 public boolean setInsertFakePrompts(boolean doFake) { |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
945 boolean old = insertFakePrompts; |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
946 insertFakePrompts = doFake; |
501
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
947 return old; |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
948 } |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
949 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
950 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
951 public int available() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
952 return blockLen - readPos; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
953 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
954 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
955 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
956 public boolean markSupported() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
957 return false; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
958 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
959 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
960 @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
|
961 public void mark(final int readlimit) { |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
962 throw new AssertionError("Not implemented!"); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
963 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
964 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
965 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
966 public void reset() { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
967 throw new AssertionError("Not implemented!"); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
968 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
969 |
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 * 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
|
972 * 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
|
973 * 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
|
974 * 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
|
975 * data will greatly complicate matters, while a performance |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
976 * 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
|
977 * 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
|
978 * consider this method a quick bug fix/workaround. |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
979 * |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
980 * @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
|
981 * @param len number of bytes to read |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
982 * @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
|
983 * @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
|
984 */ |
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
|
985 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
|
986 int s; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
987 int off = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
988 while (len > 0) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
989 s = in.read(b, off, len); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
990 if (s == -1) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
991 // 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
|
992 // 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
|
993 if (off > 0) { |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
994 if (isDebug()) { |
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
|
995 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
|
996 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
|
997 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
998 throw new IOException("Read from " + |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
999 con.getInetAddress().getHostName() + ":" + |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1000 con.getPort() + ": Incomplete block read from stream"); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1001 } |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1002 if (isDebug()) |
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
|
1003 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
|
1004 return false; |
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 len -= s; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1007 off += s; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1008 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1009 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1010 return true; |
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 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1013 /** |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1014 * 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
|
1015 * or writes the prompt in the buffer. |
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 * 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
|
1018 * 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
|
1019 * 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
|
1020 * 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
|
1021 * 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
|
1022 * 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
|
1023 * 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
|
1024 * read methods. |
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 * 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
|
1027 * 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
|
1028 * 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
|
1029 * 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
|
1030 * 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
|
1031 * Reader that is possibly chained to this InputStream. |
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 * 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
|
1034 * loose. |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1035 * |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1036 * @return blockLen |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1037 * @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
|
1038 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1039 private int readBlock() throws IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1040 // read next two bytes (short) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1041 if (!_read(blklen, 2)) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1042 return(-1); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1043 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1044 // 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
|
1045 blockLen = (short)( |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1046 (blklen[0] & 0xFF) >> 1 | |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1047 (blklen[1] & 0xFF) << 7 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1048 ); |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1049 wasEndBlock = (blklen[0] & 0x1) == 1; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1050 |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1051 readPos = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1052 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1053 if (isDebug()) { |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1054 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
|
1055 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
|
1056 } 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
|
1057 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
|
1058 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1059 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1060 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1061 // 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
|
1062 // stack trace |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1063 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
|
1064 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
|
1065 blockLen + " > " + block.length); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1066 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
|
1067 return -1; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1068 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1069 if (isDebug()) |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
1070 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
|
1071 |
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
|
1072 // 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
|
1073 if (wasEndBlock) { |
537
242debd7e866
Fix mistake in comment
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
535
diff
changeset
|
1074 // insert 'fake' newline and prompt |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1075 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
|
1076 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
|
1077 // 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
|
1078 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
|
1079 } |
501
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
1080 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
|
1081 block[blockLen++] = b; |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
1082 } |
eaad79c3235f
Make the fake prompts at block ends optional
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
498
diff
changeset
|
1083 block[blockLen++] = '\n'; |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1084 if (isDebug()) { |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1085 log("RD ", "inserting prompt", true); |
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1086 } |
498
4cfe4991ee63
Use the prompt characters from mapi_prompt.h
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
497
diff
changeset
|
1087 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1088 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1089 |
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
|
1090 return blockLen; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1091 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1092 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1093 @Override |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1094 public int read() throws IOException { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1095 if (available() == 0) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1096 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
|
1097 return -1; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1098 } |
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
|
1099 |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1100 if (isDebug()) |
555
90c346571eb4
Use StandardCharsets.UTF_8 where possible
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
554
diff
changeset
|
1101 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
|
1102 |
816
9188263368cc
InputStream.read must return the byte UNSIGNED!
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1103 return block[readPos++] & 0xFF; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1104 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1105 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1106 @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
|
1107 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
|
1108 return read(b, 0, b.length); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1109 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1110 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1111 @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
|
1112 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
|
1113 int t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1114 int size = 0; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1115 while (size < len) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1116 t = available(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1117 if (t == 0) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1118 if (size != 0) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1119 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1120 if (readBlock() == -1) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1121 if (size == 0) |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1122 size = -1; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1123 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1124 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1125 t = available(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1126 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1127 if (len > t) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1128 System.arraycopy(block, readPos, b, off, t); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1129 off += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1130 len -= t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1131 readPos += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1132 size += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1133 } else { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1134 System.arraycopy(block, readPos, b, off, len); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1135 readPos += len; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1136 size += len; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1137 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1138 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1139 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1140 return size; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1141 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1142 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1143 @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
|
1144 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
|
1145 long skip = n; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1146 while (skip > 0) { |
556
87feb93330a6
Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
555
diff
changeset
|
1147 int t = available(); |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1148 if (skip > t) { |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1149 skip -= t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1150 readPos += t; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1151 readBlock(); |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1152 } 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
|
1153 readPos += (int)skip; |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1154 break; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1155 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1156 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1157 return n; |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1158 } |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1159 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1160 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1161 * 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
|
1162 * @return new Raw object |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1163 */ |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1164 Raw getRaw() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1165 return new Raw(); |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1166 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1167 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1168 /** 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
|
1169 final class Raw { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1170 byte[] getBytes() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1171 return block; |
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 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1174 int getLength() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1175 return blockLen; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1176 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1177 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1178 int getPosition() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1179 return readPos; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1180 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1181 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1182 int consume(int delta) { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1183 int pos = readPos; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1184 readPos += delta; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1185 return pos; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1186 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1187 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1188 int readBlock() throws IOException { |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1189 boolean wasFaking = setInsertFakePrompts(false); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1190 try { |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1191 return BlockInputStream.this.readBlock(); |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1192 } finally { |
511
bd860e850fe1
rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
509
diff
changeset
|
1193 setInsertFakePrompts(wasFaking); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1194 } |
508
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1195 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1196 |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1197 boolean wasEndBlock() { |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1198 return wasEndBlock; |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1199 } |
7730d65dfd55
Add MapiSocket.BlockInputStream.Raw
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
507
diff
changeset
|
1200 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1201 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1202 |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1203 /** |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
1204 * 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
|
1205 * 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
|
1206 * resources as possible are closed. |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1207 */ |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1208 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
|
1209 if (writer != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1210 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1211 writer.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1212 writer = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1213 } 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
|
1214 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1215 if (reader != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1216 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1217 reader.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1218 reader = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1219 } 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
|
1220 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1221 if (toMonet != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1222 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1223 toMonet.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1224 toMonet = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1225 } 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
|
1226 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1227 if (fromMonet != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1228 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1229 fromMonet.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1230 fromMonet = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1231 } 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
|
1232 } |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1233 if (con != null) { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1234 try { |
281
b58c1b245ede
Correct and improve implementation of getChallengeResponse() for protocol 9
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
276
diff
changeset
|
1235 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
|
1236 con = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1237 } 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
|
1238 } |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1239 if (isDebug() && 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
|
1240 try { |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1241 log.close(); |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1242 log = null; |
6cc63d6cb224
Implemented fix as suggested in Bug 3973
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
0
diff
changeset
|
1243 } catch (IOException e) { /* ignore it */ } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1244 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1245 } |
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1246 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1247 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1248 * 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
|
1249 * |
552
7b320303b579
Doc comment improvements
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
547
diff
changeset
|
1250 * 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
|
1251 * |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1252 * @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
|
1253 * @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
|
1254 */ |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1255 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
|
1256 return new UploadStream(chunkSize); |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1257 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1258 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1259 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1260 * 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
|
1261 * |
552
7b320303b579
Doc comment improvements
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
547
diff
changeset
|
1262 * 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
|
1263 * |
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1264 * @return UploadStream new upload stream |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1265 */ |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1266 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
|
1267 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
|
1268 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1269 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1270 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1271 * 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
|
1272 * |
552
7b320303b579
Doc comment improvements
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
547
diff
changeset
|
1273 * 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
|
1274 * |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1275 * @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
|
1276 * @return DownloadStream new download stream |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1277 */ |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1278 public DownloadStream downloadStream(boolean prependCr) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1279 return new DownloadStream(fromMonet.getRaw(), toMonet, prependCr); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1280 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1281 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1282 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1283 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1284 * 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
|
1285 * |
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1286 * 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
|
1287 * |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1288 * 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
|
1289 * the opportunity to abort the upload. |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1290 */ |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1291 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
|
1292 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
|
1293 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
|
1294 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
|
1295 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
|
1296 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
|
1297 private byte[] promptBuffer; |
557
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1298 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
|
1299 |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1300 /** |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
700
diff
changeset
|
1301 * 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
|
1302 * @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
|
1303 */ |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1304 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
|
1305 super(toMonet); |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1306 if (chunkSize <= 0) { |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1307 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
|
1308 } |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1309 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
|
1310 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
|
1311 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
|
1312 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
|
1313 chunkLeft = this.chunkSize; |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1314 } |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1315 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1316 /** 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
|
1317 UploadStream() { |
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1318 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
|
1319 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1320 |
557
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1321 /** 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
|
1322 * |
06d69b82d409
Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
616
diff
changeset
|
1323 * @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
|
1324 */ |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1325 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
|
1326 this.cancellationCallback = cancellationCallback; |
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1327 } |
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1328 |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1329 @Override |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1330 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
|
1331 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
|
1332 // 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
|
1333 // 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
|
1334 // 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
|
1335 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
|
1336 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1337 handleChunking(); |
612
1d44b8a577ca
write to out, not to super when implementing FilterOutputStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
610
diff
changeset
|
1338 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
|
1339 wrote(1); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1340 } |
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 @Override |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1343 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
|
1344 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
|
1345 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1346 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1347 @Override |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1348 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
|
1349 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
|
1350 // 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
|
1351 // 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
|
1352 // 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
|
1353 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
|
1354 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1355 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
|
1356 handleChunking(); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1357 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
|
1358 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
|
1359 off += toWrite; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1360 len -= toWrite; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1361 wrote(toWrite); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1362 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1363 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1364 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1365 @Override |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1366 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
|
1367 // suppress flushes |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1368 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1369 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1370 @Override |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1371 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
|
1372 if (closed) { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1373 return; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1374 } |
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
|
1375 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
|
1376 |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1377 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
|
1378 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
|
1379 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
|
1380 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
|
1381 } |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1382 |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1383 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
|
1384 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
|
1385 // 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
|
1386 flushAndReadPrompt(); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1387 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1388 // 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
|
1389 out.flush(); |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1390 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
|
1391 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
|
1392 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
|
1393 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1394 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1395 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1396 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
|
1397 // 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
|
1398 } |
b75464874130
Keep better track of whether the server has cancelled the upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
521
diff
changeset
|
1399 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1400 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
|
1401 chunkLeft -= i; |
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 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
|
1405 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
|
1406 return; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1407 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1408 flushAndReadPrompt(); |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1409 } |
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 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
|
1412 out.flush(); |
521
72007c4f8f8a
Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
512
diff
changeset
|
1413 chunkLeft = chunkSize; |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1414 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
|
1415 switch (lineType) { |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1416 case MORE: |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1417 return; |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1418 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
|
1419 // 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
|
1420 // 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
|
1421 serverCancelled = true; |
557
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1422 if (cancellationCallback != null) { |
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1423 cancellationCallback.run(); |
ce2b616ed22e
Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
556
diff
changeset
|
1424 } |
502
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1425 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
|
1426 default: |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1427 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
|
1428 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1429 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1430 |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1431 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
|
1432 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
|
1433 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
|
1434 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
|
1435 } |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1436 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
|
1437 } |
83354bd21320
Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
501
diff
changeset
|
1438 } |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1439 |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1440 |
535
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1441 /** |
c9d88af06d35
Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
533
diff
changeset
|
1442 * 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
|
1443 * |
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1444 * 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
|
1445 */ |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1446 public static class DownloadStream extends InputStream { |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1447 private final BlockInputStream.Raw rawIn; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1448 private final OutputStream out; |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1449 private final boolean prependCr; |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1450 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
|
1451 private boolean closed = false; |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1452 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
|
1453 |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1454 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
|
1455 this.rawIn = rawIn; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1456 this.out = out; |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1457 this.prependCr = prependCr; |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1458 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1459 |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1460 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
|
1461 if (endBlockSeen || closed) |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1462 return; |
576
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1463 final int ret = rawIn.readBlock(); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1464 if (ret < 0 || rawIn.wasEndBlock()) { |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1465 endBlockSeen = true; |
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 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1468 |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1469 @Override |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1470 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
|
1471 if (closed) |
8029d7368b5a
Make sure the download stream isn't closed twice
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
541
diff
changeset
|
1472 return; |
8029d7368b5a
Make sure the download stream isn't closed twice
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
541
diff
changeset
|
1473 closed = true; |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1474 while (!endBlockSeen) { |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1475 nextBlock(); |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1476 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1477 // Send acknowledgement to server |
512
a4000e374a43
Fix silly mistake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
511
diff
changeset
|
1478 out.write('\n'); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1479 out.flush(); |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1480 // Do whatever super has to do |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1481 super.close(); |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1482 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1483 |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1484 @Override |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1485 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
|
1486 final byte[] buf = { 0 }; |
095e896f9d7a
Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
573
diff
changeset
|
1487 final int nread = read(buf, 0, 1); |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1488 if (nread == 1) |
816
9188263368cc
InputStream.read must return the byte UNSIGNED!
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1489 return buf[0] & 0xFF; |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1490 else |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1491 return -1; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1492 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1493 |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1494 @Override |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1495 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
|
1496 final int origOff = off; |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1497 int end = off + len; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1498 |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1499 while (off < end) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1500 // 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
|
1501 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
|
1502 assert chunk >= 0; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1503 if (chunk == 0) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1504 // make progress by fetching more data |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1505 if (endBlockSeen) |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1506 break; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1507 nextBlock(); |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1508 continue; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1509 } |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1510 // make progress copying some bytes |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1511 if (!prependCr) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1512 // no conversion needed, use arraycopy |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1513 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
|
1514 off += chunk; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1515 rawIn.consume(chunk); |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1516 } else { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1517 int chunkEnd = off + chunk; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1518 if (newlinePending && off < chunkEnd) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1519 // 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
|
1520 dest[off++] = '\n'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1521 newlinePending = false; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1522 } |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1523 while (off < chunkEnd) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1524 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
|
1525 if (b != '\n') { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1526 dest[off++] = b; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1527 } else if (chunkEnd - off >= 2) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1528 dest[off++] = '\r'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1529 dest[off++] = '\n'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1530 } else { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1531 dest[off++] = '\r'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1532 newlinePending = true; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1533 break; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1534 } |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1535 } |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1536 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1537 } |
616
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1538 |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1539 if (off < end && newlinePending) { |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1540 dest[off++] = '\n'; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1541 newlinePending = false; |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1542 } |
65641a7cea31
Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
612
diff
changeset
|
1543 |
509
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1544 if (off == origOff && endBlockSeen) |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1545 return -1; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1546 else |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1547 return off - origOff; |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1548 } |
455497783026
Add MapiSocket.DownloadStream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
508
diff
changeset
|
1549 } |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1550 |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1551 /** |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1552 * Callback used during the initial MAPI handshake. |
848
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
1553 * |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1554 * Newer MonetDB versions allow setting some options during the handshake. |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1555 * The options are language-specific and each has a 'level'. The server |
848
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
1556 * advertises up to which level options are supported for a given language. |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
1557 * For each language/option combination, {@link #addOptions} will be invoked |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
1558 * during the handshake. This method should call {@link #contribute} for each |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
1559 * option it wants to set. |
ac56897d3452
comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
847
diff
changeset
|
1560 * |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1561 * At the time of writing, only the 'sql' language supports options, |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1562 * they are listed in enum mapi_handshake_options_levels in mapi.h. |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1563 */ |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1564 public static abstract class OptionsCallback { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1565 private StringBuilder buffer; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1566 |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1567 /** |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1568 * Callback called for each language/level combination supported by the |
839
33fadeb034a7
fix comments
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
838
diff
changeset
|
1569 * server. May call {@link #contribute} for options with a level STRICTLY |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1570 * LOWER than the level passed as a parameter. |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1571 * @param lang language advertised by the server |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1572 * @param level one higher than the maximum supported option |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1573 */ |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1574 public abstract void addOptions(String lang, int level); |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1575 |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1576 /** |
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1577 * Pass option=value during the handshake |
867
5a59910e8f87
Resolve some javadoc errors and warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
852
diff
changeset
|
1578 * @param field name |
5a59910e8f87
Resolve some javadoc errors and warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
852
diff
changeset
|
1579 * @param value int value |
834
5aa19bbed0d6
Comments and formatting
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
811
diff
changeset
|
1580 */ |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1581 protected void contribute(String field, int value) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1582 if (buffer.length() > 0) |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1583 buffer.append(','); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1584 buffer.append(field); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1585 buffer.append('='); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1586 buffer.append(value); |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1587 } |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1588 |
867
5a59910e8f87
Resolve some javadoc errors and warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
852
diff
changeset
|
1589 /** |
5a59910e8f87
Resolve some javadoc errors and warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
852
diff
changeset
|
1590 * Set the buffer |
5a59910e8f87
Resolve some javadoc errors and warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
852
diff
changeset
|
1591 * @param buf a non null StringBuilder object |
5a59910e8f87
Resolve some javadoc errors and warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
852
diff
changeset
|
1592 */ |
793
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1593 void setBuffer(StringBuilder buf) { |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1594 buffer = buf; |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1595 } |
5bfe3357fb1c
Use the new url parser
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
768
diff
changeset
|
1596 } |
0
a5a898f6886c
Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff
changeset
|
1597 } |