pcsc-lite 2.3.0
winscard_msg.c File Reference

This is responsible for client/server communication. More...

#include "config.h"
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/un.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <poll.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include "misc.h"
#include "pcscd.h"
#include "winscard.h"
#include "debuglog.h"
#include "winscard_msg.h"
#include "sys_generic.h"
#include "utils.h"

Go to the source code of this file.

Macros

#define SOCK_CLOEXEC   0
 
#define member_size(type, member)   sizeof(((type *)0)->member)
 

Functions

static void SocketName_init (void)
 
char * getSocketName (void)
 
INTERNAL int ClientSetupSession (uint32_t *pdwClientID)
 Prepares a communication channel for the client to talk to the server.
 
INTERNAL void ClientCloseSession (uint32_t dwClientID)
 Closes the socket used by the client to communicate with the server.
 
INTERNAL LONG MessageReceiveTimeout (uint32_t command, void *buffer_void, uint64_t buffer_size, int32_t filedes, long timeOut)
 Called by the Client to get the response from the server or vice-versa.
 
INTERNAL LONG MessageSendWithHeader (uint32_t command, uint32_t dwClientID, uint64_t size, void *data_void)
 Wrapper for the MessageSend() function.
 
INTERNAL LONG MessageSend (void *buffer_void, uint64_t buffer_size, int32_t filedes)
 Sends a menssage from client to server or vice-versa.
 
INTERNAL LONG MessageReceive (void *buffer_void, uint64_t buffer_size, int32_t filedes)
 Called by the Client to get the response from the server or vice-versa.
 

Variables

static char SocketName [member_size(struct sockaddr_un, sun_path)]
 
static pthread_once_t SocketName_init_control = PTHREAD_ONCE_INIT
 

Detailed Description

This is responsible for client/server communication.

A file based socket (commonSocket) is used to send/receive only messages among clients and server.
The messages' data are passed throw a memory mapped file: sharedSegmentMsg.

Definition in file winscard_msg.c.

Macro Definition Documentation

◆ member_size

#define member_size ( type,
member )   sizeof(((type *)0)->member)

Definition at line 80 of file winscard_msg.c.

◆ SOCK_CLOEXEC

#define SOCK_CLOEXEC   0

Definition at line 77 of file winscard_msg.c.

Function Documentation

◆ ClientCloseSession()

INTERNAL void ClientCloseSession ( uint32_t dwClientID)

Closes the socket used by the client to communicate with the server.

Parameters
[in]dwClientIDClient socket handle to be closed.

Definition at line 173 of file winscard_msg.c.

◆ ClientSetupSession()

INTERNAL int ClientSetupSession ( uint32_t * pdwClientID)

Prepares a communication channel for the client to talk to the server.

This is called by the application to create a socket for local IPC with the server. The socket is associated to the file PCSCLITE_CSOCK_NAME.

Parameters
[out]pdwClientIDClient Connection ID.
Return values
0Success.
-1
  • Can not create the socket
  • or the socket can not open a connection
  • or can not set the socket to non-blocking.

Definition at line 119 of file winscard_msg.c.

◆ getSocketName()

char * getSocketName ( void )

Definition at line 99 of file winscard_msg.c.

◆ MessageReceive()

INTERNAL LONG MessageReceive ( void * buffer_void,
uint64_t buffer_size,
int32_t filedes )

Called by the Client to get the response from the server or vice-versa.

Reads the message from the file filedes.

Parameters
[out]buffer_voidMessage read.
[in]buffer_sizeSize to read
[in]filedesSocket handle.
Return values
SCARD_S_SUCCESSSuccess.
SCARD_F_COMM_ERROR
  • Socket is closed
  • or a signal was received.

Definition at line 455 of file winscard_msg.c.

◆ MessageReceiveTimeout()

INTERNAL LONG MessageReceiveTimeout ( uint32_t command,
void * buffer_void,
uint64_t buffer_size,
int32_t filedes,
long timeOut )

Called by the Client to get the response from the server or vice-versa.

Reads the message from the file filedes.

Parameters
[in]commandone of the pcsc_msg_commands commands
[out]buffer_voidMessage read.
[in]buffer_sizeSize to read
[in]filedesSocket handle.
[in]timeOutTimeout in milliseconds.
Return values
SCARD_S_SUCCESSSuccess.
SCARD_E_TIMEOUTTimeout.
SCARD_F_COMM_ERROR
  • Socket is closed
  • or a signal was received.

Definition at line 195 of file winscard_msg.c.

◆ MessageSend()

INTERNAL LONG MessageSend ( void * buffer_void,
uint64_t buffer_size,
int32_t filedes )

Sends a menssage from client to server or vice-versa.

Writes the message in the shared file filedes.

Parameters
[in]buffer_voidMessage to be sent.
[in]buffer_sizeSize of the message to send
[in]filedesSocket handle.
Return values
SCARD_S_SUCCESSSuccess
SCARD_E_TIMEOUTTimeout.
SCARD_F_COMM_ERROR
  • Socket is closed
  • or a signal was received.

Definition at line 355 of file winscard_msg.c.

◆ MessageSendWithHeader()

INTERNAL LONG MessageSendWithHeader ( uint32_t command,
uint32_t dwClientID,
uint64_t size,
void * data_void )

Wrapper for the MessageSend() function.

Called by clients to send messages to the server. The parameters command and data are set in the sharedSegmentMsg struct in order to be sent.

Parameters
[in]commandCommand to be sent.
[in]dwClientIDClient socket handle.
[in]sizeSize of the message (data).
[in]data_voidData to be sent.
Returns
Same error codes as MessageSend().

Definition at line 318 of file winscard_msg.c.

◆ SocketName_init()

static void SocketName_init ( void )
static

Definition at line 84 of file winscard_msg.c.

Variable Documentation

◆ SocketName

char SocketName[member_size(struct sockaddr_un, sun_path)]
static

Definition at line 82 of file winscard_msg.c.

◆ SocketName_init_control

pthread_once_t SocketName_init_control = PTHREAD_ONCE_INIT
static

Definition at line 83 of file winscard_msg.c.