SharpCifs.Smb.SmbTree.Send C# (CSharp) Method

Send() private method

private Send ( ServerMessageBlock request, ServerMessageBlock response ) : void
request ServerMessageBlock
response ServerMessageBlock
return void
		internal virtual void Send(ServerMessageBlock request, ServerMessageBlock response
			)
		{
			lock (Session.Transport())
			{
				if (response != null)
				{
					response.Received = false;
				}
				TreeConnect(request, response);
				if (request == null || (response != null && response.Received))
				{
					return;
				}
				if (Service.Equals("A:") == false)
				{
					switch (request.Command)
					{
						case ServerMessageBlock.SmbComOpenAndx:
						case ServerMessageBlock.SmbComNtCreateAndx:
						case ServerMessageBlock.SmbComReadAndx:
						case ServerMessageBlock.SmbComWriteAndx:
						case ServerMessageBlock.SmbComClose:
						case ServerMessageBlock.SmbComTreeDisconnect:
						{
							break;
						}

						case ServerMessageBlock.SmbComTransaction:
						case ServerMessageBlock.SmbComTransaction2:
						{
							switch (((SmbComTransaction)request).SubCommand & unchecked(0xFF))
							{
								case SmbComTransaction.NetShareEnum:
								case SmbComTransaction.NetServerEnum2:
								case SmbComTransaction.NetServerEnum3:
								case SmbComTransaction.TransPeekNamedPipe:
								case SmbComTransaction.TransWaitNamedPipe:
								case SmbComTransaction.TransCallNamedPipe:
								case SmbComTransaction.TransTransactNamedPipe:
								case SmbComTransaction.Trans2GetDfsReferral:
								{
									break;
								}

								default:
								{
									throw new SmbException("Invalid operation for " + Service + " service");
								}
							}
							break;
						}

						default:
						{
							throw new SmbException("Invalid operation for " + Service + " service" + request);
						}
					}
				}
				request.Tid = Tid;
				if (InDfs && !Service.Equals("IPC") && !string.IsNullOrEmpty(request.Path))
				{
                    request.Flags2 = SmbConstants.Flags2ResolvePathsInDfs;
					request.Path = '\\' + Session.Transport().TconHostName + '\\' + Share + request.Path;
				}
				try
				{
					Session.Send(request, response);
				}
				catch (SmbException se)
				{
					if (se.GetNtStatus() == NtStatus.NtStatusNetworkNameDeleted)
					{
						TreeDisconnect(true);
					}
					throw;
				}
			}
		}

Usage Example

Example #1
0
        /// <exception cref="SharpCifs.Smb.SmbException"></exception>
        internal virtual DfsReferral GetDfsReferrals(NtlmPasswordAuthentication auth,
                                                     string path,
                                                     int rn)
        {
            SmbTree ipc = GetSmbSession(auth).GetSmbTree("IPC$", null);
            Trans2GetDfsReferralResponse resp = new Trans2GetDfsReferralResponse();

            ipc.Send(new Trans2GetDfsReferral(path), resp);
            if (resp.NumReferrals == 0)
            {
                return(null);
            }
            if (rn == 0 || resp.NumReferrals < rn)
            {
                rn = resp.NumReferrals;
            }
            DfsReferral dr = new DfsReferral();

            string[] arr        = new string[4];
            long     expiration = Runtime.CurrentTimeMillis() + Dfs.Ttl * 1000;
            int      di         = 0;

            for (;;)
            {
                dr.ResolveHashes = auth.HashesExternal;
                dr.Ttl           = resp.Referrals[di].Ttl;
                dr.Expiration    = expiration;
                if (path.Equals(string.Empty))
                {
                    dr.Server = Runtime.Substring(resp.Referrals[di].Path, 1).ToLower();
                }
                else
                {
                    DfsPathSplit(resp.Referrals[di].Node, arr);
                    dr.Server = arr[1];
                    dr.Share  = arr[2];
                    dr.Path   = arr[3];
                }
                dr.PathConsumed = resp.PathConsumed;
                di++;
                if (di == rn)
                {
                    break;
                }
                dr.Append(new DfsReferral());
                dr = dr.Next;
            }
            return(dr.Next);
        }
All Usage Examples Of SharpCifs.Smb.SmbTree::Send