1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/*
* libbrlapi - A library providing access to braille terminals for applications.
*
* Copyright (C) 2006-2025 by
* Samuel Thibault <Samuel.Thibault@ens-lyon.org>
* Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.org>
*
* libbrlapi comes with ABSOLUTELY NO WARRANTY.
*
* This is free software, placed under the terms of the
* GNU Lesser General Public License, as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any
* later version. Please see the file LICENSE-LGPL for details.
*
* Web Page: http://brltty.app/
*
* This software is maintained by Dave Mielke <dave@mielke.cc>.
*/
package org.a11y.brlapi;
import java.util.Map;
import java.util.HashMap;
import java.io.InterruptedIOException;
import java.util.concurrent.TimeoutException;
public class ConnectionBase extends NativeComponent implements AutoCloseable {
private long connectionHandle;
private final static Map<Long, ConnectionBase> connections = new HashMap<>();
private boolean hasBecomeUnusable = false;
private native int openConnection (
ConnectionSettings desiredSettings, ConnectionSettings actualSettings
) throws ConnectException;
private final ConnectionSettings connectionSettings;
private final int fileDescriptor;
public ConnectionBase (ConnectionSettings settings) throws ConnectException {
super();
connectionSettings = new ConnectionSettings();
fileDescriptor = openConnection(settings, connectionSettings);
synchronized (connections) {
if (connections.putIfAbsent(connectionHandle, this) != null) {
throw new IllegalStateException("connection handle already mapped");
}
}
}
public final String getServerHost () {
return connectionSettings.getServerHost();
}
public final String getAuthenticationScheme () {
return connectionSettings.getAuthenticationScheme();
}
public final int getFileDescriptor () {
return fileDescriptor;
}
private native void closeConnection ();
private boolean hasBeenClosed = false;
@Override
public void close () {
synchronized (this) {
if (!hasBeenClosed) {
synchronized (connections) {
connections.remove(connectionHandle);
}
closeConnection();
hasBeenClosed = true;
}
}
}
public static ConnectionBase getConnection (long handle) {
synchronized (connections) {
return connections.get(handle);
}
}
public static void setUnusable (long handle) {
// this needs to be public but it mustn't be easy
ConnectionBase connection = getConnection(handle);
connection.hasBecomeUnusable = true;
}
public final boolean isUnusable () {
return hasBecomeUnusable;
}
public native String getDriverName ();
public native String getModelIdentifier ();
public native DisplaySize getDisplaySize ();
public native void pause (int milliseconds)
throws InterruptedIOException;
public native int enterTtyMode (int tty, String driver);
public native void enterTtyModeWithPath (String driver, int... ttys);
public native void leaveTtyMode ();
public native void setFocus (int tty);
protected native void writeText (int cursor, String text);
protected native void writeDots (byte[] dots);
public native void write (WriteArguments arguments);
public native Long readKey (boolean wait) throws InterruptedIOException;
public native long readKeyWithTimeout (int milliseconds)
throws InterruptedIOException, TimeoutException;
public native void ignoreKeys (long type, long[] keys);
public native void acceptKeys (long type, long[] keys);
public native void ignoreAllKeys ();
public native void acceptAllKeys ();
public native void ignoreKeyRanges (long[][] ranges);
public native void acceptKeyRanges (long[][] ranges);
public native void enterRawMode (String driver);
public native void leaveRawMode ();
public native int sendRaw (byte[] buffer);
public native int recvRaw (byte[] buffer)
throws InterruptedIOException;
public native Object getParameter (int parameter, long subparam, boolean global);
public native void setParameter (int parameter, long subparam, boolean global, Object value);
public native long watchParameter (int parameter, long subparam, boolean global, ParameterWatcher watcher);
public native static void unwatchParameter (long identifier);
}
|