comparison OrthancServer/ServerContext.cpp @ 996:cf52f3bcb2b3 lua-scripting

clarification of Lua classes wrt multithreading
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 03 Jul 2014 16:27:16 +0200
parents 8c67382f44a7
children 1b1d51e9f1a2
comparison
equal deleted inserted replaced
995:8c67382f44a7 996:cf52f3bcb2b3
44 #include <dcmtk/dcmdata/dcfilefo.h> 44 #include <dcmtk/dcmdata/dcfilefo.h>
45 45
46 #define ENABLE_DICOM_CACHE 1 46 #define ENABLE_DICOM_CACHE 1
47 47
48 static const char* RECEIVED_INSTANCE_FILTER = "ReceivedInstanceFilter"; 48 static const char* RECEIVED_INSTANCE_FILTER = "ReceivedInstanceFilter";
49 static const char* ON_STORED_INSTANCE = "OnStoredInstance";
49 50
50 static const size_t DICOM_CACHE_SIZE = 2; 51 static const size_t DICOM_CACHE_SIZE = 2;
51 52
52 /** 53 /**
53 * IMPORTANT: We make the assumption that the same instance of 54 * IMPORTANT: We make the assumption that the same instance of
89 void ServerContext::RemoveFile(const std::string& fileUuid) 90 void ServerContext::RemoveFile(const std::string& fileUuid)
90 { 91 {
91 storage_.Remove(fileUuid); 92 storage_.Remove(fileUuid);
92 } 93 }
93 94
95
96 bool ServerContext::ApplyReceivedInstanceFilter(const Json::Value& dicomJson,
97 const std::string& remoteAet)
98 {
99 LuaContextLocker locker(*this);
100
101 if (locker.GetLua().IsExistingFunction(RECEIVED_INSTANCE_FILTER))
102 {
103 Json::Value simplified;
104 SimplifyTags(simplified, dicomJson);
105
106 LuaFunctionCall call(locker.GetLua(), RECEIVED_INSTANCE_FILTER);
107 call.PushJSON(simplified);
108 call.PushString(remoteAet);
109
110 if (!call.ExecutePredicate())
111 {
112 return false;
113 }
114 }
115
116 return true;
117 }
118
119
94 StoreStatus ServerContext::Store(const char* dicomInstance, 120 StoreStatus ServerContext::Store(const char* dicomInstance,
95 size_t dicomSize, 121 size_t dicomSize,
96 const DicomMap& dicomSummary, 122 const DicomMap& dicomSummary,
97 const Json::Value& dicomJson, 123 const Json::Value& dicomJson,
98 const std::string& remoteAet) 124 const std::string& remoteAet)
99 { 125 {
100 // Test if the instance must be filtered out 126 // Test if the instance must be filtered out
101 if (lua_.IsExistingFunction(RECEIVED_INSTANCE_FILTER)) 127 if (!ApplyReceivedInstanceFilter(dicomJson, remoteAet))
102 { 128 {
103 Json::Value simplified; 129 LOG(INFO) << "An incoming instance has been discarded by the filter";
104 SimplifyTags(simplified, dicomJson); 130 return StoreStatus_FilteredOut;
105
106 LuaFunctionCall call(lua_, RECEIVED_INSTANCE_FILTER);
107 call.PushJSON(simplified);
108 call.PushString(remoteAet);
109
110 if (!call.ExecutePredicate())
111 {
112 LOG(INFO) << "An incoming instance has been discarded by the filter";
113 return StoreStatus_FilteredOut;
114 }
115 } 131 }
116 132
117 if (compressionEnabled_) 133 if (compressionEnabled_)
118 { 134 {
119 accessor_.SetCompressionForNextOperations(CompressionType_Zlib); 135 accessor_.SetCompressionForNextOperations(CompressionType_Zlib);