Changeset 2442


Ignore:
Timestamp:
Jan 23, 2011, 11:33:35 PM (10 years ago)
Author:
nolte
Message:

Protecting the Tree from Node/Leaf Attacks. Healing-Kit Update

(Will be further modified Wednesday)

Location:
trunk/CrypPlugins/KeySearcher/P2P
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/KeySearcher/P2P/Storage/StorageHelper.cs

    r2428 r2442  
    22using System.Collections.Generic;
    33using System.IO;
     4using System.Threading;
    45using Cryptool.P2P;
    56using Cryptool.P2P.Internal;
     
    136137                var oldVersionFlag = CheckNodeVersion(binaryReader);
    137138
    138                 if (nodeToUpdate is Node)
    139                 {
    140                     UpdateNodeFromDht((Node) nodeToUpdate, binaryReader);
    141                 }
    142                 else
    143                 {
    144                     UpdateLeafFromDht((Leaf) nodeToUpdate, binaryReader);
     139                try
     140                {
     141                    if (nodeToUpdate is Node)
     142                    {
     143                        UpdateNodeFromDht((Node)nodeToUpdate, binaryReader);
     144                    }
     145                    else
     146                    {
     147                        UpdateLeafFromDht((Leaf)nodeToUpdate, binaryReader);
     148                    }
     149                }
     150                catch (Exception e)
     151                {
     152                    // client id not available, use default
     153                    keySearcher.GuiLogMessage(e.Message + ": Node causing the failure: " + nodeToUpdate.ToString(), NotificationLevel.Error);
     154                    nodeToUpdate.Reset();
     155                    throw new InvalidOperationException();
    145156                }
    146157
    147158                // Load results
    148159                var resultCount = binaryReader.ReadInt32();
    149        
     160
    150161                for (var i = 0; i < resultCount; i++)
    151162                {
     
    184195                    {
    185196                        keySearcher.GuiLogMessage(e.Message + ": Node causing the failure: " + nodeToUpdate.ToString(),NotificationLevel.Error);
    186                         if (nodeToUpdate is Leaf)
     197                        nodeToUpdate.Reset();
     198                        throw new InvalidOperationException();
     199                    }                                       
     200                }
     201
     202                try
     203                {
     204                    if (binaryReader.BaseStream.Length != binaryReader.BaseStream.Position)
     205                    {
     206                        //Reading the number of avatarnames
     207                        int avatarcount = binaryReader.ReadInt32();
     208                        for (int i = 0; i < avatarcount; i++)
    187209                        {
    188                             nodeToUpdate.Result.Clear();
     210                            //Reading the avatarname and the maschine-count for this name
     211                            string avatarname = binaryReader.ReadString();
     212                            int maschcount = binaryReader.ReadInt32();
     213                            var readMaschcount = new Dictionary<long, Information>();
     214
     215                            for (int j = 0; j < maschcount; j++)
     216                            {
     217                                //reading the IDs and patterncount
     218                                long maschID = binaryReader.ReadInt64();
     219                                int count = binaryReader.ReadInt32();
     220                                string host = binaryReader.ReadString();
     221                                var date = DateTime.FromBinary(binaryReader.ReadInt64());
     222                                readMaschcount.Add(maschID, new Information() { Count = count, Hostname = host, Date = date });
     223
     224                            }
     225
     226                            if (nodeToUpdate.Activity.ContainsKey(avatarname))
     227                            {
     228                                nodeToUpdate.Activity[avatarname] = readMaschcount;
     229                            }
     230                            else
     231                            {
     232                                nodeToUpdate.Activity.Add(avatarname, readMaschcount);
     233                            }
    189234                        }
    190                     }                                       
    191                 }
    192 
    193                 if (binaryReader.BaseStream.Length != binaryReader.BaseStream.Position)
    194                 {
    195                     //Reading the number of avatarnames
    196                     int avatarcount = binaryReader.ReadInt32();
    197                     for (int i = 0; i < avatarcount; i++)
    198                     {
    199                         //Reading the avatarname and the maschine-count for this name
    200                         string avatarname = binaryReader.ReadString();
    201                         int maschcount = binaryReader.ReadInt32();
    202                         var readMaschcount = new Dictionary<long, Information>();
    203 
    204                         for (int j = 0; j < maschcount; j++)
    205                         {
    206                             //reading the IDs and patterncount
    207                             long maschID = binaryReader.ReadInt64();
    208                             int count = binaryReader.ReadInt32();
    209                             string host = binaryReader.ReadString();
    210                             var date = DateTime.FromBinary(binaryReader.ReadInt64());
    211                             readMaschcount.Add(maschID, new Information() {Count = count, Hostname = host, Date = date});
    212 
    213                         }
    214 
    215                         if (nodeToUpdate.Activity.ContainsKey(avatarname))
    216                         {
    217                             nodeToUpdate.Activity[avatarname] = readMaschcount;
    218                         }
    219                         else
    220                         {
    221                             nodeToUpdate.Activity.Add(avatarname, readMaschcount);
    222                         }
    223                     }
    224                 }
     235                    }
     236
     237                }
     238                catch (Exception e)
     239                {
     240                    keySearcher.GuiLogMessage(e.Message + ": Node causing the failure: " + nodeToUpdate.ToString(), NotificationLevel.Error);
     241                    nodeToUpdate.Reset();
     242                    throw new InvalidOperationException();
     243                }
     244
    225245
    226246                if (resultCount > 0)
     
    233253                nodeToUpdate.UpdateCache();
    234254                return requestResult;
    235            
    236 
    237255        }
    238256
     
    246264        {
    247265            var oldVersionFlag = CheckVersion(binaryReader);
    248                
    249             var date = DateTime.FromBinary(binaryReader.ReadInt64());
    250             if (date > nodeToUpdate.LastReservationDate)
    251             {
    252                 nodeToUpdate.LastReservationDate = date;
    253             }
     266
     267            try
     268            {   
     269                var date = DateTime.FromBinary(binaryReader.ReadInt64());
     270                if (date > nodeToUpdate.LastReservationDate)
     271                {
     272                    nodeToUpdate.LastReservationDate = date;
     273                }
    254274           
    255             try
    256             {
     275
    257276                if (binaryReader.BaseStream.Length - binaryReader.BaseStream.Position >= 8)
    258277                {
     
    266285            catch (Exception)
    267286            {
    268                 // client id not available, use default
    269                 nodeToUpdate.setClientIdentifier(-1);
     287                throw new Exception();
    270288            }
    271289           
  • trunk/CrypPlugins/KeySearcher/P2P/Tree/Leaf.cs

    r2428 r2442  
    8383        public override void Reset()
    8484        {
     85            ParentNode.Reset();
     86            Result.Clear();
     87            Activity.Clear();
     88            StorageHelper.UpdateInDht(this);
    8589        }
    8690
  • trunk/CrypPlugins/KeySearcher/P2P/Tree/Node.cs

    r2295 r2442  
    7171            leftChild = null;
    7272            rightChild = null;
     73            LeftChildFinished = false;
     74            RightChildFinished = false;
     75            Result.Clear();
     76            Activity.Clear();
     77            StorageHelper.UpdateInDht(this);
    7378        }
    7479
Note: See TracChangeset for help on using the changeset viewer.