use of software.amazon.awssdk.crt.utils.PackageInfo in project aws-iot-device-sdk-java-v2 by aws.
the class AwsIotMqttConnectionBuilder method build.
/**
* Builds a new mqtt connection from the configuration stored in the builder. Because some objects are created
* lazily, certain properties should not be modified after this is first invoked (tls options, bootstrap).
*
* @return a new mqtt connection
*/
public MqttClientConnection build() {
// Validate
if (bootstrap == null) {
bootstrap = ClientBootstrap.getOrCreateStaticDefault();
}
// has no affect on subsequently-created connections.
synchronized (this) {
// Check to see if a custom authorizer is being used but not through the builder.
if (isUsingCustomAuthorizer == false) {
if (config.getUsername() != null) {
if (config.getUsername().contains("x-amz-customauthorizer-name=") || config.getUsername().contains("x-amz-customauthorizer-signature=")) {
isUsingCustomAuthorizer = true;
}
}
}
// Is the user trying to connect using a custom authorizer?
if (isUsingCustomAuthorizer == true) {
if (config.getPort() != 443) {
Log.log(LogLevel.Warn, LogSubject.MqttClient, "Attempting to connect to authorizer with unsupported port. Port is not 443...");
}
if (tlsOptions.alpnList.size() == 1) {
if (tlsOptions.alpnList.get(0) != "mqtt") {
tlsOptions.alpnList.clear();
tlsOptions.alpnList.add("mqtt");
}
} else {
tlsOptions.alpnList.clear();
tlsOptions.alpnList.add("mqtt");
}
}
if (tlsOptions != null && (tlsContext == null || resetLazilyCreatedResources)) {
try (ClientTlsContext clientTlsContext = new ClientTlsContext(tlsOptions)) {
swapReferenceTo(tlsContext, clientTlsContext);
tlsContext = clientTlsContext;
}
}
if (client == null || resetLazilyCreatedResources) {
try (MqttClient mqttClient = (tlsContext == null) ? new MqttClient(bootstrap) : new MqttClient(bootstrap, tlsContext)) {
swapReferenceTo(client, mqttClient);
client = mqttClient;
config.setMqttClient(client);
}
}
}
resetLazilyCreatedResources = false;
// Connection create
try (MqttConnectionConfig connectionConfig = config.clone()) {
// Whether or not a username has been added, append our metrics tokens
String usernameOrEmpty = "";
if (connectionConfig.getUsername() != null) {
usernameOrEmpty = connectionConfig.getUsername();
}
String queryStringConcatenation = "?";
if (usernameOrEmpty.contains("?")) {
queryStringConcatenation = "&";
}
connectionConfig.setUsername(String.format("%s%sSDK=JavaV2&Version=%s", usernameOrEmpty, queryStringConcatenation, new PackageInfo().version.toString()));
if (connectionConfig.getUseWebsockets() && connectionConfig.getWebsocketHandshakeTransform() == null) {
if (websocketCredentialsProvider == null) {
DefaultChainCredentialsProvider.DefaultChainCredentialsProviderBuilder providerBuilder = new DefaultChainCredentialsProvider.DefaultChainCredentialsProviderBuilder();
providerBuilder.withClientBootstrap(bootstrap);
try (CredentialsProvider defaultProvider = providerBuilder.build()) {
withWebsocketCredentialsProvider(defaultProvider);
}
}
try (AwsSigningConfig signingConfig = new AwsSigningConfig()) {
signingConfig.setAlgorithm(AwsSigningConfig.AwsSigningAlgorithm.SIGV4);
signingConfig.setSignatureType(AwsSigningConfig.AwsSignatureType.HTTP_REQUEST_VIA_QUERY_PARAMS);
signingConfig.setRegion(websocketSigningRegion);
signingConfig.setService(IOT_SIGNING_SERVICE);
signingConfig.setCredentialsProvider(websocketCredentialsProvider);
signingConfig.setOmitSessionToken(true);
try (AwsSigv4HandshakeTransformer transformer = new AwsSigv4HandshakeTransformer(signingConfig)) {
connectionConfig.setWebsocketHandshakeTransform(transformer);
/*
* transformer is actually a CrtResource since we track a SigningConfig (which tracks a Credentials Provider
* But the MqttConnectionConfig only knows of the transformer as a Consumer function, so it's not
* able to properly add a forward reference to the transformer. So we do it manually here after setting.
*/
connectionConfig.addReferenceTo(transformer);
}
}
}
return new MqttClientConnection(connectionConfig);
}
}
use of software.amazon.awssdk.crt.utils.PackageInfo in project aws-crt-java by awslabs.
the class PackageInfoTest method testPackageInfo.
@Test
public void testPackageInfo() {
PackageInfo pkgInfo = new PackageInfo();
Assert.assertNotEquals("UNKNOWN", pkgInfo.version.toString());
Assert.assertEquals(0, pkgInfo.version.major);
Assert.assertEquals(0, pkgInfo.version.minor);
Assert.assertEquals(0, pkgInfo.version.patch);
Assert.assertEquals("UNITTEST", pkgInfo.version.tag);
}
Aggregations