made vpcd.c/vpcd.h windows-compatible
This commit is contained in:
@@ -5,8 +5,20 @@ AC_PREREQ([2.65])
|
|||||||
AC_INIT([PC/SC Relay], [0.4], [http://sourceforge.net/projects/vsmartcard/support], [pcsc-relay], [http://vsmartcard.sourceforge.net/pcsc-relay/README.html])
|
AC_INIT([PC/SC Relay], [0.4], [http://sourceforge.net/projects/vsmartcard/support], [pcsc-relay], [http://vsmartcard.sourceforge.net/pcsc-relay/README.html])
|
||||||
AC_CONFIG_SRCDIR([src/pcsc-relay.c])
|
AC_CONFIG_SRCDIR([src/pcsc-relay.c])
|
||||||
AC_CONFIG_HEADERS([config.h])
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AM_INIT_AUTOMAKE
|
AM_INIT_AUTOMAKE
|
||||||
|
|
||||||
|
dnl Check for windows build
|
||||||
|
case "${host}" in
|
||||||
|
*-mingw*|*-winnt*)
|
||||||
|
WIN32="yes"
|
||||||
|
;;
|
||||||
|
*-cygwin*)
|
||||||
|
WIN32="yes"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
|
||||||
|
|
||||||
# Checks for programs.
|
# Checks for programs.
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AM_PROG_CC_C_O
|
AM_PROG_CC_C_O
|
||||||
|
|||||||
@@ -32,6 +32,10 @@ pcsc_relay_SOURCES = pcsc-relay.c pcsc.c vpcd.c vpcd-driver.c opicc.c lnfc.c $(B
|
|||||||
pcsc_relay_LDADD = $(PCSC_LIBS) $(LIBNFC_LIBS)
|
pcsc_relay_LDADD = $(PCSC_LIBS) $(LIBNFC_LIBS)
|
||||||
pcsc_relay_CFLAGS = $(PCSC_CFLAGS) $(LIBNFC_CFLAGS)
|
pcsc_relay_CFLAGS = $(PCSC_CFLAGS) $(LIBNFC_CFLAGS)
|
||||||
|
|
||||||
|
if WIN32
|
||||||
|
pcsc_relay_LDADD += -lws2_32
|
||||||
|
endif
|
||||||
|
|
||||||
noinst_HEADERS = pcsc-relay.h vpcd.h
|
noinst_HEADERS = pcsc-relay.h vpcd.h
|
||||||
|
|
||||||
pcsc-relay.c: $(BUILT_SOURCES)
|
pcsc-relay.c: $(BUILT_SOURCES)
|
||||||
|
|||||||
@@ -17,15 +17,24 @@
|
|||||||
* virtualsmartcard. If not, see <http://www.gnu.org/licenses/>.
|
* virtualsmartcard. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "vpcd.h"
|
#include "vpcd.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#define close(s) closesocket(s)
|
||||||
|
typedef WORD uint16_t;
|
||||||
|
#else
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <errno.h>
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
#define VPCD_CTRL_LEN 1
|
#define VPCD_CTRL_LEN 1
|
||||||
|
|
||||||
@@ -50,14 +59,15 @@ ssize_t sendall(int sock, const void *buffer, size_t size)
|
|||||||
{
|
{
|
||||||
size_t sent = 0;
|
size_t sent = 0;
|
||||||
ssize_t r;
|
ssize_t r;
|
||||||
|
const unsigned char *p = buffer;
|
||||||
|
|
||||||
while (sent < size) {
|
while (sent < size) {
|
||||||
r = send(sock, buffer, size-sent, 0);
|
r = send(sock, (void *) p, size-sent, 0);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
sent += r;
|
sent += r;
|
||||||
buffer += r;
|
p += r;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sent;
|
return sent;
|
||||||
@@ -77,7 +87,7 @@ int opensock(unsigned short port)
|
|||||||
if (sock < 0)
|
if (sock < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof yes) != 0)
|
if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *) &yes, sizeof yes) != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
memset(&server_sockaddr, 0, sizeof server_sockaddr);
|
memset(&server_sockaddr, 0, sizeof server_sockaddr);
|
||||||
@@ -103,7 +113,14 @@ int waitforclient(int server, long secs, long usecs)
|
|||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
|
|
||||||
FD_ZERO(&rfds);
|
FD_ZERO(&rfds);
|
||||||
|
#if _WIN32
|
||||||
|
/* work around clumsy define of FD_SET in winsock2.h */
|
||||||
|
#pragma warning(disable:4127)
|
||||||
|
FD_SET((SOCKET) server, &rfds);
|
||||||
|
#pragma warning(default:4127)
|
||||||
|
#else
|
||||||
FD_SET(server, &rfds);
|
FD_SET(server, &rfds);
|
||||||
|
#endif
|
||||||
|
|
||||||
tv.tv_sec = secs;
|
tv.tv_sec = secs;
|
||||||
tv.tv_usec = usecs;
|
tv.tv_usec = usecs;
|
||||||
@@ -124,7 +141,7 @@ ssize_t sendToVICC(size_t length, const unsigned char* buffer)
|
|||||||
uint16_t size;
|
uint16_t size;
|
||||||
|
|
||||||
/* send size of message on 2 bytes */
|
/* send size of message on 2 bytes */
|
||||||
size = htons(length);
|
size = htons((uint16_t) length);
|
||||||
r = sendall(client_sock, (void *) &size, sizeof size);
|
r = sendall(client_sock, (void *) &size, sizeof size);
|
||||||
if (r == sizeof size)
|
if (r == sizeof size)
|
||||||
/* send message */
|
/* send message */
|
||||||
|
|||||||
@@ -19,7 +19,12 @@
|
|||||||
#ifndef _VPCD_H_
|
#ifndef _VPCD_H_
|
||||||
#define _VPCD_H_
|
#define _VPCD_H_
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <stddef.h>
|
||||||
|
typedef int ssize_t;
|
||||||
|
#else
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|||||||
Reference in New Issue
Block a user