Updates lock timeout information on this item.
WebDAV engine passes LockInfo structure to this method by reference. Token and Timeout fields are provided by WebDAV client. In your RefreshLock implementation you must set Shared, Deep and Owner fields.
public WebDAVResponse RefreshLock(ref LockInfo lockInfo)
{
LockInfo[] locks = ActiveLocks;
int lockIndex;
for(int lockIndex = 0; lockIndex < locks.Length; lockIndex++)
if(lockInfo.Token == locks[lockIndex].Token) break;
if(lockIndex == locks.Length)
return new PreconditionFailedResponse();
SqlConnection conn = new SqlConnection(connStr);
SqlCommand cmd;
conn.Open();
try
{
cmd = conn.CreateCommand();
cmd.CommandText = "UPDATE Lock SET Expires = @Expires WHERE Token LIKE @Token";
cmd.Parameters.Add("@Expires", SqlDbType.DateTime);
if(lockInfo.Timeout >= 0)
{
cmd.Parameters["@Expires"].Value = DateTime.Now.AddSeconds(lockInfo.Timeout);
}
else
{
cmd.Parameters["@Expires"].Value = SqlBoolean.Null;
}
cmd.Parameters.Add("@Token", SqlDbType.Char).Value = lockInfo.Token;
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
// return info about lock to WebDAV engine
lockInfo.Shared = locks[lockIndex].Shared;
lockInfo.Deep = locks[lockIndex].Deep;
lockInfo.Owner = locks[lockIndex].Owner;
return new OkResponse();
}
ILock Interface | ITHit.WebDAV.Server Namespace