blob: 6bda9d849dcf4c2114cc640297ce13d81804b622 [file] [log] [blame] [edit]
/*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <trusty_ipc.h>
#include <uapi/trusty_uuid.h>
#include "aidl_service.h"
#include "block_device_tipc.h"
#include "crypt.h"
#include "ipc.h"
#include "tipc_service.h"
#include "crypt.h"
#include "ipc.h"
#include "tipc_service.h"
struct storage_service {
bool initialized;
struct key key;
struct block_device_tipc block_device;
struct storage_service_aidl_context aidl;
};
#define STORAGE_SERVICE_INITIAL_VALUE(self) \
(struct storage_service) { \
.initialized = false, \
.aidl = STORAGE_SERVICE_AIDL_CONTEXT_INITIAL_VALUE(.aidl), \
}
/* SSSC (Secure Storage Session Context) */
#define STORAGE_SESSION_MAGIC 0x53535343
/**
* storage_session - Session that exists for the duration of a proxy connection
* @magic: a sentinel value used for checking for data corruption.
* Initialized to STORAGE_SESSION_MAGIC.
* @service: storage app state that persists across connections
* @tipc: tipc service accepting client connections and requests
* @proxy_ctx: the context object on the proxy channel
*/
struct storage_session {
uint32_t magic;
struct storage_service* service;
struct storage_tipc_service tipc;
struct ipc_channel_context proxy_ctx;
};
/**
* proxy_connect_context - Context for opening a connection to storageproxy
*
* @service: storage app state
* @tipc_ctx: context object for the proxy port
*/
struct proxy_connect_context {
struct storage_service service;
struct ipc_port_context tipc_ctx;
};
/*
* @parent_ctx must be a pointer to the &tipc_ctx member of a
* &struct proxy_connect_context
*/
struct ipc_channel_context* proxy_connect(struct ipc_port_context* parent_ctx,
const uuid_t* peer_uuid,
handle_t chan_handle);
/** proxy_destroy() - Clean up a &struct proxy_connect_context
*
* Does not free @self.
*
* @self: The proxy context to delete. Must have been previously connected to
* the proxy (see &proxy_connect()), but no longer have an active connection
* (see &proxy_disconnect()).
*/
void proxy_destroy(struct proxy_connect_context* self);