Functions

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 <stdio.h>
#include <time.h>
#include <string.h>
#include "misc.h"
#include "pcscd.h"
#include "winscard.h"
#include "debuglog.h"
#include "winscard_msg.h"
#include "sys_generic.h"
#include "utils.h"
Include dependency graph for winscard_msg.c:

Go to the source code of this file.

Functions

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

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.


Function Documentation

INTERNAL void CleanupSharedSegment ( int  sockValue,
const char *  pcFilePath 
)

Closes the communications channel used by the server to talk to the clients.

The socket used is closed and the file it is bound to is removed.

Parameters:
[in] sockValue Socket to be closed.
[in] pcFilePath File used by the socket.

Definition at line 471 of file winscard_msg.c.

Referenced by InitializeSocket().

INTERNAL int ClientCloseSession ( uint32_t  dwClientID  ) 

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

Parameters:
[in] dwClientID Client socket handle to be closed.
Return values:
0 Success.

Definition at line 108 of file winscard_msg.c.

Referenced by SCardCancel().

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] pdwClientID Client Connection ID.
Return values:
0 Success.
-1 Can not create the socket.
-1 The socket can not open a connection.
-1 Can not set the socket to non-blocking.

Definition at line 61 of file winscard_msg.c.

Referenced by SCardCancel(), and SCardEstablishContextTH().

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

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

Reads the message from the file filedes.

Parameters:
[out] buffer_void Message read.
[in] buffer_size Size to read
[in] filedes Socket handle.
Return values:
0 Success.
-1 Socket is closed.
-1 A signal was received.

Definition at line 226 of file winscard_msg.c.

Referenced by SCardBeginTransaction(), SCardCancel(), SCardCancelTransaction(), SCardConnect(), SCardControl(), SCardDisconnect(), SCardEndTransaction(), SCardEstablishContextTH(), SCardGetStatusChange(), SCardReconnect(), SCardReleaseContext(), SCardStatus(), and SCardTransmit().

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

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

Reads the message from the file filedes.

Parameters:
[in] command one of the pcsc_msg_commands commands
[out] buffer_void Message read.
[in] buffer_size Size to read
[in] filedes Socket handle.
[in] timeOut Timeout in milliseconds.
Return values:
0 Success.
-1 Timeout.
-1 Socket is closed.
-1 A signal was received.

Definition at line 314 of file winscard_msg.c.

References SCardCheckDaemonAvailability(), and time_sub().

Referenced by SCardGetStatusChange().

Here is the call graph for this function:

INTERNAL int32_t 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_void Message to be sent.
[in] buffer_size Size of the message to send
[in] filedes Socket handle.
[in] timeOut Timeout in milliseconds.
Return values:
0 Success
-1 Timeout.
-1 Socket is closed.
-1 A signal was received.

Definition at line 128 of file winscard_msg.c.

Referenced by MessageSendWithHeader(), SCardControl(), and SCardTransmit().

INTERNAL int32_t 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] command Command to be sent.
[in] dwClientID Client socket handle.
[in] size Size of the message (data).
[in] timeOut Timeout to the operation in ms.
[in] data_void Data to be sent.
Returns:
Same error codes as MessageSend().

Definition at line 445 of file winscard_msg.c.

References rxHeader::command, MessageSend(), and rxHeader::size.

Referenced by SCardBeginTransaction(), SCardCancel(), SCardCancelTransaction(), SCardConnect(), SCardControl(), SCardDisconnect(), SCardEndTransaction(), SCardEstablishContextTH(), SCardGetStatusChange(), SCardReconnect(), SCardReleaseContext(), SCardStatus(), and SCardTransmit().

Here is the call graph for this function: