From 6ba5efcb425a96147b670f78c9603d25f0745e39 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 2 Oct 2024 02:08:41 +0200 Subject: [PATCH] Updated documentation --- docs/Reticulum Manual.epub | Bin 2569597 -> 2569763 bytes docs/Reticulum Manual.pdf | Bin 2413373 -> 2413189 bytes docs/manual/_sources/interfaces.rst.txt | 17 +++++++++++++++++ docs/manual/interfaces.html | 17 +++++++++++++++++ docs/manual/searchindex.js | 2 +- 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index 74fb365e71f6ba0ab3f3ef77f6b74223f9a3560a..8bd38d27b24943e3718a99503ea5358edb3321b6 100644 GIT binary patch delta 12711 zcmZ9y1yCJLu*Zu-g1ft%1b26LcXxO90|a+JI6;EDySux)yAvc39$((Ox9YyB`c?n8 zYiG8nr)su#w%^aPzzZ(2z-x%W;g(Q@wZt0Ahm)wlDS;a65hg4AQ4pJrg6mmw91vnL z6l55qiOH88eiGQ@u?|uPrl>1fK>oyjT>Xx>+VYlqaJw`N8jd@WWpE+0A<-#Zn~?T%J2PgzQa>Pf`8gX6 zKNfdt5rDyFT#%j4Hn-FVO-$5?Tw9jStlI1tJ(p#5y}L<)a8N} zUNfU{rbHLC;pQkq{anyjuf0yGn3{>GGHqJ4jupfcP}yzWQ=|ny^cORl*P>y1^7=;8 zNbU-%02ed`mxVS6Yj^|9oPYVh(bf|z0e_e^90A=9-@drhJeJ?b4LUaSXB#_?^e9dy z4@Ok}DQT?R|1BiThC=iBiX1f3%|5ZB-tNGEQdpDm%Wd8hfzO_JpiG{Ng)++sIaH`z zOG&#vw%_xv+=cAg?#J(VWTbJV@3;1Xu#-xn;UPs~rPv|*INiawWWKtx79Z|TRu$Pz zTE4&uhEl=x=9Ek&_%`OKuPTHQ=|0eNEqYWBTx)>#cBJ=KV!yuLZ$Iro`mx~bS8Hc@ z{JS9LS=Gbh$28PLm$(a@-+=`K6y$F^%YN2ldF6;?nn**xCC&4!v4v-{&yzJ%X_lqW znhj`1aBeR$gHqNp$bvE_;NA7jRaD=C4)=iEy||IKzrVemTuZNyRQ2JxNSqZ9^|;2f zFdN=^?GhpJDDPewcFpvg88-lqltFCbC;p}#5?CaTd`2D|PR=CSQ7=ZcvsiUmI6fRc zZ5AL=3!VI3`#oEQx13P{B1g?BuDtDkWq-_aBHz8aHJ1lN$*wDeLv^M}6y)&jE-wI0efQKhNY%IrK7H1O-|K)K2ygFrvBGLynY}4!&=_n0^&qr zbTz6|ICFv=W*SDy!3tS2Abe@tz&UWO8mvI&XFTSpBfd11$q;t#9_whDY+5=hcc_Q@ zH$sKt4q9`Q01GqYn^4f+P?Di`y*UFh=8#C^4t;2I4hdzbQZC*-k=bnmN<*cFU|cbY zHiX|}^a1Vt6|nWU1qw=X!)GNUuwMI|wCN_*SL_yrUqYd#B*|Kf{Ezz2~k z&IFF6|N2KFK)5kX<5u{Gl|HZj5Ub)k|3mBI)ohw03TMR?^Varj5dP7TY`0mi?+%fl zA+p1Iar0zc^Q1!aB=N($@47s1x7}Y7dmQXo8%frxp9EN~ddt5}l=l7C{~&9q6f3Yx z=@q{}8Xb1UC;uRKIp*-KVQ=-iMcdx@Ibl8lGHZVzE6PAZVSs^w!GV45EAP|YrZ|0h05Y$*Q;yQwI&f8x*14Ls6++Y;MM?z<=h7})-0(#r)6 zjus7SJf#mUfexDOWG(Cu$ow{%%xv{d-6Y;i0Pul8W`;bevmGK4|B=e<<-B zMS0F8-Fcg*v!kPv6H{l4z~p%SkN)cJzpp!xIjc!wIVJh&ZaE81wL2DZSDQYr@z{%7 zQYfJcAnM3l`1g!5?ytw=B^9dgw$-KBf8w6{AV0=wr5EcvT`K7#J1U;~ymA()3&I#& zb%6}IgJ-(ai~Ju3bt~P8`csCQ)~A@cHuc z`J!du4jkQErEnbT(pi#OXOzAMNPH8iaLX=9!uD#Kv5+gRufM@;)TYmGEz2PqX}&Yf zuYWQsO|y%b)RE;!Oss4(mR>{8rdk-vIg9rW6=3VEhJS$nc|6%NwI)_sJ9q3Ub zBBPnHsgr&@XuY)Hma{3SBd2y;Y6pNaAYe4%%|5&xo8wqI-sO#;-V>ySEvW@$BLTgX z#KrQYpJYF{8alC4xtxae@lGr54Mz$}7CM%^u+E-Ww>tDz{4TLl^}V$*6L{zRJAe#` z{Cqtg00mGO{!38T*BmT>z;`myBvva;Ht3f2ubE$`ibP_X%0ibcd4>Bsc1d+Y$S08!+nSH{LQ9v zh*r{+>Zspo+0tqUlB~jldII1jT^%_0kY&!tpr%@WBfLCblO0sm$I76V1|oG5#4Mv7 znwFA8K%cm0rA(ab@%+ZB&TGI>kfGB#^B`2D8VxXRoWX5Oa?;s2Qc20NjPrl65L}-< z&)%}JWLH4`T0~3LI3k1^KUQHWCZ}<)JdGi~i^`bAVJ0<^RMB_BJ14~|a|3i+f1?1S zn||QpE9V!r657^T3NN%mfUQg|qn_DpT?W4n9z(q1@n-!BdbMrMEpbT+ercs9-KhZ^ zf9tDq9$d&VqB4_i=rw5&j0)*9Tt9-e_eY~AKV$ux#0w-wGh)gpPB8Ob^YOH^4^0t^ z*o<##{yu)kaFLsunLaB=t_CCwd-&k*Z1%X5D@ejQ@Uz>hi3Xx%3l?HG)~I$as0k8m zibjwIcK7EOO|4fpT3PIVcd#JL<}F5EqZ8vf8>#epqS+In1yL{8{UGpyFF!iwUssM^h^bk&z{8R_ZyNU@|XLm71R_H z(!kVcGJ1VS`-BHG+@Av8(a{aLSpbQLe_oK$eU@QCey<7qP^p&!?HO|){sz3mh0*KNcEnkAB}`o zlo0(~xNr$_JkshO)&}QY8W-7b`@|v-RJ*sz>eIgXzq^0`zJ5JlxB`AOUou~G@~ra& z&fwdoK@HZ+@fibKUpuSVx|Yu}RQh`~&QIQbuMhNAON@f-4*O-3i5|lB4e62=M@nNBt%U|kvmm*y$SM3*9!C`51}T9-@i`-!$MJ)J+>8jh8|a$azZU>U=9n*j$0iy$9IlnP7KyiIKb{s^X}R%!50 zT?yqcP&nDZN1u~l1I=bx&UN4X_f030G;%h@(9E9L!^1{lN=5J<9J6p749^#gB=8Jj zDn`r2mscJN8fsWHh>yxjRwGHE6vT0ELiop>N8Ff0#Gm54t{&P3N;A)AhPu#Dd?9bR zNmN4x4kVoJtb3aXQJ_zQqH)A7crJL0u$TgNh<0RvO3Vl}QOp9%Or#2=ca|h?-QHKSJkU$1#}vsZcekjZ{D#ke56@plA-LdPu$fD3Kaszva>@%<*C}) za0a1(o(>IzkwoWgI2Q|s`Z;3hRXCEa_@Q8%rB+4}_65YF1TWDZRS_QgEq3(f%k~}X z0XTa_yli7<82Sg3_a5Y2W~h#Xt4}LVNmHxQRl^TO__%M;8u*%JPx3^({QUex>7J?* z%XTj|)rUfA&W3MdeA5a1)J;6GCwZ~kCyTSdbwqn|-+Au~$x8gN;u8ApS*cX*{y@jz(X2X9P8$-nZ=gs#zaIa(#Pl7>tZ5a?MB z+{?-~*z-3XMq3NSudp=#vYK4Ir5zwQWNNsP4FB9ba4LOiVR1q3fh*@t#rQwzu<_pM|WdS8)~v^g^nI!g@mJrzCTizHRLbv zjKh{5%T!Kb`e?6K=gep5no1E365#DH&0TPK1#{G%;Rccf$J{;a*r_DSN%fn!^L)e9 zO)TRMfT;*4JhZUn@1{N1Z-XqJS;?(%S9v}88Acvy`InztW&VZ--#J{3FmEy(s2S60 zC~PUO=hZwPT*?!RS9TGA&qD(9O^Tw)AjJGhKf^W?&ux9XZi_)Cm@5bgHK#NR80*W*RP*x?3r@v8)J}U)H>}tjjUcPUM!{-v)+ce` zhLU0oU#U_hF(Ze29)8y_uA5<}IM`*61FZtwqsq9JzERXly<v$H$QTClsOlJuTw z!LyShpC!R*lIEXVA*u zL&BKLhvOtpFD9e6R{0k=l9XSaz}1olUVnk>Bw7EN0AEbvcq2scKtN~eia@XDv1)!w zGJGR~yn2LB3Vb7liz?|gf3Th4NGf~d1ZPRwe~SXHkLNY49CPko1eV&@%(t*z9M8q?IPP8OSGd(i>REzF1peeX(L^m#NL+VCg`?=d)F4#)~tu~KN8h0UYLY}$t|wdF<+vhLCpyO^CQ%y>R+ zSzrTBnV?h3lFe%oIVG=PsZ+b`g08ron-F zQrT_-Gh@i_cX2h1CZyw#fs=bN`mDXr&&?0a@&0hQK4=mS2ymQ@=JfvNyjJeALpY0P zKao|Q#7c6J)#bV8D+$N;*ZcDuj=y5VlYfpkbCyiv0{(I8J5N)_^X$;5W%Xr79mRd= zwz*=xxJa^VL#aJfBYrK0iA_;>hfYzG%7e4WLUUQh0##nV*7_F=e14Xy#n~;SYqv4(d!Qig@VVLK3DclT1|=4RLJizlX{!Jg`!e|Sr#)uG(p?q~`!0-M&aX=Y3XH~*e~&XuGo2A?{!PH=du4rh%@ zTw`Z>xjvFTEBg7lNitD;?=lpN;yepB4z@s%0@Ga{*#baq;t^rNb zM8yQ-oyZ>#*swdr<@l4E)IaPtd?tySt(M4~&g_=&Acasfvv7g(#0!Dh;U-624karR z$iHJZv0a=iH4h7`GaTd&3y)_G0zelBUwv}adI$e!_KT(Bm1Mo+fQ;{kOLJvsqQPM) z%uyKi5-VnsiTU9zl;`+Fb^!&zQJBjK#d{Sm`n&H%Os{Q-m$sk5bGQIqAGO0O zAjReIwtXC&oCA=%{O+F5D?8ni_$F2vKUV+^Ums`F4)VuFQ?89qj@J}WK64nEST3%Q zxckFoz_xzcfSmT>W_FhEt=>4z30;kBpe z``^T?{dl6A5hLjm1rAfdIN09xlWFsI^3hU@tmYv&c3eJDb`FO0 zB{t1V<%7&)S)Qp_ZuaD)+L-ZIYF_g(rc)yPF~a5r+^{8KuE2n}YEdj)hEN~G+>b+q zpY}{-sJ~FgtfLgbiYMKoGsNM~!&sqLKhNe)e~zcgj~xhR_4m&K)y3N|w6cw2$VCWm zc-b8YbMyaV@9=z?B>woj_kt{N5!X(Bg2^#rvDt&Oej=NH=|4fOpEJ6%eI#CrdSM19-iI3z1^X%16ZHhklxxZW{_y?X^|SKIqd4p*2JjCfX}!)kAnw)sLTcuE8|Fw%Saj84~N=_NVLFVd>V zh>6f6)YV`Q`e*aic6V2M(0HTXoB=5^vL{^&#$LcW#9TlwqZJ~1c~46B1^&olVah;Y z12@KMv>Z_`>XsVI{nze!d{zg-@h>wx$8t43jU4Sf2WmSBmsjd7Ld6hqmYemCYTZG# z&V0*#c05>Bz(e&GANi1D2LBEY_F|fy((Ksl-)?QY+{S1$_F+kWj%#rAh#c;b(tJHC`n>b$w$j5l!H3S`t)zY_0jzoHV4IxVw2 z#1$d`^_EfpJNv`uDAy+a1=(SK3h0R_@{xn{`c!0k1l)?P>^2hwOFa&D#v>;OphfOU z&nPYRh*G^M$2wOflzl@P#%=KORFYOjogFBNj`78@3y$(Ep+J2Ef5@NAb7{TUM`KIY zGqU$6FdP@;5HplPJ&>bM-lu6*j9u3Iw(t3qu(0-}F%L#h!x~Sg?h<%;= zUaM^EKZ>o7WOQ32&81`qxIy<-4QRv+DUK7f^atCU>HaEQ-pn})K;46FomRdIUGXClF?mHq{>rBWRecY|81YY+qWEj)hPW1k2jlE^p=10AkHYBbS z@@pft z>4KO&A7K9;;<L1K6hLKz~w_a?8*{n+>Jx*t}xdDN2C z8!OOKVy(%F&RH$7H$Aak5$kGg=gV}M3#o9&+@8UW_eF_5o&%)nLe}vmh_DCJE5Od% z&57VR`D@l4hi%_weA+6>1RGx}p}0i1(Z7uCdqpH|l5+He?x?40Th6uXkBFfnwvNpl z;{8VZjUS3irtQ?dDuil%gT_m0qYO<=(#^_hK4(rl1WFh=Nz&?%Uppveuo%;jI?+$VMfD`$(a(GS~1=h$i@_B{h z+E%2-y|2EAQ>3CUsv)o@JH|*_1@hLyv&kjU?ttWsT=-V1PXE5I_OEyLn00-YSCRa0 z^J^43Gmxh2>fpEhL8Ef`k=LAe6%JBd-ljEwAESgGR71zqcL+1Q4=D(#3lzI>sneeH7Uw zLCQ|YaRg~vnr;++-{slB><9kvs64-|MNN zD~pZua_ZOJ&|$1pI7hXcd{vrA6M6oyfTy$BV&hF*sqWw-rr(MH_ZF}_YZ1+lllw}O zZW@?PX3l5ZF6mbZe7^^Re*5!HE0U7L^{A*s=H^0jxvi$*GpPhvWgZf)d=1uj$PQZk zHUkF`oVFKzr#%yi4ho>)wmYZVwccZkDRchSZ&@!jzryHj_EWMirM0}Cy;> z1iMir2pQ~W(8g`9ivnE0fNdH*FN`<*wWCa(v1!m@G~8OojHhka)!>5E($~77m|Uqi zc|5W35Y&;)K{;kUyR-6F=T7MgVX$i~#Y`;UI1J2u$UbZOaEcb%+mXuv!!^mqj_xrE zs<_7+GwJf>N>G-rsZUOCCj8uZs4N5I9eRL|k^kb7sWlBGv<9N56ojV&k=8F>swIYh z{9eUk>DQdL$>QHrWsTGK3a{QK=z87_LnTqudz62XDa`P#GIa7Ox=4K$%avON`lzt` z5+xp{+m|XDlljv~MAtKH%)WSH~jKk&I8P}8Up1xI{FAkL? z$sSwX-m1}p^9tc*%-(rapSvsn2iJa_GpV7#Njh%D%wwuB2s6i`lB>~yd5Jw;?aF4l z&b!yHK|LkHS6x5PvULhgh^UpAA9o61dgPkoZHRlLrw7!>oetpg+Yw~PuY#jGL}cry z!ozm7RGO0|1*F=NKwf+v3IIQRl9r_v|BlX6wa+ z!}oc6q>@K<+}VlsFAl^l*n(yEBGGgqX}+W$$<$X;CbsuKzh$7AyQ)+*3N7i)+^$cy zY?(pY-~h3&t_Z#p704Rec&OPjUU_DVz+31s@Q7P{RCzbgDEwJZSh*;;*Ipy)yk^2% zKBZ(E)mmXMAYi}n7jE*JyUOl40BfLepvQ6W@XW;DNWYzNuP;bi2R$K(9n`Ve80Shz z^|#*g$Po?_|IvM;Mt20OljVFTT}si7V)~-2MhCQ;)flBR(<$0#6r``$@T}y#O-;GR z+wejbbPcJdE_(8-L>X#X`nN&tpQ~Rop4;esdk84z-y{+Z*j9 zCa-u{N(LX=8n}5D0W!)>}d?&Wc z3S^acMf~F&o76D923&qPFQ?(U#)$*zk$EIB#0_0SDJ@kDoZ}}{syUFgmIISHc2{-g7jQz94`jum(Qzf1K0qU~5n1(Mu!%{Sfa1c+X2}ZXaO7O9h zqgUX$98rY+~d&(jaE`l6Z%+2k2zK^)S-UWm^26XALc^<2KRAY!ez zy_0DObZWcqhP^TZj8(IWY)ch@Jo#xYDmx8Yc#9AwLpeC=tK-8b!{JF$mSW%97raVs z^hy!oCwWN7gTo@HXh~Zj>QGmx%Ps8?YuuhHX87suC@M;Y%&A3X&PE;+N7<*B6-YXZ9xZcC`wu&Gr$a3OT=6YEm3^}yRM zem9OAIe5-`zD-~syYSTkIH6jEf+=CGU|;cq0(e5-V8P;{+J#&~&vc!SO@usu$q!}K z64x3o%%fDpEX}~Yr#VKu5z;S+DiN?D`17NSWeLg(_d3m8;gvgG<54x!%Vur*{`i}X zO+9AEz6>;Rprx@7*_Rp$#$t#myp?FBa%o(HJGSx*d#5LX_Jyxjz=Tx0LoyHwlX(hJw)3@eK8M2&AjKP234vzt5U~C*zEFV{c+B-@ePdKNot{X-k?gcyzXkQz8r$ z3a+ikR>*p`2e02b(Ck>CFWiho1I^AO&{Z9GIJ&iN+zbE4wtTy1UR_P-*NzSn|JeBR zYZg48A@g(H`v&)cCR!wl?=GeF7})*9(@KwuWfdqTSlDHe_I<&(CleZ1s!k2I0#5+t zdPu7Po!=_4eH<#W+V{Bd%dRZ>q0Z#k4W{?%%uL~! zjtrKStraq@eSsp9&g5K;5V|9*ZRXM+iRck9J_#Sk4}y(xS-CuHoH+Ks{3EraX9&R6 zl5dlSgjvoQonHX5(V_S>LBe3a6S}99 zDQ-f@!P%Ns|&T!@y zM0&86NkTSAJND7RipS!`MXxe9c>&!!EfG4*NxDnlPK*&oTsW{Rw#uwKnmBRcDnbha z7nOJAw|julYF1czh{fE)kl`bH7$tEqhl?>#<^I7eV=Y;)9!eLty7$6KPJrG5- zIY0a(zubsne~8@p(sm8|N)%W)t`d|tN`+*XO9d?rz%R>o zD2_36esicRqq60P`FzD+7%Xi{>ASLy|2hZ}P4f(amT&TOiRmEhh8`M(q6n`Jx}qCF zKZXSAgeadaEa)K^WUzO_K(Nkqi?1RWl+kI*QbMx#f89t%7;&?i@QXs-a(_!@gAAP5 z%unrapINu(HCHDu3b61}nd`@hYDvhT>z5ps^7cqS7|Yb|@fAFaOBK_-*c8YWsXQW$8{OnZ!B6soq=QMjZ? z#;P~)wK3?F(FHm(mz-gQafy`SVPG%q%NzIVvf~( z3@C{^3qydI%Bc=oo%ESx95=Tf=xII0`TDH`#<4Dkvf0S5KP{IxLj$kmm;Sn|YmSSP zlLV+DxwKL^K-mWUq{}tjEdxsW(QDhdP%cSv)Jjz3A^2U-;EgopQRvG_^{%L;YyelL zQ*VUl^r<241901V&Uw!*qd1Fk>uNjaXW;FKaR1qObeIxiyE=uNv#NdS*mr+1=+eau<` z)GsF0B)|2FCVsZu{dh8FN>yqfrN9+orljVyTzf!F(i(z7F-BM~E?PF!K)x*~Xp}Qy z=ih!FqajcT&Ra#?Mw&4A88K>qe(#Mo55oir_K&^T_v-#zlczGe=rr-`7(R6L=TZs{h$`5*$}$A+=CBI3$v`XC zyqNROJvG~;Mo;GNu7k`BWh8Ck>hm{pr>{@SW3ptNT2qR+wogEm$9%2|_GO}KB!$6^ zv%S$bcKPjO+Xg2t7`%%P=D>64-`N99=E|?bCX8VmQ;lsTXlxvin_~z>tG)9{Z}0xC zRH`kqrI|4Uq9YBY=+jWO%&j=$b0^a1rxx=K2b>u6-a=>Kf9&MWWK>#CVR$#Ko?RSj z2l5CPV}h@3219^OsP*;yiu~Tj->>bixx=_dx2k^EVR3T0LI7c{M&$X4RMt|#@044k zv5u4Fy=*FJ1UM4n?6n}f+ACXsG92Saa*%vQhl`FMRoGkb22&&)K#&moUL=7I>z;P} z$94nW9p$$bI>NAAt*qXKPrE2Ba~FD`Wy>fYr$~g1g5YKgJ z6@TH>6cpgl9NwJnPO<`t7460pMLcf{W{U8N?}K)t?=QW*#RR5fk8!6NI6jUxSt6FF zr(xJLDm(^;3dc|nlU`vSVhN&}gl***a7bEnQEM}C_^r6P@@8FyGdPMYU zXg)tz$6l2wm9GLlkczjZ*NVQ`_$R>`D=Qe4&fbpzllMfo12#1(CfeLXMl}P95_p{H zXqMAp;3s zbN-1?2iJZ~oofeI`hw`BV>{&2KTa<8kRkg|bBI~YvMzqc81Yzlu_SNtA1y15NmM)AyfXkqyF$6kS?s7aIVZ*9F6`H(^X(9oo z4O6I#e|SHS84g7*yuJ?7dFv|~yI{up9?Rw)qId7HKo(UiK0O}GyuMTn4Yp={h*gSQ zZos>3;1t*Vrr>!G*L*vQ_R_t|8eg&gX6oeX1O4LD_|oJfChEKlSOU4kOg3e%3}g?m zL~)HM<6>y)g6Ms?-{)bw=G~6fTqkoOpmM{QD{FBF@fT0Xax~-dtnmS#8cCiQ7o2f$ zXF`t6AS(Z&Fta-sbdP{p3FlRBa=)dG52@ufgdJ19mTE5k#U&Tl#%W-? z#6c#h<2J1Kk6=DtZFo*j!q$YUWiDJG;OFY34Ko<`bJlFU(r&VOWxy$?K$sBg_P1}I zX^Zw?b}MJ@y_3FkSMo$kWa^|yoP)CRgqZZ>%u~Cormr3!o<=KMksKI%h|I}Jxpxoms5mv_WvN!O*o1g9ygvEqls)p#N^x% zSwF#M!DSU#R%N=mx68z{;9m|c9eE;-ZZs|$;hMwMo<`=6S0+-VJ_Y4jViz7ER8KkE zQh3*}9IZeRRReiz-!at?)`4#{Y^X;xPqusl*WW*WToLPRd34Xs+(PR5a{W_$=HRf<|CEFcxQNI<6;lQ7Lie8vgWLfB1mY9OPoO@5 z{siU|*iYa-`SQuvPvAd6_yqA2q)(7PLHPvr6SPmzKf(9}^AoI3us^~11osoXPw+n> z_=NBiqECoFA^C*#6S7apn;|zS=+^(m$I?uRjPXy2jZ-JplJ#fEV=26?he0W#R7Ao?sy{y*~sIWYt9!6!g5%m9AK$U#aF_#hlSE@1;7Vky$r%-1@MBmgVb38{1AMrpj1`> z5%GUXLW+-!E%;0hCIlGRfBF5NRv6d~nr8(FK_;(Jg5cLEaY2l10EB-d3$T4=%o-o0 N`)OgiX#k&H{vWz|WU&AM delta 12523 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 diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index ff395065fc9138c0dba2f9f4b09ee9c03be74a9c..23fd1ad4886a05f442d46279d6ce4ac337020d9a 100644 GIT binary patch delta 38059 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 J6Dw1m{{W?XgI53m delta 38227 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 # Serial port for the device port = /dev/ttyUSB0 + # It is also possible to use BLE devices + # instead of wired serial ports. The + # target RNode must be paired with the + # host device before connecting. BLE + # devices can be connected by name, + # BLE MAC address or by any available. + + # Connect to specific device by name + # port = ble://RNode 3B87 + + # Or by BLE MAC address + # port = ble://F4:12:73:29:4E:89 + + # Or connect to the first available, + # paired device + # port = ble:// + # Set frequency to 867.2 MHz frequency = 867200000 diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index 892a671..9aee3c5 100644 --- a/docs/manual/searchindex.js +++ b/docs/manual/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Configuring Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 10, 11], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9, 11], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9, 10], "your": [0, 2, 3, 4, 5, 6, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": [0, 5], "minimum": [0, 5, 6, 7, 9], "setup": [0, 2, 4, 5, 10], "requir": [0, 2, 5, 6, 7, 9, 10, 11], "connect": [0, 3, 4, 5, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 4, 5, 6, 9, 10, 11], "have": [0, 2, 3, 5, 6, 7, 9, 10], "stack": [0, 2, 6, 7, 9, 10, 11], "initialis": [0, 7, 10], "readi": [0, 2, 3, 5, 6, 7, 11], "pass": [0, 3, 5, 6, 7, 9, 10], "traffic": [0, 2, 5, 6, 7, 9, 10], "thi": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "rn": [0, 2, 3, 7, 9, 10], "start": [0, 3, 4, 5, 7, 9, 10], "up": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 4, 6, 7, 9, 10], "destin": [0, 2, 4, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 7, 8, 9], "argpars": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9, 10], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": 0, "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9, 10], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 10, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "exist": [0, 2, 3, 5, 9, 10, 11], "which": [0, 2, 5, 6, 7, 9, 10], "know": [0, 2, 3, 6, 7, 9, 11], "thei": [0, 2, 5, 6, 7, 9, 10], "reachabl": [0, 2, 5, 6, 7, 9, 10], "automat": [0, 2, 3, 5, 6, 7, 9, 10, 11], "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 6, 7, 9, 11], "prove": [0, 9], "packet": [0, 2, 4, 5, 6, 7, 10, 11], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 10, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 7, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 5, 6, 7, 9, 10], "tri": 0, "whether": [0, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 10, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": 0, "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 7, 10], "client": [0, 2, 3, 4, 7, 10], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 2, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5, 7], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 5, 6, 10], "action": 0, "store": [0, 3, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5, 7], "keyboardinterrupt": 0, "print": [0, 5, 10], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9, 10], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 2, 5, 6, 7, 9, 10, 11], "arriv": [0, 9], "random": [0, 7, 9], "two": [0, 2, 3, 5, 6, 7, 9], "list": [0, 2, 3, 5, 7, 9, 11], "string": [0, 7], "app_data": [0, 7], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 2], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 2, 3, 6, 9, 11], "destination_1": 0, "destination_2": 0, "handler": [0, 7], "onli": [0, 2, 3, 5, 6, 7, 9, 10, 11], "ask": [0, 2, 3, 7], "chang": [0, 2, 5, 7, 9, 10, 11], "filter": [0, 6, 9, 10], "see": [0, 2, 5, 6, 7, 9, 10, 11], "what": [0, 2, 4, 5, 7, 9], "happen": [0, 2, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "0": [0, 2, 5, 7, 9, 10, 11], "len": 0, "1": [0, 2, 5, 7, 9, 10], "data": [0, 2, 3, 4, 5, 6, 7, 9, 11], "encod": [0, 7], "utf": 0, "8": [0, 5, 10], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "class": [0, 6, 7, 11], "method": [0, 2, 5, 7, 9], "take": [0, 2, 5, 9, 10, 11], "option": [0, 2, 3, 4, 6, 7, 9, 10], "argument": [0, 7, 10], "instanc": [0, 4, 5, 7, 9, 10], "some": [0, 2, 3, 5, 6, 7, 9, 10], "want": [0, 2, 5, 6, 9, 10, 11], "aspect": [0, 3, 5, 7, 9, 10], "__init__": [0, 7], "self": [0, 6, 11], "call": [0, 2, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10, 11], "cannot": [0, 2, 5, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 7, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 5, 9, 10], "sy": 0, "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 3, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": 0, "channelarg": 0, "between": [0, 5, 6, 7, 9, 10], "interfac": [0, 3, 4, 6, 7, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7, 10], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 7, 9, 11], "server_ident": 0, "queri": [0, 2, 7, 10], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 7, 9, 10, 11], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 10, 11], "wai": [0, 2, 5, 6, 7, 9, 10], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 7, 9, 10, 11], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9, 10], "go": [0, 2, 5, 9], "handl": [0, 3, 5, 6, 7, 9, 10, 11], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": [0, 7, 10], "dbm": [0, 5, 10], "snr": [0, 7, 10], "db": [0, 10], "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 7, 9, 10], "represent": [0, 7], "command": [0, 2, 5, 10], "dest_len": 0, "truncated_hashlength": [0, 7], "2": [0, 5, 7, 9, 10], "rais": [0, 7], "valueerror": [0, 7], "length": [0, 5, 7, 9], "invalid": [0, 7], "hex": [0, 10], "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 10, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7, 10], "kei": [0, 4, 6, 7, 10, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7, 10], "modul": [0, 2, 3, 9, 10, 11], "known": [0, 5, 7, 9, 10], "return": [0, 7, 10], "outgo": [0, 5, 7, 9, 10], "got": 0, "correct": [0, 9], "convent": 0, "request_destin": 0, "add": [0, 2, 5, 6, 7, 10], "echo_request": 0, "get_random_hash": [0, 7], "successfulli": [0, 7, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 5, 9, 11], "retri": [0, 7, 9], "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 2, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 4, 7], "forth": 0, "o": [0, 2, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 7, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": [0, 5], "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": [0, 7], "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 2, 5, 7, 9, 10, 11], "_exit": 0, "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9, 10], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "sendig": 0, "perform": [0, 2, 5, 6, 7, 9, 10], "random_text_gener": 0, "request_id": [0, 7], "link_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "structur": [0, 7, 9, 11], "datetim": 0, "vendor": [0, 3, 11], "umsgpack": 0, "share": [0, 2, 6, 7, 9, 10], "object": [0, 7], "subclass": [0, 7], "messagebas": [0, 4, 7], "ensur": [0, 5, 7, 9, 10, 11], "serial": [0, 2, 4, 9, 11], "deseri": 0, "multiplex": 0, "other": [0, 2, 3, 5, 6, 7, 9, 10], "both": [0, 2, 3, 5, 6, 7, 9, 10, 11], "same": [0, 2, 3, 5, 6, 7, 9, 10], "definit": [0, 9], "note": [0, 3, 4, 5, 7, 9, 10], "wish": [0, 9, 10], "make": [0, 2, 3, 5, 8, 9, 10], "stringmessag": 0, "convei": 0, "timestamp": [0, 9, 11], "msgtype": [0, 7], "variabl": [0, 7], "assign": [0, 9, 10], "integ": 0, "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 5, 7, 9, 11], "across": [0, 3, 6, 7], "0xf000": [0, 7], "reserv": [0, 7], "0x0101": 0, "callabl": [0, 7], "paramet": [0, 3, 5, 6, 7, 9, 10], "empti": 0, "version": [0, 2, 9, 10, 11], "unpack": [0, 7], "final": [0, 7, 9], "implement": [0, 5, 6, 7, 8, 9, 11], "pack": [0, 7], "raw": [0, 3, 7], "payload": [0, 7, 9, 10], "packag": [0, 2, 5, 9], "bundl": 0, "could": [0, 2, 5, 6, 7, 9, 11], "struct": 0, "python": [0, 4, 7, 9, 10, 11], "more": [0, 2, 3, 5, 6, 7, 9, 10, 11], "fit": 0, "entir": [0, 6, 7, 9, 10], "avail": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "properti": [0, 6, 7], "slightli": [0, 2], "less": [0, 5, 7, 9, 11], "due": [0, 6], "header": [0, 7, 9], "content": [0, 2, 6, 10], "stream": [0, 7, 9], "packb": 0, "unpackb": 0, "channelexampl": 0, "get_channel": [0, 7], "register_message_typ": [0, 7], "add_message_handl": [0, 7], "server_message_receiv": 0, "param": 0, "deserializ": 0, "unless": [0, 2, 5, 7, 9], "preced": 0, "indic": [0, 7], "isinst": 0, "reply_messag": 0, "order": [0, 7, 10], "were": [0, 6], "consid": [0, 5, 7, 9, 11], "subsequ": [0, 9], "skip": 0, "packed_s": 0, "is_ready_to_send": [0, 7], "pleas": [0, 2, 5, 7, 10, 11], "pend": 0, "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "client_message_receiv": 0, "reader": [0, 7], "writer": [0, 7], "__future__": 0, "annot": 0, "latest_buff": 0, "bufferexampl": 0, "old": [0, 3, 8, 9], "stream_id": [0, 7], "bit": [0, 2, 5, 7, 9, 10, 11], "like": [0, 2, 3, 5, 6, 7, 9, 10, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "descriptor": 0, "actual": [0, 2, 5, 9], "separ": [0, 2, 5, 6, 9, 10], "unidirect": 0, "flow": [0, 5, 6], "opposit": [0, 5], "create_bidirectional_buff": [0, 7], "server_buffer_readi": 0, "ready_byt": [0, 7], "int": [0, 7], "otherwis": [0, 7], "forc": [0, 10], "server_client_connect": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "client_buffer_readi": 0, "termin": [0, 2, 7], "download": [0, 5, 10], "resourc": [0, 2, 4, 7, 8], "effici": [0, 2, 5, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 9], "compress": [0, 7, 9], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 7, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "prepar": [0, 6], "instead": [0, 2, 5, 7, 9, 10], "slice": 0, "chunk": 0, "suitabl": [0, 2, 5, 6, 9, 11], "thread": 0, "app_timeout": 0, "45": [0, 9], "serve_path": 0, "here": [0, 2, 5, 9, 10], "conveni": 0, "list_fil": 0, "entri": [0, 2, 9], "listdir": 0, "isfil": 0, "join": [0, 2, 6, 8, 9], "host": [0, 2, 5, 9, 10], "still": [0, 2, 5, 6, 9, 10], "isdir": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 6], "mani": [0, 2, 3, 5, 6, 7, 9, 10, 11], "split": 0, "filelist": 0, "multipl": [0, 5, 6, 9, 10], "hint": 0, "alreadi": [0, 2, 3, 6, 7, 9, 10], "support": [0, 2, 4, 5, 6, 7, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 2, 6, 9, 10], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 5], "don": [0, 2, 6, 7, 10], "unknown": [0, 5, 7, 9, 10], "conclud": [0, 7], "hasattr": 0, "server_fil": 0, "current": [0, 2, 4, 5, 7, 9], "current_download": 0, "current_filenam": 0, "statist": [0, 5, 7, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 2, 5, 7, 9, 10], "normal": [0, 2, 5, 7, 10], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10, 11], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "clear_screen": 0, "print_filelist": 0, "percent": [0, 5], "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": [0, 5], "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 7, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "extend": [0, 2, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 7, 9, 11], "job": 0, "potenti": [0, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "daemon": [0, 2, 5, 7, 10], "detect": 0, "shown": 0, "progress": [0, 7, 10, 11], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 7, 8, 9], "readabl": [0, 7, 9], "num": 0, "unit": [0, 2, 7, 10], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 9], "pi": [0, 4, 6, 9, 10, 11], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": [0, 10], "m": [0, 2, 9, 10], "g": [0, 10], "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 5, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "best": [2, 9, 11], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3, 5], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "pip": [2, 3, 10], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "python3": [2, 3], "pamac": 2, "similar": [2, 3, 5, 6, 7, 10, 11], "dowload": 2, "releas": [2, 5, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "offlin": 2, "py3": 2, "whl": 2, "mai": [2, 5, 7, 9, 10], "case": [2, 3, 5, 6, 9, 10], "usual": 2, "essenti": [2, 5, 9], "deriv": [2, 7, 9, 11], "arch": 2, "manjaro": 2, "devel": 2, "fedora": 2, "dnf": 2, "groupinstal": 2, "tool": [2, 3, 9, 10, 11], "librari": 2, "compil": 2, "miss": 2, "even": [2, 5, 6, 7, 9, 10, 11], "pre": [2, 7, 9], "built": [2, 5, 9, 10, 11], "few": [2, 3, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 7, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 10, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 4, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "without": [2, 3, 5, 6, 9, 10, 11], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "devic": [2, 4, 5, 6, 7, 9, 10], "enough": [2, 3, 9], "physic": [2, 3, 5, 7, 9, 10], "rnsh": [2, 10], "fulli": [2, 3, 9, 10, 11], "session": [2, 9], "pipe": [2, 4, 11], "ssh": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "facilit": 2, "suit": [2, 3, 9, 10], "featur": [2, 8, 9, 11], "delai": [2, 5, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 10, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": [2, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "might": [2, 5, 6, 9, 10], "reboot": 2, "again": [2, 5, 9, 10], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 9], "maco": 2, "window": [2, 5], "peopl": [2, 9], "compat": [2, 3, 5, 7, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": [2, 11], "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 9], "easier": [2, 5, 6, 10], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "locat": [2, 3, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "thing": 2, "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "utilis": [2, 5, 6, 7, 10, 11], "extern": [2, 5, 7, 11], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "gatewai": [2, 5, 6, 9], "enabl": [2, 3, 5, 6, 7, 9, 10, 11], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": 2, "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "lower": [2, 5, 10], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 5, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "record": [2, 9], "metadata": [2, 9, 11], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "through": [2, 3, 5, 6, 7, 9, 10, 11], "invis": [2, 5], "parallel": 2, "For": [2, 3, 5, 6, 7, 9, 10, 11], "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "experiment": [2, 11], "made": [2, 7, 9], "amsterdam": 2, "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "betweenthebord": 2, "4242": [2, 5], "g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9, 10], "failur": [2, 5, 7], "guarante": [2, 9], "weird": 2, "goe": 2, "sai": 2, "hardcod": 2, "ship": 2, "practic": [2, 9, 11], "solut": [2, 9, 10], "leav": [2, 6, 9], "hardwar": [2, 4, 5, 6, 7, 9, 10, 11], "wide": [2, 3, 5, 9, 10, 11], "section": [2, 3, 5, 6, 9, 10], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9, 10], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "custom": [2, 5, 7, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 5, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": 2, "addit": [2, 3, 5, 7, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 10, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "step": [2, 3], "pyseri": 2, "api": [2, 4, 9, 11], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "folder": 2, "symlink": [2, 10], "cd": 2, "ln": [2, 10], "echo": [2, 4], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "process": [2, 3, 5, 7, 9], "h": [2, 10], "ping": [2, 10], "replac": [2, 7, 9, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "place": [2, 5, 6, 9, 10], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 9], "termux": 2, "f": [2, 10], "droid": 2, "emul": 2, "environ": [2, 6, 9], "abil": [2, 3], "pkg": 2, "sure": [2, 3, 10], "upgrad": [2, 9], "Then": 2, "reason": [2, 5, 9], "attempt": [2, 3, 7], "openssl": [2, 9], "libffi": 2, "rust": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "apk": 2, "tutori": 2, "code": [2, 3, 4, 5, 10], "architectur": 2, "precompil": 2, "dev": [2, 5, 10], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": [2, 5], "april": 2, "2023": [2, 10], "onto": [2, 9], "unfortun": 2, "pipx": 2, "isol": [2, 5, 10], "neg": 2, "affect": [2, 5], "ensurepath": 2, "restor": [2, 5], "behaviour": [2, 5, 10], "edit": [2, 10], "conf": 2, "break": [2, 7, 9, 11], "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "_could_": 2, "obscur": 2, "rnspure": 2, "No": [2, 5, 9, 10, 11], "matter": [2, 5], "perfectli": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "conceiv": 3, "kind": [3, 5, 6, 9], "medium": [3, 5, 6, 7, 9, 11], "flexibl": [3, 5, 11], "cover": [3, 9, 11], "wireless": [3, 6], "decad": 3, "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "oper": [3, 5, 6, 7, 9, 10, 11], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "broad": 3, "abund": 3, "sometim": 3, "especi": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "addition": [3, 5, 9], "common": [3, 4, 6, 9, 10, 11], "briefli": [3, 9], "describ": [3, 5, 7, 9], "emploi": [3, 9], "pattern": [3, 9], "high": [3, 5, 9, 11], "capac": [3, 5, 7, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": 3, "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": 3, "either": [3, 5, 6, 7, 9, 10], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "particular": 3, "plaform": 3, "depend": [3, 4, 6, 7, 9, 10], "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "limit": [3, 4, 6, 9], "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 7, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "overhead": [3, 5, 9], "level": [3, 5, 9, 10], "directli": [3, 5, 7, 9, 10, 11], "replic": [3, 9], "togeth": [3, 9, 10], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 7, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1276": 3, "platform": [3, 4, 9, 10], "esp32": 3, "manufactur": [3, 5], "io": 3, "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "question": [3, 5], "port": [3, 4, 5, 6, 9, 11], "air": [3, 11], "id": [3, 5, 7, 9, 10], "itself": [3, 4, 9], "short": [3, 5, 9, 10], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 7, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 9, 11], "cheap": [3, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "switch": [3, 5, 9, 10], "fiber": 3, "optic": [3, 11], "virtual": [3, 5, 6, 9, 10, 11], "adapt": [3, 6], "tun": 3, "tap": 3, "serialinterfac": [3, 5], "usb": [3, 6, 9, 10], "freedv": 3, "tnc": [3, 5, 7, 10, 11], "dire": 3, "wolf": 3, "aim": [4, 9], "particip": [4, 6, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "instal": [4, 5, 6, 9, 10, 11], "resolv": [4, 5, 10], "issu": [4, 6, 8], "base": [4, 5, 6, 7, 9, 10, 11], "shell": [4, 10], "nomad": 4, "sideband": 4, "meshchat": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "radio": [4, 5, 6, 7, 9, 10, 11], "android": [4, 10], "arm64": 4, "raspberri": [4, 6, 9, 10, 11], "debian": [4, 9, 10], "bookworm": 4, "ubuntu": [4, 10], "lunar": 4, "pure": [4, 9], "rnid": 4, "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "rule": [4, 5], "modem": [4, 5, 6, 7, 9, 11], "udp": [4, 6, 9, 10, 11], "multi": [4, 9, 10, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 7, 9], "buffer": [4, 5, 7], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "discover": 5, "autoconfigur": [5, 11], "ipv6": [5, 10], "router": [5, 10], "sort": [5, 9, 10], "communica": 5, "tion": 5, "usabl": [5, 9], "interface_en": [5, 10], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "group_id": 5, "multicast": 5, "temporari": 5, "perman": [5, 10], "multicast_address_typ": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "autodiscov": 5, "discoveri": [5, 9, 10], "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "frequent": 5, "block": 5, "inbound": [5, 7], "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "event": 5, "simplest": [5, 9], "tunnel": [5, 9, 11], "interchang": 5, "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "frame": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "intern": [5, 7, 9], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": 5, "udpinterfac": 5, "forward_ip": 5, "255": [5, 10], "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "segment": [5, 6, 7, 9, 11], "15": 5, "16": [5, 9, 10], "ttyusb0": [5, 10], "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "7": [5, 9, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "12": [5, 10], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7, 10], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "amount": [5, 6, 7, 9, 11], "ram": 5, "flow_control": 5, "airtim": 5, "term": [5, 6, 9], "appli": [5, 7, 9], "approxim": 5, "enforc": [5, 7], "roll": 5, "airtime_limit_long": 5, "airtime_limit_short": 5, "33": 5, "sub": 5, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "highdatar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "wrote": 5, "vport": 5, "lowdatar": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "pair": [5, 7, 9, 10], "laser": 5, "baud": [5, 10], "speed": [5, 9, 10], "115200": [5, 10], "databit": [5, 10], "pariti": [5, 10], "stopbit": [5, 10], "stdin": [5, 10], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 7, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "period": [5, 7, 9], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "amateur": [5, 11], "spectrum": [5, 9], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 10], "squelch": 5, "rx": [5, 10], "turnaround": 5, "kept": [5, 6, 7, 9], "wast": 5, "bring": 5, "brought": [5, 10], "access_point": 5, "shorthand": [5, 10], "ap": 5, "shorter": 5, "expiri": [5, 7], "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10], "512": [5, 7, 9], "announce_cap": [5, 7], "maximum": [5, 7, 9, 10], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "bitrat": [5, 7], "report": [5, 7, 8, 10], "guess": 5, "per": [5, 7, 9, 10, 11], "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "behalf": 5, "resid": 5, "requestor": 5, "chain": 5, "along": [5, 6, 7, 9, 10], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "mobil": [5, 9], "seen": [5, 9], "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": 5, "impact": [5, 7, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "decis": [5, 9], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "occur": [5, 10, 11], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "ingress": 5, "disrupt": 5, "neccessari": 5, "modifi": [5, 9, 10, 11], "ingress_control": 5, "ic_new_tim": 5, "spawn": 5, "ic_burst_freq_new": 5, "ic_burst_freq": 5, "temporarili": 5, "ic_max_held_announc": 5, "drop": [5, 7, 9, 10], "256": [5, 7, 9, 10], "ic_burst_hold": 5, "threshold": 5, "ic_burst_penalti": 5, "ic_held_release_interv": 5, "30": [5, 7, 10], "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "evolv": 6, "futur": [6, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9, 10], "higher": [6, 11], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9, 11], "hellman": [6, 9, 11], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 7, 9], "keystor": 6, "degrad": 6, "stationari": [6, 10], "candid": 6, "optim": 6, "intend": [6, 9], "trustless": [6, 9, 11], "free": [6, 8, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "underli": [6, 11], "carrier": [6, 11], "involv": 6, "hardlin": 6, "illustr": [6, 9], "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "sight": 6, "becaus": [6, 9], "four": 6, "At": [6, 9], "cabl": 6, "suppli": [6, 7, 9], "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": [6, 10], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": [6, 7], "find": [6, 9], "poorli": 6, "outlier": 6, "signatur": [7, 9, 10, 11], "configdir": 7, "logdest": 7, "verbos": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "mtu": [7, 9, 11], "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "alter": [7, 9], "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9, 11], "constant": 7, "truncat": [7, 9, 10], "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "feed": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "adress": [7, 9], "path_respons": 7, "attached_interfac": 7, "tag": 7, "flag": [7, 9], "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "succeed": 7, "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "keepalive_timeout_factor": 7, "4": [7, 9, 10], "calcul": [7, 9, 10], "stale_grac": 7, "grace": 7, "keepal": [7, 9], "360": 7, "aliv": [7, 9], "stale_tim": 7, "720": 7, "mark": [7, 9], "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "qualiti": 7, "get_rssi": 7, "signal": [7, 9], "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "get_establishment_r": 7, "ocur": 7, "get_ag": 7, "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "no_data_for": 7, "travers": [7, 9], "exclud": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "whenev": [7, 9], "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "bi": [7, 9], "neither": [7, 9], "constrain": 7, "message_class": 7, "recept": 7, "messagecallbacktyp": 7, "bool": 7, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 7, "adjust": 7, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9, 11], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "document": [7, 9], "create_writ": 7, "receive_stream_id": 7, "send_stream_id": 7, "rawiobas": 7, "add_ready_callback": 7, "cb": [7, 9], "remove_ready_callback": 7, "pathfinder_m": 7, "attribut": 7, "receive_path_respons": 7, "live": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "seek": 9, "solv": 9, "primari": 9, "lack": 9, "my": 9, "belief": 9, "highli": 9, "machin": 9, "censorship": [9, 11], "barrier": 9, "todai": 9, "centralis": 9, "trust": [9, 10], "approv": 9, "gatekeep": 9, "inevit": 9, "govern": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "off": [9, 10, 11], "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "thousand": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "written": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "capabl": 9, "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": 9, "recap": 9, "indirectli": 9, "ledger": 9, "therefor": [9, 11], "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "accord": 9, "around": 9, "topic": 9, "necessarili": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "intermediari": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "memori": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "throughput": [9, 11], "runtim": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "mac": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "ifac": [9, 10], "compos": 9, "field": 9, "context": 9, "465": 9, "vari": [9, 10], "unset": 9, "00": [9, 10], "01": 9, "11": 9, "_______": 9, "________________": 9, "________": 9, "______": 9, "__": 9, "_": 9, "01010000": 9, "00000100": 9, "hash1": 9, "hash2": 9, "header_2": 9, "00000000": 9, "00000111": 9, "header_1": 9, "10000000": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "hkdf": 9, "fernet": [9, 11], "cbc": [9, 11], "hmac": [9, 11], "hashlib": 9, "pkcs7": [9, 11], "pad": [9, 11], "trivial": [9, 11], "consequ": 9, "backend": 9, "loss": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "boot": 10, "ie": 10, "breviti": 10, "socket": 10, "turn": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "panic": 10, "unrecover": 10, "panic_on_interface_error": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "debug": 10, "unus": 10, "teach": 10, "task": 10, "08": 10, "18": 10, "17": 10, "59": 10, "56": 10, "v": 10, "show": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "tcpinterfac": 10, "dublin": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "kbp": 10, "e702c42ba8": 10, "49": 10, "9": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 10, "posit": 10, "arx": 10, "atx": 10, "revers": 10, "json": 10, "new_ident": 10, "984b74a3f768bef236af4371e6f248cd": 10, "new_id": 10, "0f4259fef4521ab75a3409e353fe9073eb10783b4912a6a9937c57bf44a62c1": 10, "hidden": 10, "8dd57a738226809646089335a6b03695": 10, "my_fil": 10, "txt": 10, "bc7291552be7a58f361522990465165c": 10, "rfe": 10, "fetch": 10, "30602def3b3506a28ed33db6f60cc6c9": 10, "2b489d06eaf7c543808c76a5332a447d": 10, "my_ident": 10, "2225fdeecaf6e2db4556c3c2d7637294": 10, "decreas": 10, "overwrit": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "max": 10, "rnstransport": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "781": 10, "e7536ee90bd4a440e130490b87a25124": 10, "809": 10, "73": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "allowed_ident": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "silent": 10, "jail": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "fw": 10, "url": 10, "nocheck": 10, "flash": 10, "baud_flash": 10, "addr": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "hexbyt": 10, "firmware_hash": 10, "product": 10, "model": 10, "hwrev": 10, "revis": 10, "attach": 10, "older": 10, "onlin": 10, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "ff": 10, "consol": 10, "unlock": 10, "bootstrap": 10, "rom": 10, "enable_remote_manag": 10, "remote_management_allow": 10, "9fb6d773498fb3feda407ed8ef2c3229": 10, "2d882c5586e548d79b5af27bca1776dc": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "bin": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "whole": 10, "regular": 10, "rns_bin_dir": 10, "eg": 10, "reload": 10, "loginctl": 10, "linger": 10, "readili": 11, "advers": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "subject": 11, "planetari": 11, "hierarch": 11, "beaureucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "sha256": 11, "iv": 11, "urandom": 11, "intuit": 11, "44": 11, "gigabyt": 11, "scalabl": 11, "hoc": 11, "transform": 11, "fact": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11, "touch": 11}, "objects": {"RNS": [[7, 0, 1, "", "Buffer"], [7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "MessageBase"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RawChannelReader"], [7, 0, 1, "", "RawChannelWriter"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Buffer": [[7, 1, 1, "", "create_bidirectional_buffer"], [7, 1, 1, "", "create_reader"], [7, 1, 1, "", "create_writer"]], "RNS.Channel": [[7, 0, 1, "", "Channel"]], "RNS.Channel.Channel": [[7, 2, 1, "", "MDU"], [7, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 1, 1, "", "register_message_type"], [7, 1, 1, "", "remove_message_handler"], [7, 1, 1, "", "send"]], "RNS.Destination": [[7, 3, 1, "", "RATCHET_COUNT"], [7, 3, 1, "", "RATCHET_INTERVAL"], [7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "enable_ratchets"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "enforce_ratchets"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "set_ratchet_interval"], [7, 1, 1, "", "set_retained_ratchets"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "KEYSIZE"], [7, 3, 1, "", "RATCHETSIZE"], [7, 3, 1, "", "RATCHET_EXPIRY"], [7, 3, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "current_ratchet_id"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 3, 1, "", "KEEPALIVE"], [7, 3, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 3, 1, "", "STALE_GRACE"], [7, 3, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_age"], [7, 1, 1, "", "get_channel"], [7, 1, 1, "", "get_establishment_rate"], [7, 1, 1, "", "get_q"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_data_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"], [7, 1, 1, "", "track_phy_stats"]], "RNS.MessageBase": [[7, 3, 1, "", "MSGTYPE"], [7, 1, 1, "", "pack"], [7, 1, 1, "", "unpack"]], "RNS.Packet": [[7, 3, 1, "", "ENCRYPTED_MDU"], [7, 3, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RawChannelReader": [[7, 1, 1, "", "__init__"], [7, 1, 1, "", "add_ready_callback"], [7, 1, 1, "", "remove_ready_callback"]], "RNS.RawChannelWriter": [[7, 1, 1, "", "__init__"]], "RNS.RequestReceipt": [[7, 1, 1, "", "concluded"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_request_id"], [7, 1, 1, "", "get_response"], [7, 1, 1, "", "get_response_time"], [7, 1, 1, "", "get_status"]], "RNS.Resource": [[7, 1, 1, "", "advertise"], [7, 1, 1, "", "cancel"], [7, 1, 1, "", "get_data_size"], [7, 1, 1, "", "get_hash"], [7, 1, 1, "", "get_parts"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_segments"], [7, 1, 1, "", "get_transfer_size"], [7, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[7, 3, 1, "", "ANNOUNCE_CAP"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "remote_management_enabled"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 3, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": 0, "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "an": 1, "explan": 1, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "human": 1, "Beings": 1, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "instal": [2, 3], "resolv": 2, "depend": 2, "issu": 2, "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "remot": [2, 10], "shell": 2, "nomad": 2, "network": [2, 4, 6], "sideband": 2, "meshchat": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": 2, "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "interfac": [2, 5, 9, 11], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "raspberri": 2, "pi": 2, "debian": 2, "bookworm": 2, "ubuntu": 2, "lunar": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "lilygo": 3, "lora32": 3, "v2": 3, "1": 3, "0": 3, "t": 3, "beam": 3, "heltec": 3, "unsign": 3, "x": 3, "v1": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "devic": [3, 11], "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "i2p": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "lora": [5, 6], "multi": 5, "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "new": 5, "destin": [5, 9], "limit": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnid": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "manag": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "systemwid": 10, "userspac": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "caveat": 11, "emptor": 11}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Channel": [[0, "channel"]], "Buffer": [[0, "buffer"]], "Filetransfer": [[0, "filetransfer"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Resolving Dependency & Installation Issues": [[2, "resolving-dependency-installation-issues"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Remote Shell": [[2, "remote-shell"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "MeshChat": [[2, "meshchat"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Platform-Specific Install Notes": [[2, "platform-specific-install-notes"]], "Android": [[2, "android"]], "ARM64": [[2, "arm64"]], "Raspberry Pi": [[2, "raspberry-pi"]], "Debian Bookworm": [[2, "debian-bookworm"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "Communications Hardware": [[3, "communications-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards": [[3, "supported-boards"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[3, "unsigned-rnode-v1-x"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Ethernet-based Hardware": [[3, "ethernet-based-hardware"]], "Serial Lines & Devices": [[3, "serial-lines-devices"]], "Packet Radio Modems": [[3, "packet-radio-modems"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Configuring Interfaces": [[5, "configuring-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "I2P Interface": [[5, "i2p-interface"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "RNode Multi Interface": [[5, "rnode-multi-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "New Destination Rate Limiting": [[5, "new-destination-rate-limiting"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The rnid Utility": [[10, "the-rnid-utility"]], "The rnpath Utility": [[10, "the-rnpath-utility"]], "The rnprobe Utility": [[10, "the-rnprobe-utility"]], "The rncp Utility": [[10, "the-rncp-utility"]], "The rnx Utility": [[10, "the-rnx-utility"]], "The rnodeconf Utility": [[10, "the-rnodeconf-utility"]], "Remote Management": [[10, "remote-management"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]], "Systemwide Service": [[10, "systemwide-service"]], "Userspace Service": [[10, "userspace-service"]], "What is Reticulum?": [[11, "what-is-reticulum"]], "Current Status": [[11, "current-status"]], "What does Reticulum Offer?": [[11, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[11, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[11, "interface-types-and-devices"]], "Caveat Emptor": [[11, "caveat-emptor"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[7, "RNS.Reticulum.ANNOUNCE_CAP"]], "buffer (class in rns)": [[7, "RNS.Buffer"]], "curve (rns.identity attribute)": [[7, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[7, "RNS.Link.CURVE"]], "channel (class in rns.channel)": [[7, "RNS.Channel.Channel"]], "destination (class in rns)": [[7, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[7, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[7, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[7, "RNS.Identity"]], "keepalive (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[7, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[7, "RNS.Link"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.MDU"]], "minimum_bitrate (rns.reticulum attribute)": [[7, "RNS.Reticulum.MINIMUM_BITRATE"]], "msgtype (rns.messagebase attribute)": [[7, "RNS.MessageBase.MSGTYPE"]], "mtu (rns.reticulum attribute)": [[7, "RNS.Reticulum.MTU"]], "messagebase (class in rns)": [[7, "RNS.MessageBase"]], "pathfinder_m (rns.transport attribute)": [[7, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[7, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[7, "RNS.Packet"]], "packetreceipt (class in rns)": [[7, "RNS.PacketReceipt"]], "ratchetsize (rns.identity attribute)": [[7, "RNS.Identity.RATCHETSIZE"]], "ratchet_count (rns.destination attribute)": [[7, "RNS.Destination.RATCHET_COUNT"]], "ratchet_expiry (rns.identity attribute)": [[7, "RNS.Identity.RATCHET_EXPIRY"]], "ratchet_interval (rns.destination attribute)": [[7, "RNS.Destination.RATCHET_INTERVAL"]], "rawchannelreader (class in rns)": [[7, "RNS.RawChannelReader"]], "rawchannelwriter (class in rns)": [[7, "RNS.RawChannelWriter"]], "requestreceipt (class in rns)": [[7, "RNS.RequestReceipt"]], "resource (class in rns)": [[7, "RNS.Resource"]], "reticulum (class in rns)": [[7, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[7, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[7, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[7, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[7, "RNS.Transport"]], "__init__() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.__init__"]], "__init__() (rns.rawchannelwriter method)": [[7, "RNS.RawChannelWriter.__init__"]], "accepts_links() (rns.destination method)": [[7, "RNS.Destination.accepts_links"]], "add_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.add_message_handler"]], "add_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.add_ready_callback"]], "advertise() (rns.resource method)": [[7, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[7, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[7, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[7, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[7, "RNS.Destination.clear_default_app_data"]], "concluded() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.concluded"]], "create_bidirectional_buffer() (rns.buffer static method)": [[7, "RNS.Buffer.create_bidirectional_buffer"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "create_reader() (rns.buffer static method)": [[7, "RNS.Buffer.create_reader"]], "create_writer() (rns.buffer static method)": [[7, "RNS.Buffer.create_writer"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "enable_ratchets() (rns.destination method)": [[7, "RNS.Destination.enable_ratchets"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "enforce_ratchets() (rns.destination method)": [[7, "RNS.Destination.enforce_ratchets"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_age() (rns.link method)": [[7, "RNS.Link.get_age"]], "get_channel() (rns.link method)": [[7, "RNS.Link.get_channel"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_establishment_rate() (rns.link method)": [[7, "RNS.Link.get_establishment_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_q() (rns.link method)": [[7, "RNS.Link.get_q"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rssi() (rns.link method)": [[7, "RNS.Link.get_rssi"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_snr() (rns.link method)": [[7, "RNS.Link.get_snr"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "is_ready_to_send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.is_ready_to_send"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_data_for() (rns.link method)": [[7, "RNS.Link.no_data_for"]], "no_inbound_for() (rns.link method)": [[7, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[7, "RNS.Link.no_outbound_for"]], "pack() (rns.messagebase method)": [[7, "RNS.MessageBase.pack"]], "recall() (rns.identity static method)": [[7, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[7, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.register_announce_handler"]], "register_message_type() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.register_message_type"]], "register_request_handler() (rns.destination method)": [[7, "RNS.Destination.register_request_handler"]], "remote_management_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.remote_management_enabled"]], "remove_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.remove_message_handler"]], "remove_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.remove_ready_callback"]], "request() (rns.link method)": [[7, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[7, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[7, "RNS.Packet.resend"]], "send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.send"]], "send() (rns.packet method)": [[7, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[7, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[7, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[7, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[7, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[7, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[7, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[7, "RNS.Destination.set_proof_strategy"]], "set_ratchet_interval() (rns.destination method)": [[7, "RNS.Destination.set_ratchet_interval"]], "set_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_retained_ratchets() (rns.destination method)": [[7, "RNS.Destination.set_retained_ratchets"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "track_phy_stats() (rns.link method)": [[7, "RNS.Link.track_phy_stats"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "unpack() (rns.messagebase method)": [[7, "RNS.MessageBase.unpack"]], "validate() (rns.identity method)": [[7, "RNS.Identity.validate"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["examples", "forhumans", "gettingstartedfast", "hardware", "index", "interfaces", "networks", "reference", "support", "understanding", "using", "whatis"], "filenames": ["examples.rst", "forhumans.rst", "gettingstartedfast.rst", "hardware.rst", "index.rst", "interfaces.rst", "networks.rst", "reference.rst", "support.rst", "understanding.rst", "using.rst", "whatis.rst"], "titles": ["Code Examples", "An Explanation of Reticulum for Human Beings", "Getting Started Fast", "Communications Hardware", "Reticulum Network Stack Manual", "Configuring Interfaces", "Building Networks", "API Reference", "Support Reticulum", "Understanding Reticulum", "Using Reticulum on Your System", "What is Reticulum?"], "terms": {"A": [0, 2, 5, 6, 7, 9, 10, 11], "number": [0, 2, 5, 6, 7, 9, 10], "ar": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "includ": [0, 3, 4, 5, 7, 9, 11], "sourc": [0, 2, 3, 6, 9, 11], "distribut": [0, 2, 6, 7, 9, 10], "reticulum": [0, 5, 6, 7], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "can": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9], "learn": [0, 2, 8, 9], "how": [0, 2, 3, 5, 6, 9, 10, 11], "write": [0, 2, 5, 7, 9, 10], "your": [0, 2, 3, 4, 5, 6, 8, 9, 11], "own": [0, 2, 6, 7, 9, 10, 11], "program": [0, 3, 4, 5, 7, 9, 11], "The": [0, 2, 3, 4, 5, 6, 7, 11], "demonstr": [0, 5], "bare": [0, 5], "minimum": [0, 5, 6, 7, 9], "setup": [0, 2, 4, 5, 10], "requir": [0, 2, 5, 6, 7, 9, 10, 11], "connect": [0, 3, 4, 5, 6, 7, 9, 10, 11], "network": [0, 3, 5, 7, 9, 10, 11], "from": [0, 2, 3, 5, 6, 7, 9, 10, 11], "In": [0, 2, 3, 5, 6, 7, 9, 10, 11], "about": [0, 2, 3, 5, 6, 7, 9], "five": 0, "line": [0, 2, 4, 5, 6, 9, 10, 11], "have": [0, 2, 3, 5, 6, 7, 9, 10], "stack": [0, 2, 6, 7, 9, 10, 11], "initialis": [0, 7, 10], "readi": [0, 2, 3, 5, 6, 7, 11], "pass": [0, 3, 5, 6, 7, 9, 10], "traffic": [0, 2, 5, 6, 7, 9, 10], "thi": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "rn": [0, 2, 3, 7, 9, 10], "start": [0, 3, 4, 5, 7, 9, 10], "up": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gener": [0, 2, 3, 5, 6, 7, 9, 10, 11], "new": [0, 4, 6, 7, 9, 10], "destin": [0, 2, 4, 6, 7, 10], "let": [0, 2, 5, 6, 9, 10], "user": [0, 2, 5, 6, 9, 10, 11], "send": [0, 5, 7, 9, 10], "an": [0, 2, 3, 5, 6, 7, 9, 10, 11], "import": [0, 2, 3, 5, 6, 7, 8, 9], "argpars": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 4, 5, 6, 7], "we": [0, 2, 3, 5, 8, 9], "ll": [0, 2, 11], "all": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], "creat": [0, 4, 5, 6, 7, 9, 10, 11], "sinc": [0, 2, 5, 6, 7, 9], "basic": [0, 2, 4, 7, 10], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10], "part": [0, 5, 6, 7, 9, 10], "rang": [0, 2, 3, 5, 6, 9, 10, 11], "util": [0, 3, 4, 5, 9], "put": [0, 3, 5, 10], "them": [0, 2, 3, 5, 6, 8, 9, 10, 11], "within": [0, 2, 5, 6, 7, 9], "namespac": 0, "example_util": 0, "app_nam": [0, 7], "execut": [0, 2, 5, 7, 10], "when": [0, 2, 3, 5, 6, 7, 9, 10], "def": 0, "program_setup": 0, "configpath": 0, "must": [0, 2, 5, 6, 7, 9, 10], "first": [0, 2, 5, 7, 9, 10], "randomli": [0, 9], "ident": [0, 2, 4, 7, 10, 11], "our": [0, 9], "just": [0, 2, 3, 5, 6, 9, 11], "endpoint": [0, 6, 7, 9], "address": [0, 2, 5, 6, 7, 9, 10, 11], "commun": [0, 2, 4, 5, 6, 7, 8, 9, 10, 11], "also": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "exist": [0, 2, 3, 5, 9, 10, 11], "which": [0, 2, 5, 6, 7, 9, 10], "know": [0, 2, 3, 6, 7, 9, 11], "thei": [0, 2, 5, 6, 7, 9, 10], "reachabl": [0, 2, 5, 6, 7, 9, 10], "automat": [0, 2, 3, 5, 6, 7, 9, 10, 11], "path": [0, 2, 3, 5, 7, 9, 10], "anywher": [0, 5], "els": [0, 2, 6, 9], "IN": [0, 7], "singl": [0, 5, 7, 9, 10, 11], "minimalsampl": 0, "configur": [0, 2, 3, 4, 6, 7, 9, 11], "prove": [0, 9], "packet": [0, 2, 4, 5, 6, 7, 10, 11], "By": [0, 2, 5, 7, 9, 10], "do": [0, 2, 3, 5, 7, 9, 10, 11], "proof": [0, 7, 9, 10], "each": [0, 2, 5, 6, 7, 9, 10], "incom": [0, 5, 7, 10], "transmit": [0, 5, 9], "back": [0, 5, 9, 11], "sender": [0, 2, 6, 9, 10], "anyon": [0, 2, 3, 5, 6, 7, 9, 10], "tri": 0, "whether": [0, 5, 7, 9], "wa": [0, 3, 5, 6, 7, 9, 10, 11], "receiv": [0, 2, 5, 7, 9, 10], "correctli": 0, "set_proof_strategi": [0, 7], "prove_al": [0, 7], "everyth": [0, 6, 9], "hand": 0, "over": [0, 3, 4, 5, 7, 9, 10, 11], "control": [0, 2, 3, 4, 6, 7, 9, 11], "loop": 0, "announceloop": 0, "log": [0, 5, 10], "prettyhexrep": 0, "hash": [0, 2, 7, 9, 10], "run": [0, 2, 3, 5, 6, 7, 9, 10, 11], "hit": 0, "enter": [0, 10], "manual": [0, 2, 5, 6, 7, 10], "ctrl": 0, "c": [0, 6, 10], "quit": 0, "until": [0, 2, 5, 7], "exit": [0, 2, 7, 10], "If": [0, 2, 3, 5, 6, 7, 9, 10, 11], "server": [0, 2, 3, 4, 7, 10], "client": [0, 2, 3, 4, 7, 10], "messag": [0, 2, 7, 9, 10], "direct": [0, 2, 3, 6, 7, 9, 10], "toward": [0, 5, 9], "while": [0, 2, 3, 5, 6, 7, 9, 11], "true": [0, 2, 5, 7, 10], "input": [0, 10], "sent": [0, 2, 7, 9, 10], "startup": [0, 10], "get": [0, 3, 4, 5, 7, 10, 11], "pars": 0, "desir": [0, 3, 5, 9], "mode": [0, 2, 3, 4, 9, 10, 11], "__name__": 0, "__main__": 0, "try": [0, 4, 5, 7], "parser": 0, "argumentpars": 0, "descript": [0, 10], "add_argu": 0, "config": [0, 2, 5, 6, 10], "action": 0, "store": [0, 3, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 10], "type": [0, 2, 4, 5, 6, 7, 10], "str": 0, "arg": 0, "parse_arg": 0, "configarg": 0, "except": [0, 5, 7], "keyboardinterrupt": 0, "print": [0, 5, 10], "found": [0, 2, 5, 6, 9, 10], "http": [0, 2, 8], "github": [0, 2, 8], "com": [0, 2, 8], "markqvist": [0, 2, 8], "blob": [0, 9], "master": [0, 7], "py": [0, 2, 9, 10], "build": [0, 2, 3, 4, 5, 9, 11], "upon": [0, 9], "previou": 0, "explor": [0, 9, 11], "notif": [0, 7], "relev": [0, 3, 5, 7, 9, 10], "set": [0, 2, 3, 5, 6, 7, 9, 10, 11], "callback": [0, 7], "applic": [0, 2, 5, 6, 7, 9, 10, 11], "arriv": [0, 9], "random": [0, 7, 9], "two": [0, 2, 3, 5, 6, 7, 9], "list": [0, 2, 3, 5, 7, 9, 11], "string": [0, 7], "app_data": [0, 7], "fruit": 0, "peach": 0, "quinc": 0, "date": [0, 2], "tangerin": 0, "pomelo": 0, "carambola": 0, "grape": 0, "noble_gas": 0, "helium": 0, "neon": 0, "argon": 0, "krypton": 0, "xenon": 0, "radon": 0, "oganesson": 0, "announcesampl": 0, "space": [0, 2, 3, 6, 9, 11], "destination_1": 0, "destination_2": 0, "handler": [0, 7], "onli": [0, 2, 3, 5, 6, 7, 9, 10, 11], "ask": [0, 2, 3, 7], "chang": [0, 2, 5, 7, 9, 10, 11], "filter": [0, 6, 9, 10], "see": [0, 2, 5, 6, 7, 9, 10, 11], "what": [0, 2, 4, 5, 7, 9], "happen": [0, 2, 7, 9], "announce_handl": 0, "exampleannouncehandl": 0, "aspect_filt": [0, 7], "regist": [0, 7], "transport": [0, 2, 4, 5, 6, 7, 10, 11], "register_announce_handl": [0, 7], "select": [0, 5], "randint": 0, "0": [0, 2, 5, 7, 9, 10, 11], "len": 0, "1": [0, 2, 5, 7, 9, 10], "data": [0, 2, 3, 4, 5, 6, 7, 9, 11], "encod": [0, 7], "utf": 0, "8": [0, 5, 10], "nobl": 0, "ga": 0, "noble_ga": 0, "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "class": [0, 6, 7, 11], "method": [0, 2, 5, 7, 9], "take": [0, 2, 5, 9, 10, 11], "option": [0, 2, 3, 4, 6, 7, 9, 10], "argument": [0, 7, 10], "instanc": [0, 4, 5, 7, 9, 10], "some": [0, 2, 3, 5, 6, 7, 9, 10], "want": [0, 2, 5, 6, 9, 10, 11], "aspect": [0, 3, 5, 7, 9, 10], "__init__": [0, 7], "self": [0, 6, 11], "call": [0, 2, 6, 7, 9, 11], "system": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11], "match": [0, 5, 9, 10], "specif": [0, 3, 4, 5, 7, 10, 11], "cannot": [0, 2, 5, 11], "wildcard": 0, "received_announc": [0, 7], "destination_hash": [0, 7, 10], "announced_ident": [0, 7], "contain": [0, 6, 7, 9, 10], "follow": [0, 2, 3, 5, 7, 8, 9, 10, 11], "decod": 0, "plaintext": [0, 7], "unencrypt": [0, 7, 9], "inform": [0, 2, 4, 5, 6, 7, 9, 10], "ani": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "listen": [0, 5, 9, 10], "sy": 0, "did": 0, "one": [0, 2, 3, 5, 6, 7, 9, 10, 11], "public_inform": 0, "ad": [0, 3, 4, 5, 6, 7, 9, 11], "so": [0, 2, 3, 5, 6, 7, 8, 9, 10, 11], "differ": [0, 2, 3, 5, 6, 7, 9, 10, 11], "plain": [0, 3, 5, 7, 9], "uncencrypt": 0, "broadcast_destin": 0, "specifi": [0, 2, 3, 5, 6, 7, 10], "everi": [0, 5, 6, 7, 9], "time": [0, 2, 3, 5, 6, 7, 9, 10], "set_packet_callback": [0, 7], "packet_callback": 0, "main": 0, "broadcastloop": 0, "simpli": [0, 2, 3, 5, 6, 9, 10], "out": [0, 2, 3, 5, 6, 7, 9, 10, 11], "r": [0, 5, 9, 10], "n": [0, 9, 10], "end": [0, 5, 6, 7, 9, 11], "stdout": [0, 5, 10], "flush": 0, "text": [0, 2, 6, 9], "prompt": 0, "channelarg": 0, "between": [0, 5, 6, 7, 9, 10], "interfac": [0, 3, 4, 6, 7, 10], "simpl": [0, 3, 7, 9, 10, 11], "respond": [0, 7, 10], "receipt": [0, 7, 9], "choos": [0, 2, 5, 9], "global": [0, 2, 5, 6, 7, 9, 11], "server_ident": 0, "queri": [0, 2, 7, 10], "abl": [0, 2, 5, 6, 7, 9, 10], "verifi": [0, 7, 9, 10, 11], "repli": [0, 10], "encrypt": [0, 2, 6, 7, 9, 10, 11], "wai": [0, 2, 5, 6, 7, 9, 10], "certain": [0, 5, 6, 8, 9], "than": [0, 2, 5, 6, 7, 9, 10, 11], "read": [0, 2, 5, 7, 9, 10], "echo_destin": 0, "tell": [0, 5], "function": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11], "server_callback": 0, "wait": [0, 5, 9, 10], "go": [0, 2, 5, 9], "handl": [0, 3, 5, 6, 7, 9, 10, 11], "reception_stat": 0, "is_connected_to_shared_inst": 0, "reception_rssi": 0, "get_packet_rssi": 0, "packet_hash": 0, "reception_snr": 0, "get_packet_snr": 0, "rssi": [0, 7, 10], "dbm": [0, 5, 10], "snr": [0, 7, 10], "db": [0, 10], "destination_hexhash": 0, "timeout": [0, 7, 10], "binari": [0, 2, 7, 9, 10], "represent": [0, 7], "command": [0, 2, 5, 10], "dest_len": 0, "truncated_hashlength": [0, 7], "2": [0, 5, 7, 9, 10], "rais": [0, 7], "valueerror": [0, 7], "length": [0, 5, 7, 9], "invalid": [0, 7], "hex": [0, 10], "hexadecim": [0, 9, 10], "charact": 0, "byte": [0, 7, 9, 10, 11], "format": [0, 4, 10, 11], "fromhex": 0, "e": [0, 6, 10], "check": [0, 2, 7, 9, 10], "overrid": 0, "loglevel": [0, 7, 10], "provid": [0, 2, 3, 4, 5, 6, 7, 9, 11], "feedback": [0, 4], "log_info": 0, "doe": [0, 2, 3, 4, 5, 6, 7, 9, 10], "load": [0, 2, 7, 10], "has_path": [0, 7], "To": [0, 2, 3, 5, 6, 9, 10, 11], "public": [0, 4, 5, 7, 10], "kei": [0, 4, 6, 7, 10, 11], "done": [0, 2, 5, 6, 9, 10], "recal": [0, 7, 10], "modul": [0, 2, 3, 9, 10, 11], "known": [0, 5, 7, 9, 10], "return": [0, 7, 10], "outgo": [0, 5, 7, 9, 10], "got": 0, "correct": [0, 9], "convent": 0, "request_destin": 0, "add": [0, 2, 5, 6, 7, 10], "echo_request": 0, "get_random_hash": [0, 7], "successfulli": [0, 7, 9], "packetreceipt": [0, 4, 7], "packet_receipt": [0, 7], "set_timeout": [0, 7], "set_timeout_callback": [0, 7], "packet_timed_out": 0, "deliveri": [0, 2, 7, 11], "set_delivery_callback": [0, 7], "packet_deliv": 0, "yet": [0, 5, 9, 11], "retri": [0, 7, 9], "onc": [0, 2, 3, 5, 6, 7, 9, 10, 11], "request_path": [0, 7], "statu": [0, 2, 4, 5, 7, 9, 10], "deliv": [0, 7], "rtt": [0, 7, 9], "get_rtt": [0, 7], "round": [0, 7, 10], "3": [0, 5, 9, 10, 11], "rttstring": 0, "second": [0, 5, 7, 9, 10, 11], "1000": 0, "millisecond": [0, 10], "proof_packet": 0, "valid": [0, 5, 7, 9, 10], "trip": [0, 7, 10], "fail": [0, 2, 7], "store_tru": 0, "t": [0, 2, 5, 6, 7, 10], "metavar": 0, "float": [0, 7], "narg": 0, "timeoutarg": 0, "print_help": 0, "establish": [0, 2, 5, 6, 7, 11], "remot": [0, 4, 7], "forth": 0, "o": [0, 2, 9, 10, 11], "refer": [0, 2, 4], "latest": [0, 2, 5, 7, 10], "latest_client_link": 0, "server_destin": 0, "linkexampl": 0, "set_link_established_callback": [0, 7], "client_connect": 0, "server_loop": 0, "set_link_closed_callback": [0, 7], "client_disconnect": 0, "server_packet_receiv": 0, "disconnect": [0, 5], "activ": [0, 2, 5, 7, 9], "last": [0, 5, 7], "reply_text": 0, "reply_data": 0, "server_link": 0, "sleep": [0, 10], "begin": [0, 3, 7], "And": 0, "client_packet_receiv": 0, "close": [0, 6, 7, 10], "link_establish": 0, "link_clos": 0, "interact": [0, 2, 7, 9, 10], "client_loop": 0, "becom": [0, 2, 6, 9], "should_quit": 0, "fals": [0, 5, 7, 10], "should": [0, 2, 5, 6, 7, 9, 10, 11], "q": [0, 10], "teardown": [0, 7], "mdu": [0, 7], "size": [0, 2, 5, 7, 9, 10], "exce": [0, 5, 7], "log_error": 0, "error": [0, 2, 8, 10], "ha": [0, 2, 3, 5, 6, 7, 9, 11], "been": [0, 2, 3, 5, 6, 7, 9, 11], "later": [0, 2, 5, 10], "teardown_reason": 0, "now": [0, 2, 6, 9, 10], "elif": 0, "destination_clos": 0, "exit_handl": 0, "5": [0, 2, 5, 7, 9, 10, 11], "_exit": 0, "identifi": [0, 5, 7, 9, 10], "intiat": 0, "initi": [0, 6, 7, 9, 11], "peer": [0, 2, 5, 7, 9, 10], "identifyexampl": 0, "set_remote_identified_callback": [0, 7], "remote_identifi": 0, "origin": [0, 6, 9], "displai": [0, 9, 10], "remote_p": 0, "unidentifi": 0, "get_remote_ident": [0, 7], "client_ident": 0, "sendig": 0, "perform": [0, 2, 5, 6, 7, 9, 10], "random_text_gener": 0, "request_id": [0, 7], "link_id": [0, 7], "remote_ident": [0, 7], "requested_at": [0, 7], "look": [0, 2, 5, 9, 10], "On": [0, 2, 5, 10], "full": [0, 5, 7, 9, 10, 11], "moon": 0, "becki": 0, "upset": 0, "stai": [0, 9, 10], "awai": [0, 5, 6, 9, 10], "pet": 0, "shop": 0, "stock": 0, "requestexampl": 0, "register_request_handl": [0, 7], "response_gener": [0, 7], "allow": [0, 2, 3, 5, 6, 7, 9, 10, 11], "allow_al": [0, 7], "response_callback": [0, 7], "got_respons": 0, "failed_callback": [0, 7], "request_fail": 0, "request_receipt": [0, 7], "request_receiv": 0, "structur": [0, 7, 9, 11], "datetim": 0, "vendor": [0, 3, 11], "umsgpack": 0, "share": [0, 2, 6, 7, 9, 10], "object": [0, 7], "subclass": [0, 7], "messagebas": [0, 4, 7], "ensur": [0, 5, 7, 9, 10, 11], "serial": [0, 2, 4, 9, 11], "deseri": 0, "multiplex": 0, "other": [0, 2, 3, 5, 6, 7, 9, 10], "both": [0, 2, 3, 5, 6, 7, 9, 10, 11], "same": [0, 2, 3, 5, 6, 7, 9, 10], "definit": [0, 9], "note": [0, 3, 4, 5, 7, 9, 10], "wish": [0, 9, 10], "make": [0, 2, 3, 5, 8, 9, 10], "stringmessag": 0, "convei": 0, "timestamp": [0, 9, 11], "msgtype": [0, 7], "variabl": [0, 7], "assign": [0, 9, 10], "integ": 0, "valu": [0, 5, 7, 9], "constructor": 0, "uniqu": [0, 5, 7, 9, 11], "across": [0, 3, 6, 7], "0xf000": [0, 7], "reserv": [0, 7], "0x0101": 0, "callabl": [0, 7], "paramet": [0, 3, 5, 6, 7, 9, 10], "empti": 0, "version": [0, 2, 9, 10, 11], "unpack": [0, 7], "final": [0, 7, 9], "implement": [0, 5, 6, 7, 8, 9, 11], "pack": [0, 7], "raw": [0, 3, 7], "payload": [0, 7, 9, 10], "packag": [0, 2, 5, 9], "bundl": 0, "could": [0, 2, 5, 6, 7, 9, 11], "struct": 0, "python": [0, 4, 7, 9, 10, 11], "more": [0, 2, 3, 5, 6, 7, 9, 10, 11], "fit": 0, "entir": [0, 6, 7, 9, 10], "avail": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11], "properti": [0, 6, 7], "slightli": [0, 2], "less": [0, 5, 7, 9, 11], "due": [0, 6], "header": [0, 7, 9], "content": [0, 2, 6, 10], "stream": [0, 7, 9], "packb": 0, "unpackb": 0, "channelexampl": 0, "get_channel": [0, 7], "register_message_typ": [0, 7], "add_message_handl": [0, 7], "server_message_receiv": 0, "param": 0, "deserializ": 0, "unless": [0, 2, 5, 7, 9], "preced": 0, "indic": [0, 7], "isinst": 0, "reply_messag": 0, "order": [0, 7, 10], "were": [0, 6], "consid": [0, 5, 7, 9, 11], "subsequ": [0, 9], "skip": 0, "packed_s": 0, "is_ready_to_send": [0, 7], "pleas": [0, 2, 5, 7, 10, 11], "pend": 0, "complet": [0, 2, 3, 5, 6, 7, 9, 10, 11], "client_message_receiv": 0, "reader": [0, 7], "writer": [0, 7], "__future__": 0, "annot": 0, "latest_buff": 0, "bufferexampl": 0, "old": [0, 3, 8, 9], "stream_id": [0, 7], "bit": [0, 2, 5, 7, 9, 10, 11], "like": [0, 2, 3, 5, 6, 7, 9, 10, 11], "file": [0, 2, 3, 5, 6, 7, 9, 10, 11], "descriptor": 0, "actual": [0, 2, 5, 9], "separ": [0, 2, 5, 6, 9, 10], "unidirect": 0, "flow": [0, 5, 6], "opposit": [0, 5], "create_bidirectional_buff": [0, 7], "server_buffer_readi": 0, "ready_byt": [0, 7], "int": [0, 7], "otherwis": [0, 7], "forc": [0, 10], "server_client_connect": 0, "detail": [0, 2, 4, 5, 7, 10, 11], "client_buffer_readi": 0, "termin": [0, 2, 7], "download": [0, 5, 10], "resourc": [0, 2, 4, 7, 8], "effici": [0, 2, 5, 9, 11], "serv": [0, 3, 5, 6, 9, 10], "larg": [0, 3, 5, 6, 7, 9, 11], "transfer": [0, 7, 9, 10, 11], "recommend": [0, 2, 9], "compress": [0, 7, 9], "hashmap": 0, "sequenc": [0, 7, 9, 11], "long": [0, 2, 3, 5, 7, 9], "slow": [0, 5, 9], "cpu": [0, 9], "probabl": [0, 2, 6, 9, 10, 11], "result": [0, 9, 10], "befor": [0, 2, 5, 7, 9, 10], "prepar": [0, 6], "instead": [0, 2, 5, 7, 9, 10], "slice": 0, "chunk": 0, "suitabl": [0, 2, 5, 6, 9, 11], "thread": 0, "app_timeout": 0, "45": [0, 9], "serve_path": 0, "here": [0, 2, 5, 9, 10], "conveni": 0, "list_fil": 0, "entri": [0, 2, 9], "listdir": 0, "isfil": 0, "join": [0, 2, 6, 8, 9], "host": [0, 2, 5, 9, 10], "still": [0, 2, 5, 6, 9, 10], "isdir": 0, "list_packet": 0, "list_receipt": 0, "list_deliv": 0, "list_timeout": 0, "too": [0, 6], "mani": [0, 2, 3, 5, 6, 7, 9, 10, 11], "split": 0, "filelist": 0, "multipl": [0, 5, 6, 9, 10], "hint": 0, "alreadi": [0, 2, 3, 6, 7, 9, 10], "support": [0, 2, 4, 5, 6, 7, 9, 10, 11], "after": [0, 2, 5, 6, 7, 9, 10], "re": [0, 5, 7, 9], "keep": [0, 6, 7, 9, 10, 11], "open": [0, 3, 5, 6, 7, 8, 9, 10, 11], "client_request": 0, "longer": [0, 2, 6, 9, 10], "filenam": 0, "rb": 0, "file_resourc": 0, "resource_sending_conclud": 0, "somethign": 0, "went": 0, "wrong": [0, 5], "don": [0, 2, 6, 7, 10], "unknown": [0, 5, 7, 9, 10], "conclud": [0, 7], "hasattr": 0, "server_fil": 0, "current": [0, 2, 4, 5, 7, 9], "current_download": 0, "current_filenam": 0, "statist": [0, 5, 7, 8], "download_start": 0, "download_finish": 0, "download_tim": 0, "transfer_s": 0, "file_s": 0, "expect": [0, 2, 5, 7, 9, 10], "normal": [0, 2, 5, 7, 10], "accordingli": 0, "filelist_receiv": 0, "advertis": [0, 7], "set_resource_strategi": [0, 7], "accept_al": [0, 7], "set_resource_started_callback": [0, 7], "download_began": 0, "set_resource_concluded_callback": [0, 7], "download_conclud": 0, "menu": 0, "menu_mod": 0, "down": [0, 3, 5, 7], "request_packet": 0, "create_receipt": [0, 7], "print_menu": 0, "25": [0, 4, 11], "user_input": 0, "screen": 0, "variou": [0, 2, 5, 6, 9, 10, 11], "state": 0, "It": [0, 2, 3, 5, 7, 9, 10, 11], "uninterest": 0, "won": 0, "clear_screen": 0, "print_filelist": 0, "percent": [0, 5], "get_progress": [0, 7], "100": [0, 5, 9], "rprogress": 0, "save_error": 0, "disk": [0, 7], "hour": [0, 5], "rem": 0, "divmod": 0, "3600": [0, 5], "minut": [0, 2, 5, 9], "60": [0, 5], "timestr": 0, "05": 0, "2f": 0, "ttime": 0, "taken": [0, 9], "tfile": 0, "size_str": 0, "tdata": 0, "teffect": 0, "rate": [0, 4, 7, 10], "suffix": 0, "b": [0, 6, 10], "ttransfer": 0, "press": 0, "index": [0, 2, 4], "enumer": 0, "filelist_data": 0, "extend": [0, 2, 7], "local": [0, 2, 5, 6, 7, 9, 10, 11], "append": [0, 9], "visibl": 0, "updat": [0, 2, 7, 9, 10], "small": [0, 5, 6, 7, 9, 11], "job": 0, "potenti": [0, 5, 8, 9, 10, 11], "target": [0, 5, 10], "filelist_timeout_job": 0, "daemon": [0, 2, 5, 7, 10], "detect": 0, "shown": 0, "progress": [0, 7, 10, 11], "total_s": 0, "saved_filenam": 0, "counter": 0, "wb": 0, "human": [0, 7, 8, 9], "readabl": [0, 7, 9], "num": 0, "unit": [0, 2, 7, 10], "ki": 0, "mi": 0, "gi": 0, "ti": [0, 9], "pi": [0, 4, 6, 9, 10, 11], "ei": 0, "zi": 0, "last_unit": 0, "yi": 0, "k": [0, 10], "m": [0, 2, 9, 10], "g": [0, 10], "p": [0, 10], "z": 0, "y": 0, "ab": 0, "1024": 0, "clear": [0, 5, 7, 9, 10], "cl": 0, "nt": 0, "dir": 0, "best": [2, 9, 11], "guid": [2, 3, 9], "outlin": [2, 3, 9], "sensibl": [2, 3, 5], "scenario": [2, 4, 9], "relat": 2, "easiest": [2, 3, 5, 9], "via": [2, 3, 5, 8, 9, 10, 11], "pip": [2, 3, 10], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "python3": [2, 3], "pamac": 2, "similar": [2, 3, 5, 6, 7, 10, 11], "dowload": 2, "releas": [2, 5, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "offlin": 2, "py3": 2, "whl": 2, "mai": [2, 5, 7, 9, 10], "case": [2, 3, 5, 6, 9, 10], "usual": 2, "essenti": [2, 5, 9], "deriv": [2, 7, 9, 11], "arch": 2, "manjaro": 2, "devel": 2, "fedora": 2, "dnf": 2, "groupinstal": 2, "tool": [2, 3, 9, 10, 11], "librari": 2, "compil": 2, "miss": 2, "even": [2, 5, 6, 7, 9, 10, 11], "pre": [2, 7, 9], "built": [2, 5, 9, 10, 11], "few": [2, 3, 5, 6, 9, 10, 11], "extrem": [2, 9, 10, 11], "low": [2, 3, 5, 6, 9, 11], "bandwidth": [2, 5, 6, 7, 9, 10, 11], "These": [2, 5, 7, 9, 10], "feel": 2, "work": [2, 3, 5, 6, 9, 10, 11], "design": [2, 3, 6, 9, 11], "well": [2, 3, 5, 6, 7, 9, 10, 11], "lora": [2, 3, 4, 9, 11], "link": [2, 3, 4, 5, 6, 7, 10, 11], "wifi": [2, 4, 5, 6, 9, 10, 11], "wire": [2, 3, 4, 5, 11], "ethernet": [2, 4, 5, 6, 9, 11], "combin": [2, 4, 6, 9], "As": [2, 3, 5, 6, 7, 9, 11], "easi": [2, 3, 5, 9, 10, 11], "experi": [2, 9], "without": [2, 3, 5, 6, 9, 10, 11], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "devic": [2, 4, 5, 6, 7, 9, 10], "enough": [2, 3, 9], "physic": [2, 3, 5, 7, 9, 10], "rnsh": [2, 10], "fulli": [2, 3, 9, 10, 11], "session": [2, 9], "pipe": [2, 4, 11], "ssh": 2, "veri": [2, 3, 5, 6, 7, 8, 9, 10, 11], "facilit": 2, "suit": [2, 3, 9, 10], "featur": [2, 8, 9, 11], "delai": [2, 5, 9, 10], "browser": 2, "page": [2, 4, 9], "dynam": [2, 10], "render": 2, "authent": [2, 5, 6, 7, 9, 10, 11], "face": [2, 5], "protocol": [2, 3, 4, 5, 11], "lxmf": [2, 10], "anoth": [2, 7, 9, 10], "project": 2, "nomadnet": 2, "might": [2, 5, 6, 9, 10], "reboot": 2, "again": [2, 5, 9, 10], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 9], "maco": 2, "window": [2, 5], "peopl": [2, 9], "compat": [2, 3, 5, 7, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": [2, 11], "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 9], "easier": [2, 5, 6, 10], "rnsd": [2, 4], "background": [2, 5], "foreground": 2, "servic": [2, 4, 6], "rnstatu": [2, 4, 5, 9], "rnpath": [2, 4, 5], "rnprobe": [2, 4], "view": [2, 5, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "locat": [2, 3, 6, 9, 10], "exampl": [2, 3, 4, 5, 7, 9, 10, 11], "exampleconfig": [2, 10], "broadcast": [2, 4, 5, 7, 9], "domain": [2, 5], "further": [2, 4, 5], "tcp": [2, 3, 4, 6, 9, 11], "There": [2, 6, 9, 11], "subnet": [2, 6], "rout": [2, 3, 5, 6, 7, 9, 10, 11], "tabl": [2, 5, 6, 9, 10], "thing": 2, "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "utilis": [2, 5, 6, 7, 10, 11], "extern": [2, 5, 7, 11], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "gatewai": [2, 5, 6, 9], "enabl": [2, 3, 5, 6, 7, 9, 10, 11], "wider": [2, 5, 9, 10], "autointerfac": [2, 3, 5, 10], "possibli": 2, "offer": [2, 4, 5, 7, 9], "carefulli": 2, "tcpserverinterfac": [2, 5], "access": [2, 4, 5, 6, 7, 10], "ip": [2, 3, 5, 9, 10, 11], "faster": [2, 5, 9], "lower": [2, 5, 10], "latenc": [2, 9, 11], "energi": 2, "i2pinterfac": [2, 5], "howev": [2, 6, 9], "leak": 2, "reveal": [2, 7, 9, 11], "who": [2, 5, 9], "inspect": [2, 5, 6, 9, 10], "someon": [2, 5], "determin": [2, 7, 9], "adversari": 2, "record": [2, 9], "metadata": [2, 9, 11], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "through": [2, 3, 5, 6, 7, 9, 10, 11], "invis": [2, 5], "parallel": 2, "For": [2, 3, 5, 6, 7, 9, 10, 11], "alwai": [2, 5, 7, 9, 10], "node": [2, 4, 5, 6, 10, 11], "i2pd": [2, 5], "mix": [2, 5, 6, 10], "hide": 2, "relai": 2, "extra": [2, 5, 6, 10], "comput": [2, 9, 11], "power": [2, 3, 5, 9, 10], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10], "difficult": [2, 3], "non": [2, 7, 9], "behind": [2, 9], "firewal": [2, 5], "nat": 2, "preserv": [2, 7], "anonym": [2, 6, 7, 9, 11], "care": [2, 7, 11], "experiment": [2, 11], "made": [2, 7, 9], "amsterdam": 2, "hub": [2, 5], "tcpclientinterfac": [2, 3, 5], "ye": [2, 5, 9, 10], "target_host": [2, 5], "target_port": [2, 5], "4965": [2, 10], "betweenthebord": 2, "4242": [2, 5], "g3br23bvx3lq5uddcsjii74xgmn6y5q325ovrkq2zw2wbzbqgbuq": 2, "b32": [2, 5], "point": [2, 3, 5, 6, 9, 10], "absolut": [2, 8, 11], "usag": [2, 4, 5, 7, 8, 10], "occasion": 2, "test": [2, 9, 10], "failur": [2, 5, 7], "guarante": [2, 9], "weird": 2, "goe": 2, "sai": 2, "hardcod": 2, "ship": 2, "practic": [2, 9, 11], "solut": [2, 9, 10], "leav": [2, 6, 9], "hardwar": [2, 4, 5, 6, 7, 9, 10, 11], "wide": [2, 3, 5, 9, 10, 11], "section": [2, 3, 5, 6, 9, 10], "easili": [2, 5, 6, 9, 10, 11], "cheapli": 2, "rnode": [2, 4, 9, 10, 11], "purpos": [2, 3, 5, 7, 9, 10], "digit": [2, 3, 9, 11], "integr": [2, 6, 9], "yourself": [2, 9, 11], "custom": [2, 5, 7, 9, 11], "firmwar": [2, 3, 9, 10], "board": [2, 4, 5, 9, 11], "auto": [2, 3, 4, 7, 9], "script": [2, 3], "prefer": [2, 9], "purchas": [2, 6, 9, 11], "supplier": 2, "addit": [2, 3, 5, 7, 9, 10, 11], "privat": [2, 5, 7, 8, 9, 10, 11], "secur": [2, 9, 11], "uncensor": 2, "mesh": [2, 5, 6, 11], "think": 2, "welcom": 2, "head": 2, "discuss": [2, 3, 9], "propos": 2, "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "step": [2, 3], "pyseri": 2, "api": [2, 4, 9, 11], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "folder": 2, "symlink": [2, 10], "cd": 2, "ln": [2, 10], "echo": [2, 4], "ve": 2, "immedi": [2, 5, 10], "necessari": [2, 3, 5, 6, 7, 9], "nano": 2, "repeat": 2, "process": [2, 3, 5, 7, 9], "h": [2, 10], "ping": [2, 10], "replac": [2, 7, 9, 10], "below": [2, 3, 5, 10], "174a64852a75682259ad8b921b8bf416": 2, "filetransf": [2, 4, 7], "understand": [2, 4, 7, 10], "submit": 2, "pull": 2, "request": [2, 4, 5, 7, 9, 10], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "place": [2, 5, 6, 9, 10], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 9], "termux": 2, "f": [2, 10], "droid": 2, "emul": 2, "environ": [2, 6, 9], "abil": [2, 3], "pkg": 2, "sure": [2, 3, 10], "upgrad": [2, 9], "Then": 2, "reason": [2, 5, 9], "attempt": [2, 3, 7], "openssl": [2, 9], "libffi": 2, "rust": 2, "export": 2, "cargo_build_target": 2, "aarch64": 2, "sever": [2, 6, 7, 10], "succe": 2, "softwar": [2, 3, 5, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "apk": 2, "tutori": 2, "code": [2, 3, 4, 5, 10], "architectur": 2, "precompil": 2, "dev": [2, 5, 10], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": [2, 5], "april": 2, "2023": [2, 10], "onto": [2, 9], "unfortun": 2, "pipx": 2, "isol": [2, 5, 10], "neg": 2, "affect": [2, 5], "ensurepath": 2, "restor": [2, 5], "behaviour": [2, 5, 10], "edit": [2, 10], "conf": 2, "break": [2, 7, 9, 11], "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "_could_": 2, "obscur": 2, "rnspure": 2, "No": [2, 5, 9, 10, 11], "matter": [2, 5], "perfectli": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "conceiv": 3, "kind": [3, 5, 6, 9], "medium": [3, 5, 6, 7, 9, 11], "flexibl": [3, 5, 11], "cover": [3, 9, 11], "wireless": [3, 6], "decad": 3, "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "oper": [3, 5, 6, 7, 9, 10, 11], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "broad": 3, "abund": 3, "sometim": 3, "especi": [3, 5], "scratch": 3, "real": [3, 6, 11], "world": [3, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "addition": [3, 5, 9], "common": [3, 4, 6, 9, 10, 11], "briefli": [3, 9], "describ": [3, 5, 7, 9], "emploi": [3, 9], "pattern": [3, 9], "high": [3, 5, 9, 11], "capac": [3, 5, 7, 9], "gain": [3, 7, 9], "antenna": 3, "backbon": 3, "area": [3, 5, 6, 9, 11], "reliabl": [3, 5, 6, 7, 9, 11], "commonli": 3, "either": [3, 5, 6, 7, 9, 10], "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "particular": 3, "plaform": 3, "depend": [3, 4, 6, 7, 9, 10], "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "limit": [3, 4, 6, 9], "ism": [3, 9], "avoid": [3, 9, 10], "confus": [3, 9], "layer": [3, 5, 6, 7, 9, 11], "noth": [3, 11], "lorawan": [3, 9], "standard": [3, 9], "central": [3, 6, 9], "iot": 3, "overhead": [3, 5, 9], "level": [3, 5, 9, 10], "directli": [3, 5, 7, 9, 10, 11], "replic": [3, 9], "togeth": [3, 9, 10], "exact": [3, 5, 9], "explain": [3, 7], "approach": [3, 9, 10], "develop": [3, 4, 7, 8, 9, 11], "boil": 3, "obtain": [3, 7, 9], "autom": [3, 8, 9], "provis": [3, 10], "rnodeinterfac": [3, 5, 10], "ic": 3, "semtech": 3, "sx1276": 3, "platform": [3, 4, 9, 10], "esp32": 3, "manufactur": [3, 5], "io": 3, "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "question": [3, 5], "port": [3, 4, 5, 6, 9, 11], "air": [3, 11], "id": [3, 5, 7, 9, 10], "itself": [3, 4, 9], "short": [3, 5, 9, 10], "bridg": [3, 4], "behav": 3, "mean": [3, 5, 6, 7, 9, 10], "dhcp": [3, 5, 10], "dn": 3, "least": [3, 5, 9, 10, 11], "transpar": [3, 5, 9, 10], "distanc": [3, 9], "ubiqu": 3, "airmax": 3, "ltu": 3, "mikrotik": 3, "exhaust": [3, 9], "rel": [3, 9, 11], "cheap": [3, 9], "co": [3, 5, 11], "concurr": [3, 9, 10], "switch": [3, 5, 9, 10], "fiber": 3, "optic": [3, 11], "virtual": [3, 5, 6, 9, 10, 11], "adapt": [3, 6], "tun": 3, "tap": 3, "serialinterfac": [3, 5], "usb": [3, 6, 9, 10], "freedv": 3, "tnc": [3, 5, 7, 10, 11], "dire": 3, "wolf": 3, "aim": [4, 9], "particip": [4, 6, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "instal": [4, 5, 6, 9, 10, 11], "resolv": [4, 5, 10], "issu": [4, 6, 8], "base": [4, 5, 6, 7, 9, 10, 11], "shell": [4, 10], "nomad": 4, "sideband": 4, "meshchat": 4, "With": [4, 5, 6, 9, 10], "internet": [4, 5, 9, 11], "testnet": [4, 10], "radio": [4, 5, 6, 7, 9, 10, 11], "android": [4, 10], "arm64": 4, "raspberri": [4, 6, 9, 10, 11], "debian": [4, 9, 10], "bookworm": 4, "ubuntu": [4, 10], "lunar": 4, "pure": [4, 9], "rnid": 4, "rncp": 4, "rnx": 4, "improv": [4, 5, 8], "fix": [4, 9], "motiv": 4, "goal": [4, 5], "introduct": 4, "announc": [4, 7, 10], "mechan": [4, 5], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "rule": [4, 5], "modem": [4, 5, 6, 7, 9, 11], "udp": [4, 6, 9, 10, 11], "multi": [4, 9, 10, 11], "ax": [4, 11], "concept": [4, 9, 10], "overview": [4, 5, 9], "interconnect": [4, 5, 9], "site": [4, 5], "growth": 4, "converg": [4, 9], "identif": [4, 5, 11], "respons": [4, 7, 9], "buffer": [4, 5, 7], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "discover": 5, "autoconfigur": [5, 11], "ipv6": [5, 10], "router": [5, 10], "sort": [5, 9, 10], "communica": 5, "tion": 5, "usabl": [5, 9], "interface_en": [5, 10], "spe": 5, "cific": 5, "lan": 5, "group": [5, 7, 9], "group_id": 5, "multicast": 5, "temporari": 5, "perman": [5, 10], "multicast_address_typ": 5, "kernel": [5, 10, 11], "wlan0": 5, "eth1": 5, "Or": [5, 10, 11], "ignor": [5, 7, 9], "ones": [5, 10], "ignored_devic": 5, "tun0": 5, "eth0": 5, "autodiscov": 5, "discoveri": [5, 9, 10], "scope": 5, "admin": 5, "organis": [5, 6, 8], "custom_network_nam": 5, "discovery_scop": 5, "discovery_port": 5, "48555": 5, "data_port": 5, "49555": 5, "frequent": 5, "block": 5, "inbound": [5, 7], "portabl": [5, 9], "persist": [5, 10], "achiev": [5, 7, 9], "geti2p": 5, "net": 5, "websit": 5, "base32": 5, "comma": 5, "5urvjicpzi7q3ybztsef4i5ow2aq4soktfj7zedz53s47r54jnqq": 5, "output": [5, 10], "event": 5, "simplest": [5, 9], "tunnel": [5, 9, 11], "interchang": 5, "degre": 5, "retain": [5, 7], "eas": [5, 9], "simpler": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "reappear": 5, "hostnam": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "frame": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "intern": [5, 7, 9], "recoveri": 5, "greatli": 5, "unreli": 5, "implic": 5, "better": 5, "udpinterfac": 5, "forward_ip": 5, "255": [5, 10], "forward_port": 5, "assum": [5, 9], "55": 5, "72": 5, "24": 5, "equival": 5, "forward": [5, 7, 9, 11], "segment": [5, 6, 7, 9, 11], "15": 5, "16": [5, 9, 10], "ttyusb0": [5, 10], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "12": [5, 10], "73": [5, 10], "29": 5, "4e": 5, "89": 5, "867": 5, "mhz": [5, 9], "867200000": 5, "125": 5, "khz": 5, "125000": 5, "tx": [5, 10], "7": [5, 9, 10], "mw": 5, "txpower": 5, "spread": [5, 10], "factor": [5, 7, 10], "fastest": [5, 9], "longest": 5, "spreadingfactor": 5, "throough": 5, "codingr": 5, "interv": [5, 7, 10], "id_callsign": 5, "mycal": 5, "id_interv": 5, "600": 5, "homebrew": 5, "amount": [5, 6, 7, 9, 11], "ram": 5, "flow_control": 5, "airtim": 5, "term": [5, 6, 9], "appli": [5, 7, 9], "approxim": 5, "enforc": [5, 7], "roll": 5, "airtime_limit_long": 5, "airtime_limit_short": 5, "33": 5, "sub": 5, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "highdatar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "wrote": 5, "vport": 5, "lowdatar": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [5, 10], "speed": [5, 9, 10], "115200": [5, 10], "databit": [5, 10], "pariti": [5, 10], "stopbit": [5, 10], "stdin": [5, 10], "netcat": 5, "l": [5, 10], "5757": 5, "respawn": 5, "respawn_delai": 5, "continu": [5, 7, 8, 11], "scan": 5, "eof": 5, "respawn_interv": 5, "varieti": [5, 9, 10, 11], "openmodem": [5, 11], "period": [5, 7, 9], "beacon": 5, "station": 5, "kissinterfac": [5, 10], "ttyusb1": 5, "preambl": [5, 10], "150": [5, 10], "tail": 5, "txtail": [5, 10], "cdma": 5, "200": [5, 10], "slottim": [5, 10], "20": [5, 9, 10], "elaps": 5, "comment": [5, 10], "amateur": [5, 11], "spectrum": [5, 9], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 10], "squelch": 5, "rx": [5, 10], "turnaround": 5, "kept": [5, 6, 7, 9], "wast": 5, "bring": 5, "brought": [5, 10], "access_point": 5, "shorthand": [5, 10], "ap": 5, "shorter": 5, "expiri": [5, 7], "mostli": [5, 6, 9], "quiet": [5, 10], "momentarili": 5, "disappear": [5, 10], "network_nam": 5, "passphras": [5, 9], "alon": 5, "ifac_s": 5, "customis": 5, "carri": [5, 7, 9, 10], "512": [5, 7, 9], "announce_cap": [5, 7], "maximum": [5, 7, 9, 10], "alloc": [5, 7, 9, 10], "given": [5, 6, 7, 9, 10], "upkeep": 5, "cap": 5, "queue": [5, 9], "nearbi": 5, "overwhelm": [5, 7], "rapidli": 5, "spam": 5, "effect": 5, "excess": 5, "benefici": [5, 10], "balanc": 5, "necesarri": 5, "bitrat": [5, 7], "report": [5, 7, 8, 10], "guess": 5, "per": [5, 7, 9, 10, 11], "strictli": [5, 9], "complex": [5, 9], "left": [5, 7, 9, 10], "gw": 5, "behalf": 5, "resid": 5, "requestor": 5, "chain": 5, "along": [5, 6, 7, 9, 10], "boundari": 5, "remain": [5, 7, 9], "roam": 5, "mobil": [5, 9], "seen": [5, 9], "perspect": [5, 7, 9, 11], "vehicl": 5, "equip": [5, 6, 9], "side": [5, 11], "expir": 5, "significantli": 5, "impact": [5, 7, 9], "announce_rate_target": 5, "announce_rate_grac": 5, "announce_rate_penalti": 5, "basi": [5, 7, 9, 10, 11], "moder": 5, "violat": 5, "penalti": 5, "7200": 5, "annouce_cap": 5, "mention": [5, 9], "strategi": [5, 7], "decis": [5, 9], "slower": [5, 7, 9], "hop": [5, 6, 7, 9, 10, 11], "right": [5, 6], "tend": 5, "conserv": 5, "span": [5, 9], "seamlessli": 5, "influx": 5, "newli": [5, 6, 7, 9], "previous": [5, 6, 7, 9], "occur": [5, 10, 11], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "ingress": 5, "disrupt": 5, "neccessari": 5, "modifi": [5, 9, 10, 11], "ingress_control": 5, "ic_new_tim": 5, "spawn": 5, "ic_burst_freq_new": 5, "ic_burst_freq": 5, "temporarili": 5, "ic_max_held_announc": 5, "drop": [5, 7, 9, 10], "256": [5, 7, 9, 10], "ic_burst_hold": 5, "threshold": 5, "ic_burst_penalti": 5, "ic_held_release_interv": 5, "30": [5, 7, 10], "knowledg": [6, 9], "tradit": [6, 9], "worri": 6, "coordin": [6, 7, 9, 11], "evolv": 6, "futur": [6, 9], "mind": [6, 11], "autonom": [6, 9], "terminologi": [6, 9], "rest": [6, 11], "billion": [6, 9], "larger": [6, 9, 10], "higher": [6, 11], "discrimin": 6, "ephemer": [6, 7, 9, 11], "ellipt": [6, 7, 9, 11], "curv": [6, 7, 9, 11], "diffi": [6, 9, 11], "hellman": [6, 9, 11], "exchang": [6, 7, 9, 11], "curve25519": [6, 7, 9, 11], "throttl": 6, "thu": [6, 7, 9], "agnost": [6, 9], "equal": [6, 7, 9], "keystor": 6, "degrad": 6, "stationari": [6, 10], "candid": 6, "optim": 6, "intend": [6, 9], "trustless": [6, 9, 11], "free": [6, 8, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "underli": [6, 11], "carrier": [6, 11], "involv": 6, "hardlin": 6, "illustr": [6, 9], "plan": [6, 9], "member": 6, "mainli": 6, "three": [6, 9], "hill": 6, "top": [6, 9], "chosen": [6, 9], "sight": 6, "becaus": [6, 9], "four": 6, "At": [6, 9], "cabl": 6, "suppli": [6, 7, 9], "grow": 6, "core": [6, 9, 10, 11], "those": [6, 9], "d": [6, 10], "island": 6, "investig": 6, "dori": 6, "willing": 6, "she": 6, "her": 6, "home": [6, 10], "everyon": [6, 9], "vice": [6, 11], "versa": [6, 11], "vhf": [6, 9, 11], "outli": 6, "geograph": 6, "coverag": 6, "dai": [6, 7], "find": [6, 9], "poorli": 6, "outlier": 6, "signatur": [7, 9, 10, 11], "configdir": 7, "logdest": 7, "verbos": [7, 10], "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "mtu": [7, 9, 11], "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "alter": [7, 9], "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "remote_management_en": 7, "create_kei": 7, "decrypt": [7, 9, 10], "verif": [7, 9, 10], "sign": [7, 9, 10], "dh": 7, "keysiz": 7, "x": [7, 9, 10], "25519": 7, "concaten": 7, "ratchets": 7, "ratchet": [7, 9], "ratchet_expiri": 7, "2592000": 7, "recent": [7, 9], "rememb": [7, 9], "discard": [7, 9], "newer": [7, 9], "meantim": 7, "128": [7, 9, 11], "constant": 7, "truncat": [7, 9, 10], "recall_app_data": 7, "heard": [7, 9], "full_hash": 7, "sha": [7, 9], "truncated_hash": 7, "current_ratchet_id": 7, "from_byt": 7, "prv_byte": 7, "save": [7, 9], "hazard": 7, "feed": 7, "from_fil": 7, "to_fil": 7, "Be": [7, 10], "get_private_kei": 7, "get_public_kei": 7, "load_private_kei": 7, "load_public_kei": 7, "pub_byt": 7, "ciphertext": 7, "token": [7, 9], "keyerror": 7, "ciphertext_token": 7, "enforce_ratchet": 7, "ratchet_id_receiv": 7, "presenc": 7, "ingo": 7, "zero": [7, 11], "ratchet_count": 7, "ratchet_interv": 7, "1800": 7, "rotat": [7, 9], "expand_nam": 7, "app_and_aspects_from_nam": 7, "full_nam": [7, 10], "tupl": 7, "hash_from_name_and_ident": 7, "adress": [7, 9], "path_respons": 7, "attached_interfac": 7, "tag": 7, "flag": [7, 9], "accepts_link": 7, "accept": [7, 8, 9, 10], "set_proof_requested_callback": 7, "proof_strategi": 7, "prove_non": 7, "prove_app": 7, "proof_requested_callback": 7, "allow_non": 7, "allowed_list": 7, "whatev": [7, 9], "funcion": 7, "allow_list": 7, "deregister_request_handl": 7, "deregist": 7, "enable_ratchet": 7, "ratchets_path": 7, "secreci": [7, 9, 11], "outsid": [7, 11], "succeed": 7, "set_retained_ratchet": 7, "retained_ratchet": 7, "set_ratchet_interv": 7, "symmetr": [7, 9], "typeerror": 7, "incompat": [7, 9], "set_default_app_data": 7, "clear_default_app_data": 7, "ae": [7, 9, 11], "instanti": 7, "encrypted_mdu": 7, "383": 7, "plain_mdu": 7, "464": 7, "resend": 7, "get_statu": 7, "cull": 7, "successful": 7, "proven": [7, 9], "established_callback": 7, "closed_callback": 7, "establishment_timeout_per_hop": 7, "keepalive_timeout_factor": 7, "4": [7, 9, 10], "calcul": [7, 9, 10], "stale_grac": 7, "grace": 7, "keepal": [7, 9], "360": 7, "aliv": [7, 9], "stale_tim": 7, "720": 7, "mark": [7, 9], "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "qualiti": 7, "get_rssi": 7, "signal": [7, 9], "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "get_establishment_r": 7, "ocur": 7, "get_ag": 7, "no_inbound_for": 7, "no_outbound_for": 7, "outbound": [7, 9], "no_data_for": 7, "travers": [7, 9], "exclud": [7, 9], "inactive_for": 7, "purg": 7, "set_resource_callback": 7, "get_transfer_s": 7, "get_data_s": 7, "get_part": 7, "is_compress": 7, "begun": 7, "resource_strategi": 7, "accept_non": 7, "accept_app": 7, "resource_callback": 7, "unsupport": 7, "get_request_id": 7, "get_respons": 7, "get_response_tim": 7, "auto_compress": 7, "arbitrari": [7, 9, 10, 11], "checksum": [7, 11], "Will": 7, "whenev": [7, 9], "cancel": 7, "total": [7, 9, 11], "get_seg": 7, "divid": 7, "get_hash": 7, "bi": [7, 9], "neither": [7, 9], "constrain": 7, "message_class": 7, "recept": 7, "messagecallbacktyp": 7, "bool": 7, "stop": [7, 11], "remove_message_handl": 7, "remov": [7, 10], "envelop": 7, "thrown": 7, "consum": 7, "adjust": 7, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9, 11], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "document": [7, 9], "create_writ": 7, "receive_stream_id": 7, "send_stream_id": 7, "rawiobas": 7, "add_ready_callback": 7, "cb": [7, 9], "remove_ready_callback": 7, "pathfinder_m": 7, "attribut": 7, "receive_path_respons": 7, "live": 7, "deregister_announce_handl": 7, "hops_to": 7, "next_hop": 7, "next_hop_interfac": 7, "on_interfac": 7, "recurs": 7, "gratefulli": 8, "monero": 8, "84fpy1qbxhcgdseepynmhthcrgmx4nffbytz2gkytoqhvvhjp8eaw1z1eedrnkd19b3b8nilcgvxzkv17ummmeescrpya5w": 8, "ethereum": 8, "0x81f7b979fea6134ba9fd5c701b3501a2e61e897a": 8, "bitcoin": 8, "3cpmacgm34qyvr6xwlvejmi2ane3pzquuq": 8, "ko": 8, "fi": 8, "roadmap": 8, "realiti": 8, "quickli": [8, 9, 11], "sponsor": [8, 11], "dysfunct": 8, "analyt": 8, "telemetri": 8, "collect": 8, "under": [8, 10, 11], "circumst": [8, 9], "reli": [8, 9], "fashion": 8, "u": [8, 9, 10], "suggest": 8, "overal": 9, "principl": [9, 11], "author": 9, "That": 9, "said": 9, "pretti": 9, "sentiment": 9, "philosophi": 9, "seek": 9, "solv": 9, "primari": 9, "lack": 9, "my": 9, "belief": 9, "highli": 9, "machin": 9, "censorship": [9, 11], "barrier": 9, "todai": 9, "centralis": 9, "trust": [9, 10], "approv": 9, "gatekeep": 9, "inevit": 9, "govern": 9, "censor": 9, "persecut": 9, "unwant": 9, "actor": 9, "imposs": 9, "freeli": 9, "deploi": 9, "enhanc": 9, "agenc": 9, "freedom": 9, "permissionless": 9, "pick": 9, "ghz": 9, "off": [9, 10, 11], "shelf": [9, 11], "ultim": 9, "vast": 9, "myriad": 9, "thousand": 9, "surveil": 9, "disassoci": 9, "oversight": 9, "beings": 9, "useabl": 9, "critic": [9, 10], "agnostic": 9, "shall": 9, "handheld": 9, "strong": 9, "oneself": 9, "unlicens": 9, "licens": 9, "condit": [9, 11], "pmr": 9, "written": 9, "programm": 9, "orient": 9, "multipoint": 9, "recipi": 9, "singular": 9, "_represented_": 9, "characterist": 9, "13425ec15b621c1d928589718000d814": 9, "trade": 9, "simultan": 9, "unlik": 9, "nears": 9, "congest": 9, "galact": 9, "scale": [9, 11], "obvious": 9, "ridicul": 9, "asymmetr": [9, 10, 11], "special": [9, 10], "ecdh": [9, 11], "creator": 9, "correspond": 9, "possess": 9, "although": [9, 11], "capabl": 9, "dot": [9, 10], "notat": [9, 10], "repres": 9, "plenti": 9, "environment": 9, "monitor": 9, "measur": 9, "environmentlogg": 9, "remotesensor": 9, "temperatur": 9, "4faf1b2e0a077e6a9d92fa051f256038": 9, "advis": 9, "expand": 9, "recap": 9, "indirectli": 9, "ledger": 9, "therefor": [9, 11], "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 9, "accord": 9, "around": 9, "topic": 9, "necessarili": 9, "entiti": 9, "robot": 9, "sensor": 9, "someth": 9, "agent": 9, "manipul": [9, 11], "multilater": 9, "creation": [9, 11], "great": 9, "suffic": 9, "cluster": 9, "hear": 9, "But": 9, "lot": 9, "surviv": 9, "overcom": 9, "challeng": 9, "closer": 9, "distinguish": 9, "contend": 9, "enable_transport": [9, 10], "randomis": 9, "prioriti": 9, "invers": 9, "proport": 9, "count": 9, "insert": 9, "closest": 9, "newest": 9, "contact": 9, "shortest": 9, "predict": 9, "constantli": 9, "earlier": 9, "opt": 9, "against": 9, "bidirect": 9, "ten": 9, "advanc": 9, "confirm": [9, 11], "insid": 9, "intermediari": 9, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 9, "memori": 9, "thereaft": 9, "297": [9, 11], "neglig": 9, "1200": 9, "96": 9, "x25519": [9, 11], "keypair": 9, "simplic": 9, "explan": [9, 10], "lki": 9, "laid": 9, "had": 9, "construct": [9, 11], "lkr": 9, "chose": 9, "direction": 9, "unequivoc": 9, "retransmiss": 9, "reassembl": 9, "programmat": 9, "satisfi": 9, "half": [9, 11], "duplex": [9, 11], "averag": 9, "throughput": [9, 11], "runtim": 9, "consist": 9, "whereupon": 9, "stabl": [9, 11], "stage": 9, "year": 9, "microcontrol": 9, "430": 9, "868": 9, "900": 9, "tailor": 9, "treat": 9, "regard": 9, "preshar": 9, "ifac": [9, 10], "compos": 9, "field": 9, "context": 9, "465": 9, "vari": [9, 10], "unset": 9, "00": [9, 10], "01": 9, "11": 9, "_______": 9, "________________": 9, "________": 9, "______": 9, "__": 9, "_": 9, "01010000": 9, "00000100": 9, "hash1": 9, "hash2": 9, "header_2": 9, "00000000": 9, "00000111": 9, "header_1": 9, "10000000": 9, "51": 9, "167": 9, "83": [9, 10], "115": 9, "99": 9, "conceptu": 9, "hkdf": 9, "fernet": [9, 11], "cbc": [9, 11], "hmac": [9, 11], "hashlib": 9, "pkcs7": [9, 11], "pad": [9, 11], "trivial": [9, 11], "consequ": 9, "backend": 9, "loss": 9, "scrutini": 9, "review": [9, 11], "risk": 9, "driver": [10, 11], "privileg": 10, "light": 10, "weight": 10, "etc": 10, "boot": 10, "ie": 10, "breviti": 10, "socket": 10, "turn": 10, "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "panic": 10, "unrecover": 10, "panic_on_interface_error": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "debug": 10, "unus": 10, "teach": 10, "task": 10, "08": 10, "18": 10, "17": 10, "59": 10, "56": 10, "v": 10, "show": 10, "ifconfig": 10, "gbp": 10, "13": 10, "kb": 10, "86": 10, "mbp": 10, "63": 10, "23": 10, "80": 10, "tcpinterfac": 10, "dublin": 10, "187": 10, "27": 10, "74": 10, "uhf": [10, 11], "kbp": 10, "e702c42ba8": 10, "49": 10, "9": 10, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 10, "posit": 10, "arx": 10, "atx": 10, "revers": 10, "json": 10, "new_ident": 10, "984b74a3f768bef236af4371e6f248cd": 10, "new_id": 10, "0f4259fef4521ab75a3409e353fe9073eb10783b4912a6a9937c57bf44a62c1": 10, "hidden": 10, "8dd57a738226809646089335a6b03695": 10, "my_fil": 10, "txt": 10, "bc7291552be7a58f361522990465165c": 10, "rfe": 10, "fetch": 10, "30602def3b3506a28ed33db6f60cc6c9": 10, "2b489d06eaf7c543808c76a5332a447d": 10, "my_ident": 10, "2225fdeecaf6e2db4556c3c2d7637294": 10, "decreas": 10, "overwrit": 10, "c89b4da064bf66d280f0e4d8abfd9806": 10, "f53a1c4278e0726bb73fcc623d6ce763": 10, "max": 10, "rnstransport": 10, "2d03725b327348980d570f739a3a5708": 10, "38": 10, "469": 10, "781": 10, "e7536ee90bd4a440e130490b87a25124": 10, "809": 10, "1726dbad538775b5bf9b0ea25a4079c8": 10, "c50cc4e4f7838b6c31f60ab9032cbc62": 10, "allowed_ident": 10, "copi": 10, "tgz": 10, "73cbd378bb0286ed11a707c13447bb1": 10, "allowed_hash": 10, "silent": 10, "jail": 10, "auth": 10, "941bed5e228775e5a8079fc38b1ccf3f": 10, "1b03013c25f1c2ca068a4f080b844a10": 10, "7a55144adf826958a9529a3bcf08b149": 10, "cat": 10, "proc": 10, "cpuinfo": 10, "pseudo": 10, "stderr": 10, "noauth": 10, "noid": 10, "mirror": 10, "fw": 10, "url": 10, "nocheck": 10, "flash": 10, "baud_flash": 10, "addr": 10, "freq": 10, "hz": 10, "bw": 10, "txp": 10, "sf": 10, "cr": 10, "eeprom": 10, "backup": 10, "dump": 10, "wipe": 10, "hexbyt": 10, "firmware_hash": 10, "product": 10, "model": 10, "hwrev": 10, "revis": 10, "attach": 10, "older": 10, "onlin": 10, "extract": 10, "cach": 10, "921600": 10, "bluetooth": 10, "intens": 10, "ff": 10, "consol": 10, "unlock": 10, "bootstrap": 10, "rom": 10, "enable_remote_manag": 10, "remote_management_allow": 10, "9fb6d773498fb3feda407ed8ef2c3229": 10, "2d882c5586e548d79b5af27bca1776dc": 10, "administr": 10, "ftdi_ft230x_basic_uart_43891ckm": 10, "if00": 10, "port0": 10, "plug": 10, "unplug": 10, "systemd": 10, "usr": 10, "bin": 10, "execstartpr": 10, "restart": 10, "restartsec": 10, "usernameher": 10, "execstart": 10, "wantedbi": 10, "systemctl": 10, "whole": 10, "regular": 10, "rns_bin_dir": 10, "eg": 10, "reload": 10, "loginctl": 10, "linger": 10, "readili": 11, "advers": 11, "unforg": 11, "acknowledg": 11, "empow": 11, "autonomi": 11, "sovereignti": 11, "subject": 11, "planetari": 11, "hierarch": 11, "beaureucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "sha256": 11, "iv": 11, "urandom": 11, "intuit": 11, "44": 11, "gigabyt": 11, "scalabl": 11, "hoc": 11, "transform": 11, "fact": 11, "generalis": 11, "fibr": 11, "popular": 11, "ideal": 11, "stdio": 11, "hack": 11, "foremost": 11, "audit": 11, "privaci": 11, "thorough": 11, "research": 11, "touch": 11}, "objects": {"RNS": [[7, 0, 1, "", "Buffer"], [7, 0, 1, "", "Destination"], [7, 0, 1, "", "Identity"], [7, 0, 1, "", "Link"], [7, 0, 1, "", "MessageBase"], [7, 0, 1, "", "Packet"], [7, 0, 1, "", "PacketReceipt"], [7, 0, 1, "", "RawChannelReader"], [7, 0, 1, "", "RawChannelWriter"], [7, 0, 1, "", "RequestReceipt"], [7, 0, 1, "", "Resource"], [7, 0, 1, "", "Reticulum"], [7, 0, 1, "", "Transport"]], "RNS.Buffer": [[7, 1, 1, "", "create_bidirectional_buffer"], [7, 1, 1, "", "create_reader"], [7, 1, 1, "", "create_writer"]], "RNS.Channel": [[7, 0, 1, "", "Channel"]], "RNS.Channel.Channel": [[7, 2, 1, "", "MDU"], [7, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 1, 1, "", "register_message_type"], [7, 1, 1, "", "remove_message_handler"], [7, 1, 1, "", "send"]], "RNS.Destination": [[7, 3, 1, "", "RATCHET_COUNT"], [7, 3, 1, "", "RATCHET_INTERVAL"], [7, 1, 1, "", "accepts_links"], [7, 1, 1, "", "announce"], [7, 1, 1, "", "app_and_aspects_from_name"], [7, 1, 1, "", "clear_default_app_data"], [7, 1, 1, "", "create_keys"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "deregister_request_handler"], [7, 1, 1, "", "enable_ratchets"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "enforce_ratchets"], [7, 1, 1, "", "expand_name"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "hash"], [7, 1, 1, "", "hash_from_name_and_identity"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "register_request_handler"], [7, 1, 1, "", "set_default_app_data"], [7, 1, 1, "", "set_link_established_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_proof_requested_callback"], [7, 1, 1, "", "set_proof_strategy"], [7, 1, 1, "", "set_ratchet_interval"], [7, 1, 1, "", "set_retained_ratchets"], [7, 1, 1, "", "sign"]], "RNS.Identity": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "KEYSIZE"], [7, 3, 1, "", "RATCHETSIZE"], [7, 3, 1, "", "RATCHET_EXPIRY"], [7, 3, 1, "", "TRUNCATED_HASHLENGTH"], [7, 1, 1, "", "current_ratchet_id"], [7, 1, 1, "", "decrypt"], [7, 1, 1, "", "encrypt"], [7, 1, 1, "", "from_bytes"], [7, 1, 1, "", "from_file"], [7, 1, 1, "", "full_hash"], [7, 1, 1, "", "get_private_key"], [7, 1, 1, "", "get_public_key"], [7, 1, 1, "", "get_random_hash"], [7, 1, 1, "", "load_private_key"], [7, 1, 1, "", "load_public_key"], [7, 1, 1, "", "recall"], [7, 1, 1, "", "recall_app_data"], [7, 1, 1, "", "sign"], [7, 1, 1, "", "to_file"], [7, 1, 1, "", "truncated_hash"], [7, 1, 1, "", "validate"]], "RNS.Link": [[7, 3, 1, "", "CURVE"], [7, 3, 1, "", "ESTABLISHMENT_TIMEOUT_PER_HOP"], [7, 3, 1, "", "KEEPALIVE"], [7, 3, 1, "", "KEEPALIVE_TIMEOUT_FACTOR"], [7, 3, 1, "", "STALE_GRACE"], [7, 3, 1, "", "STALE_TIME"], [7, 1, 1, "", "get_age"], [7, 1, 1, "", "get_channel"], [7, 1, 1, "", "get_establishment_rate"], [7, 1, 1, "", "get_q"], [7, 1, 1, "", "get_remote_identity"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [7, 1, 1, "", "identify"], [7, 1, 1, "", "inactive_for"], [7, 1, 1, "", "no_data_for"], [7, 1, 1, "", "no_inbound_for"], [7, 1, 1, "", "no_outbound_for"], [7, 1, 1, "", "request"], [7, 1, 1, "", "set_link_closed_callback"], [7, 1, 1, "", "set_packet_callback"], [7, 1, 1, "", "set_remote_identified_callback"], [7, 1, 1, "", "set_resource_callback"], [7, 1, 1, "", "set_resource_concluded_callback"], [7, 1, 1, "", "set_resource_started_callback"], [7, 1, 1, "", "set_resource_strategy"], [7, 1, 1, "", "teardown"], [7, 1, 1, "", "track_phy_stats"]], "RNS.MessageBase": [[7, 3, 1, "", "MSGTYPE"], [7, 1, 1, "", "pack"], [7, 1, 1, "", "unpack"]], "RNS.Packet": [[7, 3, 1, "", "ENCRYPTED_MDU"], [7, 3, 1, "", "PLAIN_MDU"], [7, 1, 1, "", "resend"], [7, 1, 1, "", "send"]], "RNS.PacketReceipt": [[7, 1, 1, "", "get_rtt"], [7, 1, 1, "", "get_status"], [7, 1, 1, "", "set_delivery_callback"], [7, 1, 1, "", "set_timeout"], [7, 1, 1, "", "set_timeout_callback"]], "RNS.RawChannelReader": [[7, 1, 1, "", "__init__"], [7, 1, 1, "", "add_ready_callback"], [7, 1, 1, "", "remove_ready_callback"]], "RNS.RawChannelWriter": [[7, 1, 1, "", "__init__"]], "RNS.RequestReceipt": [[7, 1, 1, "", "concluded"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_request_id"], [7, 1, 1, "", "get_response"], [7, 1, 1, "", "get_response_time"], [7, 1, 1, "", "get_status"]], "RNS.Resource": [[7, 1, 1, "", "advertise"], [7, 1, 1, "", "cancel"], [7, 1, 1, "", "get_data_size"], [7, 1, 1, "", "get_hash"], [7, 1, 1, "", "get_parts"], [7, 1, 1, "", "get_progress"], [7, 1, 1, "", "get_segments"], [7, 1, 1, "", "get_transfer_size"], [7, 1, 1, "", "is_compressed"]], "RNS.Reticulum": [[7, 3, 1, "", "ANNOUNCE_CAP"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "remote_management_enabled"], [7, 1, 1, "", "should_use_implicit_proof"], [7, 1, 1, "", "transport_enabled"]], "RNS.Transport": [[7, 3, 1, "", "PATHFINDER_M"], [7, 1, 1, "", "deregister_announce_handler"], [7, 1, 1, "", "has_path"], [7, 1, 1, "", "hops_to"], [7, 1, 1, "", "next_hop"], [7, 1, 1, "", "next_hop_interface"], [7, 1, 1, "", "register_announce_handler"], [7, 1, 1, "", "request_path"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:property", "3": "py:attribute"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "property", "Python property"], "3": ["py", "attribute", "Python attribute"]}, "titleterms": {"code": [0, 8, 9], "exampl": [0, 6], "minim": 0, "announc": [0, 5, 9], "broadcast": 0, "echo": 0, "link": [0, 9], "identif": 0, "request": 0, "respons": 0, "channel": 0, "buffer": 0, "filetransf": 0, "an": 1, "explan": 1, "reticulum": [1, 2, 3, 4, 8, 9, 10, 11], "human": 1, "Beings": 1, "get": [2, 9], "start": 2, "fast": 2, "standalon": 2, "instal": [2, 3], "resolv": 2, "depend": 2, "issu": 2, "try": 2, "us": [2, 10, 11], "base": [2, 3], "program": [2, 10], "remot": [2, 10], "shell": 2, "nomad": 2, "network": [2, 4, 6], "sideband": 2, "meshchat": 2, "includ": [2, 10], "util": [2, 10], "creat": [2, 3], "With": 2, "connect": 2, "instanc": 2, "over": [2, 6], "internet": [2, 6], "public": [2, 9], "testnet": 2, "ad": 2, "radio": [2, 3], "interfac": [2, 5, 9, 11], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "raspberri": 2, "pi": 2, "debian": 2, "bookworm": 2, "ubuntu": 2, "lunar": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "lilygo": 3, "lora32": 3, "v2": 3, "1": 3, "0": 3, "t": 3, "beam": 3, "heltec": 3, "unsign": 3, "x": 3, "v1": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "devic": [3, 11], "packet": [3, 9], "modem": 3, "stack": 4, "manual": 4, "tabl": 4, "Of": 4, "content": 4, "indic": 4, "configur": [5, 10], "auto": 5, "i2p": 5, "tcp": 5, "server": 5, "client": 5, "udp": 5, "lora": [5, 6], "multi": 5, "pipe": 5, "kiss": 5, "ax": 5, "25": 5, "common": 5, "option": 5, "mode": 5, "rate": 5, "control": 5, "new": 5, "destin": [5, 9], "limit": 5, "build": 6, "concept": 6, "overview": 6, "scenario": 6, "interconnect": 6, "site": 6, "bridg": 6, "growth": 6, "converg": 6, "api": 7, "refer": [7, 9], "donat": 8, "provid": 8, "feedback": 8, "contribut": 8, "understand": 9, "motiv": 9, "goal": 9, "introduct": 9, "basic": 9, "function": 9, "name": [9, 10], "kei": 9, "ident": 9, "further": 9, "transport": 9, "node": 9, "The": [9, 10], "mechan": 9, "detail": 9, "reach": 9, "establish": 9, "resourc": 9, "setup": 9, "protocol": 9, "prioritis": 9, "access": 9, "wire": 9, "format": 9, "propag": 9, "rule": 9, "cryptograph": 9, "primit": 9, "your": 10, "system": 10, "data": 10, "rnsd": 10, "rnstatu": 10, "rnid": 10, "rnpath": 10, "rnprobe": 10, "rncp": 10, "rnx": 10, "rnodeconf": 10, "manag": 10, "improv": 10, "fix": 10, "port": 10, "servic": 10, "systemwid": 10, "userspac": 10, "what": 11, "i": 11, "current": 11, "statu": 11, "doe": 11, "offer": 11, "where": 11, "can": 11, "caveat": 11, "emptor": 11}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Code Examples": [[0, "code-examples"]], "Minimal": [[0, "minimal"]], "Announce": [[0, "announce"]], "Broadcast": [[0, "broadcast"]], "Echo": [[0, "echo"]], "Link": [[0, "link"]], "Identification": [[0, "example-identify"]], "Requests & Responses": [[0, "requests-responses"]], "Channel": [[0, "channel"]], "Buffer": [[0, "buffer"]], "Filetransfer": [[0, "filetransfer"]], "An Explanation of Reticulum for Human Beings": [[1, "an-explanation-of-reticulum-for-human-beings"]], "Getting Started Fast": [[2, "getting-started-fast"]], "Standalone Reticulum Installation": [[2, "standalone-reticulum-installation"]], "Resolving Dependency & Installation Issues": [[2, "resolving-dependency-installation-issues"]], "Try Using a Reticulum-based Program": [[2, "try-using-a-reticulum-based-program"]], "Remote Shell": [[2, "remote-shell"]], "Nomad Network": [[2, "nomad-network"]], "Sideband": [[2, "sideband"]], "MeshChat": [[2, "meshchat"]], "Using the Included Utilities": [[2, "using-the-included-utilities"]], "Creating a Network With Reticulum": [[2, "creating-a-network-with-reticulum"]], "Connecting Reticulum Instances Over the Internet": [[2, "connecting-reticulum-instances-over-the-internet"]], "Connect to the Public Testnet": [[2, "connect-to-the-public-testnet"]], "Adding Radio Interfaces": [[2, "adding-radio-interfaces"]], "Develop a Program with Reticulum": [[2, "develop-a-program-with-reticulum"]], "Participate in Reticulum Development": [[2, "participate-in-reticulum-development"]], "Platform-Specific Install Notes": [[2, "platform-specific-install-notes"]], "Android": [[2, "android"]], "ARM64": [[2, "arm64"]], "Raspberry Pi": [[2, "raspberry-pi"]], "Debian Bookworm": [[2, "debian-bookworm"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Pure-Python Reticulum": [[2, "pure-python-reticulum"]], "Communications Hardware": [[3, "communications-hardware"]], "Combining Hardware Types": [[3, "combining-hardware-types"]], "RNode": [[3, "rnode"]], "Creating RNodes": [[3, "creating-rnodes"]], "Supported Boards": [[3, "supported-boards"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "Unsigned RNode v1.x": [[3, "unsigned-rnode-v1-x"]], "Installation": [[3, "installation"]], "Usage with Reticulum": [[3, "usage-with-reticulum"]], "WiFi-based Hardware": [[3, "wifi-based-hardware"]], "Ethernet-based Hardware": [[3, "ethernet-based-hardware"]], "Serial Lines & Devices": [[3, "serial-lines-devices"]], "Packet Radio Modems": [[3, "packet-radio-modems"]], "Reticulum Network Stack Manual": [[4, "reticulum-network-stack-manual"]], "Table Of Contents": [[4, "table-of-contents"]], "Indices and Tables": [[4, "indices-and-tables"]], "Configuring Interfaces": [[5, "configuring-interfaces"]], "Auto Interface": [[5, "auto-interface"]], "I2P Interface": [[5, "i2p-interface"]], "TCP Server Interface": [[5, "tcp-server-interface"]], "TCP Client Interface": [[5, "tcp-client-interface"]], "UDP Interface": [[5, "udp-interface"]], "RNode LoRa Interface": [[5, "rnode-lora-interface"]], "RNode Multi Interface": [[5, "rnode-multi-interface"]], "Serial Interface": [[5, "serial-interface"]], "Pipe Interface": [[5, "pipe-interface"]], "KISS Interface": [[5, "kiss-interface"]], "AX.25 KISS Interface": [[5, "ax-25-kiss-interface"]], "Common Interface Options": [[5, "common-interface-options"]], "Interface Modes": [[5, "interface-modes"]], "Announce Rate Control": [[5, "announce-rate-control"]], "New Destination Rate Limiting": [[5, "new-destination-rate-limiting"]], "Building Networks": [[6, "building-networks"]], "Concepts & Overview": [[6, "concepts-overview"]], "Example Scenarios": [[6, "example-scenarios"]], "Interconnected LoRa Sites": [[6, "interconnected-lora-sites"]], "Bridging Over the Internet": [[6, "bridging-over-the-internet"]], "Growth and Convergence": [[6, "growth-and-convergence"]], "API Reference": [[7, "api-reference"]], "Support Reticulum": [[8, "support-reticulum"]], "Donations": [[8, "donations"]], "Provide Feedback": [[8, "provide-feedback"]], "Contribute Code": [[8, "contribute-code"]], "Understanding Reticulum": [[9, "understanding-reticulum"]], "Motivation": [[9, "motivation"]], "Goals": [[9, "goals"]], "Introduction & Basic Functionality": [[9, "introduction-basic-functionality"]], "Destinations": [[9, "destinations"]], "Destination Naming": [[9, "destination-naming"]], "Public Key Announcements": [[9, "public-key-announcements"]], "Identities": [[9, "understanding-identities"]], "Getting Further": [[9, "getting-further"]], "Reticulum Transport": [[9, "reticulum-transport"]], "Node Types": [[9, "node-types"]], "The Announce Mechanism in Detail": [[9, "the-announce-mechanism-in-detail"]], "Reaching the Destination": [[9, "reaching-the-destination"]], "Link Establishment in Detail": [[9, "link-establishment-in-detail"]], "Resources": [[9, "resources"]], "Reference Setup": [[9, "reference-setup"]], "Protocol Specifics": [[9, "protocol-specifics"]], "Packet Prioritisation": [[9, "packet-prioritisation"]], "Interface Access Codes": [[9, "interface-access-codes"]], "Wire Format": [[9, "wire-format"]], "Announce Propagation Rules": [[9, "announce-propagation-rules"]], "Cryptographic Primitives": [[9, "cryptographic-primitives"]], "Using Reticulum on Your System": [[10, "using-reticulum-on-your-system"]], "Configuration & Data": [[10, "configuration-data"]], "Included Utility Programs": [[10, "included-utility-programs"]], "The rnsd Utility": [[10, "the-rnsd-utility"]], "The rnstatus Utility": [[10, "the-rnstatus-utility"]], "The rnid Utility": [[10, "the-rnid-utility"]], "The rnpath Utility": [[10, "the-rnpath-utility"]], "The rnprobe Utility": [[10, "the-rnprobe-utility"]], "The rncp Utility": [[10, "the-rncp-utility"]], "The rnx Utility": [[10, "the-rnx-utility"]], "The rnodeconf Utility": [[10, "the-rnodeconf-utility"]], "Remote Management": [[10, "remote-management"]], "Improving System Configuration": [[10, "improving-system-configuration"]], "Fixed Serial Port Names": [[10, "fixed-serial-port-names"]], "Reticulum as a System Service": [[10, "reticulum-as-a-system-service"]], "Systemwide Service": [[10, "systemwide-service"]], "Userspace Service": [[10, "userspace-service"]], "What is Reticulum?": [[11, "what-is-reticulum"]], "Current Status": [[11, "current-status"]], "What does Reticulum Offer?": [[11, "what-does-reticulum-offer"]], "Where can Reticulum be Used?": [[11, "where-can-reticulum-be-used"]], "Interface Types and Devices": [[11, "interface-types-and-devices"]], "Caveat Emptor": [[11, "caveat-emptor"]]}, "indexentries": {"announce_cap (rns.reticulum attribute)": [[7, "RNS.Reticulum.ANNOUNCE_CAP"]], "buffer (class in rns)": [[7, "RNS.Buffer"]], "curve (rns.identity attribute)": [[7, "RNS.Identity.CURVE"]], "curve (rns.link attribute)": [[7, "RNS.Link.CURVE"]], "channel (class in rns.channel)": [[7, "RNS.Channel.Channel"]], "destination (class in rns)": [[7, "RNS.Destination"]], "encrypted_mdu (rns.packet attribute)": [[7, "RNS.Packet.ENCRYPTED_MDU"]], "establishment_timeout_per_hop (rns.link attribute)": [[7, "RNS.Link.ESTABLISHMENT_TIMEOUT_PER_HOP"]], "identity (class in rns)": [[7, "RNS.Identity"]], "keepalive (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE"]], "keepalive_timeout_factor (rns.link attribute)": [[7, "RNS.Link.KEEPALIVE_TIMEOUT_FACTOR"]], "keysize (rns.identity attribute)": [[7, "RNS.Identity.KEYSIZE"]], "link (class in rns)": [[7, "RNS.Link"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.MDU"]], "minimum_bitrate (rns.reticulum attribute)": [[7, "RNS.Reticulum.MINIMUM_BITRATE"]], "msgtype (rns.messagebase attribute)": [[7, "RNS.MessageBase.MSGTYPE"]], "mtu (rns.reticulum attribute)": [[7, "RNS.Reticulum.MTU"]], "messagebase (class in rns)": [[7, "RNS.MessageBase"]], "pathfinder_m (rns.transport attribute)": [[7, "RNS.Transport.PATHFINDER_M"]], "plain_mdu (rns.packet attribute)": [[7, "RNS.Packet.PLAIN_MDU"]], "packet (class in rns)": [[7, "RNS.Packet"]], "packetreceipt (class in rns)": [[7, "RNS.PacketReceipt"]], "ratchetsize (rns.identity attribute)": [[7, "RNS.Identity.RATCHETSIZE"]], "ratchet_count (rns.destination attribute)": [[7, "RNS.Destination.RATCHET_COUNT"]], "ratchet_expiry (rns.identity attribute)": [[7, "RNS.Identity.RATCHET_EXPIRY"]], "ratchet_interval (rns.destination attribute)": [[7, "RNS.Destination.RATCHET_INTERVAL"]], "rawchannelreader (class in rns)": [[7, "RNS.RawChannelReader"]], "rawchannelwriter (class in rns)": [[7, "RNS.RawChannelWriter"]], "requestreceipt (class in rns)": [[7, "RNS.RequestReceipt"]], "resource (class in rns)": [[7, "RNS.Resource"]], "reticulum (class in rns)": [[7, "RNS.Reticulum"]], "stale_grace (rns.link attribute)": [[7, "RNS.Link.STALE_GRACE"]], "stale_time (rns.link attribute)": [[7, "RNS.Link.STALE_TIME"]], "truncated_hashlength (rns.identity attribute)": [[7, "RNS.Identity.TRUNCATED_HASHLENGTH"]], "transport (class in rns)": [[7, "RNS.Transport"]], "__init__() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.__init__"]], "__init__() (rns.rawchannelwriter method)": [[7, "RNS.RawChannelWriter.__init__"]], "accepts_links() (rns.destination method)": [[7, "RNS.Destination.accepts_links"]], "add_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.add_message_handler"]], "add_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.add_ready_callback"]], "advertise() (rns.resource method)": [[7, "RNS.Resource.advertise"]], "announce() (rns.destination method)": [[7, "RNS.Destination.announce"]], "app_and_aspects_from_name() (rns.destination static method)": [[7, "RNS.Destination.app_and_aspects_from_name"]], "cancel() (rns.resource method)": [[7, "RNS.Resource.cancel"]], "clear_default_app_data() (rns.destination method)": [[7, "RNS.Destination.clear_default_app_data"]], "concluded() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.concluded"]], "create_bidirectional_buffer() (rns.buffer static method)": [[7, "RNS.Buffer.create_bidirectional_buffer"]], "create_keys() (rns.destination method)": [[7, "RNS.Destination.create_keys"]], "create_reader() (rns.buffer static method)": [[7, "RNS.Buffer.create_reader"]], "create_writer() (rns.buffer static method)": [[7, "RNS.Buffer.create_writer"]], "current_ratchet_id() (rns.identity static method)": [[7, "RNS.Identity.current_ratchet_id"]], "decrypt() (rns.destination method)": [[7, "RNS.Destination.decrypt"]], "decrypt() (rns.identity method)": [[7, "RNS.Identity.decrypt"]], "deregister_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.deregister_announce_handler"]], "deregister_request_handler() (rns.destination method)": [[7, "RNS.Destination.deregister_request_handler"]], "enable_ratchets() (rns.destination method)": [[7, "RNS.Destination.enable_ratchets"]], "encrypt() (rns.destination method)": [[7, "RNS.Destination.encrypt"]], "encrypt() (rns.identity method)": [[7, "RNS.Identity.encrypt"]], "enforce_ratchets() (rns.destination method)": [[7, "RNS.Destination.enforce_ratchets"]], "expand_name() (rns.destination static method)": [[7, "RNS.Destination.expand_name"]], "from_bytes() (rns.identity static method)": [[7, "RNS.Identity.from_bytes"]], "from_file() (rns.identity static method)": [[7, "RNS.Identity.from_file"]], "full_hash() (rns.identity static method)": [[7, "RNS.Identity.full_hash"]], "get_age() (rns.link method)": [[7, "RNS.Link.get_age"]], "get_channel() (rns.link method)": [[7, "RNS.Link.get_channel"]], "get_data_size() (rns.resource method)": [[7, "RNS.Resource.get_data_size"]], "get_establishment_rate() (rns.link method)": [[7, "RNS.Link.get_establishment_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_parts() (rns.resource method)": [[7, "RNS.Resource.get_parts"]], "get_private_key() (rns.destination method)": [[7, "RNS.Destination.get_private_key"]], "get_private_key() (rns.identity method)": [[7, "RNS.Identity.get_private_key"]], "get_progress() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_progress"]], "get_progress() (rns.resource method)": [[7, "RNS.Resource.get_progress"]], "get_public_key() (rns.identity method)": [[7, "RNS.Identity.get_public_key"]], "get_q() (rns.link method)": [[7, "RNS.Link.get_q"]], "get_random_hash() (rns.identity static method)": [[7, "RNS.Identity.get_random_hash"]], "get_remote_identity() (rns.link method)": [[7, "RNS.Link.get_remote_identity"]], "get_request_id() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_request_id"]], "get_response() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response"]], "get_response_time() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_response_time"]], "get_rssi() (rns.link method)": [[7, "RNS.Link.get_rssi"]], "get_rtt() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_rtt"]], "get_segments() (rns.resource method)": [[7, "RNS.Resource.get_segments"]], "get_snr() (rns.link method)": [[7, "RNS.Link.get_snr"]], "get_status() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.get_status"]], "get_status() (rns.requestreceipt method)": [[7, "RNS.RequestReceipt.get_status"]], "get_transfer_size() (rns.resource method)": [[7, "RNS.Resource.get_transfer_size"]], "has_path() (rns.transport static method)": [[7, "RNS.Transport.has_path"]], "hash() (rns.destination static method)": [[7, "RNS.Destination.hash"]], "hash_from_name_and_identity() (rns.destination static method)": [[7, "RNS.Destination.hash_from_name_and_identity"]], "hops_to() (rns.transport static method)": [[7, "RNS.Transport.hops_to"]], "identify() (rns.link method)": [[7, "RNS.Link.identify"]], "inactive_for() (rns.link method)": [[7, "RNS.Link.inactive_for"]], "is_compressed() (rns.resource method)": [[7, "RNS.Resource.is_compressed"]], "is_ready_to_send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.is_ready_to_send"]], "load_private_key() (rns.destination method)": [[7, "RNS.Destination.load_private_key"]], "load_private_key() (rns.identity method)": [[7, "RNS.Identity.load_private_key"]], "load_public_key() (rns.identity method)": [[7, "RNS.Identity.load_public_key"]], "next_hop() (rns.transport static method)": [[7, "RNS.Transport.next_hop"]], "next_hop_interface() (rns.transport static method)": [[7, "RNS.Transport.next_hop_interface"]], "no_data_for() (rns.link method)": [[7, "RNS.Link.no_data_for"]], "no_inbound_for() (rns.link method)": [[7, "RNS.Link.no_inbound_for"]], "no_outbound_for() (rns.link method)": [[7, "RNS.Link.no_outbound_for"]], "pack() (rns.messagebase method)": [[7, "RNS.MessageBase.pack"]], "recall() (rns.identity static method)": [[7, "RNS.Identity.recall"]], "recall_app_data() (rns.identity static method)": [[7, "RNS.Identity.recall_app_data"]], "register_announce_handler() (rns.transport static method)": [[7, "RNS.Transport.register_announce_handler"]], "register_message_type() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.register_message_type"]], "register_request_handler() (rns.destination method)": [[7, "RNS.Destination.register_request_handler"]], "remote_management_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.remote_management_enabled"]], "remove_message_handler() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.remove_message_handler"]], "remove_ready_callback() (rns.rawchannelreader method)": [[7, "RNS.RawChannelReader.remove_ready_callback"]], "request() (rns.link method)": [[7, "RNS.Link.request"]], "request_path() (rns.transport static method)": [[7, "RNS.Transport.request_path"]], "resend() (rns.packet method)": [[7, "RNS.Packet.resend"]], "send() (rns.channel.channel method)": [[7, "RNS.Channel.Channel.send"]], "send() (rns.packet method)": [[7, "RNS.Packet.send"]], "set_default_app_data() (rns.destination method)": [[7, "RNS.Destination.set_default_app_data"]], "set_delivery_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_delivery_callback"]], "set_link_closed_callback() (rns.link method)": [[7, "RNS.Link.set_link_closed_callback"]], "set_link_established_callback() (rns.destination method)": [[7, "RNS.Destination.set_link_established_callback"]], "set_packet_callback() (rns.destination method)": [[7, "RNS.Destination.set_packet_callback"]], "set_packet_callback() (rns.link method)": [[7, "RNS.Link.set_packet_callback"]], "set_proof_requested_callback() (rns.destination method)": [[7, "RNS.Destination.set_proof_requested_callback"]], "set_proof_strategy() (rns.destination method)": [[7, "RNS.Destination.set_proof_strategy"]], "set_ratchet_interval() (rns.destination method)": [[7, "RNS.Destination.set_ratchet_interval"]], "set_remote_identified_callback() (rns.link method)": [[7, "RNS.Link.set_remote_identified_callback"]], "set_resource_callback() (rns.link method)": [[7, "RNS.Link.set_resource_callback"]], "set_resource_concluded_callback() (rns.link method)": [[7, "RNS.Link.set_resource_concluded_callback"]], "set_resource_started_callback() (rns.link method)": [[7, "RNS.Link.set_resource_started_callback"]], "set_resource_strategy() (rns.link method)": [[7, "RNS.Link.set_resource_strategy"]], "set_retained_ratchets() (rns.destination method)": [[7, "RNS.Destination.set_retained_ratchets"]], "set_timeout() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout"]], "set_timeout_callback() (rns.packetreceipt method)": [[7, "RNS.PacketReceipt.set_timeout_callback"]], "should_use_implicit_proof() (rns.reticulum static method)": [[7, "RNS.Reticulum.should_use_implicit_proof"]], "sign() (rns.destination method)": [[7, "RNS.Destination.sign"]], "sign() (rns.identity method)": [[7, "RNS.Identity.sign"]], "teardown() (rns.link method)": [[7, "RNS.Link.teardown"]], "to_file() (rns.identity method)": [[7, "RNS.Identity.to_file"]], "track_phy_stats() (rns.link method)": [[7, "RNS.Link.track_phy_stats"]], "transport_enabled() (rns.reticulum static method)": [[7, "RNS.Reticulum.transport_enabled"]], "truncated_hash() (rns.identity static method)": [[7, "RNS.Identity.truncated_hash"]], "unpack() (rns.messagebase method)": [[7, "RNS.MessageBase.unpack"]], "validate() (rns.identity method)": [[7, "RNS.Identity.validate"]]}}) \ No newline at end of file