pcsc-lite  1.8.3
Data Structures | Macros | Typedefs | Functions | Variables
winscard_svc.c File Reference

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.
LONG MSGSignalClient (uint32_t filedes, LONG rv)

Variables

char AutoExit
 Represents an Application Context on the Server side.
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.

Detailed Description

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.


Macro Definition Documentation

#define READ_BODY (   v)
Value:
if (header.size != sizeof(v)) { goto wrong_length; } \
ret = MessageReceive(&v, sizeof(v), filedes); \
if (ret != SCARD_S_SUCCESS) { Log2(PCSC_LOG_DEBUG, "Client die: %d", filedes); goto exit; }

Definition at line 280 of file winscard_svc.c.

#define WRITE_BODY_WITH_COMMAND (   command,
 
)
Value:
Log4(PCSC_LOG_DEBUG, "%s rv=0x%X for client %d", command, v.rv, filedes); \
ret = MessageSend(&v, sizeof(v), filedes);

Definition at line 287 of file winscard_svc.c.


Function Documentation

LONG CreateContextThread ( uint32_t *  pdwClientID)

Creates threads to handle messages received from Clients.

Parameters:
[in]pdwClientIDConnection ID used to reference the Client.
Returns:
Error code.
Return values:
SCARD_S_SUCCESSSuccess.
SCARD_F_INTERNAL_ERRORExceded the maximum number of simultaneous Application Contexts.
SCARD_E_NO_MEMORYError 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().


Variable Documentation

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().

const char* CommandsText[]
static
Initial value:
{
"NULL",
"ESTABLISH_CONTEXT",
"RELEASE_CONTEXT",
"LIST_READERS",
"CONNECT",
"RECONNECT",
"DISCONNECT",
"BEGIN_TRANSACTION",
"END_TRANSACTION",
"TRANSMIT",
"CONTROL",
"STATUS",
"GET_STATUS_CHANGE",
"CANCEL",
"CANCEL_TRANSACTION",
"GET_ATTRIB",
"SET_ATTRIB",
"CMD_VERSION",
"CMD_GET_READERS_STATE",
"CMD_WAIT_READER_STATE_CHANGE",
"CMD_STOP_WAITING_READER_STATE_CHANGE",
"NULL"
}

Handles messages received from Clients.

For each Client message a new instance of this thread is created.

Parameters:
[in]dwIndexIndex of an avaiable Application Context slot in SCONTEXT *.

Definition at line 254 of file winscard_svc.c.