⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcscreaderfactory.cpp

📁 开发源代码的CPU卡的COS源程序。
💻 CPP
字号:
/* ============================================================================   Project Name : jayaCard   Module Name  : inkit - PCSCReaderFactory.h   Version      : $Id: PCSCReaderFactory.cpp,v 1.4 2003/09/23 14:14:47 pfremy Exp $	Description:    The Original Code is inKit code, the contactless library of the jayacard    project (http://www.jayacard.org).    The contents of this file are subject to the Mozilla Public License Version    1.1 (the "License"); you may not use this file except in compliance with    the License. You may obtain a copy of the License at    http://www.mozilla.org/MPL/    Software distributed under the License is distributed on an "AS IS" basis,    WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License    for the specific language governing rights and limitations under the    License.    The Initial Developer of the Original Code is inSeal SAS and the authors    Gilles Dumortier and Philippe Fremy.    Portions created by the Initial Developer are Copyright (C) 1996-2003 the    Initial Developer. All Rights Reserved.    Alternatively, the contents of this file may be used under the terms of    either the GNU General Public License Version 2 or later (the "GPL"), or    the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),    in which case the provisions of the GPL or the LGPL are applicable instead    of those above. If you wish to allow use of your version of this file only    under the terms of either the GPL or the LGPL, and not to allow others to    use your version of this file under the terms of the MPL, indicate your    decision by deleting the provisions above and replace them with the notice    and other provisions required by the GPL or the LGPL. If you do not delete    the provisions above, a recipient may use your version of this file under    the terms of any one of the MPL, the GPL or the LGPL.    inKit is also available under commercial license. For pricing and ordering    information, send an email to sales@inseal.com   History Rev	Description   0260803  phf	wrote it from scratch   ============================================================================*/#ifdef WIN32#pragma warning (disable : 4786)#endif#include "inkit/jaya_reader/PCSCReader/PCSCReaderFactory.h"#include "inkit/jaya_reader/PCSCReader/PCSCReader.h"#include <winscard.h>#ifndef WIN32#include <pcsclite.h>#endif#include <string.h>  namespace Jayacard {/* =========================================================================	PCSCReaderFactory - constructor   ========================================================================= */PCSCReaderFactory::PCSCReaderFactory( const char * type )    : JayaReaderFactory( type ) { }/* =========================================================================	getReaderList	Returns a vector of the names of the readers connected to the computer. 	This method is used by JayaReaderRegistry to fetch all the readers     provided by this factory.   ========================================================================= */vector<string> PCSCReaderFactory::getReaderList(){    vector<string> readerList;    SCARDCONTEXT hContext;    LPSTR mszReaders, mszReader;    DWORD dwReaders;    LONG rv;    // establish a connection context to the PC/SC ressource manager    rv = SCardEstablishContext( SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext );    if ( rv != SCARD_S_SUCCESS )     {        jlog( "PCSCReaderFactory", "Error when establishing PCSC context" );        return readerList;    }    // get readers list    rv = SCardListReaders( hContext, NULL, NULL, &dwReaders );    if ( rv != SCARD_S_SUCCESS )     {        jlog( "PCSCReaderFactory", "Error when getting reader list" );        return readerList;    }    mszReaders = (LPSTR)malloc( sizeof(char)*dwReaders );    if ( mszReaders == NULL )     {        jlog( "PCSCReaderFactory", "Error when allocating memory for reader list" );        return readerList;    }                    rv = SCardListReaders( hContext, NULL, mszReaders, &dwReaders );    if ( rv != SCARD_S_SUCCESS )     {        jlog( "PCSCReaderFactory", "Error when getting reader list" );        return readerList;    }    // push all readers name into the string vector    mszReader = mszReaders;    while ( strlen( mszReader ) )    {        readerList.push_back( mszReader );        mszReader += strlen(mszReader)+1;     }    free( (void*)mszReaders );    // release the connection context    rv = SCardReleaseContext( hContext );    if ( rv != SCARD_S_SUCCESS )        jlog( "PCSCReaderFactory", "Error when releasing PCSC context" );    return readerList; }/* =========================================================================	getReader	Returns a PCSCReader object corresponding to the reader which name is     passed as parameter. 	Returns NULL with ret set to the error if an error occurs.    ========================================================================= */JayaReader * PCSCReaderFactory::getReader( string readerName, jresult * ret ){    JayaReader * reader = NULL;    reader = new PCSCReader( readerName, "", ret );    if ( reader==NULL )     {        jlog( "PCSCReaderFactory", "Error when creating reader '%s'", readerName.c_str() );        *ret = JY_ALLOCATION_FAILURE;        jlog_error( "PCSCReaderFactory", "", *ret );        return NULL;    }    else if ( *ret!=JY_OK )    {        jlog( "PCSCReaderFactory", "Error when creating reader '%s'", readerName.c_str() );        jlog_error( "PCSCReaderFactory", "", *ret );		// XXX FIXME __x : do not delete readers with failed connection because this		// creates a segfault on windows. This creates a memory leak        // delete reader;        return NULL;    }    return reader;}} // namespace Jayacard

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -