Changeset 2533


Ignore:
Timestamp:
Jan 31, 2011, 12:04:50 AM (10 years ago)
Author:
Arno Wacker
Message:

Network Manager:

  • Added simple estimation of network size (SENS) protocol on Top of the FullMesh overlay (works only with FullMesh)
  • Just proof of concept; protocol will be moved inside the overlay later
  • Beware, that under some conditions it might break...
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypP2P/P2PManager.cs

    r2348 r2533  
    1818using Cryptool.P2P.Helper;
    1919using Cryptool.P2P.Internal;
     20using Cryptool.Plugins.PeerToPeer.Internal;
    2021using Cryptool.PluginBase;
    2122using Cryptool.PluginBase.Miscellaneous;
    2223using PeersAtPlay.P2PStorage.DHT;
    2324using PeersAtPlay.Util.Threading;
     25using Timer = System.Timers.Timer;
     26using System.IO;
    2427
    2528namespace Cryptool.P2P
     
    2730    public sealed class P2PManager
    2831    {
    29         #region Singleton
    30 
    31         public static readonly P2PManager Instance = new P2PManager();
    32 
    33         private P2PManager()
    34         {
    35             P2PBase = new P2PBase();
    36             ConnectionManager = new ConnectionManager(P2PBase);
    37 
    38             SettingsHelper.ValidateSettings();
    39         }
    40 
    41         #endregion
    42 
    4332        #region Variables
    4433
     
    4635        public static P2PBase P2PBase { get; private set; }
    4736        public static bool IsAutoconnectConsoleOptionSet { get; set; }
     37        public static UInt64 NetSize { get; private set; }
     38
     39        private static UInt64 NetSize_timestamp;
     40        private static Timer SENSTimer;
    4841
    4942        #endregion
     
    5447
    5548        #endregion Events
     49
     50
     51        #region Singleton
     52
     53        public static readonly P2PManager Instance = new P2PManager();
     54
     55        private P2PManager()
     56        {
     57            P2PBase = new P2PBase();
     58            P2PBase.OnP2PMessageReceived += P2PBase_OnP2PMessageReceived;
     59            NetSize = 0;
     60            NetSize_timestamp = 0;
     61            P2PSettings.Default.NetSize = "-- offline --";
     62
     63            Random rnd = new Random();
     64            SENSTimer = new Timer(rnd.Next(60,120)*1000); //initially 1-2 minutes
     65            SENSTimer.AutoReset = true;
     66            SENSTimer.Elapsed += SENSTimerElapsed;
     67
     68            ConnectionManager = new ConnectionManager(P2PBase);
     69            ConnectionManager.OnP2PConnectionStateChangeOccurred += ConnectionManager_OnP2PConnectionStateChangeOccurred;
     70
     71            SettingsHelper.ValidateSettings();
     72        }
     73
     74        #endregion
     75
     76        #region Peer counting methods
     77
     78
     79        private static void ConnectionManager_OnP2PConnectionStateChangeOccurred(object sender, bool newState)
     80        {
     81            if (newState)
     82            {
     83                if (P2PSettings.Default.Architecture == P2PArchitecture.FullMesh)
     84                {
     85                    SENSTimer.Start();
     86                    P2PSettings.Default.NetSize = "Estimating online peers..";   
     87                }
     88                else
     89                {
     90                    // SENS currently works only with FullMesh...
     91                    P2PSettings.Default.NetSize = "-- online --";
     92                }
     93               
     94            }
     95            else
     96            {
     97                SENSTimer.Stop();
     98                P2PSettings.Default.NetSize = "-- offline --";
     99            }
     100        }
     101
     102        private static void SENSTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
     103        {
     104            InitiateSENS();
     105        }
     106
     107        private static void InitiateSENS()
     108        {
     109            string username;
     110            PeerId pid = P2PBase.GetPeerId(out username);
     111
     112            GuiLogMessage(String.Format("Initiating SENS Protocol ... (MyID={0})",pid), NotificationLevel.Info);
     113
     114            byte[] dst = incrementAdr(pid.ToByteArray());
     115
     116            var memoryStream = new MemoryStream();
     117            var binaryWriter = new BinaryWriter(memoryStream);
     118
     119            binaryWriter.Write(new byte[2] { 0xAF, 0xFE }); // write some header to distinguish from other packets - should be extended by a checksum
     120            binaryWriter.Write(pid.ToByteArray());          // write initiator (unchanged)
     121            binaryWriter.Write(NetSize);                    // Write 8 Byte netSize
     122            binaryWriter.Write((ulong)1);                   // Write 8 Byte counter
     123            binaryWriter.Write(NetSize_timestamp);          // Write the 8-Byte logical timestamp from last collect of Netsize
     124
     125            P2PBase.SendToPeer(memoryStream.ToArray(), dst);
     126        }
     127
     128
     129        private static void P2PBase_OnP2PMessageReceived(PeerId sourceAddr, byte[] data)
     130        {
     131            GuiLogMessage("P2P Message received from " + sourceAddr, NotificationLevel.Debug);
     132
     133            if (data.Length > 2 && data[0] == 0xAF && data[1] == 0xFE)
     134            {
     135                // Correct header - so hopefully it is a counting message (this should be checked with an additional hash
     136                // Header: 2B, Initiator: 20Byte, NetSize (ulong): 8 Byte, NodeCounter (ulong) 8 Byte, Timestamp (ulong) 8 Byte
     137                var binaryReader = new BinaryReader(new MemoryStream(data));
     138                binaryReader.ReadBytes(2); //skip the header
     139                PeerId initiator = P2PBase.GetPeerId(binaryReader.ReadBytes(20));
     140                var netSize = binaryReader.ReadUInt64();
     141                var nodeCounter = binaryReader.ReadUInt64();
     142                var timestamp = binaryReader.ReadUInt64();
     143
     144                //check if the message is from us
     145                string username;
     146                PeerId myPeerID = P2PBase.GetPeerId(out username);
     147
     148                Random rnd = new Random();
     149
     150                if (myPeerID.ToString() == initiator.ToString())
     151                {
     152                    GuiLogMessage("Received SENS message from ourselves: NetSize=" + netSize + "; NodeCounter=" + nodeCounter + "; Timestamp=" + timestamp, NotificationLevel.Debug);
     153                    SENSTimer.Interval = rnd.Next(300, 600)*1000; // timer reset
     154                    NetSize = nodeCounter;
     155                    NetSize_timestamp = timestamp + 1;
     156                    P2PSettings.Default.NetSize = NetSize + " peers online";
     157                    GuiLogMessage("SENS finished with a new estimation of " + NetSize + " peer(s) online.", NotificationLevel.Info);
     158                }
     159                else
     160                {
     161                    GuiLogMessage("Received SENS message from " + initiator + ": NetSize=" + netSize + "; NodeCounter=" + nodeCounter + "; Timestamp=" + timestamp, NotificationLevel.Debug);
     162                    if ((netSize > 0) && (timestamp > NetSize_timestamp))
     163                    {
     164                        SENSTimer.Interval = rnd.Next(300, 600) * 1000; // timer reset
     165                        NetSize = netSize;
     166                        NetSize_timestamp = timestamp;
     167                        P2PSettings.Default.NetSize = NetSize + " peers online";
     168                        GuiLogMessage("Found updated estimation of " + NetSize + " peer(s) online.",NotificationLevel.Info);
     169                    }
     170                    else
     171                    {
     172                        netSize = NetSize;
     173                        timestamp = NetSize_timestamp;
     174                    }
     175                    nodeCounter++;
     176
     177                    // finally send to next node..
     178                    byte[] dst = incrementAdr(myPeerID.ToByteArray());
     179
     180                    var memoryStream = new MemoryStream();
     181                    var binaryWriter = new BinaryWriter(memoryStream);
     182
     183                    binaryWriter.Write(new byte[2]{0xAF, 0xFE}); // write header
     184                    binaryWriter.Write(initiator.ToByteArray()); // wirte initiator (unchanged)
     185                    binaryWriter.Write(netSize);                 // Write 8 Byte netSize
     186                    binaryWriter.Write(nodeCounter);             // Write 8 Byte counter
     187                    binaryWriter.Write(timestamp);               // Write 8 Byte time information
     188
     189                    P2PBase.SendToPeer(memoryStream.ToArray(), dst);
     190
     191                }
     192            }
     193
     194        }
     195
     196        /// <summary>
     197        /// This is one reason, why the entire SENSE protocol should be integrated in the overlay
     198        /// incrementing the address is probably overlay-address specific..
     199        /// </summary>
     200        /// <param name="adr"></param>
     201        /// <returns></returns>
     202        private static byte[] incrementAdr(byte[] adr)
     203        {
     204            byte[] result = (byte[])adr.Clone();
     205
     206            for (int i = (result.Length-1); i >= 0; i--)
     207            {
     208                result[i]++;
     209                if (result[i] != 0)
     210                    return result;
     211            }
     212
     213            return result;
     214        }
     215
     216
     217        #endregion
     218
    56219
    57220        #region CrypWin helper methods
  • trunk/CrypP2P/P2PSettings.Designer.cs

    r2502 r2533  
    215215            }
    216216        }
     217       
     218        [global::System.Configuration.UserScopedSettingAttribute()]
     219        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     220        [global::System.Configuration.DefaultSettingValueAttribute("- offline -")]
     221        public string NetSize {
     222            get {
     223                return ((string)(this["NetSize"]));
     224            }
     225            set {
     226                this["NetSize"] = value;
     227            }
     228        }
    217229    }
    218230}
  • trunk/CrypP2P/P2PSettings.settings

    r2502 r2533  
    5151      <Value Profile="(Default)">True</Value>
    5252    </Setting>
     53    <Setting Name="NetSize" Type="System.String" Scope="User">
     54      <Value Profile="(Default)">- offline -</Value>
     55    </Setting>
    5356  </Settings>
    5457</SettingsFile>
  • trunk/CrypP2P/app.config

    r2502 r2533  
    5656                <value>True</value>
    5757            </setting>
     58            <setting name="NetSize" serializeAs="String">
     59                <value>- offline -</value>
     60            </setting>
    5861        </Cryptool.P2P.P2PSettings>
    5962    </userSettings>
  • trunk/CrypPlugins/P2PEditor/P2PEditorSettings.cs

    r2379 r2533  
    5353           
    5454            }
     55
     56            settings.PropertyChanged += new PropertyChangedEventHandler(settings_PropertyChanged);
     57
    5558            UpdateSettings();
    5659        }
     60
    5761
    5862        #region Update visibility of server group
     
    140144        }
    141145
    142         // TODO New ControlType needed to choose dialogs? OpenFileDialog not fitting.
    143         [TaskPane("workspacePath_caption", "workspacePath_tooltip", null, 3, true, ControlType.TextBox)]
    144         public string WorkspacePath
    145         {
    146             get { return settings.WorkspacePath; }
    147             set
    148             {
    149                 if (value != settings.WorkspacePath)
    150                 {
    151                     settings.WorkspacePath = value;
    152                     OnPropertyChanged("WorkspacePath");
    153                     HasChanges = true;
    154                 }
    155             }
    156         }
    157 
     146       
    158147        [TaskPane("start_caption", "start_tooltip", null, 3, true, ControlType.Button)]
    159148        public void ButtonStart()
     
    186175        }
    187176
    188         [TaskPane("distributedJobListRefreshInterval_caption", "distributedJobListRefreshInterval_tooltip", GroupExperienced, 0, false,
     177
     178
     179        [TaskPane("networksize_caption", "networksize_tooltip", null, 6, false, ControlType.TextBoxReadOnly)]
     180        public string NetSize
     181        {
     182            get { return settings.NetSize; }
     183            set
     184            {
     185                if (value != settings.NetSize)
     186                {
     187                    settings.NetSize = value;
     188                    OnPropertyChanged("NetSize");   
     189                }
     190            }
     191        }
     192
     193
     194        // TODO New ControlType needed to choose dialogs? OpenFileDialog not fitting.
     195        [TaskPane("workspacePath_caption", "workspacePath_tooltip", GroupExperienced, 0, true, ControlType.TextBox)]
     196        public string WorkspacePath
     197        {
     198            get { return settings.WorkspacePath; }
     199            set
     200            {
     201                if (value != settings.WorkspacePath)
     202                {
     203                    settings.WorkspacePath = value;
     204                    OnPropertyChanged("WorkspacePath");
     205                    HasChanges = true;
     206                }
     207            }
     208        }
     209
     210
     211        [TaskPane("distributedJobListRefreshInterval_caption", "distributedJobListRefreshInterval_tooltip", GroupExperienced, 1, false,
    189212            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, int.MaxValue)]
    190213        public int DistributedJobListRefreshInterval
     
    202225        }
    203226
    204         [TaskPane("connectOnStartup_caption", "connectOnStartup_tooltip", GroupExperienced, 1, true,
     227        [TaskPane("connectOnStartup_caption", "connectOnStartup_tooltip", GroupExperienced, 2, true,
    205228            ControlType.CheckBox)]
    206229        public bool ConnectOnStartup
     
    218241        }
    219242
    220         [TaskPane("linkmanager_caption", "linkmanager_tooltip", GroupExpert, 0, false,
     243        [TaskPane("linkmanager_caption", "linkmanager_tooltip", GroupExpert, 3, false,
    221244            ControlType.ComboBox, new[] {"Snal"})]
    222245        public int LinkManager
     
    234257        }
    235258
    236         [TaskPane("bootstrapper_caption", "bootstrapper_tooltip", GroupExpert, 1, false
     259        [TaskPane("bootstrapper_caption", "bootstrapper_tooltip", GroupExpert, 4, false
    237260            , ControlType.ComboBox, new[] {"LocalMachineBootstrapper", "IrcBootstrapper", "DnsBootstrapper"})]
    238261        public int Bootstrapper
     
    250273        }
    251274
    252         [TaskPane("architecture_caption", "architecture_tooltip", GroupExpert, 2, false,
     275        [TaskPane("architecture_caption", "architecture_tooltip", GroupExpert, 5, false,
    253276            ControlType.ComboBox, new[] { "FullMesh", "Chord", "Server" , "WebDHT" })]
    254277        public int Architecture
     
    267290        }
    268291
    269         [TaskPane("localPort_caption", "localPort_tooltip", GroupExpert, 4, false,
     292        [TaskPane("localPort_caption", "localPort_tooltip", GroupExpert, 6, false,
    270293            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, 65535)]
    271294        public int LocalPort
     
    283306        }
    284307
    285         [TaskPane("useLocalAddressDetection_caption", "useLocalAddressDetection_tooltip", GroupExpert, 5, false,
     308        [TaskPane("useLocalAddressDetection_caption", "useLocalAddressDetection_tooltip", GroupExpert, 7, false,
    286309            ControlType.CheckBox)]
    287310        public bool UseLocalAddressDetection
     
    299322        }
    300323
    301         [TaskPane("log2monitor_caption", "log2monitor_tooltip", GroupExpert, 6, false,
     324        [TaskPane("log2monitor_caption", "log2monitor_tooltip", GroupExpert, 8, false,
    302325            ControlType.CheckBox)]
    303326        public bool Log2Monitor
     
    315338        }
    316339
    317         [TaskPane("serverHost_caption", "serverHost_tooltip", GroupServer, 1, false, ControlType.TextBox)]
     340        [TaskPane("serverHost_caption", "serverHost_tooltip", GroupServer, 9, false, ControlType.TextBox)]
    318341        public string ServerHost
    319342        {
     
    330353        }
    331354
    332         [TaskPane("serverPort_caption", "serverPort_tooltip", GroupServer, 4, false,
     355        [TaskPane("serverPort_caption", "serverPort_tooltip", GroupServer, 10, false,
    333356            ControlType.NumericUpDown, ValidationType.RangeInteger, 0, 65535)]
    334357        public int ServerPort
     
    348371        #endregion
    349372
     373        /// <summary>
     374        /// This is needed, if some settings are changed via "P2PSettings.Default.xyz". In some cases (e.g. controltype: TextBoxreadonly)
     375        /// the GUI will not be updated automatically without this additionaly firing of the event
     376        /// </summary>
     377        /// <param name="sender"></param>
     378        /// <param name="e"></param>
     379        private void settings_PropertyChanged(object sender, PropertyChangedEventArgs e)
     380        {
     381            OnPropertyChanged(e.PropertyName);
     382            //this.p2PEditor.GuiLogMessage("Property changed: " + e.PropertyName, NotificationLevel.Debug);
     383        }
     384
    350385        private void OnPropertyChanged(string p)
    351386        {
  • trunk/CrypPlugins/P2PEditor/Resources/Attributes.Designer.cs

    r2273 r2533  
    11//------------------------------------------------------------------------------
    22// <auto-generated>
    3 //     Dieser Code wurde von einem Tool generiert.
    4 //     Laufzeitversion:4.0.30319.1
     3//     This code was generated by a tool.
     4//     Runtime Version:4.0.30319.1
    55//
    6 //     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
    7 //     der Code erneut generiert wird.
     6//     Changes to this file may cause incorrect behavior and will be lost if
     7//     the code is regenerated.
    88// </auto-generated>
    99//------------------------------------------------------------------------------
     
    1414   
    1515    /// <summary>
    16     ///   Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
     16    ///   A strongly-typed resource class, for looking up localized strings, etc.
    1717    /// </summary>
    18     // Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
    19     // -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
    20     // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
    21     // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
     18    // This class was auto-generated by the StronglyTypedResourceBuilder
     19    // class via a tool like ResGen or Visual Studio.
     20    // To add or remove a member, edit your .ResX file then rerun ResGen
     21    // with the /str option, or rebuild your VS project.
    2222    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
    2323    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     
    3434       
    3535        /// <summary>
    36         ///   Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
     36        ///   Returns the cached ResourceManager instance used by this class.
    3737        /// </summary>
    3838        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
     
    4848       
    4949        /// <summary>
    50         ///   Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
    51         ///   Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
     50        ///   Overrides the current thread's CurrentUICulture property for all
     51        ///   resource lookups using this strongly typed resource class.
    5252        /// </summary>
    5353        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
     
    6262       
    6363        /// <summary>
    64         ///   Sucht eine lokalisierte Zeichenfolge, die Architecture ähnelt.
     64        ///   Looks up a localized string similar to Architecture.
    6565        /// </summary>
    6666        internal static string architecture_caption {
     
    7171       
    7272        /// <summary>
    73         ///   Sucht eine lokalisierte Zeichenfolge, die Architecture of the P2P network. ähnelt.
     73        ///   Looks up a localized string similar to Architecture of the P2P network..
    7474        /// </summary>
    7575        internal static string architecture_tooltip {
     
    8080       
    8181        /// <summary>
    82         ///   Sucht eine lokalisierte Zeichenfolge, die Bootstrapper type ähnelt.
     82        ///   Looks up a localized string similar to Bootstrapper type.
    8383        /// </summary>
    8484        internal static string bootstrapper_caption {
     
    8989       
    9090        /// <summary>
    91         ///   Sucht eine lokalisierte Zeichenfolge, die Bootstrappe type ähnelt.
     91        ///   Looks up a localized string similar to Bootstrappe type.
    9292        /// </summary>
    9393        internal static string bootstrapper_tooltip {
     
    9898       
    9999        /// <summary>
    100         ///   Sucht eine lokalisierte Zeichenfolge, die Connect on startup ähnelt.
     100        ///   Looks up a localized string similar to Connect on startup.
    101101        /// </summary>
    102102        internal static string connectOnStartup_caption {
     
    107107       
    108108        /// <summary>
    109         ///   Sucht eine lokalisierte Zeichenfolge, die Job list refresh interval (seconds) ähnelt.
     109        ///   Looks up a localized string similar to Job list refresh interval (seconds).
    110110        /// </summary>
    111111        internal static string distributedJobListRefreshInterval_caption {
     
    116116       
    117117        /// <summary>
    118         ///   Sucht eine lokalisierte Zeichenfolge, die Refreshes the the distributed job list in the given interval. A value of 0 will disable the automated process. ähnelt.
     118        ///   Looks up a localized string similar to Refreshes the the distributed job list in the given interval. A value of 0 will disable the automated process..
    119119        /// </summary>
    120120        internal static string distributedJobListRefreshInterval_tooltip {
     
    125125       
    126126        /// <summary>
    127         ///   Sucht eine lokalisierte Zeichenfolge, die Experienced settings ähnelt.
     127        ///   Looks up a localized string similar to Experienced settings.
    128128        /// </summary>
    129129        internal static string experienced_settings {
     
    134134       
    135135        /// <summary>
    136         ///   Sucht eine lokalisierte Zeichenfolge, die Expert settings ähnelt.
     136        ///   Looks up a localized string similar to Expert settings.
    137137        /// </summary>
    138138        internal static string expert_settings {
     
    143143       
    144144        /// <summary>
    145         ///   Sucht eine lokalisierte Zeichenfolge, die Link manager type ähnelt.
     145        ///   Looks up a localized string similar to Link manager type.
    146146        /// </summary>
    147147        internal static string linkmanager_caption {
     
    152152       
    153153        /// <summary>
    154         ///   Sucht eine lokalisierte Zeichenfolge, die Link manager type ähnelt.
     154        ///   Looks up a localized string similar to Link manager type.
    155155        /// </summary>
    156156        internal static string linkmanager_tooltip {
     
    161161       
    162162        /// <summary>
    163         ///   Sucht eine lokalisierte Zeichenfolge, die Local port ähnelt.
     163        ///   Looks up a localized string similar to Local port.
    164164        /// </summary>
    165165        internal static string localPort_caption {
     
    170170       
    171171        /// <summary>
    172         ///   Sucht eine lokalisierte Zeichenfolge, die Local port used by the framework. If set to 0, the framework will choose a random port. ähnelt.
     172        ///   Looks up a localized string similar to Local port used by the framework. If set to 0, the framework will choose a random port..
    173173        /// </summary>
    174174        internal static string localPort_tooltip {
     
    179179       
    180180        /// <summary>
    181         ///   Sucht eine lokalisierte Zeichenfolge, die Log connection state ähnelt.
     181        ///   Looks up a localized string similar to Log connection state.
    182182        /// </summary>
    183183        internal static string log_connection_state_caption {
     
    188188       
    189189        /// <summary>
    190         ///   Sucht eine lokalisierte Zeichenfolge, die Logs connection state to the GUI log. For debugging only. ähnelt.
     190        ///   Looks up a localized string similar to Logs connection state to the GUI log. For debugging only..
    191191        /// </summary>
    192192        internal static string log_connection_state_tooltip {
     
    197197       
    198198        /// <summary>
    199         ///   Sucht eine lokalisierte Zeichenfolge, die Syslog ähnelt.
     199        ///   Looks up a localized string similar to Syslog.
    200200        /// </summary>
    201201        internal static string log2monitor_caption {
     
    206206       
    207207        /// <summary>
    208         ///   Sucht eine lokalisierte Zeichenfolge, die Log peer-to-peer related messages to a local syslog daemon running on port 514. ähnelt.
     208        ///   Looks up a localized string similar to Log peer-to-peer related messages to a local syslog daemon running on port 514..
    209209        /// </summary>
    210210        internal static string log2monitor_tooltip {
     
    215215       
    216216        /// <summary>
    217         ///   Sucht eine lokalisierte Zeichenfolge, die Establish a connection to the peer-to-peer network during CrypTool startup. ähnelt.
     217        ///   Looks up a localized string similar to Network Size.
     218        /// </summary>
     219        internal static string networksize_caption {
     220            get {
     221                return ResourceManager.GetString("networksize_caption", resourceCulture);
     222            }
     223        }
     224       
     225        /// <summary>
     226        ///   Looks up a localized string similar to Current estimated network size (currently works only with FullMesh).
     227        /// </summary>
     228        internal static string networksize_tooltip {
     229            get {
     230                return ResourceManager.GetString("networksize_tooltip", resourceCulture);
     231            }
     232        }
     233       
     234        /// <summary>
     235        ///   Looks up a localized string similar to Establish a connection to the peer-to-peer network during CrypTool startup..
    218236        /// </summary>
    219237        internal static string onnectOnStartup_tooltip {
     
    224242       
    225243        /// <summary>
    226         ///   Sucht eine lokalisierte Zeichenfolge, die Password ähnelt.
     244        ///   Looks up a localized string similar to Password.
    227245        /// </summary>
    228246        internal static string password_caption {
     
    233251       
    234252        /// <summary>
    235         ///   Sucht eine lokalisierte Zeichenfolge, die Password of your Peers@Play certificate ähnelt.
     253        ///   Looks up a localized string similar to Password of your Peers@Play certificate.
    236254        /// </summary>
    237255        internal static string password_tooltip {
     
    242260       
    243261        /// <summary>
    244         ///   Sucht eine lokalisierte Zeichenfolge, die Server ähnelt.
     262        ///   Looks up a localized string similar to Server.
    245263        /// </summary>
    246264        internal static string server_settings {
     
    251269       
    252270        /// <summary>
    253         ///   Sucht eine lokalisierte Zeichenfolge, die Host ähnelt.
     271        ///   Looks up a localized string similar to Host.
    254272        /// </summary>
    255273        internal static string serverHost_caption {
     
    260278       
    261279        /// <summary>
    262         ///   Sucht eine lokalisierte Zeichenfolge, die Host of the central p2p server. ähnelt.
     280        ///   Looks up a localized string similar to Host of the central p2p server..
    263281        /// </summary>
    264282        internal static string serverHost_tooltip {
     
    269287       
    270288        /// <summary>
    271         ///   Sucht eine lokalisierte Zeichenfolge, die Port ähnelt.
     289        ///   Looks up a localized string similar to Port.
    272290        /// </summary>
    273291        internal static string serverPort_caption {
     
    278296       
    279297        /// <summary>
    280         ///   Sucht eine lokalisierte Zeichenfolge, die Post of the central p2p server. ähnelt.
     298        ///   Looks up a localized string similar to Post of the central p2p server..
    281299        /// </summary>
    282300        internal static string serverPort_tooltip {
     
    287305       
    288306        /// <summary>
    289         ///   Sucht eine lokalisierte Zeichenfolge, die Connect ähnelt.
     307        ///   Looks up a localized string similar to Connect.
    290308        /// </summary>
    291309        internal static string start_caption {
     
    296314       
    297315        /// <summary>
    298         ///   Sucht eine lokalisierte Zeichenfolge, die Cannot connect to the P2P network. You are already connected or a connection attempt is in progress. ähnelt.
     316        ///   Looks up a localized string similar to Cannot connect to the P2P network. You are already connected or a connection attempt is in progress..
    299317        /// </summary>
    300318        internal static string start_failed {
     
    305323       
    306324        /// <summary>
    307         ///   Sucht eine lokalisierte Zeichenfolge, die Connection to the P2P network will be established in the background. ähnelt.
     325        ///   Looks up a localized string similar to Connection to the P2P network will be established in the background..
    308326        /// </summary>
    309327        internal static string start_launched {
     
    314332       
    315333        /// <summary>
    316         ///   Sucht eine lokalisierte Zeichenfolge, die Connect to the P2P network. ähnelt.
     334        ///   Looks up a localized string similar to Connect to the P2P network..
    317335        /// </summary>
    318336        internal static string start_tooltip {
     
    323341       
    324342        /// <summary>
    325         ///   Sucht eine lokalisierte Zeichenfolge, die Disconnect ähnelt.
     343        ///   Looks up a localized string similar to Disconnect.
    326344        /// </summary>
    327345        internal static string stop_caption {
     
    332350       
    333351        /// <summary>
    334         ///   Sucht eine lokalisierte Zeichenfolge, die Cannot disconnect from the P2P network. You are not connected or a connection attempt is in progress. ähnelt.
     352        ///   Looks up a localized string similar to Cannot disconnect from the P2P network. You are not connected or a connection attempt is in progress..
    335353        /// </summary>
    336354        internal static string stop_failed {
     
    341359       
    342360        /// <summary>
    343         ///   Sucht eine lokalisierte Zeichenfolge, die Disconnecting from the P2P network. ähnelt.
     361        ///   Looks up a localized string similar to Disconnecting from the P2P network..
    344362        /// </summary>
    345363        internal static string stop_launched {
     
    350368       
    351369        /// <summary>
    352         ///   Sucht eine lokalisierte Zeichenfolge, die Disconnect from P2P network. ähnelt.
     370        ///   Looks up a localized string similar to Disconnect from P2P network..
    353371        /// </summary>
    354372        internal static string stop_tooltip {
     
    359377       
    360378        /// <summary>
    361         ///   Sucht eine lokalisierte Zeichenfolge, die Transport protocol ähnelt.
     379        ///   Looks up a localized string similar to Transport protocol.
    362380        /// </summary>
    363381        internal static string transportprotocol_caption {
     
    368386       
    369387        /// <summary>
    370         ///   Sucht eine lokalisierte Zeichenfolge, die Transport protocol to use. ähnelt.
     388        ///   Looks up a localized string similar to Transport protocol to use..
    371389        /// </summary>
    372390        internal static string transportprotocol_tooltip {
     
    377395       
    378396        /// <summary>
    379         ///   Sucht eine lokalisierte Zeichenfolge, die Use local port address detection ähnelt.
     397        ///   Looks up a localized string similar to Use local port address detection.
    380398        /// </summary>
    381399        internal static string useLocalAddressDetection_caption {
     
    386404       
    387405        /// <summary>
    388         ///   Sucht eine lokalisierte Zeichenfolge, die Setting for nodes, where the internal and external adresses match. ähnelt.
     406        ///   Looks up a localized string similar to Setting for nodes, where the internal and external adresses match..
    389407        /// </summary>
    390408        internal static string useLocalAddressDetection_tooltip {
     
    395413       
    396414        /// <summary>
    397         ///   Sucht eine lokalisierte Zeichenfolge, die Username ähnelt.
     415        ///   Looks up a localized string similar to Username.
    398416        /// </summary>
    399417        internal static string username_caption {
     
    404422       
    405423        /// <summary>
    406         ///   Sucht eine lokalisierte Zeichenfolge, die Uusername for the peer-to-peer system. If this value is changed, CrypTool will ask for a certificate the first time the new name is used. When in doubt, leave the default name &quot;CrypTool2&quot;. ähnelt.
     424        ///   Looks up a localized string similar to Uusername for the peer-to-peer system. If this value is changed, CrypTool will ask for a certificate the first time the new name is used. When in doubt, leave the default name &quot;CrypTool2&quot;..
    407425        /// </summary>
    408426        internal static string username_tooltip {
     
    413431       
    414432        /// <summary>
    415         ///   Sucht eine lokalisierte Zeichenfolge, die Local workspace directory ähnelt.
     433        ///   Looks up a localized string similar to Local workspace directory.
    416434        /// </summary>
    417435        internal static string workspacePath_caption {
     
    422440       
    423441        /// <summary>
    424         ///   Sucht eine lokalisierte Zeichenfolge, die Directory in where workspaces you participate in are saved. ähnelt.
     442        ///   Looks up a localized string similar to Directory in where workspaces you participate in are saved..
    425443        /// </summary>
    426444        internal static string workspacePath_tooltip {
     
    431449       
    432450        /// <summary>
    433         ///   Sucht eine lokalisierte Zeichenfolge, die World name ähnelt.
     451        ///   Looks up a localized string similar to World name.
    434452        /// </summary>
    435453        internal static string worldname_caption {
     
    440458       
    441459        /// <summary>
    442         ///   Sucht eine lokalisierte Zeichenfolge, die Name of the world in the peer-to-peer system. ähnelt.
     460        ///   Looks up a localized string similar to Name of the world in the peer-to-peer system..
    443461        /// </summary>
    444462        internal static string worldname_tooltip {
  • trunk/CrypPlugins/P2PEditor/Resources/Attributes.resx

    r2273 r2533  
    169169    <value>Logs connection state to the GUI log. For debugging only.</value>
    170170  </data>
     171  <data name="networksize_caption" xml:space="preserve">
     172    <value>Network Size</value>
     173  </data>
     174  <data name="networksize_tooltip" xml:space="preserve">
     175    <value>Current estimated network size (currently works only with FullMesh)</value>
     176  </data>
    171177  <data name="onnectOnStartup_tooltip" xml:space="preserve">
    172178    <value>Establish a connection to the peer-to-peer network during CrypTool startup.</value>
Note: See TracChangeset for help on using the changeset viewer.