/// <summary>
        /// Create  TRANS2_GET_DFS_REFERRAL Response 
        /// </summary>
        /// <param name="connection">the connection identified the client</param>
        /// <param name = "data">
        /// field MUST be a properly formatted DFS referral response, as specified in [MS-DFSC] section 2.2.3
        /// </param>
        /// <returns>The SmbTrans2GetDfsReferralResponsePacket </returns>
        /// <exception cref="ArgumentNullException">connection must not be null</exception>
        public virtual SmbTrans2GetDfsReferralResponsePacket CreateTrans2GetDfsRefferralResponse(
            SmbServerConnection connection,
            RESP_GET_DFS_REFERRAL data)
        {
            if (connection == null)
            {
                throw new ArgumentNullException("connection");
            }

            SmbTrans2GetDfsReferralResponsePacket packet = new SmbTrans2GetDfsReferralResponsePacket();

            // get the request packet
            SmbPacket request = connection.GetRequestPacket(connection.MessageId);

            // create smb packet header
            packet.SmbHeader = CifsMessageUtils.CreateSmbHeader(
                SmbCommand.SMB_COM_TRANSACTION2,
                connection.ProcessId, connection.MessageId, request.SmbHeader.Uid, request.SmbHeader.Tid,
                (SmbFlags)connection.Capability.Flag, (SmbFlags2)connection.Capability.Flags2);

            // update smb parameters
            SMB_COM_TRANSACTION2_FinalResponse_SMB_Parameters smbParameters = packet.SmbParameters;

            smbParameters.Setup = new ushort[0];

            smbParameters.WordCount = (byte)(CifsMessageUtils.GetSize<SMB_COM_TRANSACTION2_FinalResponse_SMB_Parameters>(
                smbParameters) / SmbCapability.NUM_BYTES_OF_WORD);

            // update smb data
            SMB_COM_TRANSACTION2_FinalResponse_SMB_Data smbData = packet.SmbData;

            // update trans2 data
            TRANS2_GET_DFS_REFERRAL_Response_Trans2_Data trans2Data = packet.Trans2Data;

            trans2Data.ReferralResponse = data;

            // store the parameters and data to packet.
            packet.Trans2Data = trans2Data;
            packet.SmbParameters = smbParameters;
            packet.SmbData = smbData;

            packet.UpdateCountAndOffset();

            return packet;
        }
        public SmbTrans2GetDfsReferalFinalResponsePacket CreateTrans2GetDfsReferalFinalResponse(
            CifsServerPerConnection connection,
            SmbTrans2GetDfsReferalRequestPacket request,
            RESP_GET_DFS_REFERRAL referralResponse)
        {
            SmbTrans2GetDfsReferalFinalResponsePacket response = new SmbTrans2GetDfsReferalFinalResponsePacket();
            response.SmbHeader = CifsMessageUtils.CreateSmbHeader(connection, request);

            TRANS2_GET_DFS_REFERRAL_Response_Trans2_Data trans2Data = response.Trans2Data;
            trans2Data.ReferralResponse = referralResponse;
            response.Trans2Data = trans2Data;

            response.UpdateCountAndOffset();

            return response;
        }