blob: 5318d4910e9268be918ee6d6200e31954c915461 [file] [log] [blame]
/*
* libbrlapi - A library providing access to braille terminals for applications.
*
* Copyright (C) 2006-2023 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.io.File;
public class ConnectionSettings extends NativeComponent {
public final static char HOST_PORT_SEPARATOR = ':';
public final static String DEFAULT_HOST_NAME = "";
public final static int MINIMUM_PORT_NUMBER = 0;
public final static int MAXIMUM_PORT_NUMBER = 99;
public final static int DEFAULT_PORT_NUMBER = MINIMUM_PORT_NUMBER;
public final static String DEFAULT_SERVER_HOST =
DEFAULT_HOST_NAME + HOST_PORT_SEPARATOR + DEFAULT_PORT_NUMBER;
private String serverHost = null;
public static void checkHostSpecification (String specification) {
int index = specification.indexOf(HOST_PORT_SEPARATOR);
if (index == 0) {
return;
}
if (index < 0) {
specification = String.format(
"%s%c%s", specification, HOST_PORT_SEPARATOR, DEFAULT_PORT_NUMBER
);
} else {
String number = specification.substring(index+1);
if (number.isEmpty()) {
throw new IllegalArgumentException("missing port number");
}
try {
Parse.asInt(
"port number", number,
MINIMUM_PORT_NUMBER, MAXIMUM_PORT_NUMBER
);
} catch (SyntaxException exception) {
throw new IllegalArgumentException(exception.getMessage());
}
}
}
public final ConnectionSettings setServerHost (String specification) {
checkHostSpecification(specification);
serverHost = specification;
return this;
}
public final String getServerHost () {
return serverHost;
}
public final static char AUTHENTICATION_SCHEME_SEPARATOR = '+';
public final static char AUTHENTICATION_OPERAND_PREFIX = ':';
public final static String AUTHENTICATION_SCHEME_KEYFILE = "keyfile";
public final static String AUTHENTICATION_SCHEME_NONE = "none";
private native static String getKeyfileDirectory ();
public final static String AUTHENTICATION_KEYFILE_DIRECTORY = getKeyfileDirectory();
private native static String getKeyfileName ();
public final static String AUTHENTICATION_KEYFILE_NAME = getKeyfileName();
public final static String DEFAULT_AUTHENTICATION_SCHEME;
static {
StringBuilder builder = new StringBuilder();
{
File file = new File(
AUTHENTICATION_KEYFILE_DIRECTORY,
AUTHENTICATION_KEYFILE_NAME
);
if (file.isFile() && file.canRead()) {
builder.append(AUTHENTICATION_SCHEME_KEYFILE)
.append(AUTHENTICATION_OPERAND_PREFIX)
.append(file.getAbsolutePath());
}
}
if (builder.length() > 0) builder.append(AUTHENTICATION_SCHEME_SEPARATOR);
builder.append(AUTHENTICATION_SCHEME_NONE);
DEFAULT_AUTHENTICATION_SCHEME = builder.toString();
}
private String authenticationScheme = null;
public static void checkAuthenticationScheme (String scheme) {
}
public final ConnectionSettings setAuthenticationScheme (String scheme) {
checkAuthenticationScheme(scheme);
authenticationScheme = scheme;
return this;
}
public final String getAuthenticationScheme () {
return authenticationScheme;
}
public ConnectionSettings () {
setServerHost(DEFAULT_SERVER_HOST);
setAuthenticationScheme(DEFAULT_AUTHENTICATION_SCHEME);
}
@Override
public String toString () {
return String.format(
"Server:%s Scheme:%s", serverHost, authenticationScheme
);
}
}