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 
63 } //dpySCM
64 
65 #endif
66 
71 {
72 public:
79  virtual void newSmartCard(boost::system::error_code& ec, const std::string& deviceId, dpySCM::CardEvent cardEvent) = 0;
85  virtual void chargeResult(boost::system::error_code& ec, dpySCM::DeviceChargeResult deviceChargeResult) = 0;
89  virtual ~IsmartCardReaderObserver() = default;
90 };
91 
96 {
97 public:
98 
104  virtual void notifyPciReboot(boost::system::error_code& ec, dpySCM::DevicePciRebootTime& devicePciRebootTime) = 0;
105 
111  virtual void newUpgradeStatus(boost::system::error_code& ec, dpySCM::DeviceUpgradeStatus& deviceUpgradeStatus) = 0;
112 
116  virtual ~IsmartCardDeviceObserver() = default;
117 
118 };
119 
124 {
125 public:
132  virtual void deviceListEvent(boost::system::error_code& ec, const std::string& deviceId, dpySCM::Event deviceEvent) = 0;
136  virtual ~IsmartCardDeviceListObserver() = default;
137 };
138 
139 
145 class SCM
146 {
147 private:
148 
152  boost::shared_ptr<SCMClientService> mClient;
153  std::map<std::string, std::string> mDevices;
154 
155  template<typename Func>
156  void sendToDeviceOrService(const std::string& deviceId, Func func);
157 
158  std::vector<IsmartCardDeviceListObserver*> observersDeviceListObserver;
159  std::vector<IsmartCardDeviceObserver*> observersDeviceObserver;
160  std::vector<IsmartCardReaderObserver*> observersReaderObserver;
161  boost::system::error_code operateData(dpySCM::OperationType opType, std::string deviceId, std::string uid, std::list<dpySCM::Data> &contents);
162  boost::system::error_code operateDataBlock(dpySCM::OperationType opType, std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
163  void asyncAddArtifact(std::string deviceId, dpySCM::ArtifactInfo artifactInfo, std::string artifactContent, dpySCM::confirmation_handler_function handler);
164 
165 public:
166 
167  explicit SCM(std::string ip = "127.0.0.1");
168  ~SCM();
169  bool isAlive();
170  void monitorServiceAvailability_S(dpySCM::service_availability_handler handler);
171  void monitorServiceAvailability_U();
172 
175  void asyncGetDevices(dpySCM::get_devices_handler_function handler);
177  boost::system::error_code getDevices(dpySCM::Device& rDevice);
178  void deviceListEvent_S(dpySCM::handler_deviceListEvent_function handler);
179  void deviceListEvent_U();
180  void asyncGetReaders(std::string deviceId,dpySCM::get_readers_handler_function handler);
181  void asyncGetVersion(std::string deviceId, dpySCM::device_version_handler_function handler);
182  void newCardEvent_S(dpySCM::handler_cardEvent_function handler);
183  void newCardEvent_U();
184  void asyncAddKeys(dpySCM::DeviceKeys keyGroup, dpySCM::confirmation_handler_function handler);
185  void asyncAddKeys(std::string deviceId, std::string json, dpySCM::confirmation_handler_function handler);
186  void asyncGetKeys(std::string deviceId, dpySCM::get_keys_handler_function handler);
187  void asyncRemoveKeys(std::string deviceId, dpySCM::confirmation_handler_function handler);
188  void upgradeStatus_S(dpySCM::upgrade_status_events_function handler);
189  void upgradeStatus_U();
190  void asyncForceDeviceUpgrade(std::string deviceId,dpySCM::force_device_upgrade_function handler);
192 
193  // Device list observer
194  boost::system::error_code subscribeDeviceListEvent(IsmartCardDeviceListObserver *observer);
195  boost::system::error_code unsubscribeDeviceListEvent(IsmartCardDeviceListObserver *observer);
196  // Device observer
197  boost::system::error_code subscribeDeviceEvent(IsmartCardDeviceObserver *observer);
198  boost::system::error_code unsubscribeDeviceEvent(IsmartCardDeviceObserver *observer);
199  // Reader observer
200  boost::system::error_code subscribeReaderEvent(IsmartCardReaderObserver *observer);
201  boost::system::error_code unsubscribeReaderEvent(IsmartCardReaderObserver *observer);
202 
206  void asyncCardOperation(dpySCM::TransactionDevice operationDevice, dpySCM::card_operation_handler_function handler);
208  void asyncPassThrough(dpySCM::DevicePassThrough devicePassThrough, dpySCM::pass_through_operation_handler_function handler);
209  void asyncGetULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter, dpySCM::ultralight_counter_handler_function handler);
210  void asyncIncrementULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter, dpySCM::confirmation_handler_function handler);
211  void asyncResetSamSlot(std::string deviceId, dpySCM::SamSlot slotNumber, dpySCM::confirmation_handler_function handler);
212 
214 
218  boost::system::error_code auth(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
220  boost::system::error_code read(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
221  boost::system::error_code write(std::string deviceId, std::string uid, std::list<dpySCM::Data>& contents);
222  boost::system::error_code apduExchange(std::string deviceId, std::string uid, std::list<dpySCM::ApduTxData>& apduTx, std::list<dpySCM::ApduRxData>& apduRx);
223  boost::system::error_code passThrough(std::string deviceId, dpySCM::PassThrough& passThrough);
224  boost::system::error_code getULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter);
225  boost::system::error_code incrementULCounter(std::string deviceId, dpySCM::UltraLightCounter& ulCounter);
226  boost::system::error_code transferBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
227  boost::system::error_code restoreBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
228  boost::system::error_code incrementOnlyBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
229  boost::system::error_code decrementOnlyBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
230  boost::system::error_code incrementBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
231  boost::system::error_code decrementBlock(std::string deviceId, std::string uid, std::list<dpySCM::DataBlock> contents);
233 
237  void chargeResultEMV_S(dpySCM::handler_device_charge_result_function handler);
239  void chargeResultEMV_U();
240  void asyncRequestChargeEMV(dpySCM::DeviceRequestCharge requestChargeDevice, dpySCM::confirmation_handler_function handler);
241  void asyncChargeConfirmationEMV(dpySCM::DeviceChargeConfirmation requestChargeConfirmation, dpySCM::confirmation_handler_function handler);
242  void asyncSetPaymentAppStatus(dpySCM::DevicePaymentAppStatus devicePaymentAppStatus, dpySCM::confirmation_handler_function handler);
243  void asyncGetPaymentAppInfo(std::string deviceId, dpySCM::device_payment_app_info_function handler);
244  void asyncGetPaymentAppConf(dpySCM::DevicePaymentAppConfiguration devicePaymentAppConf, dpySCM::device_payment_app_conf_function handler);
245  void asyncSetPaymentAppConf(dpySCM::DevicePaymentAppConfiguration devicePaymentAppConf, dpySCM::confirmation_handler_function handler);
246  void asyncForcePaymentAppComm(std::string deviceId, dpySCM::confirmation_handler_function handler);
248 
252 
254  void asyncPlayProfile(std::string deviceId, std::string profileId, dpySCM::confirmation_handler_function handler);
255  void asyncAddMediaProfiles(std::string deviceId,std::string json, dpySCM::confirmation_handler_function handler);
256  void asyncAddMediaProfiles(dpySCM::DeviceMediaProfiles deviceMediaProfiles, dpySCM::confirmation_handler_function handler);
257  void asyncGetMediaProfiles(std::string deviceId, dpySCM::device_media_profiles_function handler);
258  void asyncRemoveMediaProfiles(std::string deviceId, dpySCM::confirmation_handler_function handler);
260 
263  void pciRebootEvent_S(dpySCM::reboot_time_handler_function handler);
265  void pciRebootEvent_U();
266  void asyncGetPciRebootTime(std::string deviceId, dpySCM::reboot_time_handler_function handler);
267  void asyncSetPciRebootTime(dpySCM::DevicePciRebootTime deviceRebootTime, dpySCM::confirmation_handler_function handler);
268  boost::system::error_code getPciRebootTime(std::string deviceId, dpySCM::DevicePciRebootTime& rebootTime);
269  boost::system::error_code setPciRebootTime(dpySCM::DevicePciRebootTime deviceRebootTime);
271 
275  void asyncGetNetworkConfiguration(std::string deviceId, dpySCM::device_network_configuration_handler_function handler);
277  void asyncSetNetworkConfiguration(dpySCM::DeviceNetworkConfiguration deviceNetworkConfiguration, dpySCM::confirmation_handler_function handler);
279  void asyncGetDateTime(std::string deviceId, dpySCM::device_date_time_handler_function handler);
280  void asyncRebootDevice(std::string deviceId, dpySCM::RebootType rebootType, dpySCM::confirmation_handler_function handler);
281  void asyncTestNetworkConnectivity(dpySCM::DeviceNetworkConnectivity deviceNetworkConnectivity, dpySCM::network_status_handler_function handler);
282  void asyncSetLoggingConfiguration(std::string deviceId, dpySCM::LoggingConfiguration loggingConfiguration, dpySCM::confirmation_handler_function handler);
283  void asyncGetLoggingConfiguration(std::string deviceId, dpySCM::get_logging_configuration_handler_function handler);
284 
288  boost::system::error_code asyncAddArtifact(std::string deviceId, std::string name, std::string URI, dpySCM::ArtifactType type, dpySCM::confirmation_handler_function handler);
290  boost::system::error_code asyncAddArtifact(std::string deviceId, std::string name, std::string URI, dpySCM::ArtifactType type, std::string version, dpySCM::confirmation_handler_function handler);
291  void asyncGetArtifacts(std::string deviceId, dpySCM::get_artifacts_handler_function handler);
292  void asyncRemoveArtifact(std::string deviceId, std::string name, dpySCM::confirmation_handler_function handler);
293  void asyncExecutePlugin(std::string deviceId, std::string name, std::map<std::string,std::string> inputData, dpySCM::execute_plugin_handler_function handler);
295 };
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, 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:70
boost::function< void(boost::system::error_code &ec, dpySCM::DeviceArtifacts &deviceArtifacts)> get_artifacts_handler_function
Result of getting artifacts informations.
Definition: scmApi.h:60
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:737
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:123
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
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:95
Allows to interact with a platform manager.
Definition: scmApi.h:145
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: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