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 }