uint32_t OperationID;
} TEEC_OperationImp;
-int32_t connecttoServer(void);
+TEEC_Result connectToServer(int32_t *serverSocket);
void disconnectfromServer(int32_t ServerSocket);
uint32_t sendCommand(int32_t sockfd, TEE_CMD cmd, void* data, size_t size);
if (name) strncpy(ctx.TEEName, name, ctx.nameLength);
// Connect to Simulator Daemon as a client
- context_imp->sockfd = connecttoServer();
+ TEEC_Result conn_result = connectToServer(&(context_imp->sockfd));
- if (context_imp->sockfd == -1) {
+ if (conn_result != TEEC_SUCCESS) {
OsaFree(context_imp);
context->imp = NULL;
LOGE(TEEC_LIB, "Unable to connect to Simulator daemon");
- return TEEC_ERROR_GENERIC;
+ return conn_result;
}
ctx.returnValue = TEEC_SUCCESS;
/*
* === FUNCTION ======================================================================
- * Name: connecttoServer
+ * Name: connectToServer
* Description: API (Interface for TEECAPI) implementation for connecting to
* the Simulator Daemon through socket
* Return: Socket fd on success
* -1 on failure
* =====================================================================================
*/
-int32_t connecttoServer(void)
+TEEC_Result connectToServer(int32_t *fd)
{
LOGD(TEEC_LIB, "Entry");
int32_t serverSocket, socklen;
// Check simulator socket name length is valid
if (daemonsock.sun_path[sizeof(daemonsock.sun_path)-1] != 0) {
LOGE(TEEC_LIB, "Socket name too long: ", daemonsock.sun_path);
- return -1;
+ return TEEC_ERROR_GENERIC;
}
// Get socket decriptor
if ((serverSocket = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
LOGE(TEEC_LIB, "No socket for simdaemon");
- return -1;
+ return TEEC_ERROR_GENERIC;
}
socklen = sizeof(daemonsock);
if (connect(serverSocket, sockptr, socklen) == -1) {
LOGE(TEEC_LIB, "connection to simdaemon(%s) failed errno=%d", SIMDAEMON_SOCK_PATH, errno);
close(serverSocket);
- return -1;
+ if (errno == EACCES)
+ return TEEC_ERROR_ACCESS_DENIED;
+ return TEEC_ERROR_GENERIC;
}
- return serverSocket;
+ *fd = serverSocket;
+ return TEEC_SUCCESS;
}
/*