LDicomNet::OnReceiveCStoreResponse

Summary

Notifies a connection that a C-STORE-RSP command was received. This function is available in the PACS Imaging Toolkit.

Syntax

#include "ltdic.h"

virtual L_VOID LDicomNet::OnReceiveCStoreResponse(nPresentationID, nMessageID, pszClass, pszInstance, nStatus)

Parameters

L_UCHAR nPresentationID

Presentation ID. The presentation ID provides information about both the class type of the data and the transfer syntax to use when transferring the data.

L_UINT16 nMessageID

Message ID. Each message sent by a member of a connection should have a unique ID. Since a member of a connection may send several messages, this ID allows that member to identify when a specific request has been completed.

L_TCHAR * pszClass

Class affected by the request. This will be an SOP Class or an SOP MetaClass.

L_TCHAR * pszInstance

The instance of the class. A server may, for example, have three instances of the Nuclear Medicine Class. This value identifies the data with a specific instance.

L_UINT16 nStatus

The status of the original request. For a list of possible values, refer to Status Constants.

Returns

None.

Comments

A call to this function is generated on an SCU when LDicomNet::SendCStoreResponse is called by an SCP.

To customize this function, you must derive a class from LDicomNet and override this function.

When an SCU requests a Move (C-MOVE-REQ), the SCP may have to call LDicomNet::SendCStoreRequest to request one or more C-STORE-REQ sub-operations to complete the storage. The series of calls and information transfer in a C-MOVE-REQ is complicated. For more information, refer to Moving Composite Data.

Required DLLs and Libraries

Platforms

Win32, x64

See Also

Functions

Topics

Example

In this example:

  1. LMyDicomNet is a class derived from LDicomNet
  2. LMyDicomNet has the following member variables:
    m_nClientOrServer: can be (STATUS_NONE, STATUS_SERVER, STATUS_CLIENT)
    identifies the LMyDicomNet object as a server or a client
    m_nDataCommand: can be (COMMAND_C_MOVE,COMMAND_C_GET)
    set so the server knows how a C-Store Response was generated
  3. m_pDicomNet points to a valid LMyDicomNet object
    LMyDicomNet *m_pDicomNet

  4. A connection exists between client and server

  5. An association exists between the client and server
    L_VOID LMyDicomNet::OnReceiveCStoreResponse(L_UCHAR nPresentationID, L_UINT16 nMessageID, L_TCHAR *pszClass, L_TCHAR *pszInstance, L_UINT16 nStatus) 
    { 
       CString strMsg; 
       L_UINT  lPeerPort; 
       L_TCHAR  szPeerAddress[100]; 
        
       GetPeerInfo(szPeerAddress, 100, &lPeerPort); 
       strMsg.Format(TEXT("*** OnReceiveCStoreResponse ***\nPeer[%s]\nnPresentationID[%d]\nnM\ 
                   essageID[%d]\npszClass[%s]\npszInstance[%s]\nnStatus[%d]"),  
                   szPeerAddress, 
                   nPresentationID,  
                   nMessageID,  
                   pszClass, 
                   pszInstance, 
                   nStatus); 
        
       //If I am a server, I receive this message from 
       // 
       //  1.Client sends C-Get 
       //    I send SendCStoreRequest 
       //    Clientsends SendCStoreResponse 
       // 
       //... or 
       // 
       //  2.Client sends C-Move 
       //    I send SendCStoreRequest 
       //    Clientsends SendCStoreResponse 
        
       // m_nClientOrServer is a member variable that identifies whether I am a client or server 
       if (m_nClientOrServer == STATUS_SERVER) 
       { 
     
          //m_nDataCommand is a member variable that is set so the server  
          //knows how a C-Store Response was generated 
          //m_nDataCommand can be: 
          //    COMMAND_C_MOVE 
          //    COMMAND_C_GET 
     
          switch (m_nDataCommand) 
          { 
             case COMMAND_C_GET: 
                   strMsg += TEXT("SendCGetResponse\n"); 
                   SendCGetResponse(  nPresentationID,  
                      nMessageID, 
                      pszClass,  
                      COMMAND_STATUS_SUCCESS,    //L_UINT16 nStatus 
                      0,                         //L_UINT16 nRemaining 
                      1,                         //L_UINT16 nCompleted 
                      0,                         //L_UINT16 nFailed 
                      0,                         //L_UINT16 nWarning 
                      0                          //LDicomDS *pDS 
                      ); 
                   break;    
                case COMMAND_C_MOVE: 
                   strMsg += TEXT("SendCMoveResponse\n"); 
                   SendCMoveResponse(  nPresentationID,  
                      nMessageID, 
                      pszClass,  
                      COMMAND_STATUS_SUCCESS,    //L_UINT16 nStatus 
                      0,                         //L_UINT16 nRemaining 
                      1,                         //L_UINT16 nCompleted 
                      0,                         //L_UINT16 nFailed 
                      0,                         //L_UINT16 nWarning 
                      0                          //LDicomDS *pDS 
                      ); 
               break; 
                };    
       } 
       m_nDataCommand = 0; 
       AfxMessageBox(strMsg); 
    } 
Help Version 23.0.2024.7.1
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2024 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS DICOM C++ Class Library Help
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2023 LEAD Technologies, Inc. All Rights Reserved.