Mercurial > hg > orthanc
comparison OrthancServer/Sources/main.cpp @ 4473:68f52897c119
new URIs: /tools/accepted-transfer-syntaxes and /tools/unknown-sop-class-accepted to replace Lua callbacks for transfer syntaxes
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 26 Jan 2021 14:48:10 +0100 |
parents | 28a4baadde17 |
children | 8efeaba1b7f9 |
comparison
equal
deleted
inserted
replaced
4472:28a4baadde17 | 4473:68f52897c119 |
---|---|
280 private: | 280 private: |
281 ServerContext& context_; | 281 ServerContext& context_; |
282 bool alwaysAllowEcho_; | 282 bool alwaysAllowEcho_; |
283 bool alwaysAllowStore_; | 283 bool alwaysAllowStore_; |
284 | 284 |
285 bool IsAllowedTransferSyntax(const std::string& remoteIp, | |
286 const std::string& remoteAet, | |
287 const std::string& calledAet, | |
288 TransferSyntaxGroup syntax) | |
289 { | |
290 std::string configuration; | |
291 | |
292 switch (syntax) | |
293 { | |
294 case TransferSyntaxGroup_Deflated: | |
295 configuration = "DeflatedTransferSyntaxAccepted"; | |
296 break; | |
297 | |
298 case TransferSyntaxGroup_Jpeg: | |
299 configuration = "JpegTransferSyntaxAccepted"; | |
300 break; | |
301 | |
302 case TransferSyntaxGroup_Jpeg2000: | |
303 configuration = "Jpeg2000TransferSyntaxAccepted"; | |
304 break; | |
305 | |
306 case TransferSyntaxGroup_JpegLossless: | |
307 configuration = "JpegLosslessTransferSyntaxAccepted"; | |
308 break; | |
309 | |
310 case TransferSyntaxGroup_Jpip: | |
311 configuration = "JpipTransferSyntaxAccepted"; | |
312 break; | |
313 | |
314 case TransferSyntaxGroup_Mpeg2: | |
315 configuration = "Mpeg2TransferSyntaxAccepted"; | |
316 break; | |
317 | |
318 case TransferSyntaxGroup_Mpeg4: | |
319 configuration = "Mpeg4TransferSyntaxAccepted"; | |
320 break; | |
321 | |
322 case TransferSyntaxGroup_Rle: | |
323 configuration = "RleTransferSyntaxAccepted"; | |
324 break; | |
325 | |
326 default: | |
327 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
328 } | |
329 | |
330 { | |
331 std::string name = "Is" + configuration; | |
332 | |
333 LuaScripting::Lock lock(context_.GetLuaScripting()); | |
334 | |
335 if (lock.GetLua().IsExistingFunction(name.c_str())) | |
336 { | |
337 LuaFunctionCall call(lock.GetLua(), name.c_str()); | |
338 call.PushString(remoteAet); | |
339 call.PushString(remoteIp); | |
340 call.PushString(calledAet); | |
341 return call.ExecutePredicate(); | |
342 } | |
343 } | |
344 | |
345 { | |
346 OrthancConfiguration::ReaderLock lock; | |
347 return lock.GetConfiguration().GetBooleanParameter(configuration, true); | |
348 } | |
349 } | |
350 | |
351 public: | 285 public: |
352 explicit OrthancApplicationEntityFilter(ServerContext& context) : | 286 explicit OrthancApplicationEntityFilter(ServerContext& context) : |
353 context_(context) | 287 context_(context) |
354 { | 288 { |
355 OrthancConfiguration::ReaderLock lock; | 289 OrthancConfiguration::ReaderLock lock; |
434 virtual void GetAcceptedTransferSyntaxes(std::set<DicomTransferSyntax>& target, | 368 virtual void GetAcceptedTransferSyntaxes(std::set<DicomTransferSyntax>& target, |
435 const std::string& remoteIp, | 369 const std::string& remoteIp, |
436 const std::string& remoteAet, | 370 const std::string& remoteAet, |
437 const std::string& calledAet) ORTHANC_OVERRIDE | 371 const std::string& calledAet) ORTHANC_OVERRIDE |
438 { | 372 { |
439 target.clear(); | 373 context_.GetAcceptedTransferSyntaxes(target); |
440 | |
441 // This is the list of the transfer syntaxes that were supported up to Orthanc 0.7.1 | |
442 target.insert(DicomTransferSyntax_LittleEndianExplicit); | |
443 target.insert(DicomTransferSyntax_BigEndianExplicit); | |
444 target.insert(DicomTransferSyntax_LittleEndianImplicit); | |
445 | |
446 // Group of transfer syntaxes, supported since Orthanc 0.7.2 | |
447 std::set<TransferSyntaxGroup> groups; | |
448 groups.insert(TransferSyntaxGroup_Deflated); | |
449 groups.insert(TransferSyntaxGroup_Jpeg); | |
450 groups.insert(TransferSyntaxGroup_Jpeg2000); | |
451 groups.insert(TransferSyntaxGroup_JpegLossless); | |
452 groups.insert(TransferSyntaxGroup_Jpip); | |
453 groups.insert(TransferSyntaxGroup_Mpeg2); | |
454 groups.insert(TransferSyntaxGroup_Mpeg4); // New in Orthanc 1.6.0 | |
455 groups.insert(TransferSyntaxGroup_Rle); | |
456 assert(groups.size() == 8u); // Number of items in enum, cf. "ServerEnumerations.h" | |
457 | |
458 for (std::set<TransferSyntaxGroup>::const_iterator | |
459 group = groups.begin(); group != groups.end(); ++group) | |
460 { | |
461 if (IsAllowedTransferSyntax(remoteIp, remoteAet, calledAet, *group)) | |
462 { | |
463 GetTransferSyntaxGroup(target, *group, false /* don't clear target */); | |
464 } | |
465 } | |
466 } | 374 } |
467 | 375 |
468 | 376 |
469 virtual bool IsUnknownSopClassAccepted(const std::string& remoteIp, | 377 virtual bool IsUnknownSopClassAccepted(const std::string& remoteIp, |
470 const std::string& remoteAet, | 378 const std::string& remoteAet, |
471 const std::string& calledAet) ORTHANC_OVERRIDE | 379 const std::string& calledAet) ORTHANC_OVERRIDE |
472 { | 380 { |
473 static const char* configuration = "UnknownSopClassAccepted"; | 381 return context_.IsUnknownSopClassAccepted(); |
474 | |
475 { | |
476 std::string lua = "Is" + std::string(configuration); | |
477 | |
478 LuaScripting::Lock lock(context_.GetLuaScripting()); | |
479 | |
480 if (lock.GetLua().IsExistingFunction(lua.c_str())) | |
481 { | |
482 LuaFunctionCall call(lock.GetLua(), lua.c_str()); | |
483 call.PushString(remoteAet); | |
484 call.PushString(remoteIp); | |
485 call.PushString(calledAet); | |
486 return call.ExecutePredicate(); | |
487 } | |
488 } | |
489 | |
490 { | |
491 OrthancConfiguration::ReaderLock lock; | |
492 return lock.GetConfiguration().GetBooleanParameter(configuration, false); | |
493 } | |
494 } | 382 } |
495 }; | 383 }; |
496 | 384 |
497 | 385 |
498 class MyIncomingHttpRequestFilter : public IIncomingHttpRequestFilter | 386 class MyIncomingHttpRequestFilter : public IIncomingHttpRequestFilter |
1534 context.GetIndex().SetMaximumStorageSize(0); | 1422 context.GetIndex().SetMaximumStorageSize(0); |
1535 } | 1423 } |
1536 } | 1424 } |
1537 | 1425 |
1538 { | 1426 { |
1539 ServerContextConfigurator configurator(context, plugins); | 1427 ServerContextConfigurator configurator(context, plugins); // This calls "OrthancConfiguration::SetServerIndex()" |
1540 | 1428 |
1541 { | 1429 { |
1542 OrthancConfiguration::WriterLock lock; | 1430 OrthancConfiguration::WriterLock lock; |
1543 lock.GetConfiguration().LoadModalitiesAndPeers(); | 1431 lock.GetConfiguration().LoadModalitiesAndPeers(); |
1544 } | 1432 } |