aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/IO/SharpCifs/Util/Transport/Transport.cs
diff options
context:
space:
mode:
authorBond_009 <bond.009@outlook.com>2019-01-03 21:54:59 +0100
committerBond_009 <bond.009@outlook.com>2019-01-03 21:54:59 +0100
commit6a8b94b0c795b42aa894136445996df4557e8387 (patch)
tree99afe861faf8c3fef9a6b4d8564de9cee3a552d9 /Emby.Server.Implementations/IO/SharpCifs/Util/Transport/Transport.cs
parentc6618d0a5fdfc063ccfba1b73fe16b68fc3ba1ce (diff)
Remove SMB support
This doesn't mean you can't use an SMB share to store your files for Jellyfin. You will just have to connect to it on the OS level.
Diffstat (limited to 'Emby.Server.Implementations/IO/SharpCifs/Util/Transport/Transport.cs')
-rw-r--r--Emby.Server.Implementations/IO/SharpCifs/Util/Transport/Transport.cs454
1 files changed, 0 insertions, 454 deletions
diff --git a/Emby.Server.Implementations/IO/SharpCifs/Util/Transport/Transport.cs b/Emby.Server.Implementations/IO/SharpCifs/Util/Transport/Transport.cs
deleted file mode 100644
index b02936ca6..000000000
--- a/Emby.Server.Implementations/IO/SharpCifs/Util/Transport/Transport.cs
+++ /dev/null
@@ -1,454 +0,0 @@
-// This code is derived from jcifs smb client library <jcifs at samba dot org>
-// Ported by J. Arturo <webmaster at komodosoft dot net>
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-using System;
-using System.IO;
-using SharpCifs.Smb;
-using SharpCifs.Util.Sharpen;
-
-namespace SharpCifs.Util.Transport
-{
- /// <summary>
- /// This class simplifies communication for protocols that support
- /// multiplexing requests.
- /// </summary>
- /// <remarks>
- /// This class simplifies communication for protocols that support
- /// multiplexing requests. It encapsulates a stream and some protocol
- /// knowledge (provided by a concrete subclass) so that connecting,
- /// disconnecting, sending, and receiving can be syncronized
- /// properly. Apparatus is provided to send and receive requests
- /// concurrently.
- /// </remarks>
- public abstract class Transport : IRunnable
- {
- internal static int Id;
-
- //internal static LogStream log = LogStream.GetInstance();
-
- public LogStream Log
- {
- get
- {
- return LogStream.GetInstance();
- }
- }
-
- /// <exception cref="System.IO.IOException"></exception>
- public static int Readn(InputStream @in, byte[] b, int off, int len)
- {
- int i = 0;
- int n = -5;
- while (i < len)
- {
- n = @in.Read(b, off + i, len - i);
- if (n <= 0)
- {
- break;
- }
- i += n;
- }
- return i;
- }
-
- internal int State;
-
- internal string Name = "Transport" + Id++;
-
- internal Thread Thread;
-
- internal TransportException Te;
-
- protected internal Hashtable ResponseMap = new Hashtable();
-
- /// <exception cref="System.IO.IOException"></exception>
- protected internal abstract void MakeKey(ServerMessageBlock request);
-
- /// <exception cref="System.IO.IOException"></exception>
- protected internal abstract ServerMessageBlock PeekKey();
-
- /// <exception cref="System.IO.IOException"></exception>
- protected internal abstract void DoSend(ServerMessageBlock request);
-
- /// <exception cref="System.IO.IOException"></exception>
- protected internal abstract void DoRecv(Response response);
-
- /// <exception cref="System.IO.IOException"></exception>
- protected internal abstract void DoSkip();
-
- /// <exception cref="System.IO.IOException"></exception>
- public virtual void Sendrecv(ServerMessageBlock request, Response response, long timeout)
- {
- lock (this)
- {
- MakeKey(request);
- response.IsReceived = false;
- try
- {
- ResponseMap.Put(request, response);
- DoSend(request);
- response.Expiration = Runtime.CurrentTimeMillis() + timeout;
- while (!response.IsReceived)
- {
- Runtime.Wait(this, timeout);
- timeout = response.Expiration - Runtime.CurrentTimeMillis();
- if (timeout <= 0)
- {
- throw new TransportException(Name + " timedout waiting for response to " + request
- );
- }
- }
- }
- catch (IOException ioe)
- {
- if (Log.Level > 2)
- {
- Runtime.PrintStackTrace(ioe, Log);
- }
- try
- {
- Disconnect(true);
- }
- catch (IOException ioe2)
- {
- Runtime.PrintStackTrace(ioe2, Log);
- }
- throw;
- }
- catch (Exception ie)
- {
- throw new TransportException(ie);
- }
- finally
- {
- //Sharpen.Collections.Remove(response_map, request);
- ResponseMap.Remove(request);
- }
- }
- }
-
- private void Loop()
- {
- while (Thread == Thread.CurrentThread())
- {
- try
- {
- ServerMessageBlock key = PeekKey();
- if (key == null)
- {
- throw new IOException("end of stream");
- }
-
-
- lock (this)
- {
- Response response = (Response)ResponseMap.Get(key);
- if (response == null)
- {
- if (Log.Level >= 4)
- {
- Log.WriteLine("Invalid key, skipping message");
- }
- DoSkip();
- }
- else
- {
- DoRecv(response);
- response.IsReceived = true;
- Runtime.NotifyAll(this);
- }
- }
- }
- catch (Exception ex)
- {
- string msg = ex.Message;
- bool timeout = msg != null && msg.Equals("Read timed out");
- bool hard = timeout == false;
- if (!timeout && Log.Level >= 3)
- {
- Runtime.PrintStackTrace(ex, Log);
- }
- try
- {
- Disconnect(hard);
- }
- catch (IOException ioe)
- {
- Runtime.PrintStackTrace(ioe, Log);
- }
- }
- }
- }
-
- /// <exception cref="System.Exception"></exception>
- protected internal abstract void DoConnect();
-
- /// <exception cref="System.IO.IOException"></exception>
- protected internal abstract void DoDisconnect(bool hard);
-
- /// <exception cref="SharpCifs.Util.Transport.TransportException"></exception>
- public virtual void Connect(long timeout)
- {
- lock (this)
- {
- try
- {
- switch (State)
- {
- case 0:
- {
- break;
- }
-
- case 3:
- {
- return;
- }
-
- case 4:
- {
- // already connected
- State = 0;
- throw new TransportException("Connection in error", Te);
- }
-
- default:
- {
- //TransportException te = new TransportException("Invalid state: " + state);
- State = 0;
- throw new TransportException("Invalid state: " + State);
- }
- }
- State = 1;
- Te = null;
- Thread = new Thread(this);
- Thread.SetDaemon(true);
- lock (Thread)
- {
- Thread.Start();
- Runtime.Wait(Thread, timeout);
- switch (State)
- {
- case 1:
- {
- State = 0;
- Thread = null;
- throw new TransportException("Connection timeout");
- }
-
- case 2:
- {
- if (Te != null)
- {
- State = 4;
- Thread = null;
- throw Te;
- }
- State = 3;
- return;
- }
- }
- }
- }
- catch (Exception ie)
- {
- State = 0;
- Thread = null;
- throw new TransportException(ie);
- }
- finally
- {
- if (State != 0 && State != 3 && State != 4)
- {
- if (Log.Level >= 1)
- {
- Log.WriteLine("Invalid state: " + State);
- }
- State = 0;
- Thread = null;
- }
- }
- }
- }
-
- /// <exception cref="System.IO.IOException"></exception>
- public virtual void Disconnect(bool hard)
- {
-
- if (hard)
- {
- IOException ioe = null;
- switch (State)
- {
- case 0:
- {
- return;
- }
-
- case 2:
- {
- hard = true;
- goto case 3;
- }
-
- case 3:
- {
- if (ResponseMap.Count != 0 && !hard)
- {
- break;
- }
- try
- {
- DoDisconnect(hard);
- }
- catch (IOException ioe0)
- {
- ioe = ioe0;
- }
- goto case 4;
- }
-
- case 4:
- {
- Thread = null;
- State = 0;
- break;
- }
-
- default:
- {
- if (Log.Level >= 1)
- {
- Log.WriteLine("Invalid state: " + State);
- }
- Thread = null;
- State = 0;
- break;
- }
- }
- if (ioe != null)
- {
- throw ioe;
- }
-
- return;
- }
-
- lock (this)
- {
- IOException ioe = null;
- switch (State)
- {
- case 0:
- {
- return;
- }
-
- case 2:
- {
- hard = true;
- goto case 3;
- }
-
- case 3:
- {
- if (ResponseMap.Count != 0 && !hard)
- {
- break;
- }
- try
- {
- DoDisconnect(hard);
- }
- catch (IOException ioe0)
- {
- ioe = ioe0;
- }
- goto case 4;
- }
-
- case 4:
- {
- Thread = null;
- State = 0;
- break;
- }
-
- default:
- {
- if (Log.Level >= 1)
- {
- Log.WriteLine("Invalid state: " + State);
- }
- Thread = null;
- State = 0;
- break;
- }
- }
- if (ioe != null)
- {
- throw ioe;
- }
- }
- }
-
- public virtual void Run()
- {
- Thread runThread = Thread.CurrentThread();
- Exception ex0 = null;
- try
- {
- DoConnect();
- }
- catch (Exception ex)
- {
- ex0 = ex;
- // Defer to below where we're locked
- return;
- }
- finally
- {
- lock (runThread)
- {
- if (runThread != Thread)
- {
- if (ex0 != null)
- {
- if (Log.Level >= 2)
- {
- Runtime.PrintStackTrace(ex0, Log);
- }
- }
- //return;
- }
- if (ex0 != null)
- {
- Te = new TransportException(ex0);
- }
- State = 2;
- // run connected
- Runtime.Notify(runThread);
- }
- }
- Loop();
- }
-
- public override string ToString()
- {
- return Name;
- }
- }
-}