comparison Resources/Orthanc/Sdk-1.4.0/orthanc/OrthancCDatabasePlugin.h @ 28:c0cb5d2cd696

checks depending on Orthanc version
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 16 Jul 2018 14:48:43 +0200
parents
children
comparison
equal deleted inserted replaced
27:173176f8cef2 28:c0cb5d2cd696
1 /**
2 * @ingroup CInterface
3 **/
4
5 /**
6 * Orthanc - A Lightweight, RESTful DICOM Store
7 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
8 * Department, University Hospital of Liege, Belgium
9 * Copyright (C) 2017-2018 Osimis S.A., Belgium
10 *
11 * This program is free software: you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License as
13 * published by the Free Software Foundation, either version 3 of the
14 * License, or (at your option) any later version.
15 *
16 * In addition, as a special exception, the copyright holders of this
17 * program give permission to link the code of its release with the
18 * OpenSSL project's "OpenSSL" library (or with modified versions of it
19 * that use the same license as the "OpenSSL" library), and distribute
20 * the linked executables. You must obey the GNU General Public License
21 * in all respects for all of the code used other than "OpenSSL". If you
22 * modify file(s) with this exception, you may extend this exception to
23 * your version of the file(s), but you are not obligated to do so. If
24 * you do not wish to do so, delete this exception statement from your
25 * version. If you delete this exception statement from all source files
26 * in the program, then also delete it here.
27 *
28 * This program is distributed in the hope that it will be useful, but
29 * WITHOUT ANY WARRANTY; without even the implied warranty of
30 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
31 * General Public License for more details.
32 *
33 * You should have received a copy of the GNU General Public License
34 * along with this program. If not, see <http://www.gnu.org/licenses/>.
35 **/
36
37
38
39 #pragma once
40
41 #include "OrthancCPlugin.h"
42
43
44 /** @{ */
45
46 #ifdef __cplusplus
47 extern "C"
48 {
49 #endif
50
51
52 /**
53 * Opaque structure that represents the context of a custom database engine.
54 * @ingroup Callbacks
55 **/
56 typedef struct _OrthancPluginDatabaseContext_t OrthancPluginDatabaseContext;
57
58
59 /*<! @cond Doxygen_Suppress */
60 typedef enum
61 {
62 _OrthancPluginDatabaseAnswerType_None = 0,
63
64 /* Events */
65 _OrthancPluginDatabaseAnswerType_DeletedAttachment = 1,
66 _OrthancPluginDatabaseAnswerType_DeletedResource = 2,
67 _OrthancPluginDatabaseAnswerType_RemainingAncestor = 3,
68
69 /* Return value */
70 _OrthancPluginDatabaseAnswerType_Attachment = 10,
71 _OrthancPluginDatabaseAnswerType_Change = 11,
72 _OrthancPluginDatabaseAnswerType_DicomTag = 12,
73 _OrthancPluginDatabaseAnswerType_ExportedResource = 13,
74 _OrthancPluginDatabaseAnswerType_Int32 = 14,
75 _OrthancPluginDatabaseAnswerType_Int64 = 15,
76 _OrthancPluginDatabaseAnswerType_Resource = 16,
77 _OrthancPluginDatabaseAnswerType_String = 17,
78
79 _OrthancPluginDatabaseAnswerType_INTERNAL = 0x7fffffff
80 } _OrthancPluginDatabaseAnswerType;
81
82
83 typedef struct
84 {
85 const char* uuid;
86 int32_t contentType;
87 uint64_t uncompressedSize;
88 const char* uncompressedHash;
89 int32_t compressionType;
90 uint64_t compressedSize;
91 const char* compressedHash;
92 } OrthancPluginAttachment;
93
94 typedef struct
95 {
96 uint16_t group;
97 uint16_t element;
98 const char* value;
99 } OrthancPluginDicomTag;
100
101 typedef struct
102 {
103 int64_t seq;
104 int32_t changeType;
105 OrthancPluginResourceType resourceType;
106 const char* publicId;
107 const char* date;
108 } OrthancPluginChange;
109
110 typedef struct
111 {
112 int64_t seq;
113 OrthancPluginResourceType resourceType;
114 const char* publicId;
115 const char* modality;
116 const char* date;
117 const char* patientId;
118 const char* studyInstanceUid;
119 const char* seriesInstanceUid;
120 const char* sopInstanceUid;
121 } OrthancPluginExportedResource;
122
123
124 typedef struct
125 {
126 OrthancPluginDatabaseContext* database;
127 _OrthancPluginDatabaseAnswerType type;
128 int32_t valueInt32;
129 uint32_t valueUint32;
130 int64_t valueInt64;
131 const char *valueString;
132 const void *valueGeneric;
133 } _OrthancPluginDatabaseAnswer;
134
135 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerString(
136 OrthancPluginContext* context,
137 OrthancPluginDatabaseContext* database,
138 const char* value)
139 {
140 _OrthancPluginDatabaseAnswer params;
141 memset(&params, 0, sizeof(params));
142 params.database = database;
143 params.type = _OrthancPluginDatabaseAnswerType_String;
144 params.valueString = value;
145 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
146 }
147
148 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerChange(
149 OrthancPluginContext* context,
150 OrthancPluginDatabaseContext* database,
151 const OrthancPluginChange* change)
152 {
153 _OrthancPluginDatabaseAnswer params;
154 memset(&params, 0, sizeof(params));
155
156 params.database = database;
157 params.type = _OrthancPluginDatabaseAnswerType_Change;
158 params.valueUint32 = 0;
159 params.valueGeneric = change;
160
161 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
162 }
163
164 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerChangesDone(
165 OrthancPluginContext* context,
166 OrthancPluginDatabaseContext* database)
167 {
168 _OrthancPluginDatabaseAnswer params;
169 memset(&params, 0, sizeof(params));
170
171 params.database = database;
172 params.type = _OrthancPluginDatabaseAnswerType_Change;
173 params.valueUint32 = 1;
174 params.valueGeneric = NULL;
175
176 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
177 }
178
179 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerInt32(
180 OrthancPluginContext* context,
181 OrthancPluginDatabaseContext* database,
182 int32_t value)
183 {
184 _OrthancPluginDatabaseAnswer params;
185 memset(&params, 0, sizeof(params));
186 params.database = database;
187 params.type = _OrthancPluginDatabaseAnswerType_Int32;
188 params.valueInt32 = value;
189 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
190 }
191
192 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerInt64(
193 OrthancPluginContext* context,
194 OrthancPluginDatabaseContext* database,
195 int64_t value)
196 {
197 _OrthancPluginDatabaseAnswer params;
198 memset(&params, 0, sizeof(params));
199 params.database = database;
200 params.type = _OrthancPluginDatabaseAnswerType_Int64;
201 params.valueInt64 = value;
202 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
203 }
204
205 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerExportedResource(
206 OrthancPluginContext* context,
207 OrthancPluginDatabaseContext* database,
208 const OrthancPluginExportedResource* exported)
209 {
210 _OrthancPluginDatabaseAnswer params;
211 memset(&params, 0, sizeof(params));
212
213 params.database = database;
214 params.type = _OrthancPluginDatabaseAnswerType_ExportedResource;
215 params.valueUint32 = 0;
216 params.valueGeneric = exported;
217 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
218 }
219
220 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerExportedResourcesDone(
221 OrthancPluginContext* context,
222 OrthancPluginDatabaseContext* database)
223 {
224 _OrthancPluginDatabaseAnswer params;
225 memset(&params, 0, sizeof(params));
226
227 params.database = database;
228 params.type = _OrthancPluginDatabaseAnswerType_ExportedResource;
229 params.valueUint32 = 1;
230 params.valueGeneric = NULL;
231 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
232 }
233
234 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerDicomTag(
235 OrthancPluginContext* context,
236 OrthancPluginDatabaseContext* database,
237 const OrthancPluginDicomTag* tag)
238 {
239 _OrthancPluginDatabaseAnswer params;
240 memset(&params, 0, sizeof(params));
241 params.database = database;
242 params.type = _OrthancPluginDatabaseAnswerType_DicomTag;
243 params.valueGeneric = tag;
244 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
245 }
246
247 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerAttachment(
248 OrthancPluginContext* context,
249 OrthancPluginDatabaseContext* database,
250 const OrthancPluginAttachment* attachment)
251 {
252 _OrthancPluginDatabaseAnswer params;
253 memset(&params, 0, sizeof(params));
254 params.database = database;
255 params.type = _OrthancPluginDatabaseAnswerType_Attachment;
256 params.valueGeneric = attachment;
257 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
258 }
259
260 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseAnswerResource(
261 OrthancPluginContext* context,
262 OrthancPluginDatabaseContext* database,
263 int64_t id,
264 OrthancPluginResourceType resourceType)
265 {
266 _OrthancPluginDatabaseAnswer params;
267 memset(&params, 0, sizeof(params));
268 params.database = database;
269 params.type = _OrthancPluginDatabaseAnswerType_Resource;
270 params.valueInt64 = id;
271 params.valueInt32 = (int32_t) resourceType;
272 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
273 }
274
275 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalDeletedAttachment(
276 OrthancPluginContext* context,
277 OrthancPluginDatabaseContext* database,
278 const OrthancPluginAttachment* attachment)
279 {
280 _OrthancPluginDatabaseAnswer params;
281 memset(&params, 0, sizeof(params));
282 params.database = database;
283 params.type = _OrthancPluginDatabaseAnswerType_DeletedAttachment;
284 params.valueGeneric = attachment;
285 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
286 }
287
288 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalDeletedResource(
289 OrthancPluginContext* context,
290 OrthancPluginDatabaseContext* database,
291 const char* publicId,
292 OrthancPluginResourceType resourceType)
293 {
294 _OrthancPluginDatabaseAnswer params;
295 memset(&params, 0, sizeof(params));
296 params.database = database;
297 params.type = _OrthancPluginDatabaseAnswerType_DeletedResource;
298 params.valueString = publicId;
299 params.valueInt32 = (int32_t) resourceType;
300 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
301 }
302
303 ORTHANC_PLUGIN_INLINE void OrthancPluginDatabaseSignalRemainingAncestor(
304 OrthancPluginContext* context,
305 OrthancPluginDatabaseContext* database,
306 const char* ancestorId,
307 OrthancPluginResourceType ancestorType)
308 {
309 _OrthancPluginDatabaseAnswer params;
310 memset(&params, 0, sizeof(params));
311 params.database = database;
312 params.type = _OrthancPluginDatabaseAnswerType_RemainingAncestor;
313 params.valueString = ancestorId;
314 params.valueInt32 = (int32_t) ancestorType;
315 context->InvokeService(context, _OrthancPluginService_DatabaseAnswer, &params);
316 }
317
318
319
320
321
322 typedef struct
323 {
324 OrthancPluginErrorCode (*addAttachment) (
325 /* inputs */
326 void* payload,
327 int64_t id,
328 const OrthancPluginAttachment* attachment);
329
330 OrthancPluginErrorCode (*attachChild) (
331 /* inputs */
332 void* payload,
333 int64_t parent,
334 int64_t child);
335
336 OrthancPluginErrorCode (*clearChanges) (
337 /* inputs */
338 void* payload);
339
340 OrthancPluginErrorCode (*clearExportedResources) (
341 /* inputs */
342 void* payload);
343
344 OrthancPluginErrorCode (*createResource) (
345 /* outputs */
346 int64_t* id,
347 /* inputs */
348 void* payload,
349 const char* publicId,
350 OrthancPluginResourceType resourceType);
351
352 OrthancPluginErrorCode (*deleteAttachment) (
353 /* inputs */
354 void* payload,
355 int64_t id,
356 int32_t contentType);
357
358 OrthancPluginErrorCode (*deleteMetadata) (
359 /* inputs */
360 void* payload,
361 int64_t id,
362 int32_t metadataType);
363
364 OrthancPluginErrorCode (*deleteResource) (
365 /* inputs */
366 void* payload,
367 int64_t id);
368
369 /* Output: Use OrthancPluginDatabaseAnswerString() */
370 OrthancPluginErrorCode (*getAllPublicIds) (
371 /* outputs */
372 OrthancPluginDatabaseContext* context,
373 /* inputs */
374 void* payload,
375 OrthancPluginResourceType resourceType);
376
377 /* Output: Use OrthancPluginDatabaseAnswerChange() and
378 * OrthancPluginDatabaseAnswerChangesDone() */
379 OrthancPluginErrorCode (*getChanges) (
380 /* outputs */
381 OrthancPluginDatabaseContext* context,
382 /* inputs */
383 void* payload,
384 int64_t since,
385 uint32_t maxResult);
386
387 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
388 OrthancPluginErrorCode (*getChildrenInternalId) (
389 /* outputs */
390 OrthancPluginDatabaseContext* context,
391 /* inputs */
392 void* payload,
393 int64_t id);
394
395 /* Output: Use OrthancPluginDatabaseAnswerString() */
396 OrthancPluginErrorCode (*getChildrenPublicId) (
397 /* outputs */
398 OrthancPluginDatabaseContext* context,
399 /* inputs */
400 void* payload,
401 int64_t id);
402
403 /* Output: Use OrthancPluginDatabaseAnswerExportedResource() and
404 * OrthancPluginDatabaseAnswerExportedResourcesDone() */
405 OrthancPluginErrorCode (*getExportedResources) (
406 /* outputs */
407 OrthancPluginDatabaseContext* context,
408 /* inputs */
409 void* payload,
410 int64_t since,
411 uint32_t maxResult);
412
413 /* Output: Use OrthancPluginDatabaseAnswerChange() */
414 OrthancPluginErrorCode (*getLastChange) (
415 /* outputs */
416 OrthancPluginDatabaseContext* context,
417 /* inputs */
418 void* payload);
419
420 /* Output: Use OrthancPluginDatabaseAnswerExportedResource() */
421 OrthancPluginErrorCode (*getLastExportedResource) (
422 /* outputs */
423 OrthancPluginDatabaseContext* context,
424 /* inputs */
425 void* payload);
426
427 /* Output: Use OrthancPluginDatabaseAnswerDicomTag() */
428 OrthancPluginErrorCode (*getMainDicomTags) (
429 /* outputs */
430 OrthancPluginDatabaseContext* context,
431 /* inputs */
432 void* payload,
433 int64_t id);
434
435 /* Output: Use OrthancPluginDatabaseAnswerString() */
436 OrthancPluginErrorCode (*getPublicId) (
437 /* outputs */
438 OrthancPluginDatabaseContext* context,
439 /* inputs */
440 void* payload,
441 int64_t id);
442
443 OrthancPluginErrorCode (*getResourceCount) (
444 /* outputs */
445 uint64_t* target,
446 /* inputs */
447 void* payload,
448 OrthancPluginResourceType resourceType);
449
450 OrthancPluginErrorCode (*getResourceType) (
451 /* outputs */
452 OrthancPluginResourceType* resourceType,
453 /* inputs */
454 void* payload,
455 int64_t id);
456
457 OrthancPluginErrorCode (*getTotalCompressedSize) (
458 /* outputs */
459 uint64_t* target,
460 /* inputs */
461 void* payload);
462
463 OrthancPluginErrorCode (*getTotalUncompressedSize) (
464 /* outputs */
465 uint64_t* target,
466 /* inputs */
467 void* payload);
468
469 OrthancPluginErrorCode (*isExistingResource) (
470 /* outputs */
471 int32_t* existing,
472 /* inputs */
473 void* payload,
474 int64_t id);
475
476 OrthancPluginErrorCode (*isProtectedPatient) (
477 /* outputs */
478 int32_t* isProtected,
479 /* inputs */
480 void* payload,
481 int64_t id);
482
483 /* Output: Use OrthancPluginDatabaseAnswerInt32() */
484 OrthancPluginErrorCode (*listAvailableMetadata) (
485 /* outputs */
486 OrthancPluginDatabaseContext* context,
487 /* inputs */
488 void* payload,
489 int64_t id);
490
491 /* Output: Use OrthancPluginDatabaseAnswerInt32() */
492 OrthancPluginErrorCode (*listAvailableAttachments) (
493 /* outputs */
494 OrthancPluginDatabaseContext* context,
495 /* inputs */
496 void* payload,
497 int64_t id);
498
499 OrthancPluginErrorCode (*logChange) (
500 /* inputs */
501 void* payload,
502 const OrthancPluginChange* change);
503
504 OrthancPluginErrorCode (*logExportedResource) (
505 /* inputs */
506 void* payload,
507 const OrthancPluginExportedResource* exported);
508
509 /* Output: Use OrthancPluginDatabaseAnswerAttachment() */
510 OrthancPluginErrorCode (*lookupAttachment) (
511 /* outputs */
512 OrthancPluginDatabaseContext* context,
513 /* inputs */
514 void* payload,
515 int64_t id,
516 int32_t contentType);
517
518 /* Output: Use OrthancPluginDatabaseAnswerString() */
519 OrthancPluginErrorCode (*lookupGlobalProperty) (
520 /* outputs */
521 OrthancPluginDatabaseContext* context,
522 /* inputs */
523 void* payload,
524 int32_t property);
525
526 /* Use "OrthancPluginDatabaseExtensions::lookupIdentifier3"
527 instead of this function as of Orthanc 0.9.5 (db v6), can be set to NULL.
528 Output: Use OrthancPluginDatabaseAnswerInt64() */
529 OrthancPluginErrorCode (*lookupIdentifier) (
530 /* outputs */
531 OrthancPluginDatabaseContext* context,
532 /* inputs */
533 void* payload,
534 const OrthancPluginDicomTag* tag);
535
536 /* Unused starting with Orthanc 0.9.5 (db v6), can be set to NULL.
537 Output: Use OrthancPluginDatabaseAnswerInt64() */
538 OrthancPluginErrorCode (*lookupIdentifier2) (
539 /* outputs */
540 OrthancPluginDatabaseContext* context,
541 /* inputs */
542 void* payload,
543 const char* value);
544
545 /* Output: Use OrthancPluginDatabaseAnswerString() */
546 OrthancPluginErrorCode (*lookupMetadata) (
547 /* outputs */
548 OrthancPluginDatabaseContext* context,
549 /* inputs */
550 void* payload,
551 int64_t id,
552 int32_t metadata);
553
554 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
555 OrthancPluginErrorCode (*lookupParent) (
556 /* outputs */
557 OrthancPluginDatabaseContext* context,
558 /* inputs */
559 void* payload,
560 int64_t id);
561
562 /* Output: Use OrthancPluginDatabaseAnswerResource() */
563 OrthancPluginErrorCode (*lookupResource) (
564 /* outputs */
565 OrthancPluginDatabaseContext* context,
566 /* inputs */
567 void* payload,
568 const char* publicId);
569
570 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
571 OrthancPluginErrorCode (*selectPatientToRecycle) (
572 /* outputs */
573 OrthancPluginDatabaseContext* context,
574 /* inputs */
575 void* payload);
576
577 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
578 OrthancPluginErrorCode (*selectPatientToRecycle2) (
579 /* outputs */
580 OrthancPluginDatabaseContext* context,
581 /* inputs */
582 void* payload,
583 int64_t patientIdToAvoid);
584
585 OrthancPluginErrorCode (*setGlobalProperty) (
586 /* inputs */
587 void* payload,
588 int32_t property,
589 const char* value);
590
591 OrthancPluginErrorCode (*setMainDicomTag) (
592 /* inputs */
593 void* payload,
594 int64_t id,
595 const OrthancPluginDicomTag* tag);
596
597 OrthancPluginErrorCode (*setIdentifierTag) (
598 /* inputs */
599 void* payload,
600 int64_t id,
601 const OrthancPluginDicomTag* tag);
602
603 OrthancPluginErrorCode (*setMetadata) (
604 /* inputs */
605 void* payload,
606 int64_t id,
607 int32_t metadata,
608 const char* value);
609
610 OrthancPluginErrorCode (*setProtectedPatient) (
611 /* inputs */
612 void* payload,
613 int64_t id,
614 int32_t isProtected);
615
616 OrthancPluginErrorCode (*startTransaction) (
617 /* inputs */
618 void* payload);
619
620 OrthancPluginErrorCode (*rollbackTransaction) (
621 /* inputs */
622 void* payload);
623
624 OrthancPluginErrorCode (*commitTransaction) (
625 /* inputs */
626 void* payload);
627
628 OrthancPluginErrorCode (*open) (
629 /* inputs */
630 void* payload);
631
632 OrthancPluginErrorCode (*close) (
633 /* inputs */
634 void* payload);
635
636 } OrthancPluginDatabaseBackend;
637
638
639 typedef struct
640 {
641 /* Output: Use OrthancPluginDatabaseAnswerString() */
642 OrthancPluginErrorCode (*getAllPublicIdsWithLimit) (
643 /* outputs */
644 OrthancPluginDatabaseContext* context,
645 /* inputs */
646 void* payload,
647 OrthancPluginResourceType resourceType,
648 uint64_t since,
649 uint64_t limit);
650
651 OrthancPluginErrorCode (*getDatabaseVersion) (
652 /* outputs */
653 uint32_t* version,
654 /* inputs */
655 void* payload);
656
657 OrthancPluginErrorCode (*upgradeDatabase) (
658 /* inputs */
659 void* payload,
660 uint32_t targetVersion,
661 OrthancPluginStorageArea* storageArea);
662
663 OrthancPluginErrorCode (*clearMainDicomTags) (
664 /* inputs */
665 void* payload,
666 int64_t id);
667
668 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
669 OrthancPluginErrorCode (*getAllInternalIds) (
670 /* outputs */
671 OrthancPluginDatabaseContext* context,
672 /* inputs */
673 void* payload,
674 OrthancPluginResourceType resourceType);
675
676 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
677 OrthancPluginErrorCode (*lookupIdentifier3) (
678 /* outputs */
679 OrthancPluginDatabaseContext* context,
680 /* inputs */
681 void* payload,
682 OrthancPluginResourceType resourceType,
683 const OrthancPluginDicomTag* tag,
684 OrthancPluginIdentifierConstraint constraint);
685
686 /* Output: Use OrthancPluginDatabaseAnswerInt64() */
687 OrthancPluginErrorCode (*lookupIdentifierRange) (
688 /* outputs */
689 OrthancPluginDatabaseContext* context,
690 /* inputs */
691 void* payload,
692 OrthancPluginResourceType resourceType,
693 uint16_t group,
694 uint16_t element,
695 const char* start,
696 const char* end);
697 } OrthancPluginDatabaseExtensions;
698
699 /*<! @endcond */
700
701
702 typedef struct
703 {
704 OrthancPluginDatabaseContext** result;
705 const OrthancPluginDatabaseBackend* backend;
706 void* payload;
707 } _OrthancPluginRegisterDatabaseBackend;
708
709 /**
710 * Register a custom database back-end (for legacy plugins).
711 *
712 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize().
713 * @param backend The callbacks of the custom database engine.
714 * @param payload Pointer containing private information for the database engine.
715 * @return The context of the database engine (it must not be manually freed).
716 * @ingroup Callbacks
717 * @deprecated
718 * @see OrthancPluginRegisterDatabaseBackendV2
719 **/
720 ORTHANC_PLUGIN_INLINE OrthancPluginDatabaseContext* OrthancPluginRegisterDatabaseBackend(
721 OrthancPluginContext* context,
722 const OrthancPluginDatabaseBackend* backend,
723 void* payload)
724 {
725 OrthancPluginDatabaseContext* result = NULL;
726 _OrthancPluginRegisterDatabaseBackend params;
727
728 if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
729 {
730 return NULL;
731 }
732
733 memset(&params, 0, sizeof(params));
734 params.backend = backend;
735 params.result = &result;
736 params.payload = payload;
737
738 if (context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackend, &params) ||
739 result == NULL)
740 {
741 /* Error */
742 return NULL;
743 }
744 else
745 {
746 return result;
747 }
748 }
749
750
751 typedef struct
752 {
753 OrthancPluginDatabaseContext** result;
754 const OrthancPluginDatabaseBackend* backend;
755 void* payload;
756 const OrthancPluginDatabaseExtensions* extensions;
757 uint32_t extensionsSize;
758 } _OrthancPluginRegisterDatabaseBackendV2;
759
760
761 /**
762 * Register a custom database back-end.
763 *
764 * @param context The Orthanc plugin context, as received by OrthancPluginInitialize().
765 * @param backend The callbacks of the custom database engine.
766 * @param payload Pointer containing private information for the database engine.
767 * @param extensions Extensions to the base database SDK that was shipped until Orthanc 0.9.3.
768 * @return The context of the database engine (it must not be manually freed).
769 * @ingroup Callbacks
770 **/
771 ORTHANC_PLUGIN_INLINE OrthancPluginDatabaseContext* OrthancPluginRegisterDatabaseBackendV2(
772 OrthancPluginContext* context,
773 const OrthancPluginDatabaseBackend* backend,
774 const OrthancPluginDatabaseExtensions* extensions,
775 void* payload)
776 {
777 OrthancPluginDatabaseContext* result = NULL;
778 _OrthancPluginRegisterDatabaseBackendV2 params;
779
780 if (sizeof(int32_t) != sizeof(_OrthancPluginDatabaseAnswerType))
781 {
782 return NULL;
783 }
784
785 memset(&params, 0, sizeof(params));
786 params.backend = backend;
787 params.result = &result;
788 params.payload = payload;
789 params.extensions = extensions;
790 params.extensionsSize = sizeof(OrthancPluginDatabaseExtensions);
791
792 if (context->InvokeService(context, _OrthancPluginService_RegisterDatabaseBackendV2, &params) ||
793 result == NULL)
794 {
795 /* Error */
796 return NULL;
797 }
798 else
799 {
800 return result;
801 }
802 }
803
804
805 #ifdef __cplusplus
806 }
807 #endif
808
809
810 /** @} */
811