Inheritance: AndXServerMessageBlock
Example #1
0
 /// <exception cref="SharpCifs.Smb.SmbException"></exception>
 internal virtual void TreeConnect(ServerMessageBlock andx,
                                   ServerMessageBlock andxResponse)
 {
     lock (Session.Transport())
     {
         string unc;
         while (ConnectionState != 0)
         {
             if (ConnectionState == 2 || ConnectionState == 3)
             {
                 // connected or disconnecting
                 return;
             }
             try
             {
                 Runtime.Wait(Session.transport);
             }
             catch (Exception ie)
             {
                 throw new SmbException(ie.Message, ie);
             }
         }
         ConnectionState = 1;
         // trying ...
         try
         {
             Session.transport.Connect();
             unc     = "\\\\" + Session.transport.TconHostName + '\\' + Share;
             Service = Service0;
             if (Session.transport.Log.Level >= 4)
             {
                 Session.transport.Log.WriteLine(
                     "treeConnect: unc=" + unc
                     + ",service=" + Service);
             }
             SmbComTreeConnectAndXResponse response
                 = new SmbComTreeConnectAndXResponse(andxResponse);
             SmbComTreeConnectAndX request
                 = new SmbComTreeConnectAndX(Session, unc, Service, andx);
             Session.Send(request, response);
             Tid             = response.Tid;
             Service         = response.Service;
             InDfs           = response.ShareIsInDfs;
             TreeNum         = _treeConnCounter++;
             ConnectionState = 2;
         }
         catch (SmbException se)
         {
             // connected
             TreeDisconnect(true);
             ConnectionState = 0;
             throw;
         }
     }
 }
Example #2
0
 /// <exception cref="SharpCifs.Smb.SmbException"></exception>
 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;
         }
     }
 }
Example #3
0
		/// <exception cref="SharpCifs.Smb.SmbException"></exception>
		internal virtual void TreeConnect(ServerMessageBlock andx, ServerMessageBlock andxResponse
			)
		{
			lock (Session.Transport())
			{
				string unc;
				while (ConnectionState != 0)
				{
					if (ConnectionState == 2 || ConnectionState == 3)
					{
						// connected or disconnecting
						return;
					}
					try
					{
						Runtime.Wait(Session.transport);
					}
					catch (Exception ie)
					{
						throw new SmbException(ie.Message, ie);
					}
				}
				ConnectionState = 1;
				// trying ...
				try
				{
					Session.transport.Connect();
					unc = "\\\\" + Session.transport.TconHostName + '\\' + Share;
					Service = Service0;
					if (Session.transport.Log.Level >= 4)
					{
						Session.transport.Log.WriteLine("treeConnect: unc=" + unc + ",service=" + Service
							);
					}
					SmbComTreeConnectAndXResponse response = new SmbComTreeConnectAndXResponse(andxResponse
						);
					SmbComTreeConnectAndX request = new SmbComTreeConnectAndX(Session, unc, Service, 
						andx);
					Session.Send(request, response);
					Tid = response.Tid;
					Service = response.Service;
					InDfs = response.ShareIsInDfs;
					TreeNum = _treeConnCounter++;
					ConnectionState = 2;
				}
				catch (SmbException se)
				{
					// connected
					TreeDisconnect(true);
					ConnectionState = 0;
					throw;
				}
			}
		}