diff OrthancServer/Internals/StoreScp.cpp @ 1573:3309878b3e16

more information about the origin of requests submitted to the DICOM handlers
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 25 Aug 2015 13:05:22 +0200
parents f967bdf8534e
children de1413733c97 14a32b2fa63e
line wrap: on
line diff
--- a/OrthancServer/Internals/StoreScp.cpp	Tue Aug 25 12:10:12 2015 +0200
+++ b/OrthancServer/Internals/StoreScp.cpp	Tue Aug 25 13:05:22 2015 +0200
@@ -102,6 +102,7 @@
     struct StoreCallbackData
     {
       IStoreRequestHandler* handler;
+      const std::string* remoteIp;
       const char* remoteAET;
       const char* calledAET;
       const char* modality;
@@ -202,7 +203,7 @@
             {
               try
               {
-                cbdata->handler->Handle(buffer, summary, dicomJson, cbdata->remoteAET, cbdata->calledAET);
+                cbdata->handler->Handle(buffer, summary, dicomJson, *cbdata->remoteIp, cbdata->remoteAET, cbdata->calledAET);
               }
               catch (OrthancException& e)
               {
@@ -237,7 +238,8 @@
   OFCondition Internals::storeScp(T_ASC_Association * assoc, 
                                   T_DIMSE_Message * msg, 
                                   T_ASC_PresentationContextID presID,
-                                  IStoreRequestHandler& handler)
+                                  IStoreRequestHandler& handler,
+                                  const std::string& remoteIp)
   {
     OFCondition cond = EC_Normal;
     T_DIMSE_C_StoreRQ *req;
@@ -246,23 +248,24 @@
     req = &msg->msg.CStoreRQ;
 
     // intialize some variables
-    StoreCallbackData callbackData;
-    callbackData.handler = &handler;
-    callbackData.modality = dcmSOPClassUIDToModality(req->AffectedSOPClassUID/*, "UNKNOWN"*/);
-    if (callbackData.modality == NULL)
-      callbackData.modality = "UNKNOWN";
+    StoreCallbackData data;
+    data.handler = &handler;
+    data.remoteIp = &remoteIp;
+    data.modality = dcmSOPClassUIDToModality(req->AffectedSOPClassUID/*, "UNKNOWN"*/);
+    if (data.modality == NULL)
+      data.modality = "UNKNOWN";
 
-    callbackData.affectedSOPInstanceUID = req->AffectedSOPInstanceUID;
-    callbackData.messageID = req->MessageID;
+    data.affectedSOPInstanceUID = req->AffectedSOPInstanceUID;
+    data.messageID = req->MessageID;
     if (assoc && assoc->params)
     {
-      callbackData.remoteAET = assoc->params->DULparams.callingAPTitle;
-      callbackData.calledAET = assoc->params->DULparams.calledAPTitle;
+      data.remoteAET = assoc->params->DULparams.callingAPTitle;
+      data.calledAET = assoc->params->DULparams.calledAPTitle;
     }
     else
     {
-      callbackData.remoteAET = "";
-      callbackData.calledAET = "";
+      data.remoteAET = "";
+      data.calledAET = "";
     }
 
     DcmFileFormat dcmff;
@@ -278,7 +281,7 @@
     DcmDataset *dset = dcmff.getDataset();
 
     cond = DIMSE_storeProvider(assoc, presID, req, NULL, /*opt_useMetaheader*/OFFalse, &dset,
-                               storeScpCallback, &callbackData, 
+                               storeScpCallback, &data, 
                                /*opt_blockMode*/ DIMSE_BLOCKING, 
                                /*opt_dimse_timeout*/ 0);