Search in sources :

Example 1 with DefaultOperationHandler

use of com.aws.greengrass.ipc.common.DefaultOperationHandler in project aws-greengrass-nucleus by aws-greengrass.

the class IPCEventStreamService method startup.

@SuppressWarnings({ "PMD.AvoidCatchingGenericException", "PMD.ExceptionAsFlowControl" })
@Override
public void startup() {
    Path rootPath = kernel.getNucleusPaths().rootPath();
    try {
        greengrassCoreIPCService.getAllOperations().forEach(operation -> greengrassCoreIPCService.setOperationHandler(operation, (context) -> new DefaultOperationHandler(GreengrassCoreIPCServiceModel.getInstance().getOperationModelContext(operation), context)));
        greengrassCoreIPCService.setAuthenticationHandler((List<Header> headers, byte[] bytes) -> ipcAuthenticationHandler(bytes));
        greengrassCoreIPCService.setAuthorizationHandler(this::ipcAuthorizationHandler);
        socketOptions = new SocketOptions();
        socketOptions.connectTimeoutMs = 3000;
        socketOptions.domain = SocketOptions.SocketDomain.LOCAL;
        socketOptions.type = SocketOptions.SocketType.STREAM;
        eventLoopGroup = new EventLoopGroup(1);
        Topic kernelUri = config.getRoot().lookup(SETENV_CONFIG_NAMESPACE, NUCLEUS_DOMAIN_SOCKET_FILEPATH);
        kernelUri.withValue(Platform.getInstance().prepareIpcFilepath(rootPath));
        Topic kernelRelativeUri = config.getRoot().lookup(SETENV_CONFIG_NAMESPACE, NUCLEUS_DOMAIN_SOCKET_FILEPATH_FOR_COMPONENT);
        kernelRelativeUri.withValue(Platform.getInstance().prepareIpcFilepathForComponent(rootPath));
        // For domain sockets:
        // 1. Port number is ignored. RpcServer does not accept a null value so we are using a default value.
        // 2. The hostname parameter expects the socket filepath
        rpcServer = new RpcServer(eventLoopGroup, socketOptions, null, Platform.getInstance().prepareIpcFilepathForRpcServer(rootPath), DEFAULT_PORT_NUMBER, greengrassCoreIPCService);
        rpcServer.runServer();
    } catch (RuntimeException e) {
        // Make sure to cleanup anything we created since we don't know where exactly we failed
        close();
        throw e;
    }
    logger.debug("Set IPC permissions");
    Platform.getInstance().setIpcFilePermissions(rootPath);
}
Also used : Path(java.nio.file.Path) UnauthenticatedException(com.aws.greengrass.ipc.exceptions.UnauthenticatedException) SocketOptions(software.amazon.awssdk.crt.io.SocketOptions) AuthenticationData(software.amazon.awssdk.eventstreamrpc.AuthenticationData) DefaultOperationHandler(com.aws.greengrass.ipc.common.DefaultOperationHandler) GreengrassCoreIPCService(software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCService) DeserializationFeature(com.fasterxml.jackson.databind.DeserializationFeature) Platform(com.aws.greengrass.util.platforms.Platform) Inject(javax.inject.Inject) SETENV_CONFIG_NAMESPACE(com.aws.greengrass.lifecyclemanager.GreengrassService.SETENV_CONFIG_NAMESPACE) LogManager(com.aws.greengrass.logging.impl.LogManager) Header(software.amazon.awssdk.crt.eventstream.Header) Authorization(software.amazon.awssdk.eventstreamrpc.Authorization) Path(java.nio.file.Path) Configuration(com.aws.greengrass.config.Configuration) RpcServer(software.amazon.awssdk.eventstreamrpc.RpcServer) GreengrassCoreIPCServiceModel(software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCServiceModel) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) IOException(java.io.IOException) EventLoopGroup(software.amazon.awssdk.crt.io.EventLoopGroup) Topic(com.aws.greengrass.config.Topic) Kernel(com.aws.greengrass.lifecyclemanager.Kernel) List(java.util.List) Utils(com.aws.greengrass.util.Utils) Closeable(java.io.Closeable) GreengrassEventStreamConnectMessage(software.amazon.awssdk.eventstreamrpc.GreengrassEventStreamConnectMessage) Logger(com.aws.greengrass.logging.api.Logger) EventLoopGroup(software.amazon.awssdk.crt.io.EventLoopGroup) DefaultOperationHandler(com.aws.greengrass.ipc.common.DefaultOperationHandler) SocketOptions(software.amazon.awssdk.crt.io.SocketOptions) RpcServer(software.amazon.awssdk.eventstreamrpc.RpcServer) List(java.util.List) Topic(com.aws.greengrass.config.Topic)

Aggregations

Configuration (com.aws.greengrass.config.Configuration)1 Topic (com.aws.greengrass.config.Topic)1 DefaultOperationHandler (com.aws.greengrass.ipc.common.DefaultOperationHandler)1 UnauthenticatedException (com.aws.greengrass.ipc.exceptions.UnauthenticatedException)1 SETENV_CONFIG_NAMESPACE (com.aws.greengrass.lifecyclemanager.GreengrassService.SETENV_CONFIG_NAMESPACE)1 Kernel (com.aws.greengrass.lifecyclemanager.Kernel)1 Logger (com.aws.greengrass.logging.api.Logger)1 LogManager (com.aws.greengrass.logging.impl.LogManager)1 Utils (com.aws.greengrass.util.Utils)1 Platform (com.aws.greengrass.util.platforms.Platform)1 DeserializationFeature (com.fasterxml.jackson.databind.DeserializationFeature)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 Closeable (java.io.Closeable)1 IOException (java.io.IOException)1 Path (java.nio.file.Path)1 List (java.util.List)1 Inject (javax.inject.Inject)1 GreengrassCoreIPCService (software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCService)1 GreengrassCoreIPCServiceModel (software.amazon.awssdk.aws.greengrass.GreengrassCoreIPCServiceModel)1 Header (software.amazon.awssdk.crt.eventstream.Header)1