DICOM Extended Negotiation of User Identity

DicomObjects.NET supports extended negotation of user identity as defined in DICOM supplement 99:

ftp://medical.nema.org/medical/dicom/final/sup99_ft.pdf

Here is sample code for how to access this data using DicomObjects.NET

SCU/Client

using DicomObjects.Enums;

DicomAssociation cn = new DicomAssociation();
cn.Identity = new DicomAssociation.UserIdentity();
cn.Identity.IdentityType = UserIdentityType.Kerberos;
cn.Identity.ResponseType = UserIdentityResponseType.PositiveResponseRequested;
cn.Identity.PrimaryField = new byte[] { 1, 2, 3, 4 }; // the Kerberos Service Ticket, or the username
cn.RequestedContexts.Add(...);
cn.Open(...);
byte[] resp = cn.ServerResponse; // will be null is ResponseType is set to NoResponseRequested
  

SCP/Server

using DicomObjects.Enums;

void server_AssociationRequest(object sender, DicomServer.AssociationRequestArgs e)
{
   DicomAssociation.UserIdentity ident = e.Association.Identity;
   //You can check the user identity and send a response back if Positive Response is requested
   if (e.Association.Identity.ResponseType == UserIdentityResponseType.PositiveResponseRequested)
   {
      if (e.Association.Identity.IdentityType == DicomObjects.Enums.UserIdentityType.Kerberos)
      e.Association.Identity.ServerResponse = new byte[] { 1, 1, 1, 1 }; // the Kerberos Server ticket
   }
}