Exemple #1
0
 /// <exception cref="WinrtCifs.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 e)
         {
             // connected
             TreeDisconnect(true);
             ConnectionState = 0;
             throw e;
         }
     }
 }
Exemple #2
0
 /// <exception cref="WinrtCifs.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)
         {
             if (request is SmbComTreeConnectAndX)
             {
                 Logoff(true);
             }
             request.Digest = null;
             throw;
         }
     }
 }