| /* | 
 |  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. | 
 |  * See the COPYING.LIB file in the top-level directory. | 
 |  */ | 
 | #ifndef VCARD_H | 
 | #define VCARD_H 1 | 
 |  | 
 | #include "vcardt.h" | 
 |  | 
 | /* | 
 |  * response buffer constructors and destructors. | 
 |  * | 
 |  * response buffers are used when we need to return more data than will fit in | 
 |  * a normal APDU response (nominally 254 bytes). | 
 |  */ | 
 | VCardBufferResponse *vcard_buffer_response_new(unsigned char *buffer, int size); | 
 | void vcard_buffer_response_delete(VCardBufferResponse *buffer_response); | 
 |  | 
 |  | 
 | /* | 
 |  * clean up state on reset | 
 |  */ | 
 | void vcard_reset(VCard *card, VCardPower power); | 
 |  | 
 | /* | 
 |  * applet utilities | 
 |  */ | 
 | /* | 
 |  * Constructor for a VCardApplet | 
 |  */ | 
 | VCardApplet *vcard_new_applet(VCardProcessAPDU applet_process_function, | 
 |                               VCardResetApplet applet_reset_function, | 
 |                               unsigned char *aid, int aid_len); | 
 |  | 
 | /* | 
 |  * destructor for a VCardApplet | 
 |  *  Can be called with a NULL applet | 
 |  */ | 
 | void vcard_delete_applet(VCardApplet *applet); | 
 |  | 
 | /* accessor - set the card type specific private data */ | 
 | void vcard_set_applet_private(VCardApplet *applet, VCardAppletPrivate *_private, | 
 |                               VCardAppletPrivateFree private_free); | 
 |  | 
 | /* set type of vcard */ | 
 | void vcard_set_type(VCard *card, VCardType type); | 
 |  | 
 | /* | 
 |  * utilities interacting with the current applet | 
 |  */ | 
 | /* add a new applet to a card */ | 
 | VCardStatus vcard_add_applet(VCard *card, VCardApplet *applet); | 
 | /* find the applet on the card with the given aid */ | 
 | VCardApplet *vcard_find_applet(VCard *card, unsigned char *aid, int aid_len); | 
 | /* set the following applet to be current on the given channel */ | 
 | void vcard_select_applet(VCard *card, int channel, VCardApplet *applet); | 
 | /* get the card type specific private data on the given channel */ | 
 | VCardAppletPrivate *vcard_get_current_applet_private(VCard *card, int channel); | 
 | /* fetch the applet's id */ | 
 | unsigned char *vcard_applet_get_aid(VCardApplet *applet, int *aid_len); | 
 |  | 
 | /* process the apdu for the current selected applet/file */ | 
 | VCardStatus vcard_process_applet_apdu(VCard *card, VCardAPDU *apdu, | 
 |                                       VCardResponse **response); | 
 | /* | 
 |  * VCard utilities | 
 |  */ | 
 | /* constructor */ | 
 | VCard *vcard_new(VCardEmul *_private, VCardEmulFree private_free); | 
 | /* get a reference */ | 
 | VCard *vcard_reference(VCard *); | 
 | /* destructor (reference counted) */ | 
 | void vcard_free(VCard *); | 
 | /* get the atr from the card */ | 
 | void vcard_get_atr(VCard *card, unsigned char *atr, int *atr_len); | 
 | void vcard_set_atr_func(VCard *card, VCardGetAtr vcard_get_atr); | 
 |  | 
 | /* accessor functions for the response buffer */ | 
 | VCardBufferResponse *vcard_get_buffer_response(VCard *card); | 
 | void vcard_set_buffer_response(VCard *card, VCardBufferResponse *buffer); | 
 | /* accessor functions for the type */ | 
 | VCardType vcard_get_type(VCard *card); | 
 | /* get the private data */ | 
 | VCardEmul *vcard_get_private(VCard *card); | 
 |  | 
 | #endif |