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 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DeviceArtifacts& deviceArtifacts)> get_artifacts_handler_function;
61 typedef boost::function<void(boost::system::error_code& ec, dpySCM::DevicePluginData& devicePluginData)> execute_plugin_handler_function;
62 typedef boost::function<void(boost::system::error_code& ec, const dpySCM::DevicePluginData& devicePluginData)> plugin_event_handler_function;
63 
64 } //dpySCM
65 
66 #endif
67 
72 {
73 public:
80  virtual void newSmartCard(boost::system::error_code& ec, const std::string& deviceId, dpySCM::CardEvent cardEvent) = 0;
86  virtual void chargeResult(boost::system::error_code& ec, dpySCM::DeviceChargeResult deviceChargeResult) = 0;
90  virtual ~IsmartCardReaderObserver() = default;
91 };
92 
97 {
98 public:
99 
105  virtual void notifyPciReboot(boost::system::error_code& ec, dpySCM::DevicePciRebootTime& devicePciRebootTime) = 0;
106 
112  virtual void newUpgradeStatus(boost::system::error_code& ec, dpySCM::DeviceUpgradeStatus& deviceUpgradeStatus) = 0;
113 
117  virtual ~IsmartCardDeviceObserver() = default;
118 
119 };
120 
125 {
126 public:
133  virtual void deviceListEvent(boost::system::error_code& ec, const std::string& deviceId, dpySCM::Event deviceEvent) = 0;
137  virtual ~IsmartCardDeviceListObserver() = default;
138 };
139 
144 {
145 public:
151  virtual void pluginEvent(boost::system::error_code& ec, const dpySCM::DevicePluginData& devicePluginData) = 0;
152 
153  virtual ~IPluginObserver() = default;
154 };
155 
156 
162 class SCM
163 {
164 private:
165 
169  boost::shared_ptr<SCMClientService> mClient;
170  std::map<std::string, std::string> mDevices;
171 
172  template<typename Func>
173  void sendToDeviceOrService(const std::string& deviceId, Func func);
174 
175  std::vector<IsmartCardDeviceListObserver*> observersDeviceListObserver;
176  std::vector<IsmartCardDeviceObserver*> observersDeviceObserver;
177  std::vector<IsmartCardReaderObserver*> observersReaderObserver;
178  std::vector<IPluginObserver*> pluginObservers;
179  boost::system::error_code operateData(dpySCM::OperationType opType, std::string deviceId, std::string uid, std::list<dpySCM::Data> &contents);
180  boost::system::error_code operateDataBlock(dpySCM::OperationType opType, std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
181  void asyncAddArtifact(std::string deviceId, dpySCM::ArtifactInfo artifactInfo, dpySCM::confirmation_handler_function handler);
182 
183 public:
184 
185  explicit SCM(std::string ip = "127.0.0.1");
186  ~SCM();
187  bool isAlive();
188  void monitorServiceAvailability_S(dpySCM::service_availability_handler handler);
189  void monitorServiceAvailability_U();
190 
193  void asyncGetDevices(dpySCM::get_devices_handler_function handler);
195  boost::system::error_code getDevices(dpySCM::Device& rDevice);
196  void deviceListEvent_S(dpySCM::handler_deviceListEvent_function handler);
197  void deviceListEvent_U();
198  void asyncGetReaders(std::string deviceId,dpySCM::get_readers_handler_function handler);
199  void asyncGetVersion(std::string deviceId, dpySCM::device_version_handler_function handler);
200  void newCardEvent_S(dpySCM::handler_cardEvent_function handler);
201  void newCardEvent_U();
202  void asyncAddKeys(dpySCM::DeviceKeys keyGroup, dpySCM::confirmation_handler_function handler);
203  void asyncAddKeys(std::string deviceId, std::string json, dpySCM::confirmation_handler_function handler);
204  void asyncGetKeys(std::string deviceId, dpySCM::get_keys_handler_function handler);
205  void asyncRemoveKeys(std::string deviceId, dpySCM::confirmation_handler_function handler);
206  void upgradeStatus_S(dpySCM::upgrade_status_events_function handler);
207  void upgradeStatus_U();
208  void asyncForceDeviceUpgrade(std::string deviceId,dpySCM::force_device_upgrade_function handler);
210 
211  // Device list observer
212  boost::system::error_code subscribeDeviceListEvent(IsmartCardDeviceListObserver *observer);
213  boost::system::error_code unsubscribeDeviceListEvent(IsmartCardDeviceListObserver *observer);
214  // Device observer
215  boost::system::error_code subscribeDeviceEvent(IsmartCardDeviceObserver *observer);
216  boost::system::error_code unsubscribeDeviceEvent(IsmartCardDeviceObserver *observer);
217  // Reader observer
218  boost::system::error_code subscribeReaderEvent(IsmartCardReaderObserver *observer);
219  boost::system::error_code unsubscribeReaderEvent(IsmartCardReaderObserver *observer);
220  // Plugin observer
221  boost::system::error_code subscribePluginEvent(IPluginObserver *observer);
222  boost::system::error_code unsubscribePluginEvent(IPluginObserver *observer);
223 
227  void asyncCardOperation(dpySCM::TransactionDevice operationDevice, dpySCM::card_operation_handler_function handler);
229  void asyncPassThrough(dpySCM::DevicePassThrough devicePassThrough, dpySCM::pass_through_operation_handler_function handler);
230  void asyncGetULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter, dpySCM::ultralight_counter_handler_function handler);
231  void asyncIncrementULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter, dpySCM::confirmation_handler_function handler);
232  void asyncResetSamSlot(std::string deviceId, dpySCM::SamSlot slotNumber, dpySCM::confirmation_handler_function handler);
233 
235 
239  boost::system::error_code auth(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
241  boost::system::error_code read(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
242  boost::system::error_code write(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
243  boost::system::error_code apduExchange(std::string deviceId, std::string uid, std::list<dpySCM::ApduTxData>& apduTx, std::list<dpySCM::ApduRxData>& apduRx);
244  boost::system::error_code passThrough(std::string deviceId, dpySCM::PassThrough& passThrough);
245  boost::system::error_code getULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter);
246  boost::system::error_code incrementULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter);
247  boost::system::error_code transferBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
248  boost::system::error_code restoreBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
249  boost::system::error_code incrementOnlyBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
250  boost::system::error_code decrementOnlyBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
251  boost::system::error_code incrementBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
252  boost::system::error_code decrementBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
254 
258  void chargeResultEMV_S(dpySCM::handler_device_charge_result_function handler);
260  void chargeResultEMV_U();
261  void asyncRequestChargeEMV(dpySCM::DeviceRequestCharge requestChargeDevice, dpySCM::confirmation_handler_function handler);
262  void asyncChargeConfirmationEMV(dpySCM::DeviceChargeConfirmation requestChargeConfirmation, dpySCM::confirmation_handler_function handler);
263  void asyncSetPaymentAppStatus(dpySCM::DevicePaymentAppStatus devicePaymentAppStatus, dpySCM::confirmation_handler_function handler);
264  void asyncGetPaymentAppInfo(std::string deviceId, dpySCM::device_payment_app_info_function handler);
265  void asyncGetPaymentAppConf(dpySCM::DevicePaymentAppConfiguration devicePaymentAppConf, dpySCM::device_payment_app_conf_function handler);
266  void asyncSetPaymentAppConf(dpySCM::DevicePaymentAppConfiguration devicePaymentAppConf, dpySCM::confirmation_handler_function handler);
267  void asyncForcePaymentAppComm(std::string deviceId, dpySCM::confirmation_handler_function handler);
269 
273 
275  void asyncPlayProfile(std::string deviceId, std::string profileId, dpySCM::confirmation_handler_function handler);
276  void asyncAddMediaProfiles(std::string deviceId,std::string json, dpySCM::confirmation_handler_function handler);
277  void asyncAddMediaProfiles(dpySCM::DeviceMediaProfiles deviceMediaProfiles, dpySCM::confirmation_handler_function handler);
278  void asyncGetMediaProfiles(std::string deviceId, dpySCM::device_media_profiles_function handler);
279  void asyncRemoveMediaProfiles(std::string deviceId, dpySCM::confirmation_handler_function handler);
281 
284  void pciRebootEvent_S(dpySCM::reboot_time_handler_function handler);
286  void pciRebootEvent_U();
287  void asyncGetPciRebootTime(std::string deviceId, dpySCM::reboot_time_handler_function handler);
288  void asyncSetPciRebootTime(dpySCM::DevicePciRebootTime deviceRebootTime, dpySCM::confirmation_handler_function handler);
289  boost::system::error_code getPciRebootTime(std::string deviceId, dpySCM::DevicePciRebootTime& rebootTime);
290  boost::system::error_code setPciRebootTime(dpySCM::DevicePciRebootTime deviceRebootTime);
292 
296  void asyncGetNetworkConfiguration(std::string deviceId, dpySCM::device_network_configuration_handler_function handler);
298  void asyncSetNetworkConfiguration(dpySCM::DeviceNetworkConfiguration deviceNetworkConfiguration, dpySCM::confirmation_handler_function handler);
300  void asyncGetDateTime(std::string deviceId, dpySCM::device_date_time_handler_function handler);
301  void asyncRebootDevice(std::string deviceId, dpySCM::RebootType rebootType, dpySCM::confirmation_handler_function handler);
302  void asyncTestNetworkConnectivity(dpySCM::DeviceNetworkConnectivity deviceNetworkConnectivity, dpySCM::network_status_handler_function handler);
303  void asyncSetLoggingConfiguration(std::string deviceId, dpySCM::LoggingConfiguration loggingConfiguration, dpySCM::confirmation_handler_function handler);
304  void asyncGetLoggingConfiguration(std::string deviceId, dpySCM::get_logging_configuration_handler_function handler);
305 
309  boost::system::error_code asyncAddArtifact(std::string deviceId, std::string name, std::string fileName, dpySCM::ArtifactType type, dpySCM::ArtifactInstallationType installType, dpySCM::confirmation_handler_function handler);
311  boost::system::error_code asyncAddArtifact(std::string deviceId, std::string name, std::string fileName, dpySCM::ArtifactType type, dpySCM::ArtifactInstallationType installType, std::string version, dpySCM::confirmation_handler_function handler);
312  void asyncGetArtifacts(std::string deviceId, dpySCM::get_artifacts_handler_function handler);
313  void asyncRemoveArtifact(std::string deviceId, std::string name, dpySCM::confirmation_handler_function handler);
314  void asyncExecutePlugin(std::string deviceId, std::string name, std::map<std::string,std::string> inputData, dpySCM::execute_plugin_handler_function handler);
315  void pluginEvent_S(dpySCM::plugin_event_handler_function handler);
316  void pluginEvent_U();
318 };
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:645
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, const dpySCM::DevicePluginData &devicePluginData)> plugin_event_handler_function
Plugin event.
Definition: scmApi.h:62
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:176
The device network configuration.
Definition: scmTypes.h:263
Device payment terminal configuration.
Definition: scmTypes.h:376
Device request of charging.
Definition: scmTypes.h:400
Transaction operation device.
Definition: scmTypes.h:200
ArtifactType
Definition: scmTypes.h:729
Definition: scmApi.h:71
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceArtifacts &deviceArtifacts)> get_artifacts_handler_function
Result of getting artifacts informations.
Definition: scmApi.h:60
ArtifactInstallationType
Type of artifact installation.
Definition: scmTypes.h:737
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:720
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:638
OperationType
Different types of operation.
Definition: scmTypes.h:87
The Logging Configuration to be applied or being applied.
Definition: scmTypes.h:710
Structure containing information of an artifact.
Definition: scmTypes.h:744
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:473
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:294
Add Keys.
Definition: scmTypes.h:215
Structure containing information needed to execute a pass through.
Definition: scmTypes.h:630
Device media profiles.
Definition: scmTypes.h:615
Contains the network address to be tested on that device.
Definition: scmTypes.h:672
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:124
Device confirmation charge.
Definition: scmTypes.h:493
RebootType
Reboot type, it defines different reboot types.
Definition: scmTypes.h:665
Event
The type of event related to the smart card.
Definition: scmTypes.h:141
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
boost::function< void(boost::system::error_code &ec, dpySCM::DevicePluginData &devicePluginData)> execute_plugin_handler_function
Result of executing plugin.
Definition: scmApi.h:61
Definition: scmTypes.h:763
The kind of event and the card information.
Definition: scmTypes.h:161
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:514
Definition: scmApi.h:96
Allows to interact with a platform manager.
Definition: scmApi.h:162
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
Definition: scmApi.h:143
Device upgrade status.
Definition: scmTypes.h:548
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