pcsc-lite
1.8.8
|
This demarshalls functions over the message queue and keeps track of clients and their handles. More...
#include "config.h"
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include "pcscd.h"
#include "winscard.h"
#include "debuglog.h"
#include "winscard_msg.h"
#include "winscard_svc.h"
#include "sys_generic.h"
#include "utils.h"
#include "readerfactory.h"
#include "eventhandler.h"
#include "simclist.h"
Go to the source code of this file.
Data Structures | |
struct | _psContext |
Macros | |
#define | READ_BODY(v) |
#define | WRITE_BODY(v) WRITE_BODY_WITH_COMMAND(CommandsText[header.command], v) |
#define | WRITE_BODY_WITH_COMMAND(command, v) |
Typedefs | |
typedef struct _psContext | SCONTEXT |
Functions | |
static LONG | MSGCheckHandleAssociation (SCARDHANDLE, SCONTEXT *) |
static LONG | MSGAddContext (SCARDCONTEXT, SCONTEXT *) |
static LONG | MSGRemoveContext (SCARDCONTEXT, SCONTEXT *) |
static LONG | MSGAddHandle (SCARDCONTEXT, SCARDHANDLE, SCONTEXT *) |
static LONG | MSGRemoveHandle (SCARDHANDLE, SCONTEXT *) |
static LONG | MSGCleanupClient (SCONTEXT *) |
static void | ContextThread (LPVOID pdwIndex) |
static int | contextsListhContext_seeker (const void *el, const void *key) |
LONG | ContextsInitialize (int customMaxThreadCounter, int customMaxThreadCardHandles) |
void | ContextsDeinitialize (void) |
LONG | CreateContextThread (uint32_t *pdwClientID) |
Creates threads to handle messages received from Clients. More... | |
LONG | MSGSignalClient (uint32_t filedes, LONG rv) |
Variables | |
char | AutoExit |
Represents an Application Context on the Server side. More... | |
static int | contextMaxThreadCounter = PCSC_MAX_CONTEXT_THREADS |
static int | contextMaxCardHandles = PCSC_MAX_CONTEXT_CARD_HANDLES |
static list_t | contextsList |
Context tracking list. | |
pthread_mutex_t | contextsList_lock |
lock for the above list | |
READER_STATE | readerStates [PCSCLITE_MAX_READERS_CONTEXTS] |
static const char * | CommandsText [] |
Handles messages received from Clients. More... | |
This demarshalls functions over the message queue and keeps track of clients and their handles.
Each Client message is deald by creating a thread (CreateContextThread
). The thread establishes reands and demarshalls the message and calls the appropriate function to threat it.
Definition in file winscard_svc.c.
#define READ_BODY | ( | v | ) |
Definition at line 282 of file winscard_svc.c.
#define WRITE_BODY_WITH_COMMAND | ( | command, | |
v | |||
) |
Definition at line 289 of file winscard_svc.c.
LONG CreateContextThread | ( | uint32_t * | pdwClientID | ) |
Creates threads to handle messages received from Clients.
[in] | pdwClientID | Connection ID used to reference the Client. |
SCARD_S_SUCCESS | Success. |
SCARD_F_INTERNAL_ERROR | Exceded the maximum number of simultaneous Application Contexts. |
SCARD_E_NO_MEMORY | Error creating the Context Thread. |
Definition at line 144 of file winscard_svc.c.
References AutoExit, _psContext::cardsList_lock, contextsList_lock, _psContext::dwClientID, _psContext::pthThread, SCARD_E_NO_MEMORY, and SCARD_S_SUCCESS.
Referenced by SVCServiceRunLoop().
char AutoExit |
Represents an Application Context on the Server side.
An Application Context contains Channels (hCard
).
Definition at line 57 of file pcscdaemon.c.
Referenced by CreateContextThread().
|
static |
Handles messages received from Clients.
For each Client message a new instance of this thread is created.
[in] | dwIndex | Index of an avaiable Application Context slot in SCONTEXT *. |
Definition at line 256 of file winscard_svc.c.