Mercurial > hg > orthanc
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); |