* text=auto !eol
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/Mail.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/attach.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/back.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/bell.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/bookmark.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/button_cancel.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/button_ok.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/clanbomber.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/desktop_new.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/flag.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/forward.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/full-1.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/full-2.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/full-3.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/full-4.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/full-5.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/full-6.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/full-7.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/gohome.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/help.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/idea.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/kaddressbook.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/knotify.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/korn.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/ksmiletris.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/licq.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/messagebox_warning.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/password.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/pencil.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/penguin.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/stop.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/wizard.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/icons/xmag.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/marktree.js -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/minus.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/plus.png -text
+mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.html_files/treestyles.css -text
mindmaps/Generic[!!-~]Object[!!-~]Sharing[!!-~]Protocol.mm -text
protocol-drafts/Generic[!!-~]Object[!!-~]Sharing[!!-~]Prototocol[!!-~]0.0.1.odt -text
protocol-drafts/Generic[!!-~]Object[!!-~]Sharing[!!-~]Prototocol[!!-~]0.0.1.pdf -text
--- /dev/null
+/* MarkTree JavaScript code\r
+ * \r
+ * The contents of this file are subject to the Mozilla Public License Version\r
+ * 1.1 (the "License"); you may not use this file except in compliance with\r
+ * the License. You may obtain a copy of the License at\r
+ * http://www.mozilla.org/MPL/\r
+ *\r
+ * Software distributed under the License is distributed on an "AS IS" basis,\r
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License\r
+ * for the specific language governing rights and limitations under the\r
+ * License.\r
+ * \r
+ * Miika Nurminen, 12.7.2004.\r
+ */\r
+\r
+/* cross-browser (tested with ie5, mozilla 1 and opera 5) keypress detection */\r
+function get_keycode(evt) {\r
+ // IE\r
+ code = document.layers ? evt.which\r
+ : document.all ? event.keyCode // event.keyCode!=evt.keyCode!\r
+ : evt.keyCode;\r
+\r
+ if (code==0) \r
+ code=evt.which; // for NS\r
+ return code;\r
+}\r
+\r
+var lastnode=null;\r
+var listnodes = null;\r
+var list_index=1;\r
+var lastnodetype=''; // determines if node is a link, input or text;\r
+\r
+// up, left, down, right, keypress codes\r
+//ijkl\r
+//var keys = new Array(105,106,107,108);\r
+//num arrows\r
+//var keys = new Array(56,52,50,54);\r
+//wasd\r
+// var press2 = new Array(119,97,115,100);\r
+ var press = new Array(47,45,42,43);\r
+\r
+// keydown codes\r
+ // var keys2=new Array(87,65,83,68);\r
+ var keys= new Array(38,37,40,39);\r
+\r
+ // keyset 1 = keydown, otherwise press\r
+function checkup(keyset,n) {\r
+ if (keyset==1) return (n==keys[0]);\r
+ return ((n==press[0]) /*|| (n==press2[0])*/)\r
+}\r
+\r
+function checkdn(keyset,n) {\r
+ if (keyset==1) return (n==keys[2]);\r
+ return ((n==press[2]) /*|| (n==press2[2])*/)\r
+}\r
+\r
+function checkl(keyset,n) {\r
+ if (keyset==1) return (n==keys[1]);\r
+ return ((n==press[1]) /*|| (n==press2[1])*/)\r
+}\r
+\r
+function checkr(keyset,n) {\r
+ if (keyset==1) return (n==keys[3]);\r
+ return ((n==press[3]) /*|| (n==press2[3])*/)\r
+}\r
+\r
+\r
+\r
+\r
+\r
+function is_exp(n) {\r
+ if (n==null) return false;\r
+ return ((n.className=='exp') || (n.className=='exp_active'));\r
+}\r
+\r
+function is_col(n) {\r
+ if (n==null) return false;\r
+ return ((n.className=='col') || (n.className=='col_active'));\r
+}\r
+\r
+function is_basic(n) {\r
+ if (n==null) return false;\r
+ return ((n.className=='basic') || (n.className=='basic_active'));\r
+}\r
+\r
+\r
+\r
+/* returns i>=0 if true */\r
+function is_active(node) {\r
+ if (node.className==null) return false\r
+ return node.className.indexOf('_active');\r
+}\r
+\r
+function toggle_class(node) {\r
+ if ((node==null) || (node.className==null)) return;\r
+ str=node.className;\r
+ result="";\r
+ i = str.indexOf('_active');\r
+ if (i>0)\r
+ result= str.substr(0,i);\r
+ else\r
+ result= str+"_active";\r
+ node.className=result; \r
+ return node;\r
+}\r
+\r
+function activate(node) {\r
+ node.style.backgroundColor='#eeeeff';\r
+}\r
+\r
+function deactivate(node) {\r
+ node.style.backgroundColor='#ffffff';\r
+}\r
+\r
+function is_list_node(n) {\r
+ if (n==null) return false;\r
+ if (n.className==null) return false;\r
+ if ( (is_exp(n)) || \r
+ (is_col(n)) ||\r
+ (is_basic(n)) )\r
+ return true; else return false;\r
+}\r
+\r
+\r
+function get_href(n) {\r
+ alist=n.attributes;\r
+ if (alist!=null) {\r
+ hr = alist.getNamedItem('href');\r
+ if (hr!=null) return hr.nodeValue;\r
+ }\r
+ if (n.childNodes.length==0) return '';\r
+ for (var i=0; i<n.childNodes.length; i++) {\r
+ s = get_href(n.childNodes[i]);\r
+ if (s!='') return s;\r
+ }\r
+ return '';\r
+}\r
+\r
+function get_link(n) {\r
+ if (n==null) return null;\r
+ if (n.style==null) return null;\r
+\r
+ // disabling uncontrolled recursion to prevent error messages on IE\r
+ // when trying to focus to invisible links (readonly mode)\r
+// alert(n.nodeName+' '+n.className);\r
+ if ((n.nodeName=='UL') && (n.className=='sub')) return null;\r
+\r
+ if (n.nodeName=='A') return n;\r
+ if (n.childNodes.length==0) return null;\r
+ for (var i=0; i<n.childNodes.length; i++) {\r
+ s = get_link(n.childNodes[i]);\r
+ if (s!=null) return s;\r
+ }\r
+ return null;\r
+}\r
+\r
+function set_lastnode(n) {\r
+/*var d = new Date();\r
+var t_mil = d.getMilliseconds();*/\r
+// testattu nopeuksia explorerilla, ei merkittäviä eroja\r
+ if (lastnode==n) return; \r
+/* deactivate(lastnode)\r
+ lastnode=n;\r
+ activate(lastnode);*/\r
+\r
+ if (is_active(lastnode)>=0)\r
+ toggle_class(lastnode);\r
+ lastnode=n;\r
+ if (!(is_active(lastnode)>=0))\r
+ toggle_class(lastnode);\r
+\r
+\r
+/*var d2 = new Date();\r
+var t_mil2 = d2.getMilliseconds();\r
+ window.alert(t_mil2-t_mil);*/\r
+}\r
+\r
+function next_list_node() {\r
+ tempIndex = list_index;\r
+ while (tempIndex<listnodes.length-1) {\r
+ tempIndex++;\r
+ var x = listnodes[tempIndex];\r
+ if (is_list_node(x)) {\r
+ list_index=tempIndex;\r
+ return;\r
+ }\r
+ }\r
+}\r
+\r
+function prev_list_node() {\r
+ tempIndex = list_index;\r
+ while (tempIndex>0) {\r
+ tempIndex--;\r
+ var x = listnodes[tempIndex];\r
+ if (is_list_node(x)) {\r
+ list_index=tempIndex;\r
+ return;\r
+ }\r
+ }\r
+}\r
+\r
+\r
+\r
+function getsub (li) {\r
+ if (li.childNodes.length==0) return null;\r
+ for (var c = 0; c < li.childNodes.length; c++)\r
+ if ( (li.childNodes[c].className == 'sub') || (li.childNodes[c].className == 'subexp') ) \r
+ return li.childNodes[c];\r
+}\r
+\r
+function find_listnode_recursive (li) {\r
+ if (is_list_node(li)) return li; \r
+ if (li.childNodes.length==0) return null;\r
+ result=null;\r
+ for (var c = 0; c < li.childNodes.length; c++) {\r
+ result=find_listnode_recursive(li.childNodes[c]);\r
+ if (result!=null) return result;\r
+ }\r
+ return null;\r
+}\r
+\r
+function next_child_listnode(li) {\r
+ var result=null;\r
+ for (var i=0; i<li.childNodes.length; i++) {\r
+ result=find_listnode_recursive(li.childNodes[i]);\r
+ if (result!=null) return result;\r
+ }\r
+ return null; \r
+}\r
+\r
+function next_actual_sibling_listnode(li) {\r
+ if (li==null) return null;\r
+ var temp=li;\r
+ while (1) { \r
+ var n = temp.nextSibling;\r
+ if (n==null) {\r
+ n=parent_listnode(temp);\r
+ return next_actual_sibling_listnode(n);\r
+ }\r
+ if (is_list_node(n)) return n;\r
+ temp=n;\r
+ }\r
+}\r
+\r
+function next_sibling_listnode(li) {\r
+if (li==null) return null; \r
+ var result=null;\r
+ var temp=li;\r
+ if (is_col(temp)) return next_child_listnode(temp);\r
+ while (1) { \r
+ var n = temp.nextSibling;\r
+ if (n==null) {\r
+ n=parent_listnode(temp);\r
+ return next_actual_sibling_listnode(n);\r
+ }\r
+ if (is_list_node(n)) return n;\r
+ temp=n;\r
+ }\r
+}\r
+\r
+function last_sibling_listnode(li) {\r
+ if (li==null) return null;\r
+ var temp=li;\r
+ var last=null;\r
+ while(1) {\r
+ var n = temp.nextSibling;\r
+ if (is_list_node(temp)) \r
+ last = temp;\r
+ if (n==null) {\r
+ if (is_col(last)) return last_sibling_listnode(next_child_listnode(last));\r
+ else return last;\r
+ }\r
+ temp = n;\r
+ }\r
+}\r
+\r
+function prev_sibling_listnode(li) { \r
+ if (li==null) return null;\r
+ var temp=li;\r
+ var n = null;\r
+ while (1) { \r
+ n = temp.previousSibling;\r
+ if (n==null) {\r
+ return parent_listnode(li);\r
+ }\r
+ if (is_list_node(n)) {\r
+ if (is_col(n)) { \r
+ return last_sibling_listnode(next_child_listnode(n));\r
+ }\r
+ else {\r
+ return n;\r
+ }\r
+ }\r
+ temp=n;\r
+ }\r
+}\r
+\r
+\r
+function parent_listnode(li) {\r
+ // added 12.7.2004 to prevent IE error when readonly mode==true\r
+ if (li==null) return null;\r
+ n=li;\r
+ while (1) {\r
+ n=n.parentNode;\r
+ if (n==null) return null;\r
+ if (is_list_node(n)) return n;\r
+ }\r
+}\r
+\r
+function getVisibleParents(id) {\r
+ var n = document.getElementById(id);\r
+ while(1) {\r
+ expand(n);\r
+ n = parent_listnode(n);\r
+ if (n==null) return;\r
+ }\r
+}\r
+\r
+function onClickHandler (evt) {\r
+if (lastnode==null) \r
+{\r
+listnodes = document.getElementsByTagName('li');\r
+lastnode=listnodes[1];\r
+temp=listnodes[1];\r
+}\r
+\r
+\r
+ var target = evt ? evt.target : event.srcElement;\r
+ if (!is_list_node(target)) return;\r
+ toggle(target);\r
+ set_lastnode(target);\r
+}\r
+\r
+\r
+function expand(node) {\r
+ if (!is_exp(node)) return;\r
+ if (node.className=='exp_active') \r
+ node.className='col_active';\r
+ else \r
+ node.className='col';\r
+ setSubClass(node,'subexp');\r
+ // getsub(node).className='subexp';\r
+}\r
+\r
+function collapse(node) {\r
+ if (!is_col(node)) return;\r
+ \r
+if (node.className=='col_active')\r
+ node.className='exp_active'\r
+ else \r
+ node.className='exp';\r
+\r
+ setSubClass(node,'sub');\r
+// getsub(node).className='sub';\r
+\r
+}\r
+\r
+function setSubClass(node,name) {\r
+ sub = getsub(node);\r
+ if (sub==null) return;\r
+ sub.className=name; \r
+}\r
+\r
+function toggle(target) {\r
+ if (!is_list_node(target)) return;\r
+ if (is_col(target)) {\r
+ target.className='exp';\r
+ setSubClass(target,'sub');\r
+ // getsub(target).className='sub';\r
+ }\r
+ else if (is_exp(target)) {\r
+ target.className='col';\r
+ setSubClass(target,'subexp');\r
+ // getsub(target).className='subexp';\r
+ }\r
+ \r
+}\r
+\r
+function expandAll(node) {\r
+ if (node.className=='exp') {\r
+ node.className='col';\r
+ setSubClass(node,'subexp');\r
+// getsub(node).className='subexp';\r
+ }\r
+ var i;\r
+ if (node.childNodes!=null) \r
+// if (node.hasChildNodes()) \r
+ for ( i = 0; i<node.childNodes.length; i++)\r
+ expandAll(node.childNodes[i]);\r
+}\r
+\r
+function collapseAll(node) {\r
+ if (node.className=='col') {\r
+ node.className='exp';\r
+ setSubClass(node,'sub');\r
+// getsub(node).className='sub';\r
+ }\r
+ var i; \r
+ if (node.childNodes!=null) \r
+// for opera if (node.hasChildNodes()) \r
+ for ( i = 0; i<node.childNodes.length; i++)\r
+ collapseAll(node.childNodes[i]);\r
+}\r
+\r
+\r
+\r
+function unFocus(node) {\r
+ // unfocuses potential link that is to be hidden (if a==null there is no link so it should not be blurred).\r
+ // tested with mozilla 1.7, 12.7.2004. /mn (\r
+ intemp=parent_listnode(node); \r
+ a = get_link(intemp); // added 6.4. to get keyboard working with\r
+ // moved before collapse to prevent an error message with IE when readonly==true \r
+ if (a!=null) a.blur(); // netscape after collapsing a focused node\r
+ return intemp;\r
+}\r
+\r
+// mode: 0==keypress, 1==keyup\r
+function keyfunc(evt,mode) {\r
+ var c = get_keycode(evt);\r
+ var temp = null;\r
+ var a = null;\r
+\r
+ if (lastnode==null) {\r
+ listnodes = document.getElementsByTagName('li');\r
+ lastnode=listnodes[1];\r
+ temp=listnodes[1];\r
+ }\r
+\r
+ //window.alert(c);\r
+ if (checkup(mode,c)) { // i \r
+ temp=prev_sibling_listnode(lastnode);\r
+ }\r
+ else if (checkdn(mode,c)) { // k\r
+ temp=next_sibling_listnode(lastnode);\r
+ }\r
+ else if (checkr(mode,c)) { // l\r
+ expand(lastnode);\r
+ // temp=next_child_listnode(lastnode);\r
+ // if (temp==null) {\r
+ a = get_link(lastnode);\r
+ if (a!=null) a.focus(); else self.focus(); \r
+ //}\r
+ }\r
+ else if (checkl(mode,c)) { // j\r
+ if (is_col(lastnode)) {\r
+ unFocus(lastnode);\r
+ collapse(lastnode);\r
+ }\r
+ else {\r
+ temp=unFocus(lastnode);\r
+ collapse(temp);\r
+ }\r
+ // if (temp==null) lastnode.focus(); // forces focus to correct div (try mozilla typesearch) (doesn't seem to work -mn/6.4.2004)\r
+ }\r
+ else return;\r
+ if (temp!=null) set_lastnode(temp);\r
+\r
+ // alert('pressed ' + String.fromCharCode(c) + '(' + c + ')');\r
+ return true;\r
+}\r
+\r
+\r
+function keytest (evt) {\r
+ return keyfunc(evt,1);\r
+};\r
+\r
+\r
+function presstest (evt) {\r
+ return keyfunc(evt,0);\r
+};\r
+\r
+\r
+ document.onclick = onClickHandler;\r
+ document.onkeypress = presstest;\r
+ document.onkeyup = keytest;\r
<!-- To view this file, download free mind mapping software FreeMind from http://freemind.sourceforge.net -->
<node CREATED="1236122299751" ID="Freemind_Link_1069566441" MODIFIED="1236122354932" TEXT="Generic Object Sharing Protocol">
<font BOLD="true" NAME="Dialog" SIZE="18"/>
-<node CREATED="1236123417491" FOLDED="true" ID="Freemind_Link_1660540085" MODIFIED="1236123438477" POSITION="right" TEXT="Hub Identification">
+<node CREATED="1236123417491" FOLDED="true" ID="Freemind_Link_1660540085" MODIFIED="1236819299996" POSITION="right" TEXT="Hub Identification">
<font BOLD="true" NAME="Dialog" SIZE="14"/>
<node CREATED="1236124236611" ID="Freemind_Link_780558731" MODIFIED="1236124257084" TEXT="Every hub generates an id string by random">
<node CREATED="1236124483890" ID="Freemind_Link_1498010716" MODIFIED="1236124589043" TEXT="This is the Hub-Id (Hub Identifier)"/>
<node CREATED="1236125114584" ID="Freemind_Link_1617168424" MODIFIED="1236125131976" TEXT="Unregistered hubs does not receive negative votings"/>
</node>
</node>
-<node CREATED="1236126779348" ID="Freemind_Link_1339348415" MODIFIED="1236126880977" POSITION="right" TEXT="Bootstrapping">
+<node CREATED="1236126779348" FOLDED="true" ID="Freemind_Link_1339348415" MODIFIED="1236819299995" POSITION="right" TEXT="Bootstrapping">
<font BOLD="true" NAME="Dialog" SIZE="14"/>
<node CREATED="1236126838827" ID="Freemind_Link_453620216" MODIFIED="1236126858610" TEXT="At least one, better 3 to 4, master-nodes are required">
<node CREATED="1236126861889" ID="Freemind_Link_265648584" MODIFIED="1236126877833" TEXT="Aka. "Bootstrap-Nodes""/>
</node>
</node>
</node>
-<node CREATED="1236122378771" FOLDED="true" ID="_" MODIFIED="1236122428484" POSITION="right" TEXT="Karma">
+<node CREATED="1236122378771" FOLDED="true" ID="_" MODIFIED="1236819299994" POSITION="right" TEXT="Karma">
<font BOLD="true" NAME="Dialog" SIZE="14"/>
<node CREATED="1236122492566" ID="Freemind_Link_1190748575" MODIFIED="1236122514559" TEXT="Karma is given for validating entries in the DHT">
<node CREATED="1236122431646" ID="Freemind_Link_29494292" MODIFIED="1236122473199" TEXT="Last activity in near past">
</node>
</node>
</node>
+<node CREATED="1236818932032" FOLDED="true" ID="Freemind_Link_1204819150" MODIFIED="1236819299997" POSITION="left" TEXT="Object Types">
+<font BOLD="true" NAME="Dialog" SIZE="14"/>
+<node CREATED="1236818952579" ID="Freemind_Link_1961919735" MODIFIED="1236818969501" TEXT="New object types are only addable by updating the software"/>
+<node CREATED="1236818987796" ID="Freemind_Link_188591190" MODIFIED="1236818998981" TEXT="It also possible by 3rd-party">
+<node CREATED="1236819000063" ID="Freemind_Link_385578906" MODIFIED="1236819012704" TEXT="Must be known by master/bootstrap-nodes"/>
+</node>
+<node CREATED="1236819026050" ID="Freemind_Link_1667260565" MODIFIED="1236819039189" TEXT="Outdated object types are marked "deprecated" for a longer time">
+<node CREATED="1236819040263" ID="Freemind_Link_1936301650" MODIFIED="1236819053202" TEXT="Master-nodes may accept or reject them"/>
+<node CREATED="1236819057430" ID="Freemind_Link_505959038" MODIFIED="1236819072713" TEXT="A "deprecation message" is always being sent"/>
+<node CREATED="1236819073435" ID="Freemind_Link_1001362763" MODIFIED="1236819086883" TEXT="A note of a required update can optionally be added"/>
+</node>
+<node CREATED="1236819096719" ID="Freemind_Link_259217829" MODIFIED="1236819111770" TEXT="After deprecation time they are treated as "unknown""/>
+<node CREATED="1236819117510" ID="Freemind_Link_1228871005" MODIFIED="1236819187199" TEXT="Other hubs should ask bootstrap-nodes">
+<node CREATED="1236819188392" ID="Freemind_Link_887331476" MODIFIED="1236819200697" TEXT="This compensate errors made by master-nodes"/>
+<node CREATED="1236819213718" ID="Freemind_Link_1450229897" MODIFIED="1236819243856" TEXT="Wrongly deprecated object types by the master-node result in bad karma by the bootstrap-node"/>
+</node>
+</node>
+<node CREATED="1236819279117" FOLDED="true" ID="Freemind_Link_831929021" MODIFIED="1236819299998" POSITION="left" TEXT="Update Messages">
+<font BOLD="true" NAME="Dialog" SIZE="14"/>
+<node CREATED="1236819311945" ID="Freemind_Link_71881649" MODIFIED="1236819334898" TEXT="Will only be broadcasted from bootstrap- to master- and list-nodes"/>
+<node CREATED="1236819339152" ID="Freemind_Link_774046685" MODIFIED="1236819364243" TEXT="No hub will receive update messages due to heavy network load">
+<node CREATED="1236819365454" ID="Freemind_Link_1204404067" MODIFIED="1236819386873" TEXT="Maybe only "good" hubs should receive this?">
+<icon BUILTIN="xmag"/>
+<icon BUILTIN="help"/>
+</node>
+</node>
+<node CREATED="1236819395918" ID="Freemind_Link_1584525818" MODIFIED="1236819442284" TEXT="Contains update notes and importance level"/>
+</node>
+<node CREATED="1236819472321" FOLDED="true" ID="Freemind_Link_168475853" MODIFIED="1236819487121" POSITION="left" TEXT=""Client" Connections">
+<font BOLD="true" NAME="Dialog" SIZE="14"/>
+<node CREATED="1236819488308" ID="Freemind_Link_1154203316" MODIFIED="1236819533272" TEXT="Should be interpreted as "application software"">
+<icon BUILTIN="bell"/>
+</node>
+<node CREATED="1236819549590" ID="Freemind_Link_1741675827" MODIFIED="1236819572277" TEXT="Clients should also generate a "client id"">
+<node CREATED="1236819572768" ID="Freemind_Link_518254369" MODIFIED="1236819577298" TEXT="Both id and sid"/>
+</node>
+<node CREATED="1236819583899" ID="Freemind_Link_815708604" MODIFIED="1236819600627" TEXT="Will also connect first to bootstrap-nodes">
+<node CREATED="1236819601271" ID="Freemind_Link_934296740" MODIFIED="1236819625910" TEXT="Ask for a hub-list as well"/>
+</node>
+<node CREATED="1236819612157" ID="Freemind_Link_480673349" MODIFIED="1236819634577" TEXT="Do also receive karma from hubs"/>
+<node CREATED="1236819638653" ID="Freemind_Link_692612491" MODIFIED="1236819657034" TEXT="Dynamic IPs are also accepted and therefore must be registered"/>
+</node>
+<node CREATED="1236819677106" ID="Freemind_Link_1445979240" MODIFIED="1236819691062" POSITION="left" TEXT="Client<->Hub Communication">
+<font BOLD="true" NAME="Dialog" SIZE="14"/>
+</node>
+<node CREATED="1236804847687" FOLDED="true" ID="Freemind_Link_1372827895" MODIFIED="1236819299996" POSITION="right" TEXT="Fault Tolerance / Reliability">
+<font BOLD="true" NAME="Dialog" SIZE="14"/>
+<node CREATED="1236805031745" ID="Freemind_Link_28699698" MODIFIED="1236805057203" TEXT="After X failed connection attempts a hub got removed">
+<node CREATED="1236805060886" ID="Freemind_Link_1795377892" MODIFIED="1236805073614" TEXT="Other hubs report this to the master-node"/>
+<node CREATED="1236805074337" ID="Freemind_Link_1595372369" MODIFIED="1236805094304" TEXT="The master-node probes the failed hub and removes it"/>
+</node>
+<node CREATED="1236805095936" ID="Freemind_Link_468909888" MODIFIED="1236805105212" TEXT="Failed list-node">
+<node CREATED="1236805111066" ID="Freemind_Link_192209809" MODIFIED="1236805126866" TEXT="Hubs are reporting it to the master-node"/>
+<node CREATED="1236805135129" ID="Freemind_Link_933570791" MODIFIED="1236805143745" TEXT="The master-node probes the failed list-node and removes it"/>
+</node>
+<node CREATED="1236805147958" ID="Freemind_Link_1309357086" MODIFIED="1236805152648" TEXT="Failed master-node">
+<node CREATED="1236805160627" ID="Freemind_Link_1228535079" MODIFIED="1236805192366" TEXT="List-nodes takeover the role of a master-node if no bootstrap-nodes are available">
+<node CREATED="1236805194058" ID="Freemind_Link_1324885722" MODIFIED="1236805230236" TEXT="This takeover should not be entirely and should be defined">
+<icon BUILTIN="messagebox_warning"/>
+<icon BUILTIN="desktop_new"/>
+</node>
+</node>
+<node CREATED="1236805256862" ID="Freemind_Link_489546245" MODIFIED="1236805284415" TEXT="If there is no list-node, hubs look for an active master-node">
+<node CREATED="1236805285629" ID="Freemind_Link_496844314" MODIFIED="1236805295805" TEXT="They report the failed master-node to it"/>
+</node>
+<node CREATED="1236805300701" ID="Freemind_Link_1831877789" MODIFIED="1236805333472" TEXT="If additionally no master-node is up, a hub will be elected as new master-node">
+<node CREATED="1236805370471" ID="Freemind_Link_1473765417" MODIFIED="1236805388795" TEXT="Doing so, all hubs are identifying the hub with...">
+<node CREATED="1236805389203" ID="Freemind_Link_1849074808" MODIFIED="1236805408420" TEXT="... the best karma">
+<node CREATED="1236805408843" ID="Freemind_Link_1303674032" MODIFIED="1236805414368" TEXT="This is known to many hubs"/>
+</node>
+<node CREATED="1236805415695" ID="Freemind_Link_1087780155" MODIFIED="1236805439758" TEXT="... most votings">
+<node CREATED="1236805440417" ID="Freemind_Link_585981486" MODIFIED="1236805465354" TEXT="A "vote" is a positive karma"/>
+<node CREATED="1236805470049" ID="Freemind_Link_616335445" MODIFIED="1236805478210" TEXT="Also known to many hubs"/>
+</node>
+</node>
+<node CREATED="1236805485261" ID="Freemind_Link_341438028" MODIFIED="1236805508476" TEXT="The "election" should take place within a specific timeout"/>
+<node CREATED="1236805519338" ID="Freemind_Link_515853064" MODIFIED="1236805539978" TEXT="If no election is happening the hub with most connections got elected"/>
+</node>
+</node>
+<node CREATED="1236805556971" ID="Freemind_Link_694830716" MODIFIED="1236805567605" TEXT="If one of the bootstrap-nodes is up">
+<node CREATED="1236805568757" ID="Freemind_Link_1701914366" MODIFIED="1236805604922" TEXT="The elected hubs notifies a some of it's fellow hubs that the bootstrap-node is back"/>
+<node CREATED="1236805612004" ID="Freemind_Link_561336762" MODIFIED="1236805631225" TEXT="The elected hub becomes a regular hub and notifies other hubs on connection attempts"/>
+</node>
+<node CREATED="1236805649317" ID="Freemind_Link_1745751398" MODIFIED="1236805654363" TEXT="Disadvantages:">
+<node CREATED="1236805655355" ID="Freemind_Link_1189063074" MODIFIED="1236805688061" TEXT="A new hub with only knowlege about the bootstrap-nodes may not be able to connect to the hubs">
+<node CREATED="1236805691077" ID="Freemind_Link_1581407665" MODIFIED="1236805728068" TEXT="Additional bootstrap-nodes on other server and/or continent may help here"/>
+</node>
+</node>
+</node>
</node>
</map>