Search in sources :

Example 1 with PackageInfo

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);
    }
}
Also used : MqttClient(software.amazon.awssdk.crt.mqtt.MqttClient) ClientTlsContext(software.amazon.awssdk.crt.io.ClientTlsContext) MqttClientConnection(software.amazon.awssdk.crt.mqtt.MqttClientConnection) PackageInfo(software.amazon.awssdk.crt.utils.PackageInfo) AwsSigningConfig(software.amazon.awssdk.crt.auth.signing.AwsSigningConfig) MqttConnectionConfig(software.amazon.awssdk.crt.mqtt.MqttConnectionConfig) DefaultChainCredentialsProvider(software.amazon.awssdk.crt.auth.credentials.DefaultChainCredentialsProvider) DefaultChainCredentialsProvider(software.amazon.awssdk.crt.auth.credentials.DefaultChainCredentialsProvider) CredentialsProvider(software.amazon.awssdk.crt.auth.credentials.CredentialsProvider)

Example 2 with PackageInfo

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);
}
Also used : PackageInfo(software.amazon.awssdk.crt.utils.PackageInfo) Test(org.junit.Test)

Aggregations

PackageInfo (software.amazon.awssdk.crt.utils.PackageInfo)2 Test (org.junit.Test)1 CredentialsProvider (software.amazon.awssdk.crt.auth.credentials.CredentialsProvider)1 DefaultChainCredentialsProvider (software.amazon.awssdk.crt.auth.credentials.DefaultChainCredentialsProvider)1 AwsSigningConfig (software.amazon.awssdk.crt.auth.signing.AwsSigningConfig)1 ClientTlsContext (software.amazon.awssdk.crt.io.ClientTlsContext)1 MqttClient (software.amazon.awssdk.crt.mqtt.MqttClient)1 MqttClientConnection (software.amazon.awssdk.crt.mqtt.MqttClientConnection)1 MqttConnectionConfig (software.amazon.awssdk.crt.mqtt.MqttConnectionConfig)1