mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-14 05:15:03 +02:00
Server: Corrected synchronization of SMB1Session and SMB2Session TreeID and FileID allocation methods
This commit is contained in:
parent
5276088159
commit
7eda93f5da
2 changed files with 38 additions and 34 deletions
|
@ -42,12 +42,15 @@ namespace SMBLibrary.Server
|
||||||
|
|
||||||
public ushort? AddConnectedTree(ISMBShare share)
|
public ushort? AddConnectedTree(ISMBShare share)
|
||||||
{
|
{
|
||||||
ushort? treeID = m_connection.AllocateTreeID();
|
lock (m_connection)
|
||||||
if (treeID.HasValue)
|
|
||||||
{
|
{
|
||||||
m_connectedTrees.Add(treeID.Value, share);
|
ushort? treeID = m_connection.AllocateTreeID();
|
||||||
|
if (treeID.HasValue)
|
||||||
|
{
|
||||||
|
m_connectedTrees.Add(treeID.Value, share);
|
||||||
|
}
|
||||||
|
return treeID;
|
||||||
}
|
}
|
||||||
return treeID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISMBShare GetConnectedTree(ushort treeID)
|
public ISMBShare GetConnectedTree(ushort treeID)
|
||||||
|
@ -63,7 +66,7 @@ namespace SMBLibrary.Server
|
||||||
m_connectedTrees.TryGetValue(treeID, out share);
|
m_connectedTrees.TryGetValue(treeID, out share);
|
||||||
if (share != null)
|
if (share != null)
|
||||||
{
|
{
|
||||||
lock (m_openFiles)
|
lock (m_connection)
|
||||||
{
|
{
|
||||||
List<ushort> fileIDList = new List<ushort>(m_openFiles.Keys);
|
List<ushort> fileIDList = new List<ushort>(m_openFiles.Keys);
|
||||||
foreach (ushort fileID in fileIDList)
|
foreach (ushort fileID in fileIDList)
|
||||||
|
@ -75,8 +78,8 @@ namespace SMBLibrary.Server
|
||||||
m_openFiles.Remove(fileID);
|
m_openFiles.Remove(fileID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
m_connectedTrees.Remove(treeID);
|
||||||
}
|
}
|
||||||
m_connectedTrees.Remove(treeID);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,15 +97,15 @@ namespace SMBLibrary.Server
|
||||||
|
|
||||||
public ushort? AddOpenFile(ushort treeID, string shareName, string relativePath, object handle)
|
public ushort? AddOpenFile(ushort treeID, string shareName, string relativePath, object handle)
|
||||||
{
|
{
|
||||||
ushort? fileID = m_connection.AllocateFileID();
|
lock (m_connection)
|
||||||
if (fileID.HasValue)
|
|
||||||
{
|
{
|
||||||
lock (m_openFiles)
|
ushort? fileID = m_connection.AllocateFileID();
|
||||||
|
if (fileID.HasValue)
|
||||||
{
|
{
|
||||||
m_openFiles.Add(fileID.Value, new OpenFileObject(treeID, shareName, relativePath, handle));
|
m_openFiles.Add(fileID.Value, new OpenFileObject(treeID, shareName, relativePath, handle));
|
||||||
}
|
}
|
||||||
|
return fileID;
|
||||||
}
|
}
|
||||||
return fileID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public OpenFileObject GetOpenFileObject(ushort fileID)
|
public OpenFileObject GetOpenFileObject(ushort fileID)
|
||||||
|
@ -114,7 +117,7 @@ namespace SMBLibrary.Server
|
||||||
|
|
||||||
public void RemoveOpenFile(ushort fileID)
|
public void RemoveOpenFile(ushort fileID)
|
||||||
{
|
{
|
||||||
lock (m_openFiles)
|
lock (m_connection)
|
||||||
{
|
{
|
||||||
m_openFiles.Remove(fileID);
|
m_openFiles.Remove(fileID);
|
||||||
}
|
}
|
||||||
|
@ -123,7 +126,7 @@ namespace SMBLibrary.Server
|
||||||
public List<string> ListOpenFiles()
|
public List<string> ListOpenFiles()
|
||||||
{
|
{
|
||||||
List<string> result = new List<string>();
|
List<string> result = new List<string>();
|
||||||
lock (m_openFiles)
|
lock (m_connection)
|
||||||
{
|
{
|
||||||
foreach (OpenFileObject openFile in m_openFiles.Values)
|
foreach (OpenFileObject openFile in m_openFiles.Values)
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,24 +62,22 @@ namespace SMBLibrary.Server
|
||||||
|
|
||||||
public uint? AddConnectedTree(ISMBShare share)
|
public uint? AddConnectedTree(ISMBShare share)
|
||||||
{
|
{
|
||||||
uint? treeID = AllocateTreeID();
|
lock (m_connectedTrees)
|
||||||
if (treeID.HasValue)
|
|
||||||
{
|
{
|
||||||
m_connectedTrees.Add(treeID.Value, share);
|
uint? treeID = AllocateTreeID();
|
||||||
|
if (treeID.HasValue)
|
||||||
|
{
|
||||||
|
m_connectedTrees.Add(treeID.Value, share);
|
||||||
|
}
|
||||||
|
return treeID;
|
||||||
}
|
}
|
||||||
return treeID;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISMBShare GetConnectedTree(uint treeID)
|
public ISMBShare GetConnectedTree(uint treeID)
|
||||||
{
|
{
|
||||||
if (m_connectedTrees.ContainsKey(treeID))
|
ISMBShare result;
|
||||||
{
|
m_connectedTrees.TryGetValue(treeID, out result);
|
||||||
return m_connectedTrees[treeID];
|
return result;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DisconnectTree(uint treeID)
|
public void DisconnectTree(uint treeID)
|
||||||
|
@ -101,7 +99,10 @@ namespace SMBLibrary.Server
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_connectedTrees.Remove(treeID);
|
lock (m_connectedTrees)
|
||||||
|
{
|
||||||
|
m_connectedTrees.Remove(treeID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,19 +132,19 @@ namespace SMBLibrary.Server
|
||||||
|
|
||||||
public FileID? AddOpenFile(uint treeID, string shareName, string relativePath, object handle)
|
public FileID? AddOpenFile(uint treeID, string shareName, string relativePath, object handle)
|
||||||
{
|
{
|
||||||
ulong? volatileFileID = AllocateVolatileFileID();
|
lock (m_openFiles)
|
||||||
if (volatileFileID.HasValue)
|
|
||||||
{
|
{
|
||||||
FileID fileID = new FileID();
|
ulong? volatileFileID = AllocateVolatileFileID();
|
||||||
fileID.Volatile = volatileFileID.Value;
|
if (volatileFileID.HasValue)
|
||||||
// [MS-SMB2] FileId.Persistent MUST be set to Open.DurableFileId.
|
|
||||||
// Note: We don't support durable handles so we use volatileFileID.
|
|
||||||
fileID.Persistent = volatileFileID.Value;
|
|
||||||
lock (m_openFiles)
|
|
||||||
{
|
{
|
||||||
|
FileID fileID = new FileID();
|
||||||
|
fileID.Volatile = volatileFileID.Value;
|
||||||
|
// [MS-SMB2] FileId.Persistent MUST be set to Open.DurableFileId.
|
||||||
|
// Note: We don't support durable handles so we use volatileFileID.
|
||||||
|
fileID.Persistent = volatileFileID.Value;
|
||||||
m_openFiles.Add(volatileFileID.Value, new OpenFileObject(treeID, shareName, relativePath, handle));
|
m_openFiles.Add(volatileFileID.Value, new OpenFileObject(treeID, shareName, relativePath, handle));
|
||||||
|
return fileID;
|
||||||
}
|
}
|
||||||
return fileID;
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue