Logo Search packages:      
Sourcecode: pcsc-lite version File versions

winscard_msg.h

/*
 * This defines some structures and defines to be used over
 * the transport layer.
 *
 * MUSCLE SmartCard Development ( http://www.linuxnet.com )
 *
 * Copyright (C) 2001-2004
 *  David Corcoran <corcoran@linuxnet.com>
 *  Damien Sauveron <damien.sauveron@labri.fr>
 *  Ludovic Rousseau <ludovic.rousseau@free.fr>
 *
 * $Id: winscard_msg.h,v 1.11 2004/06/17 06:44:01 rousseau Exp $
 */

#ifndef __winscard_msg_h__
#define __winscard_msg_h__

#define PROTOCOL_VERSION_MAJOR 2
#define PROTOCOL_VERSION_MINOR 0

#ifdef __cplusplus
extern "C"
{
#endif

      typedef struct rxSharedSegment
      {
            unsigned int mtype;
            unsigned int user_id;
            unsigned int group_id;
            unsigned int command;
            unsigned int dummy;     /* was request_id in pcsc-lite <= 1.2.0 */
            time_t date;
            unsigned char key[PCSCLITE_MSG_KEY_LEN];
            unsigned char data[PCSCLITE_MAX_MESSAGE_SIZE];
      }
      sharedSegmentMsg, *psharedSegmentMsg;

      enum pcsc_adm_commands
      {
            CMD_FUNCTION = 0xF1,
            CMD_FAILED = 0xF2,
            CMD_SERVER_DIED = 0xF3,
            CMD_CLIENT_DIED = 0xF4,
            CMD_READER_EVENT = 0xF5,
            CMD_SYN = 0xF6,
            CMD_ACK = 0xF7,
            CMD_VERSION = 0xF8
      };

      enum pcsc_msg_commands
      {
            SCARD_ESTABLISH_CONTEXT = 0x01,
            SCARD_RELEASE_CONTEXT = 0x02,
            SCARD_LIST_READERS = 0x03,
            SCARD_CONNECT = 0x04,
            SCARD_RECONNECT = 0x05,
            SCARD_DISCONNECT = 0x06,
            SCARD_BEGIN_TRANSACTION = 0x07,
            SCARD_END_TRANSACTION = 0x08,
            SCARD_TRANSMIT = 0x09,
            SCARD_CONTROL = 0x0A,
            SCARD_STATUS = 0x0B,
            SCARD_GET_STATUS_CHANGE = 0x0C,
            SCARD_CANCEL = 0x0D,
            SCARD_CANCEL_TRANSACTION = 0x0E,
            SCARD_GET_ATTRIB = 0x0F,
            SCARD_SET_ATTRIB = 0x10
      };

      struct version_struct
      {
            int major;
            int minor;
            LONG rv;
      };
      typedef struct version_struct version_struct;

      struct client_struct
      {
            SCARDCONTEXT hContext;
      };
      typedef struct client_struct client_struct;

      struct establish_struct
      {
            DWORD dwScope;
            SCARDCONTEXT phContext;
            LONG rv;
      };
      typedef struct establish_struct establish_struct;

      struct release_struct
      {
            SCARDCONTEXT hContext;
            LONG rv;
      };
      typedef struct release_struct release_struct;

      struct connect_struct
      {
            SCARDCONTEXT hContext;
            char szReader[MAX_READERNAME];
            DWORD dwShareMode;
            DWORD dwPreferredProtocols;
            SCARDHANDLE phCard;
            DWORD pdwActiveProtocol;
            LONG rv;
      };
      typedef struct connect_struct connect_struct;

      struct reconnect_struct
      {
            SCARDHANDLE hCard;
            DWORD dwShareMode;
            DWORD dwPreferredProtocols;
            DWORD dwInitialization;
            DWORD pdwActiveProtocol;
            LONG rv;
      };
      typedef struct reconnect_struct reconnect_struct;

      struct disconnect_struct
      {
            SCARDHANDLE hCard;
            DWORD dwDisposition;
            LONG rv;
      };
      typedef struct disconnect_struct disconnect_struct;

      struct begin_struct
      {
            SCARDHANDLE hCard;
            LONG rv;
      };
      typedef struct begin_struct begin_struct;

      struct end_struct
      {
            SCARDHANDLE hCard;
            DWORD dwDisposition;
            LONG rv;
      };
      typedef struct end_struct end_struct;

      struct cancel_struct
      {
            SCARDHANDLE hCard;
            LONG rv;
      };
      typedef struct cancel_struct cancel_struct;

      struct status_struct
      {
            SCARDHANDLE hCard;
            char mszReaderNames[MAX_READERNAME];
            DWORD pcchReaderLen;
            DWORD pdwState;
            DWORD pdwProtocol;
            UCHAR pbAtr[MAX_ATR_SIZE];
            DWORD pcbAtrLen;
            LONG rv;
      };
      typedef struct status_struct status_struct;

      struct transmit_struct
      {
            SCARDHANDLE hCard;
            SCARD_IO_REQUEST pioSendPci;
            UCHAR pbSendBuffer[MAX_BUFFER_SIZE];
            DWORD cbSendLength;
            SCARD_IO_REQUEST pioRecvPci;
            BYTE pbRecvBuffer[MAX_BUFFER_SIZE];
            DWORD pcbRecvLength;
            LONG rv;
      };
      typedef struct transmit_struct transmit_struct;

      struct control_struct
      {
            SCARDHANDLE hCard;
            DWORD dwControlCode;
            UCHAR pbSendBuffer[MAX_BUFFER_SIZE];
            DWORD cbSendLength;
            UCHAR pbRecvBuffer[MAX_BUFFER_SIZE];
            DWORD cbRecvLength;
            DWORD dwBytesReturned;
            LONG rv;
      };
      typedef struct control_struct control_struct;

      struct getset_struct
      {
            SCARDHANDLE hCard;
            DWORD dwAttrId;
            UCHAR pbAttr[MAX_BUFFER_SIZE];
            DWORD cbAttrLen;
            LONG rv;
      };
      typedef struct getset_struct getset_struct;

      /*
       * Now some function definitions 
       */

      int SHMClientRead(psharedSegmentMsg, DWORD, int);
      int SHMClientSetupSession(PDWORD);
      int SHMClientCloseSession(DWORD);
      int SHMInitializeCommonSegment(void);
      int SHMProcessCommonChannelRequest(PDWORD);
      int SHMProcessEventsContext(PDWORD, psharedSegmentMsg, int);
      int SHMProcessEventsServer(PDWORD, int);
      int SHMMessageSend(psharedSegmentMsg, int, int);
      int SHMMessageReceive(psharedSegmentMsg, int, int);
      int WrapSHMWrite(unsigned int, DWORD, unsigned int,
            unsigned int, void *);
      void SHMCleanupSharedSegment(int, char *);

#ifdef __cplusplus
}
#endif

#endif

Generated by  Doxygen 1.6.0   Back to index