Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow changing ImplementationClassUID and ImplementationVersionName by providing the appropriate global variables. #68

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions dcmdata/include/dcmtk/dcmdata/dcuid.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */

#include "dcmtk/ofstd/ofglobal.h"
#include "dcmtk/ofstd/oftypes.h"
#include "dcmtk/dcmdata/dcdefine.h"

Expand Down Expand Up @@ -198,7 +199,7 @@ DCMTK_DCMDATA_EXPORT unsigned long dcmGuessModalityBytes(const char *sopClassUID
* (i.e. using the --bit-preserving switch in various tools)
*/

/// implementation version name for this version of the toolkit
/// Default implementation version name for this version of the toolkit
#define OFFIS_DTK_IMPLEMENTATION_VERSION_NAME "OFFIS_DCMTK_" PACKAGE_VERSION_NUMBER_TO_STRING(PACKAGE_VERSION_NUMBER)

/// implementation version name for this version of the toolkit, used for files received in "bit preserving" mode
Expand Down Expand Up @@ -226,7 +227,7 @@ DCMTK_DCMDATA_EXPORT unsigned long dcmGuessModalityBytes(const char *sopClassUID
/// DCMTK version number string including suffix
#define OFFIS_DCMTK_VERSION OFFIS_DCMTK_VERSION_STRING OFFIS_DCMTK_VERSION_SUFFIX

/// Implementation class UID for this release of the toolkit
/// Default implementation class UID for this release of the toolkit
#define OFFIS_IMPLEMENTATION_CLASS_UID OFFIS_UID_ROOT ".0." OFFIS_DCMTK_VERSION_STRING

/// Instance creator UID for this release of the toolkit
Expand All @@ -241,6 +242,18 @@ DCMTK_DCMDATA_EXPORT unsigned long dcmGuessModalityBytes(const char *sopClassUID
/// private coding scheme UID for coding schemes generated by OFFIS
#define OFFIS_CODING_SCHEME_UID OFFIS_CODING_SCHEME_UID_ROOT "." OFFIS_CODING_SCHEME_VERSION


/** Implementation class UID for this release of the toolkit.
** By default uses the OFFIS_IMPLEMENTATION_CLASS_UID, but can be replaced at run time.
*/
extern DCMTK_DCMDATA_EXPORT OFGlobal<const char*> dcmImplementationClassUID;

/** Implementation version name for this version of the toolkit
** By default uses the OFFIS_DTK_IMPLEMENTATION_VERSION_NAME, but can be replaced at run time.
** Note: should not exceed the 16 character limit
*/
extern DCMTK_DCMDATA_EXPORT OFGlobal<const char*> dcmImplementationVersionName;

/*
** Each site should define its own SITE_UID_ROOT
*/
Expand Down
4 changes: 2 additions & 2 deletions dcmdata/libsrc/dcfilefo.cc
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ OFCondition DcmFileFormat::checkMetaHeaderValue(DcmMetaInfo *metainfo,
}
if (elem->ident() == EVR_UI)
{
const char *uid = OFFIS_IMPLEMENTATION_CLASS_UID;
const char *uid = dcmImplementationClassUID.get();
OFstatic_cast(DcmUniqueIdentifier *, elem)->putString(uid);
}
}
Expand All @@ -482,7 +482,7 @@ OFCondition DcmFileFormat::checkMetaHeaderValue(DcmMetaInfo *metainfo,
}
if (elem->ident() == EVR_SH)
{
const char *uid = OFFIS_DTK_IMPLEMENTATION_VERSION_NAME;
const char *uid = dcmImplementationVersionName.get();
OFstatic_cast(DcmShortString *, elem)->putString(uid);
}
}
Expand Down
3 changes: 3 additions & 0 deletions dcmdata/libsrc/dcuid.cc
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ END_EXTERN_C
#include "dcmtk/ofstd/ofvector.h"
#include "dcmtk/ofstd/ofsockad.h"

OFGlobal<const char*> dcmImplementationClassUID(OFFIS_IMPLEMENTATION_CLASS_UID);
OFGlobal<const char*> dcmImplementationVersionName(OFFIS_DTK_IMPLEMENTATION_VERSION_NAME);

struct UIDNameMap {
const char* uid;
const char* name;
Expand Down
8 changes: 4 additions & 4 deletions dcmnet/libsrc/assoc.cc
Original file line number Diff line number Diff line change
Expand Up @@ -282,15 +282,15 @@ ASC_createAssociationParameters(T_ASC_Parameters ** params,
memset((char*)*params, 0, sizeof(**params));

OFStandard::strlcpy((*params)->ourImplementationClassUID,
OFFIS_IMPLEMENTATION_CLASS_UID,
dcmImplementationClassUID.get(),
sizeof((*params)->ourImplementationClassUID));
OFStandard::strlcpy((*params)->ourImplementationVersionName,
OFFIS_DTK_IMPLEMENTATION_VERSION_NAME,
dcmImplementationVersionName.get(),
sizeof((*params)->ourImplementationVersionName));

if (strlen(OFFIS_DTK_IMPLEMENTATION_VERSION_NAME) > 16)
if (strlen(dcmImplementationVersionName.get()) > 16)
{
DCMNET_WARN("DICOM implementation version name too long: " << OFFIS_DTK_IMPLEMENTATION_VERSION_NAME);
DCMNET_WARN("DICOM implementation version name too long: " << dcmImplementationVersionName.get());
}

OFStandard::strlcpy((*params)->DULparams.callingImplementationClassUID,
Expand Down
2 changes: 1 addition & 1 deletion dcmnet/libsrc/dimse.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1326,7 +1326,7 @@ OFCondition DIMSE_createFilestream(
if (NULL != (elem = new DcmUniqueIdentifier(implementationClassUID)))
{
metainfo->insert(elem, OFTrue);
const char *uid = OFFIS_IMPLEMENTATION_CLASS_UID;
const char *uid = dcmImplementationClassUID.get();
((DcmUniqueIdentifier*)elem)->putString(uid);
} else cond = EC_MemoryExhausted;
if (NULL != (elem = new DcmShortString(implementationVersionName)))
Expand Down
3 changes: 3 additions & 0 deletions dcmnet/tests/tests.cc
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ OFTEST_REGISTER(dcmnet_scu_sendNSETRequest_fails_when_requestedsopinstance_is_em
OFTEST_REGISTER(dcmnet_scu_sendNSETRequest_succeeds_and_modifies_instance_when_scp_has_instance);
OFTEST_REGISTER(dcmnet_scu_sendNSETRequest_succeeds_and_sets_responsestatuscode_from_scp_when_scp_sets_error_status);

OFTEST_REGISTER(dcmnet_ASC_createAssociationParameters_succeeds_and_sets_OFFIS_implementation_identification_by_default);
OFTEST_REGISTER(dcmnet_ASC_createAssociationParameters_succeeds_and_sets_defined_implementation_identification_when_appropriate_globals_are_set);

#endif // WITH_THREADS

OFTEST_MAIN("dcmnet")
28 changes: 28 additions & 0 deletions dcmnet/tests/tscuscp.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1114,5 +1114,33 @@ OFTEST(dcmnet_scu_sendNSETRequest_succeeds_and_sets_responsestatuscode_from_scp_
OFCHECK_MSG((result = fixture.mppsSCU.releaseAssociation()).good(), result.text());
}

OFTEST(dcmnet_ASC_createAssociationParameters_succeeds_and_sets_OFFIS_implementation_identification_by_default)
{
T_ASC_Parameters* params;
const OFCondition result = ASC_createAssociationParameters(&params, ASC_DEFAULTMAXPDU);
OFCHECK(result.good());

OFCHECK_EQUAL(OFString(params->ourImplementationClassUID), OFFIS_IMPLEMENTATION_CLASS_UID);
OFCHECK_EQUAL(OFString(params->ourImplementationVersionName), OFFIS_DTK_IMPLEMENTATION_VERSION_NAME);
}

OFTEST(dcmnet_ASC_createAssociationParameters_succeeds_and_sets_defined_implementation_identification_when_appropriate_globals_are_set)
{
const OFString implClassUId = "1.1.111.1.1111111.1.1.1.1.1";
const OFString implVerName = "version_name";

dcmImplementationClassUID.set(implClassUId.c_str());
dcmImplementationVersionName.set(implVerName.c_str());

T_ASC_Parameters* params;
const OFCondition result = ASC_createAssociationParameters(&params, ASC_DEFAULTMAXPDU);
OFCHECK(result.good());

OFCHECK_EQUAL(params->ourImplementationClassUID, implClassUId);
OFCHECK_EQUAL(params->ourImplementationVersionName, implVerName);

dcmImplementationClassUID.set(OFFIS_IMPLEMENTATION_CLASS_UID);
dcmImplementationVersionName.set(OFFIS_DTK_IMPLEMENTATION_VERSION_NAME);
}

#endif // WITH_THREADS