summaryrefslogtreecommitdiff
path: root/mobicore/MobiCoreDriverLib/ClientLib/Session.h
diff options
context:
space:
mode:
Diffstat (limited to 'mobicore/MobiCoreDriverLib/ClientLib/Session.h')
-rw-r--r--mobicore/MobiCoreDriverLib/ClientLib/Session.h184
1 files changed, 184 insertions, 0 deletions
diff --git a/mobicore/MobiCoreDriverLib/ClientLib/Session.h b/mobicore/MobiCoreDriverLib/ClientLib/Session.h
new file mode 100644
index 0000000..1f3529e
--- /dev/null
+++ b/mobicore/MobiCoreDriverLib/ClientLib/Session.h
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2013-2014 TRUSTONIC LIMITED
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the TRUSTONIC LIMITED nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef SESSION_H_
+#define SESSION_H_
+
+#include <stdint.h>
+#include <list>
+
+#include "mc_linux.h"
+#include "Connection.h"
+#include "CMcKMod.h"
+#include "CMutex.h"
+
+
+class BulkBufferDescriptor
+{
+public:
+ addr_t virtAddr; /**< The virtual address of the Bulk buffer*/
+ uint32_t sVirtualAddr; /**< The secure virtual address of the Bulk buffer*/
+ uint32_t len; /**< Length of the Bulk buffer*/
+ uint32_t handle;
+
+ BulkBufferDescriptor(
+ addr_t virtAddr,
+ uint32_t sVirtAddr,
+ uint32_t len,
+ uint32_t handle
+ ) :
+ virtAddr(virtAddr),
+ sVirtualAddr(sVirtAddr),
+ len(len),
+ handle(handle)
+ {};
+
+};
+
+typedef std::list<BulkBufferDescriptor *> bulkBufferDescrList_t;
+typedef bulkBufferDescrList_t::iterator bulkBufferDescrIterator_t;
+
+
+/** Session states.
+ * At the moment not used !!.
+ */
+typedef enum {
+ SESSION_STATE_INITIAL,
+ SESSION_STATE_OPEN,
+ SESSION_STATE_TRUSTLET_DEAD
+} sessionState_t;
+
+#define SESSION_ERR_NO 0 /**< No session error */
+
+/** Session information structure.
+ * The information structure is used to hold the state of the session, which will limit further actions for the session.
+ * Also the last error code will be stored till it's read.
+ */
+typedef struct {
+ sessionState_t state; /**< Session state */
+ int32_t lastErr; /**< Last error of session */
+} sessionInformation_t;
+
+
+class Session
+{
+private:
+ CMcKMod *mcKMod;
+ CMutex workLock;
+ bulkBufferDescrList_t bulkBufferDescriptors; /**< Descriptors of additional bulk buffer of a session */
+ sessionInformation_t sessionInfo; /**< Informations about session */
+public:
+ uint32_t sessionId;
+ Connection *notificationConnection;
+
+ Session(uint32_t sessionId, CMcKMod *mcKMod, Connection *connection);
+
+ virtual ~Session(void);
+
+ /**
+ * Add address information of additional bulk buffer memory to session and
+ * register virtual memory in kernel module.
+ *
+ * @attention The virtual address can only be added one time. If the virtual address already exist, MC_DRV_ERR_BUFFER_ALREADY_MAPPED is returned.
+ *
+ * @param buf The virtual address of bulk buffer.
+ * @param len Length of bulk buffer.
+ * @param blkBuf pointer of the actual Bulk buffer descriptor with all address information.
+ *
+ * @return MC_DRV_OK on success
+ * @return MC_DRV_ERR_BUFFER_ALREADY_MAPPED
+ */
+ mcResult_t addBulkBuf(addr_t buf, uint32_t len, BulkBufferDescriptor **blkBuf);
+
+ /**
+ * Just register the buffer previously created to the session
+ *
+ * @attention The virtual address can only be added one time. If the virtual address already exist, MC_DRV_ERR_BUFFER_ALREADY_MAPPED is returned.
+ *
+ * @param blkBuf pointer of the actual Bulk buffer descriptor with all address information.
+ *
+ */
+ void addBulkBuf(BulkBufferDescriptor *blkBuf);
+
+ /**
+ * Remove address information of additional bulk buffer memory from session and
+ * unregister virtual memory in kernel module
+ *
+ * @param buf The virtual address of the bulk buffer.
+ *
+ * @return true on success.
+ */
+ mcResult_t removeBulkBuf(addr_t buf);
+
+ /**
+ * Return the Kmod handle of the bulk buff
+ *
+ * @param buf The secure virtual address of the bulk buffer.
+ *
+ * @return the Handle or 0 for failure
+ */
+ uint32_t getBufHandle(uint32_t sVirtAddr, uint32_t sVirtualLen);
+
+ /**
+ * Set additional error information of the last error that occured.
+ *
+ * @param errorCode The actual error.
+ */
+ void setErrorInfo(int32_t err);
+
+ /**
+ * Get additional error information of the last error that occured.
+ *
+ * @attention After request the information is set to SESSION_ERR_NO.
+ *
+ * @return Last stored error code or SESSION_ERR_NO.
+ */
+ int32_t getLastErr(void);
+
+ /**
+ * Lock session for operation
+ */
+ void lock() {
+ workLock.lock();
+ }
+
+ /**
+ * Unlock session for operation
+ */
+ void unlock() {
+ workLock.unlock();
+ }
+};
+
+typedef std::list<Session *> sessionList_t;
+typedef sessionList_t::iterator sessionIterator_t;
+
+#endif /* SESSION_H_ */
+