|
pcsc-lite 1.7.2
|
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 |
Defines | |
| #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. | |
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 | ) |
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, | |
| v | |||
| ) |
Log4(SCARD_S_SUCCESS == v.rv ? PCSC_LOG_DEBUG : PCSC_LOG_ERROR, "%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.
| 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 56 of file pcscdaemon.c.
Referenced by CreateContextThread().
const char* CommandsText[] [static] |
{
"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.
| [in] | dwIndex | Index of an avaiable Application Context slot in SCONTEXT *. |
Definition at line 254 of file winscard_svc.c.
1.7.3