scmApi.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <boost/function.hpp>
6 #include <boost/system/error_code.hpp>
7 #include <boost/shared_ptr.hpp>
8 #include "scmTypes.h"
9 #include <list>
10 #include <map>
11 
12 class SCMClientService;
13 
14 //To avoid redefinition in client and app
15 #ifndef SCM_TYPES
16 #define SCM_TYPES
17 
23 namespace dpySCM {
24 
29 typedef boost::function<void(const bool &available)> service_availability_handler;
30 
39 typedef boost::function<void(boost::system::error_code& ec, const dpySCM::Device& rDevice)> get_devices_handler_function;
40 typedef boost::function<void(boost::system::error_code& ec, const dpySCM::DeviceReaderList& rReader)> get_readers_handler_function;
41 typedef boost::function<void(boost::system::error_code& ec, const std::string& deviceId, dpySCM::CardEvent cardEvent)> handler_cardEvent_function;
42 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceChargeResult deviceChargeResult)> handler_device_charge_result_function;
43 typedef boost::function<void(boost::system::error_code& ec, const std::string& deviceId, dpySCM::Event deviceEvent)> handler_deviceListEvent_function;
44 typedef boost::function<void(boost::system::error_code& ec)> confirmation_handler_function;
45 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceKeys deviceKeys)> get_keys_handler_function;
46 typedef boost::function<void(boost::system::error_code& ec, dpySCM::TransactionDevice TransactionDevice)> card_operation_handler_function;
47 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DevicePassThrough devicePassThrough)> pass_through_operation_handler_function;
48 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceVersion& deviceVersion)> device_version_handler_function;
49 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DevicePaymentAppInfo& devicePaymentAppInfo)> device_payment_app_info_function;
50 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceMediaProfiles& deviceMediaProfiles)> device_media_profiles_function;
51 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceUpgradeStatus& deviceUpgradeStatus)> upgrade_status_events_function;
52 typedef boost::function<void(boost::system::error_code& ec, const std::string& deviceId)> force_device_upgrade_function;
53 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DevicePciRebootTime& devicePciRebootTime)> reboot_time_handler_function;
54 typedef boost::function<void(boost::system::error_code& ec, dpySCM::UltraLightCounter& ulCounter)> ultralight_counter_handler_function;
55 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceNetworkConfiguration& deviceNetworkConfiguration)> device_network_configuration_handler_function;
56 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DevicePaymentAppConfiguration& devicePaymentAppConf)> device_payment_app_conf_function;
57 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceDateTime& dateTime)> device_date_time_handler_function;
58 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceNetworkStatus& deviceNetworkStatus)> network_status_handler_function;
59 typedef boost::function<void(boost::system::error_code& ec, const std::string& deviceId, dpySCM::LoggingConfiguration& loggingConfiguration)> get_logging_configuration_handler_function;
60 
61 } //dpySCM
62 
63 #endif
64 
69 {
70 public:
77  virtual void newSmartCard(boost::system::error_code& ec, const std::string& deviceId, dpySCM::CardEvent cardEvent) = 0;
83  virtual void chargeResult(boost::system::error_code& ec, dpySCM::DeviceChargeResult deviceChargeResult) = 0;
87  virtual ~IsmartCardReaderObserver() = default;
88 };
89 
94 {
95 public:
96 
102  virtual void notifyPciReboot(boost::system::error_code& ec, dpySCM::DevicePciRebootTime& devicePciRebootTime) = 0;
103 
109  virtual void newUpgradeStatus(boost::system::error_code& ec, dpySCM::DeviceUpgradeStatus& deviceUpgradeStatus) = 0;
110 
114  virtual ~IsmartCardDeviceObserver() = default;
115 
116 };
117 
122 {
123 public:
130  virtual void deviceListEvent(boost::system::error_code& ec, const std::string& deviceId, dpySCM::Event deviceEvent) = 0;
134  virtual ~IsmartCardDeviceListObserver() = default;
135 };
136 
137 
143 class SCM
144 {
145 private:
146 
150  boost::shared_ptr<SCMClientService> mClient;
151  std::map<std::string, std::string> mDevices;
152 
153  template<typename Func>
154  void sendToDeviceOrService(const std::string& deviceId, Func func);
155 
156  std::vector<IsmartCardDeviceListObserver*> observersDeviceListObserver;
157  std::vector<IsmartCardDeviceObserver*> observersDeviceObserver;
158  std::vector<IsmartCardReaderObserver*> observersReaderObserver;
159  boost::system::error_code operateData(dpySCM::OperationType opType, std::string deviceId, std::string uid, std::list<dpySCM::Data> &contents);
160  boost::system::error_code operateDataBlock(dpySCM::OperationType opType, std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
161 
162 public:
163 
164  explicit SCM(std::string ip = "127.0.0.1");
165  ~SCM();
166  bool isAlive();
167  void monitorServiceAvailability_S(dpySCM::service_availability_handler handler);
168  void monitorServiceAvailability_U();
169 
172  void asyncGetDevices(dpySCM::get_devices_handler_function handler);
174  boost::system::error_code getDevices(dpySCM::Device& rDevice);
175  void deviceListEvent_S(dpySCM::handler_deviceListEvent_function handler);
176  void deviceListEvent_U();
177  void asyncGetReaders(std::string deviceId,dpySCM::get_readers_handler_function handler);
178  void asyncGetVersion(std::string deviceId, dpySCM::device_version_handler_function handler);
179  void newCardEvent_S(dpySCM::handler_cardEvent_function handler);
180  void newCardEvent_U();
181  void asyncAddKeys(dpySCM::DeviceKeys keyGroup, dpySCM::confirmation_handler_function handler);
182  void asyncAddKeys(std::string deviceId, std::string json, dpySCM::confirmation_handler_function handler);
183  void asyncGetKeys(std::string deviceId, dpySCM::get_keys_handler_function handler);
184  void asyncRemoveKeys(std::string deviceId, dpySCM::confirmation_handler_function handler);
185  void upgradeStatus_S(dpySCM::upgrade_status_events_function handler);
186  void upgradeStatus_U();
187  void asyncForceDeviceUpgrade(std::string deviceId,dpySCM::force_device_upgrade_function handler);
189 
190  // Device list observer
191  boost::system::error_code subscribeDeviceListEvent(IsmartCardDeviceListObserver *observer);
192  boost::system::error_code unsubscribeDeviceListEvent(IsmartCardDeviceListObserver *observer);
193  // Device observer
194  boost::system::error_code subscribeDeviceEvent(IsmartCardDeviceObserver *observer);
195  boost::system::error_code unsubscribeDeviceEvent(IsmartCardDeviceObserver *observer);
196  // Reader observer
197  boost::system::error_code subscribeReaderEvent(IsmartCardReaderObserver *observer);
198  boost::system::error_code unsubscribeReaderEvent(IsmartCardReaderObserver *observer);
199 
203  void asyncCardOperation(dpySCM::TransactionDevice operationDevice, dpySCM::card_operation_handler_function handler);
205  void asyncPassThrough(dpySCM::DevicePassThrough devicePassThrough, dpySCM::pass_through_operation_handler_function handler);
206  void asyncGetULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter, dpySCM::ultralight_counter_handler_function handler);
207  void asyncIncrementULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter, dpySCM::confirmation_handler_function handler);
208  void asyncResetSamSlot(std::string deviceId, dpySCM::SamSlot slotNumber, dpySCM::confirmation_handler_function handler);
209 
211 
215  boost::system::error_code auth(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
217  boost::system::error_code read(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
218  boost::system::error_code write(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
219  boost::system::error_code apduExchange(std::string deviceId, std::string uid, std::list<dpySCM::ApduTxData>& apduTx, std::list<dpySCM::ApduRxData>& apduRx);
220  boost::system::error_code passThrough(std::string deviceId, dpySCM::PassThrough& passThrough);
221  boost::system::error_code getULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter);
222  boost::system::error_code incrementULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter);
223  boost::system::error_code transferBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
224  boost::system::error_code restoreBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
225  boost::system::error_code incrementOnlyBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
226  boost::system::error_code decrementOnlyBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
227  boost::system::error_code incrementBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
228  boost::system::error_code decrementBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
230 
234  void chargeResultEMV_S(dpySCM::handler_device_charge_result_function handler);
236  void chargeResultEMV_U();
237  void asyncRequestChargeEMV(dpySCM::DeviceRequestCharge requestChargeDevice, dpySCM::confirmation_handler_function handler);
238  void asyncChargeConfirmationEMV(dpySCM::DeviceChargeConfirmation requestChargeConfirmation, dpySCM::confirmation_handler_function handler);
239  void asyncSetPaymentAppStatus(dpySCM::DevicePaymentAppStatus devicePaymentAppStatus, dpySCM::confirmation_handler_function handler);
240  void asyncGetPaymentAppInfo(std::string deviceId, dpySCM::device_payment_app_info_function handler);
241  void asyncGetPaymentAppConf(dpySCM::DevicePaymentAppConfiguration devicePaymentAppConf, dpySCM::device_payment_app_conf_function handler);
242  void asyncSetPaymentAppConf(dpySCM::DevicePaymentAppConfiguration devicePaymentAppConf, dpySCM::confirmation_handler_function handler);
243  void asyncForcePaymentAppComm(std::string deviceId, dpySCM::confirmation_handler_function handler);
245 
249 
251  void asyncPlayProfile(std::string deviceId, std::string profileId, dpySCM::confirmation_handler_function handler);
252  void asyncAddMediaProfiles(std::string deviceId,std::string json, dpySCM::confirmation_handler_function handler);
253  void asyncAddMediaProfiles(dpySCM::DeviceMediaProfiles deviceMediaProfiles, dpySCM::confirmation_handler_function handler);
254  void asyncGetMediaProfiles(std::string deviceId, dpySCM::device_media_profiles_function handler);
255  void asyncRemoveMediaProfiles(std::string deviceId, dpySCM::confirmation_handler_function handler);
257 
260  void pciRebootEvent_S(dpySCM::reboot_time_handler_function handler);
262  void pciRebootEvent_U();
263  void asyncGetPciRebootTime(std::string deviceId, dpySCM::reboot_time_handler_function handler);
264  void asyncSetPciRebootTime(dpySCM::DevicePciRebootTime deviceRebootTime, dpySCM::confirmation_handler_function handler);
265  boost::system::error_code getPciRebootTime(std::string deviceId, dpySCM::DevicePciRebootTime& rebootTime);
266  boost::system::error_code setPciRebootTime(dpySCM::DevicePciRebootTime deviceRebootTime);
268 
272  void asyncGetNetworkConfiguration(std::string deviceId, dpySCM::device_network_configuration_handler_function handler);
274  void asyncSetNetworkConfiguration(dpySCM::DeviceNetworkConfiguration deviceNetworkConfiguration, dpySCM::confirmation_handler_function handler);
276  void asyncGetDateTime(std::string deviceId, dpySCM::device_date_time_handler_function handler);
277  void asyncRebootDevice(std::string deviceId, dpySCM::RebootType rebootType, dpySCM::confirmation_handler_function handler);
278  void asyncTestNetworkConnectivity(dpySCM::DeviceNetworkConnectivity deviceNetworkConnectivity, dpySCM::network_status_handler_function handler);
279  void asyncSetLoggingConfiguration(std::string deviceId, dpySCM::LoggingConfiguration loggingConfiguration, dpySCM::confirmation_handler_function handler);
280  void asyncGetLoggingConfiguration(std::string deviceId, dpySCM::get_logging_configuration_handler_function handler);
281 
282 };
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceNetworkConfiguration &deviceNetworkConfiguration)> device_network_configuration_handler_function
Result of get network configuration.
Definition: scmApi.h:55
Structure for UltraLight counter requests.
Definition: scmTypes.h:644
boost::function< void(boost::system::error_code &ec, dpySCM::TransactionDevice TransactionDevice)> card_operation_handler_function
Result of card operation.
Definition: scmApi.h:46
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceKeys deviceKeys)> get_keys_handler_function
Result of getting keys information.
Definition: scmApi.h:45
All the date related to the device information.
Definition: scmTypes.h:175
The device network configuration.
Definition: scmTypes.h:262
Device payment terminal configuration.
Definition: scmTypes.h:375
Device request of charging.
Definition: scmTypes.h:399
Transaction operation device.
Definition: scmTypes.h:199
Definition: scmApi.h:68
boost::function< void(boost::system::error_code &ec, dpySCM::DevicePaymentAppConfiguration &devicePaymentAppConf)> device_payment_app_conf_function
Result of get device payment application configuration.
Definition: scmApi.h:56
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceDateTime &dateTime)> device_date_time_handler_function
Result of get network configuration.
Definition: scmApi.h:57
boost::function< void(boost::system::error_code &ec, dpySCM::UltraLightCounter &ulCounter)> ultralight_counter_handler_function
Result of getting a ultralight counter value.
Definition: scmApi.h:54
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceChargeResult deviceChargeResult)> handler_device_charge_result_function
Result of device charge EMV result.
Definition: scmApi.h:42
boost::function< void(boost::system::error_code &ec)> confirmation_handler_function
Result of confirmation operation.
Definition: scmApi.h:44
SamSlot
Logging Level values indicating severity of the logs.
Definition: scmTypes.h:719
boost::function< void(boost::system::error_code &ec, dpySCM::DevicePaymentAppInfo &devicePaymentAppInfo)> device_payment_app_info_function
Result of get device payment application info.
Definition: scmApi.h:49
Device pass through.
Definition: scmTypes.h:637
OperationType
Different types of operation.
Definition: scmTypes.h:86
The Logging Configuration to be applied or being applied.
Definition: scmTypes.h:709
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceVersion &deviceVersion)> device_version_handler_function
Result of get version.
Definition: scmApi.h:48
Device charge result.
Definition: scmTypes.h:472
boost::function< void(const bool &available)> service_availability_handler
Prototype of the handler function used to monitor service availability.
Definition: scmApi.h:29
Device payment application information.
Definition: scmTypes.h:293
Add Keys.
Definition: scmTypes.h:214
Structure containing information needed to execute a pass through.
Definition: scmTypes.h:629
Device media profiles.
Definition: scmTypes.h:614
Contains the network address to be tested on that device.
Definition: scmTypes.h:671
boost::function< void(boost::system::error_code &ec, const dpySCM::Device &rDevice)> get_devices_handler_function
Handler for status function callback.
Definition: scmApi.h:39
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceUpgradeStatus &deviceUpgradeStatus)> upgrade_status_events_function
Result of every upgrade status event.
Definition: scmApi.h:51
boost::function< void(boost::system::error_code &ec, dpySCM::DevicePciRebootTime &devicePciRebootTime)> reboot_time_handler_function
Result of getting PCI Data Security Standard reboot time.
Definition: scmApi.h:53
boost::function< void(boost::system::error_code &ec, const std::string &deviceId)> force_device_upgrade_function
Result of force device upgrade request.
Definition: scmApi.h:52
Interacts with platform manager service.
Definition: scmClientService.h:14
Deepsy SCM namespace that includes the different enums, structs or method signatures that should be u...
Definition: scmApi.h:121
Device confirmation charge.
Definition: scmTypes.h:492
RebootType
Reboot type, it defines different reboot types.
Definition: scmTypes.h:664
Event
The type of event related to the smart card.
Definition: scmTypes.h:140
boost::function< void(boost::system::error_code &ec, const std::string &deviceId, dpySCM::Event deviceEvent)> handler_deviceListEvent_function
Result of added/removed device event.
Definition: scmApi.h:43
The kind of event and the card information.
Definition: scmTypes.h:160
boost::function< void(boost::system::error_code &ec, const std::string &deviceId, dpySCM::LoggingConfiguration &loggingConfiguration)> get_logging_configuration_handler_function
Result of getting logging configuration.
Definition: scmApi.h:59
Device PCI Reboot Time.
Definition: scmTypes.h:513
Definition: scmApi.h:93
Allows to interact with a platform manager.
Definition: scmApi.h:143
boost::function< void(boost::system::error_code &ec, dpySCM::DevicePassThrough devicePassThrough)> pass_through_operation_handler_function
Result of pass through operation.
Definition: scmApi.h:47
boost::function< void(boost::system::error_code &ec, const dpySCM::DeviceReaderList &rReader)> get_readers_handler_function
Result of getting readers information.
Definition: scmApi.h:40
boost::function< void(boost::system::error_code &ec, const std::string &deviceId, dpySCM::CardEvent cardEvent)> handler_cardEvent_function
Result of new card event.
Definition: scmApi.h:41
Device upgrade status.
Definition: scmTypes.h:547
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceNetworkStatus &deviceNetworkStatus)> network_status_handler_function
Result of testing network connectivity.
Definition: scmApi.h:58
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceMediaProfiles &deviceMediaProfiles)> device_media_profiles_function
Result of get media profiles.
Definition: scmApi.h:50