/// <summary>
 /// Expect a request. If user is not interested in the packet, please call DefaultSendResponse().
 /// </summary>
 /// <param name="timeout">timeout</param>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="session">the session between server and client</param>
 /// <param name="treeConnect">the tree connect between server and client</param>
 /// <param name="open">the file open between server and client</param>
 /// <param name="requestPacket">the request</param>
 public abstract void ExpectRequest(
     TimeSpan timeout,
     out IFileServiceServerConnection connection,
     out IFileServiceServerSession session,
     out IFileServiceServerTreeConnect treeConnect,
     out IFileServiceServerOpen open,
     out SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response an error packet
 /// </summary>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="status">error code</param>
 /// <param name="requestPacket">the request packet to send the error response</param>
 public abstract void SendErrorResponse(
     IFileServiceServerConnection connection,
     uint status,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response the create request from client.
 /// </summary>
 /// <param name="treeConnect">the tree connect between server and client</param>
 /// <param name="requestPacket">the request</param>
 /// <returns>The file open object</returns>
 public abstract IFileServiceServerOpen SendCreateResponse(
     IFileServiceServerTreeConnect treeConnect,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response the tree connect request from client.
 /// </summary>
 /// <param name="session">the session between server and client</param>
 /// <param name="requestPacket">the request</param>
 /// <returns>The tree connect object</returns>
 public abstract IFileServiceServerTreeConnect SendTreeConnectResponse(
     IFileServiceServerSession session,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response the session request from client.
 /// The method will complete 2nd session setup request automatically.
 /// </summary>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="requestPacket">the request</param>
 /// <returns>The session object.</returns>
 public abstract IFileServiceServerSession SendSessionSetupResponse(
     IFileServiceServerConnection connection,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response the negotiate request from client.
 /// </summary>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="requestPacket">the request</param>
 public abstract void SendNegotiateResponse(
     IFileServiceServerConnection connection,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// Automatically response latest request.
 /// </summary>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="session">the session between server and client</param>
 /// <param name="treeConnect">the tree connect between server and client</param>
 /// <param name="open">the file open between server and client</param>
 /// <param name="requestPacket">the request</param>
 public abstract void DefaultSendResponse(
     IFileServiceServerConnection connection,
     IFileServiceServerSession session,
     IFileServiceServerTreeConnect treeConnect,
     IFileServiceServerOpen open,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// Automatically response latest request.
 /// </summary>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="session">the session between server and client</param>
 /// <param name="treeConnect">the tree connect between server and client</param>
 /// <param name="open">the file open between server and client</param>
 /// <param name="requestPacket">the request</param>
 public abstract void DefaultSendResponse(
     IFileServiceServerConnection connection,
     IFileServiceServerSession session,
     IFileServiceServerTreeConnect treeConnect,
     IFileServiceServerOpen open,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// Expect a request. If user is not interested in the packet, please call DefaultSendResponse().
 /// </summary>
 /// <param name="timeout">timeout</param>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="session">the session between server and client</param>
 /// <param name="treeConnect">the tree connect between server and client</param>
 /// <param name="open">the file open between server and client</param>
 /// <param name="requestPacket">the request</param>
 public abstract void ExpectRequest(
     TimeSpan timeout,
     out IFileServiceServerConnection connection,
     out IFileServiceServerSession session,
     out IFileServiceServerTreeConnect treeConnect,
     out IFileServiceServerOpen open,
     out SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response the tree connect request from client.
 /// </summary>
 /// <param name="session">the session between server and client</param>
 /// <param name="requestPacket">the request</param>
 /// <returns>The tree connect object</returns>
 public abstract IFileServiceServerTreeConnect SendTreeConnectResponse(
     IFileServiceServerSession session,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response the session request from client.
 /// The method will complete 2nd session setup request automatically.
 /// </summary>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="requestPacket">the request</param>
 /// <returns>The session object.</returns>
 public abstract IFileServiceServerSession SendSessionSetupResponse(
     IFileServiceServerConnection connection,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response the negotiate request from client.
 /// </summary>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="requestPacket">the request</param>
 public abstract void SendNegotiateResponse(
     IFileServiceServerConnection connection,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response an error packet
 /// </summary>
 /// <param name="connection">the connection between server and client</param>
 /// <param name="status">error code</param>
 /// <param name="requestPacket">the request packet to send the error response</param>
 public abstract void SendErrorResponse(
     IFileServiceServerConnection connection,
     uint status,
     SmbFamilyPacket requestPacket);
 /// <summary>
 /// server response the create request from client.
 /// </summary>
 /// <param name="treeConnect">the tree connect between server and client</param>
 /// <param name="requestPacket">the request</param>
 /// <returns>The file open object</returns>
 public abstract IFileServiceServerOpen SendCreateResponse(
     IFileServiceServerTreeConnect treeConnect,
     SmbFamilyPacket requestPacket);