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

Send() private method

private Send ( ServerMessageBlock request, ServerMessageBlock response ) : void
request ServerMessageBlock
response ServerMessageBlock
return void
		internal void Send(ServerMessageBlock request, ServerMessageBlock response)
		{
			lock (Transport())
			{
				if (response != null)
				{
					response.Received = false;
				}
				Expiration = Runtime.CurrentTimeMillis() + SmbConstants.SoTimeout;
				SessionSetup(request, response);
				if (response != null && response.Received)
				{
					return;
				}
				if (request is SmbComTreeConnectAndX)
				{
					SmbComTreeConnectAndX tcax = (SmbComTreeConnectAndX)request;
					if (NetbiosName != null && tcax.path.EndsWith("\\IPC$"))
					{
						tcax.path = "\\\\" + NetbiosName + "\\IPC$";
					}
				}
				request.Uid = Uid;
				request.Auth = Auth;
				try
				{
					transport.Send(request, response);
				}
				catch (SmbException se)
				{
					if (request is SmbComTreeConnectAndX)
					{
						Logoff(true);
					}
					request.Digest = null;
					throw;
				}
			}
		}

Usage Example

Example #1
0
        /// <exception cref="SharpCifs.Smb.SmbException"></exception>
        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;
                }
            }
        }