INTERNALAUTHENTICATECALLBACK

#include "ltdic.h"

L_UINT32 pEXT_CALLBACK Your_Function(hNet, nChallenge, nResponse, nParameter, pUserData)

HDICOMNET hNet;

/* handle to an existing DICOM Network */

L_UINT64 nChallenge;

/* challenge code */

L_UINT64 *nResponse;

/* pointer to a variable to be updated */

L_UINT64 nParameter;

/* key */

L_VOID * pUserData;

/* optional pointer to more parameters for the callback */

Generates a response code, based on the specified challenge code. This function is available in Medical Suite toolkits.

Parameter

Description

hNet

Handle to an existing DICOM Network. This is the handle returned from the L_DicomCreateNet function.

nChallenge

Challenge code received by the callback function. This challenge code will be used in the generation of the response code. This value is similar to a time stamp.

nResponse

Pointer to a variable to be updated with the response code generated by the callback function.

nParameter

Value that indicates the current mutual authentication key.

pUserData

Void pointer that you can use to pass one or more additional parameters that the callback function needs. To use this feature, assign a value to a variable or create a structure that contains as many fields as you need. Then, in this parameter, pass the address of the variable or structure, casting it to L_VOID *. The callback function, which receives the address in its own pUserData parameter, can cast it to a pointer of the appropriate data type to access your variable or structure. If the additional parameters are not needed, you can pass NULL in this parameter.

Returns

DICOM_SUCCESS

The generation of the response code was successful.

<> DICOM_SUCCESS

The generation of the response code was not successful.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions:

L_DicomSetCallback, GETCHALLENGECALLBACK

Topics:

DICOM Net: Callback Function

 

Sending and Receiving Messages

 

General Integrated Secure Communication Layer (ISCL) Information

Example

L_UINT64 * nResponse;

L_UINT64 GetRandom()
{
   L_UINT64 nRet;
   nRet = ((L_UINT64)(rand())<<48) + ((L_UINT64)(rand())<<32) + (rand()<<16) + (rand()<<8) + rand();
   return nRet;
}

// Definitions of the ISCL callbacks.
L_UINT32 EXT_CALLBACK exGetChallengeISCL(HDICOMNET hNet, L_UINT64 *nChallenge, L_UINT64 nParameter, L_VOID * pUserData)
{
   UNREFERENCED_PARAMETER(pUserData);
   UNREFERENCED_PARAMETER(hNet);
   

   nResponse = nChallenge + nParameter;
   return 0;
}

L_UINT32 EXT_CALLBACK exInternalAuthenticateISCL (HDICOMNET hNet, L_UINT64 nChallenge, L_UINT64 *nResponse, L_UINT64 nParameter, L_VOID * pUserData)
{
   UNREFERENCED_PARAMETER(pUserData);
   UNREFERENCED_PARAMETER(hNet);

   *nResponse = nChallenge + nParameter;
   return 0;
}

L_UINT32 EXT_CALLBACK exExternalAuthenticateISCL (HDICOMNET hNet, L_UINT64 nChallenge, L_UINT64 nResponse, L_UINT64 nParameter, L_VOID * pUserData)
{
   UNREFERENCED_PARAMETER(pUserData);
   UNREFERENCED_PARAMETER(hNet);

   if (nResponse == nChallenge + nParameter)
      return 0;
   else
      return 1;
}

L_INT InternalAuthenticateCBExample(HDICOMNET hNet)
{
   DICOMNETCALLBACK cb;
   //…
   //…
   cb.pfnGetChallenge = exGetChallengeISCL;
   cb.pfnInternalAuthenticate = exInternalAuthenticateISCL;
   cb.pfnExternalAuthenticate = exExternalAuthenticateISCL;

   L_DicomSetCallback (hNet, &cb);

   return DICOM_SUCCESS;

}