pcsc-lite 2.3.0
|
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 |
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.
#define member_size | ( | type, | |
member ) sizeof(((type *)0)->member) |
Definition at line 80 of file winscard_msg.c.
#define SOCK_CLOEXEC 0 |
Definition at line 77 of file winscard_msg.c.
INTERNAL void ClientCloseSession | ( | uint32_t | dwClientID | ) |
Closes the socket used by the client to communicate with the server.
[in] | dwClientID | Client socket handle to be closed. |
Definition at line 173 of file winscard_msg.c.
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
.
[out] | pdwClientID | Client Connection ID. |
0 | Success. |
-1 |
|
Definition at line 119 of file winscard_msg.c.
char * getSocketName | ( | void | ) |
Definition at line 99 of file winscard_msg.c.
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
.
[out] | buffer_void | Message read. |
[in] | buffer_size | Size to read |
[in] | filedes | Socket handle. |
SCARD_S_SUCCESS | Success. |
SCARD_F_COMM_ERROR |
|
Definition at line 455 of file winscard_msg.c.
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
.
[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. |
SCARD_S_SUCCESS | Success. |
SCARD_E_TIMEOUT | Timeout. |
SCARD_F_COMM_ERROR |
|
Definition at line 195 of file winscard_msg.c.
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
.
[in] | buffer_void | Message to be sent. |
[in] | buffer_size | Size of the message to send |
[in] | filedes | Socket handle. |
SCARD_S_SUCCESS | Success |
SCARD_E_TIMEOUT | Timeout. |
SCARD_F_COMM_ERROR |
|
Definition at line 355 of file winscard_msg.c.
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.
[in] | command | Command to be sent. |
[in] | dwClientID | Client socket handle. |
[in] | size | Size of the message (data ). |
[in] | data_void | Data to be sent. |
Definition at line 318 of file winscard_msg.c.
|
static |
Definition at line 84 of file winscard_msg.c.
|
static |
Definition at line 82 of file winscard_msg.c.
|
static |
Definition at line 83 of file winscard_msg.c.