From e0a9dad114686af718594f90a8d8fe363a3ebdee Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Sat, 5 Apr 2025 14:05:43 +0200 Subject: [PATCH] Docs --- docs/Reticulum Manual.epub | Bin 3594970 -> 3594968 bytes docs/Reticulum Manual.pdf | Bin 3672738 -> 3672737 bytes docs/manual/_sources/examples.rst.txt | 2 +- docs/manual/_sources/networks.rst.txt | 2 +- docs/manual/examples.html | 2 +- docs/manual/networks.html | 2 +- docs/manual/searchindex.js | 2 +- 7 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Reticulum Manual.epub b/docs/Reticulum Manual.epub index b44f4ef77f54991687f7d7c0e219dc866deccd27..68e178d664fe17c51dbb7529d0797928b2765de0 100644 GIT binary patch delta 36841 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 delta 36756 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‏XjzWDe284yplpUcH6boJ{h^s$o?vc3 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 diff --git a/docs/Reticulum Manual.pdf b/docs/Reticulum Manual.pdf index 6ae154feafda7467b69d137575e8aae520fd858d..cb1ee2a470fb3c2bed0f3675a289a7de772bcfe5 100644 GIT binary patch delta 8190 zcmajjcTf{uy8v)P=p{gC(tGa^dhaSy1Zko7P^GINBov8&6aneIR|ycBfOHfAY0_1S zDAGZSbnd?I_s!h<-<_S`&dGV6J?HG1d3JVF{ALAI1i& z4c>=#dIqC)^qyUIhWXC*kvkY&9xkxz$^%-!^jmIS2^kh(;HB zQQjH_xF2CU!}3g6{U9&i=yhGGH)3Nr`-A1#mRA`+iHCLg=j9&+YbcwkK1{dkaJuan z%FLa1ibjcUaj0uK{UVZOLoa-{(SO0a8*>uh^zF@ptgE=S4vCA8b3oK04|00DpyKm;HLkN`*lWB_si1V90x1W*B>0BQgYfEGXppa0d?H z3DHu#&;5fFSf$I7c7e zO2>xNa)HD-RYYNvd-BDeF08@fe8wq^@St#kvc6x4m%d-$a#eX+N!-qF-r- zUr3j*ytyLNh{SW^pD;=zD@;?fxx?n$JS#GODyhQohbjG)469{d7=&It8rOroUP`0= zASNmYl?Bnfj?CJ`;u_{NVp#D5Zjt-TZ>b_t(%SCX`B}N_>~Mb1`8XD)O!NN3s!-d3 z{0-fcq`YudUne@Oj7$XA&ky_-EInD8)wTCt?jGf(2)uj(=Qp@<_UE(ORq|-d*C8Z6G7A&8w0t+9VJ!enItd5zsyYj+6ye@R(<<7!=)m$ z{q04I@9tNSUt1~u`AVIZ`O+}SdUe_7l(x?)&Q9j{EAb=C5{|QrzcK8w9k@%8d-g^i z!z>l_SCFIyF)`KD<1ion^odKP=-mb1<*XYa-)IE0>1Z#a1DZnr+=}@}&F)T~9Px^TOxA5dCNBc)UCv)7KPLR-DK%-C5x<0MPA!N z8t3@K*FVmCkzt8{Z5`izK4~Y5n{tVrTt9vQna?wpJQQ~lG9t|<%&mGha%_f#JQYNe z4*g_zI#(Lw5Rzi?C8E&bFD1Jus4 zQu`T87yCiwiNneAbAvB3tEFTMjIZ5= zgJ_9+zu8H9*zP^)`ltNJ!jMTB%XX}Gas2>S zhhGjJ+>rd~HzPfZj|*P(ipG)2XBE&BY+p#J_HLdg^$yqgF}7bpKNV~o)i5;mDCi~n zgEJu~d2$_#UEN}|*Ap@U^)FLiAF*Da7FY^IE&2)_qmt*Rmq&2lBOj?C=?+#(O`Y{i z7KUB>Wew%iB65415N8KLms~PAEp#b^GQRADw5ycAMb<;vl_!x2)t{9U&&=OYq&xh$Swm+R{~?zk>}K3z?ZM)Tv>+ zu7r_$4OO=l+5C1qfu$;Xznh+}GROZ|OTe|g@~u&|Yiu^IhIP4CZ<@MN_^o zN^bdU?A6;InZm0~{+g1=90giD8|(9IW@%L~`de&&MSOU$ij)<(iX@E7T9L6p@&%i_ zN4;PhsasI(uNxl0Gqt%+3qH1X+s*Rnr5}M!hvvr2y(0xRkHgbG#S=R0{h8=LQYj#N z+c}zgDM;ie{@&ftROPC8AzDfNB@xX-|0~ep@E+lze~nZ6@z0;MPM78KKlWC)M1_;z zOYM!65AB)kCLz7)7v9cT1^O6d6mzdVq}0`((e?a`nP(x@d#m|%HzmkQ!KK$A=&T&cbpR?{SDQ=!Z>Xlb-0Knef@{By{(N~2}}+KIu$r6t5AWTjz3 z;*xyg;(P)mV)~DrwHyLn*!i^-B*i7A#s6nE!_3a zmg&NtVkyFwLc@)nf3zEgM;f`8Qbgp9Akk#^7}=>QDB;-zjCV7Q-le9sq%lv&keS@i z#B!S~VwLqnGhyh6yqGcPDPC*dKzO>iW+C6^4eRYu&VJbYrq&~s{e`3Ojd(52*H1*C zRq-& zf*5>ns$Dq;=}L7g?HtZpe5*;(A{MS%@ChPgl9!lC%?W0ll31uu=>uMxB=gSoB}8b% z7ncz~iFCyZVkP=)>}40}uqDwVg|u~y-f6xR^YLa;G8*#)i^$2~Vit}aoXd&q$rxg% zLh3qF@0S?T9o=nBChi>q!U;%G8Bu7DIyM~3?I8ABlSxO9k`?zFp*yh_jqb&PGkT+p zsEJ`etBh2=rBTp7K|y;Y0I%mW?owb1BSn7As(n#IiCdrFe4V-o%* zPRgFH4&=?Y$}AV(0@ioWCES<@E^4M0MI9kRC!8a+eSzSjZ6A*>)hkG(Q$3W z366hD5FaKg844W#>P9C6`CskAC z7~FfToyt%dU{|S|%FqJcBIiG?6{QKuQpt53-_m%fSt(}F;5IjT{QAnjz;WDGdr9M? zrUX}ukGeDN5 zuMzhR$QJ#@(79@|1Ed)g*>IK4BZ25TZgQ`=${?@;4*Bs~YU6*RDMw`a#{$8?Amc?g z9HsL>nzdU0_x)tY@aveo(~bCoSrX!PbyU^wwZ{x;a|C1?5r5Ot zE8g6oAG5dPrwhH#qv9RPl#6v`kJD*zb0yMK6Mz$lXj%|_n*8g8^9CefHvGWH21px|vYLOd{h{5vkj#s&=y8Y9#v1z( zj23T3HYWK(XqMl971A|f+~}3Z)**JINmrDz|8S5BN0K5gL_>))dbD9bHBT*pmDax; zuBeNyS%GHzb8p)am`^ND22;O{2!ie5Nd8-J3Gw0OS-xPJ_^!SgPnUDY6RkO9{9yhW zo6nEAF;4x!ADIty?71u{5M=VzkVSHclO>|4#7Pn(C6Wn#*yBEk zbh0O5CY)Zu`-o!jh34W`M7-}6&IG&lD#;Pj^*qB6rIi4W9N{Qh42fvO$O?%CczZ># zjXU}mb71a^d_ z;G+hLA(ATIIbAwl9aot0m8J79lc_0YCDM=fC=uLI$_JLtMONsQ6dWtOdCnd>Pzw=8 z``^H*h4YC`7j6b#CWi&)<4`Be8fqU8WLdCVG=B6(7R(8om-Yeo8OZ#d=s?GJjI%q; zdQajoTg6m52!&*WBxJL8lKijLg|ypRLG7@;pcbY%7R2t&}he)5AQL7NA--vU!0R+w0i4;Y`7iz z_|FJ(S^a6Fa_E!Ip~3% zWau_UnawXQcm8RnmFfjWLw61RBApyMk(^m%W#))^col&WOTnUi({IRitrxM8qB*&s z@Zu?oxB84sy3=FcLwNC|KD*Mzk+G88Jjcv!^1B_PC7(E4!z^q;CZ5-BHX1G)g4r>M zPrQL=FT$V&-VMLM)QQD%HCnLitu=YmDJz!{Gr!)&&Ex=n=FutN`i%ug+4>SOW0Akh zLSd61=#5MCPn)jkz7fG9>>6PT3u)S_7+uDek13lwFSYlt^xTh?Ewi(QS@dMQCzBqz z<3>3LK@zQwQ&m%AWE-7T6`dy0O70i^U84wAnx&2pq0$lfjihSvL>s~vGv=_O>9^*> zmdBg)W$yaw=UtAI8ylr{pe@-)ZAgbn`hvON@5rwnzj}CAmyK@v`a)Ici#LuQ8HWl{ z)n@Vz+7v~nQktUa&zf#|ys>f8=;2fMtNpJ$ej7|IQGf4A+uVIdm6BM9(86V@&brbgdi@m5lVN0@ndB|? z80!kXAEySC?G!%zNh;fD|3Qjo&I(K}C#CL2X~c3inMe5pRrvLA{Z$lkxH=T_@xhr6bF^}v<;ek%g)4`wkKe2J)30nT*F&7ynasyGk`zex~HFu z3-6S3I?U=$DL+ZT7k_-%WO#2H9z)0T+3NYBjeERWJQVI{(Q@{49C#&#)~K_^j!SZ|~tpsAm32lu|5mJoQXz^K*vf6@^NL z=7Dy8_%8$l~$RUkA(HCA#WeLpYa%;9u4N+j(jMs0`na{8%<`z zoW*-)-#vKoR*Lfyd0x!mub17!4g^#k56xxD5>OK2kVN>^30gYB?$1*$Rfj`a-O|;B zD`F$8wu1$u*|5_arIwFw!Z$T+?rYq@gCwBvcfynIQp(5c5}G%)Jf9wyd9m8ZTt)JD zi0L`y2_@P6p%-o_(O-o2(4D*JVe`{t!v4(jA%~$29_~o^u7pl4{O8XMX}!SP4%hm| z`ND^juY$IJ;Fv+^#uBVo z(nn{13a16`*ltN3WUq+84lGhnwM69Eqj`KfOyJb>}w|&i9wD$l;09RAMA?a?3z#;$0_Y zxBS8E^Lu(qmyuYf6+Ahg*bTeXp~bPQd&vz0-N>=KIjj9|8l_g!cx*3J^>YaVR+uxJ z2au!gYr+dwoVJS;PNjtUWW;C( z%u686y@y4^oDG7%cy9Na>78~NQqN1EZ~e*BADHTS;+=`LeoHBNqPGM(u=A`3GEozrR9$mL&k3-if?ao;q-c82(C0@7z~$|5N%onT`=Hd_GJF zi{J~$6qj`zCj8l)JIgYyR`b#+{kgLS^%<;UMn{B-wQ0R1FMHw>r@`pzyRWZ!nvy)$ zXnN$^E%j7R<=ufRDd=!)M^?LY(_7z|=B9QahWXxCnG1tE)BBO_dMlDWA??zrcBH@m zG;iy$b&kJwj&jg;nzgP}Vdy@-4o@LXT77mgE%GRY;DFf?y~DBjkQ#*GZd07Q!dM zkVxAJLP$io?;SD}w;TyH{kgju@^Lb5lsyqy6qh~TtCTbkGtD4t#s^WwBDUd{kHsOp zJ=}5x$>%G5egM3CY6!N&hvuH)Q3qWv{e6TQMJ%+Qhk;sD3))Ke&=B+T; zC8#&$vCL+kc@K{-gEh$0p2Zq}u7{w9hc)q_7)R=9W-r$>+kuqsU)>d7CHk3ITMjTU z&>~7+tCI=Or2mb3VjkU^pGZRYUk4-whH{TDxe8pCxemWayLZxM_eN* zK($EoX)W)kUKt~gs$Rk}Q`G$)sD3R0hL?JYWJ?Wh-1fwxLvfxvL~;-v5$Pux-|fjT1B^_B)b>zjaBcsfr2V2XefkMWp2@78V+D>O z$k7eQ6Wbu~ONTLIbgF~3;Czk(KJkSk;!$P_FE4mpxjJ3kO4=VS&*Qyt8^JhE7?g{A%=kFBvjDUUM^q@nywY_wS=bNaR z-)5RMbU)>3#y|)6cb-F0_rT%zdgV5fyD9GUY;B*8UzMf5FMNFel(a(lq-c&N827=C zl(3AQ4(DZ_OCY%c6_0N{wVUFT5!g|>lmPbMlSuKA#U}v8KDpPaw`P<3BN6x2`u`69 z-|pJAM#0UL0AL2CJ^ze-LOIC{2$38aw{i#9CBA{9`rzA8P@^6DC4QsbL|jc{_qcJl zX-U+G_Zi#wFB#fIa!RCMD=6ktb;GjFI{s$7B9aqA-Y|s050_UC`C#|qTUl*70(xQl z3<(6@zLnM`988@*L=s}W50>H?SsIGYOc)d9C#04q5np01Kfx3{`rQhq5u-8t*PaPe zGFLw@r5RgSbLtT=hknDZ>d8`akv0|)gCofBx0vix#HEr1fAGO6> zlrO6@USuj8Gg{=W3JX}|uK-%t1F2gJ{Y^cYu~$nNNr1c1C;=R?KjB!hU%c6p|U8M-N$IVh%P|*eUj#m-&Ig?{Sz;`{zm) zQV5d}3lQ+i3xt68WSR4u6#vOdSe?j}Q*wJUum2Mh_Q|0mS_-%ATq|&1Zv*pY$bqk{ zfA$_)#1s;`$$UyGw^QyvPrHgC?{ip=>Mv(R2hTeM4RIVoVxQdYl=AFLzX0%!ZUkh6w2W>>hjcg^X{2K`C?Fw>5CIYCn#2G>C6t(q4gnGA#?b;I zQqn2h^Zowr>)!j{{o{RJpFPj#iF3}*+4HP8YZ+VusHx}1gUMxpdH9j8sYCE?m0P`g z=Yl^Q!IHzilvSPQz26A%roPG1r^nT_pq* zs_G7E?ur=o+QnPmt{tGynTq*8E$}VbHN!3G2gs-OAKETi5&4MsbQ*PheP?_Je=+G% zR2aF}@nn`ka?8mqdwd;ooU=lk#^mtgfy8@kN<_P5vg`VT34@LH`AKq8u})QoVFR!? z-NkJcJLk;8ji`1ns)t%SNLc98U7j;O@u9q4q*Y<6_p=uT-7b>9i_bsQUCpz8vA^T| z$Y6wCkw@AzHsQ+|yM04#)3;cj9iGcx?80;}gUgidJu+8cm&bvRVi%$Di%>8C4}cFK z01yI*0K@)+Xj^t&d>YeAZ0NV%nMTXb=5RWqyP} zzvWNQfK#wpM z2YXcB5PNjsdy_LgEpZ|?8d?PHGe1(FjYi9?I{2JJu9$|0d1P(myesT_z6(Tv-7CxN zCAW?HM{2lr#B%W{HT!k$lm3j`2U~b89C(YaW^i^m_9Ir)p!0wH!Or~X=|6gR8_84T z8fkMkJ10eR^9%(4ti1^q==sam&twohI%%uyu_bZ!n7Xt_ECiQkE!=0jd!KOeK}r1 zK0fJf4+Gbi^oELLm8vNZSQ-kvh)ie8{5hl=okX4*XDVd}DKWSZs6tkN$Ebw#_rHoK z=vy!gy1p_gxPI~0$B*$~JtoL;4c34^V7&Y2GsW7A+VaI2qu_or^l)}uje9|BrCiXF zk@bs=V6^+t{X$DPzl1|$<=+6?F0S2TN{ZHb)0??YZ{Ms=(t7 zX4wS6HTI7O;+?$XH(p6rdnu-_(9HTeG|LL@Qw<6P+&$k$5w(frm{8Kt@|HNvG5h^d zv%-ZOZg4H~nh)f)iWm%sb;9kB83BL@6C^*=gf_J2Rr&MbUKg z%z&l}OEw~HHdRxCNSDGM`iPbjv+S{NCS<_%K(vQ^VIgVDKXFY{v&lxnnT&=a)y4x_KLUThS^?bfY_Wf&e@YZ@cdVDZY-W&YxBR; z`N8pmCxLKL;?IZ3OG*U?<5eWe2Z~%@@C6A3?@H^83w>Q>#7yAKVAv!3jEfhZIkh8r zbXcWM@%QaHXmF?=L~voF+{bXG&^?kID1eX6F6vB`+}V95^O$CxBaZmS*z z0fR8<+&fM8daSZjNX~=v6^Y`V2#p#~OJ~V4Y&^~78ooVI`GaeeryO&f2*QQF*5^N9 zp_eUWzna;2vIi~SvMCzKiHqpquw519c-y2 zvPULZ(j_Lq$UhF;FfvLcAI_-Wb=44hnifb@Q_&c9D zh09KXJ);Y{>N?mS58H=70T=dh7{WYQ7NbSJ$-b7{H;6{4F6Wq&-*}5jxT4cm>x!=F zRqPYK{(ze7(N5i(;nypU?N+>>dou7_W?+qj)SRM!#eKS7p!inb`;L*i0HOV?IP1)r zF><^VYj&QUouy)xI!?L3@KwXo)CWlm73{bH6i5491n#GWh0|W@+h~; zU$2L4Xs8DRyKsKi(QRwSEc*%cyi$frC`VkXa7+BQvH1c1Ni<3%22-8l-0o621c9T9 zI}_6{f>Q7xR%n^^JSU{}m&Fj@pts-7sZ$wby#f2 zQA4;qS3s(bpEpMsQllY{G+}fTrn1Go)w%1GFTz&#@WO7_ZK}d!y4i=^Jbd41#f>-Z zYLULbmJ2!b=*xLn|L&t~((k^Qy0N-@Q5g0{C5i6)%yy6LS;F&@6Fn5fzt8vvbNpg^ zeSxeaXNHsugZDHD&0bJrXosxCwb$t0&pk=Mhrfa?9wlO7ned$gQ6u)Jh6_hyBan1{9k< z#@yQY@%rS!dbcP_|0{lMf(i|^uZX&6JCaHiEAOUjZ)Ydo;D?gjEv(-CjJK)qqutwc zTY2glIUAg|W8J2?@iUPBJ{KEdz=H=7m|*Iph1!}m`JM$4D{Pr5M9AWCw<`+rHzHXb zhX^{c{e9v(_Pd0>&d>kqz5e5!A}gK~F-()4R0^a-zG|R6c2boOH6yq^;;CR!wktMR zYD?`!Xq>@wVg6a>Tl;i@_{6@$c6Y_?JgSBE2a@Fm9i~AyTxr@HR|?qPFu&wPN!v{L_31^SCJpBcBeg#WZ;rOe%--2_Aor(6J09GTr-owy+h$M;9xG0bCL{eEM6u zP_+=ePH3*q#U@=?fsjhqL+3Lz)>Nd}^)nPESzO?QUeBh(8xkv1=kejYt+p|`0$P7F zA?zxtcOOqUZ!i;zkJ;p0SXxC!9=44WFVM6OBlV9PLhUOf(6F1$J|INJE<__h_@t_s+2fa zjK^o|8oC`a+-*nJciJs4q;+RO!J2oWnLMdvCyE^*R6EMxhb-#pDEu9P9=f`C)15yw1F?nBCP8MM zd0;4E1+;l?L_TyoV#O2|flj&&xAotex+x`_KcCi>r5;A}ciivAv()fXQP5~47%tgS zHD%7}lEeH(>^u`(R>Y~otd{W_6M{*qv;668)f8fQE~}!0Fsc~H=YeH1YZm?K7BcBk zS_CnPOcw+vhVl-lwAId_Mv-85ygg7LkS^JTt%wylQM#6%R;$#*L0gxZp53$ng)%ufzB9`+KwO$XM<2++uaR;v5wg5P;DRFAd>Bw_tWRku*lJ zknq2AclBOM1~3n)+)j2H8KlXMGQm(-Kd+(4EEO&uqBW1Yk4ZvEK0}&05aR@J{GUCI zV!zxAc0<)bwlz!-%1O3VlyLeO-OofuiX&yA&^_)I-_e9GQwox*jl|oUt4nejJoCh; zQNHFu*_B9tP;$vYK8H7vFv7M?()k&&s-U$Xj?eK9Lc3H}vX4}ulM};;BXOh%EIBTr zqzjJjMnoXgpDiqtAW^hgT-)F_#5e8q8tS9c_rGYLX?KBeK^WN;aU-FVI#;HUR3kc4 zi~)?bL`J_jz#^52W0HYc3z$JE@RaehnPg8i?eR_~GOADPjap3TvS?4lmE;(a=Bm6_ zoft7W;2Ark>u2G7@Z;@R;QlConupuyS@%~Kp3D^qL^B%sEAU&DCPU80$1^#b-1)@r zqYt?Meby!j*Ke)R^0h}aS-dKTiNroeD2(AqEjmMC>*|n3kVwg93x@VX3>@(-e!HIN zMXw!AhM^6KXsjUOTUylPwGU;bpzBx2yrWXa#$I1CK+iD2nmq9i!nyB7` z=D+xvfqfUT6=3YP&8Mh4$JO$kJLl&3vxLF1S~bMmgqJFGv(!{kZlicqG3KL0I8|a< z0w*+GV01V74hvWb&2SVQd5gGDrAd=Y^cMpwk`VuDQPLq=44lqE_`Fk$5!~0s$B56{ zDXSAp>QAc|!!Jf@5X~e;F5y6xPjt9UF)Cw80ACieB--dClcg2`tt04d@w^;ZZHX*8 z&1%5XU64ki53xS}_{%wH0>%}z=Eda{NNZ5}tVZkip}z)tmr9c0_okRS+TfpHi4=%F zPy*3Z&gi9#V9u{g89L=6b8lNvTcXa*wg@ z>mUl|P4jY@r4C4TnB>Yc8*)kokrS*!^1_X*QLzkQCW;!(D5e;Xq^iKpTeh?gNgx}7 zS*}h9xPj!~3b`a(s$(*s;<-aF*BpG@UpGn^&zr^}8tE{__2eqit%-|1yGste`bR5D zCT0uLv=_h{uZo9yj%ls+NLvz}=+RFyzoFDuZ>AWBRZ z=wJAvr=L>KQU{}4_a+A>i)8SF=7^)iwx!X-&G_$%UV(!Ki3bZAC-1y_Z{9bLKgr9E zzu;znj&x=n?-R9mx=rjEk)cAlcZ-oQ)@{V#7kziDQ}P&aS6=2tT%IHv*((rErWv3j z{PgK2T3=F03>A2WQ3*v^)gzAsN!mP6&n4OrCqE>|kERfO6AU09moR!;B0;y0+miuD z=^o6TNA&eGY+1osDQ}AP{9?V_Ixf?BCU1KNBD+gmCz$CUpMU;13948%Rd9zalon+P zgFQDYRO2+~u65|lo<3)`lk%2=>|DI!@yyEwdv;HiPg!C1a!}RoF-56n_6>6-{m6-D z)-qu=+sa9={+gq3Fxn!YhF?cJqKS9wEIHsm>U|(el9i+^X*+nioWREdh|*1zTZ<}^ zU6w3NIBeZc|L8Do5|QzDJ4zFKV?}ocg_maNTOAF%dCYRb%j-)a5tj^a#!g*4JnI65 zzGF0(%!)}V(x>EPUB{@e)R-5)rvKf}*SvRfe`VOI_8Zr#pMuBCLsk!OHejDAR;tX}_F~Bl zZHAoNXeyKVD_7EYP@(3f_0!1NQ=a6nk&TETC2B$2hKH*+w6$N<{SqxF+D3F+5c+#J zqRHmf>-X-JjzPVU=c~*s`F~=h+MejGFuNlLtnIF16FwoYlg6d157Xv4@ZoWHrmxvM z%o|+`*st|_!g#cAFV+;^!FEjPZy}F}J%tIc89w`LH3jFW)n7l!*78RFS%06B;`HxCd%s()-WqpBV-fx=)wYynkq&KBC5Y7Yu##dw9edbY=rKM+}6l_^}*>udG`)AIfu6 zJ?{z-bJ-tO)_)l#o{A(Yh3rL`)A4rdic#_i75*OY;m!p=Ue4?_Y^_SPYA?Eo5Ju!T zoE>GLa*3^5Eo;u^bILp-oC$?&uC{aDcnGT}(QXJwa%KjD5yonQR9=vdi&P#AUjWmu zyE4L&tJ)~EIKTHqgur~mnN3H@7$uxyC1G4~i#W9Y>~h!aE0R{d@Hkd6aU|nRadSAw z>Z+7|g7b{SF!JydWTah$l6`IJddB8zA_eXRa=F(r_oL`M4x`n6%Zn{^Fx4V99$zrPy4>y&l)Ugh@0wR191N60 zo00FndkIM+9>9h=?=UZ5T$E1rT?e3@LgLqsamGee_l3plIjboiM3ceuL)ERJ?}$D* z#6yR%UNNroFBi+e+n63)r2b^IR?PtI>kpU(2liR#M1|e71_l<8es-f57V~$R1JTf< zw3j)J#KWmpLU%j3s*|Z_MCA#ZRpO!7e=bqU(RY_?pvsd1)pw4f+2BvNN6L<4z@vVN z+DPaQUqY;Nc8IqL$~-FFfrMLV|N9&rf4dfcsj--MBCp*{4~YZVJ#>)P-Yz{DFQ32z zuBgP5e4OtJ@yg~E-v6|B|21CyawfF!@;wYW?VD{F`x4r&AnNmq+Tt6evlSY7rl6k> zhA*>NVtP`tr2-(fAWenqwUe%mE~pV^b!0cYflMT}gw;MG2@_NUei8h1hu@>FRFQj& zzToU40yT>#(-{QUD#~maGNCKY2N!%QQ4q{3w4F@1kI2xXM-Qfl-+Pma9oYe8Wg`{O zq&+Nwt?T2d?Co*wpDx;M4Q$&Omm3?YXx7JPqB9Qt52`T_K{xBn!g4269^s(tft~ub z$!DwNlV!=Dda^I(&~_3yQv-8U4rzETBq13vL!Z7i3;MI0km5lhI+LAgU;4 zc;pVNyf4EnC36>B4Z}9RzQetQXg9d>#&1_);9EurY&-*_)Y0TUs&An;?+rv1D8f`k zf8qaK=3@l)b#fqeV(2&=``LMpi1@__o_CSRQfYND>b`fAdeB$aMZt&rv2+;rzpFE_ zdDx7*@cFp?uVso{d~1{PEUOu{1H93LeOiaHkOKOZWAdn=jc}5RlFFMkFd}B|6#1V8HA~$C58|SrX=essr^#!bR|v)*Zz~%H0*dwHN-f#SeQ`PZ<(McXz?o2PtSfzLV~O zCCJ3nTTS=PxoTdUfp+Xtb!v`6CqyB1`wrftWiiSo?%LzbEF!!&5w$4wVyfmku<&h3idf*ow-ct_-e@m=Az!6#Y{OjIu}_z zmO!c0QZW{A=M~bb)c8*1PaEds?>fjhEne@nZ5bFdHtn*b!WgHee2LbglRoG%gvoo{ zHEeq~_9j{J?{Px%)y`?s8SYT?>D{;PV?ip0A$Ppj&QtDB_|o`LJ0k6kw8Cjma9>mE zarN(%9^hb~KoGEvFyxcReVd;lxYnw9=cTa{(zzjOmPBbZN@l?GM{vu z%-iHgK(t_}_}*@wNCxy;B>#uunH*d{i>if(HF!)`@$Zva-qo7e;g#qnQ?LLSC}s0k z*lzXz<;^0kBd3Vecp^(f#rxS2Ke=1ZUzV6^qjQBt*1N}lR&cXMZrstL;4!Gi=Zj;} z%kFlH_=eu%tYESH3Gi88z-;JBO^nw(+B zj;L;5f%u0sRC63GCrYy36#4O8oUZK`tk%OD!@k5TBCuFi* OBrq~4RMSw4?7skeRz

Requests & Responses#

-

The Request example explores sendig requests and receiving responses.

+

The Request example explores sending requests and receiving responses.

##########################################################
 # This RNS example demonstrates how to set perform       #
 # requests and receive responses over a link.            #
diff --git a/docs/manual/networks.html b/docs/manual/networks.html
index 4af38d0..b391c80 100644
--- a/docs/manual/networks.html
+++ b/docs/manual/networks.html
@@ -371,7 +371,7 @@ configured for Reticulum on the Raspberry Pi at site A.

the Internet connection she already has in her home, and is able to leave a Raspberry Pi running. A new Reticulum interface is configured on her Pi, connecting to the newly enabled Internet interface on the gateway at site A. Dori is now connected to both -all the nodes at her own local site (through the hill-top LoRa gateway), and all the +the nodes at her own local site (through the hill-top LoRa gateway), and all the combined users of sites A, B and C. She then enables transport on her node, and traffic from site D can now reach everyone at site A, B and C, and vice versa.

diff --git a/docs/manual/searchindex.js b/docs/manual/searchindex.js index d740524..efc76e0 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], "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, 11], "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, 7, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "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, 2, 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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 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, 7, 9, 10], "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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 11], "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, 2, 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, 5], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "mit": 0, "licens": [0, 9], "copyright": 0, "2024": 0, "mark": [0, 7, 9], "qvist": 0, "unsign": 0, "io": [0, 3], "illustr": [0, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 6, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 7, 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, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": [2, 5], "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": 3, "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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], "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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "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], "custom": [4, 7, 9, 11], "android": [4, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "autoconfigur": [5, 11], "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], "id": [5, 7, 9, 10], "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, 7, 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, "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, 11], "ipv4": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "reappear": 5, "hostnam": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "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], "15": 5, "16": [5, 9, 10], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "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], "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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, 7], "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], "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], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "disrupt": 5, "neccessari": 5, "modifi": [5, 9, 10], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "cabl": 6, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "intermediari": [7, 9], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 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, "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, 11], "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, "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], "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_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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, "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 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, "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, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9, 11], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "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, "announce_packet_hash": 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, "condit": [9, 11], "pmr": 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], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 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, "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, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "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, "ie": 10, "breviti": 10, "socket": [10, 11], "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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], "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, 11], "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, 7, 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, "sy": 0, "": [0, 2, 5, 6, 9, 10, 11], "defin": [0, 5, 7, 9, 10], "app": [0, 2, 7, 9], "name": [0, 2, 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, 5, 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, 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, 2, 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, 2, 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, 2], "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, 2, 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, 7, 9, 10], "default": [0, 2, 3, 5, 6, 7, 9, 10], "none": [0, 2, 5, 7, 9, 10], "help": [0, 2, 6, 8, 9, 10, 11], "altern": [0, 2, 5, 10], "directori": [0, 2, 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], "0": [0, 2, 5, 7, 9, 10, 11], "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, 5, 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, "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], "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], "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, 2, 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, 2], "channelarg": 0, "between": [0, 5, 6, 7, 9, 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, 2, 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, 11], "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, 5, 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, 2, 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, 7, 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, "5": [0, 2, 5, 7, 9, 10, 11], "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, "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, 2, 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, 11], "stringmessag": 0, "convei": 0, "timestamp": [0, 9], "msgtype": [0, 7], "variabl": [0, 2, 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, 7, 9, 10], "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, 2, 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, 2, 5, 10], "resourc": [0, 2, 4, 5, 7, 8], "effici": [0, 2, 5, 7, 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, 11], "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, 2, 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, 5], "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, 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, 2, 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, "exampleinterfac": 0, "utilis": [0, 2, 5, 6, 7, 10, 11], "fulli": [0, 2, 3, 5, 9, 10, 11], "par": [0, 2], "nativ": 0, "common": [0, 3, 4, 6, 9, 10, 11], "mit": 0, "licens": [0, 9], "copyright": 0, "2024": 0, "mark": [0, 7, 9], "qvist": 0, "unsign": 0, "io": [0, 3], "illustr": [0, 6, 9], "runtim": [0, 9], "place": [0, 2, 5, 6, 9, 10], "folder": [0, 2], "similar": [0, 2, 3, 5, 6, 7, 10, 11], "enabl": [0, 2, 3, 5, 6, 7, 9, 10, 11], "gatewai": [0, 2, 5, 6, 9], "port": [0, 3, 4, 5, 6, 9, 11], "dev": [0, 2, 5, 10], "ttyusb0": [0, 5, 10], "speed": [0, 5, 7, 9, 10], "115200": [0, 5, 10], "databit": [0, 5, 10], "pariti": [0, 5, 10], "stopbit": [0, 5, 10], "hdlc": 0, "helper": 0, "delimit": 0, "physic": [0, 2, 3, 5, 7, 9, 10, 11], "medium": [0, 3, 5, 6, 7, 9, 11], "case": [0, 2, 3, 5, 6, 9, 10], "simplifi": 0, "frame": [0, 5], "ppp": 0, "flag": [0, 2, 7, 9], "0x7e": 0, "esc": 0, "0x7d": 0, "esc_mask": 0, "0x20": 0, "staticmethod": 0, "escap": 0, "replac": [0, 2, 7, 9, 10], "sub": [0, 5], "ifac": [0, 9, 10], "default_ifac_s": 0, "particular": [0, 3], "owner": 0, "posit": [0, 10], "dict": 0, "depend": [0, 3, 4, 6, 7, 9, 10], "importlib": 0, "find_spec": 0, "instal": [0, 4, 5, 6, 9, 10, 11], "log_crit": 0, "python3": [0, 2, 3], "pip": [0, 2, 3, 10], "pyseri": [0, 2], "panic": [0, 10], "super": 0, "sure": [0, 2, 3, 10], "through": [0, 2, 3, 5, 6, 7, 9, 10, 11], "step": [0, 2, 3], "compat": [0, 2, 3, 5, 7, 9], "platform": [0, 3, 4, 9, 10], "ifconf": 0, "get_config_obj": 0, "suppli": [0, 5, 6, 7, 9, 11], "miss": [0, 2], "9600": 0, "abort": 0, "f": [0, 2, 10], "No": [0, 2, 5, 9, 10, 11], "hardwar": [0, 2, 4, 5, 6, 7, 9, 10, 11], "mtu": [0, 7, 9, 11], "maximum": [0, 5, 7, 9, 10], "underli": [0, 6, 11], "capabl": [0, 9], "without": [0, 2, 3, 5, 6, 9, 10, 11], "segment": [0, 5, 6, 7, 9, 11], "hw_mtu": 0, "564": 0, "onlin": [0, 10], "bitrat": [0, 5, 7], "intern": [0, 5, 7, 9], "accord": [0, 2, 9], "parity_non": 0, "lower": [0, 2, 5, 10], "even": [0, 2, 5, 6, 7, 9, 10, 11], "parity_even": 0, "odd": 0, "parity_odd": 0, "open_port": 0, "succeed": [0, 7], "post": 0, "is_open": 0, "configure_devic": 0, "ioerror": 0, "log_verbos": 0, "baudrat": 0, "bytes": 0, "xonxoff": 0, "rtsct": 0, "inter_byte_timeout": 0, "write_timeout": 0, "dsrdtr": 0, "thing": [0, 2], "amount": [0, 5, 6, 7, 9, 11], "devic": [0, 2, 4, 5, 6, 7, 9, 10], "read_loop": 0, "whenev": [0, 7, 9], "process_incom": 0, "rxb": 0, "process": [0, 2, 3, 5, 7, 9], "inbound": [0, 5, 7], "process_outgo": 0, "Then": [0, 2], "written": [0, 9], "txb": 0, "wrote": [0, 5], "contin": 0, "meth": 0, "turn": [0, 10], "in_fram": 0, "data_buff": 0, "last_read_m": 0, "in_wait": 0, "ord": 0, "time_since_last": 0, "08": [0, 10], "occur": [0, 5, 10, 11], "experienc": 0, "unrecover": [0, 10], "offlin": [0, 2], "panic_on_interface_error": [0, 10], "attempt": [0, 2, 3, 7], "reconnect": 0, "period": [0, 5, 7, 9], "reconnect_port": 0, "signal": [0, 7, 9], "ingress": [0, 5], "limit": [0, 3, 4, 6, 9], "should_ingress_limit": 0, "extern": [0, 2, 5, 7, 11], "__str__": 0, "interface_class": 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], "manag": [2, 4, 6, 7, 9, 11], "sudo": [2, 10], "apt": 2, "pamac": 2, "dowload": 2, "releas": [2, 5, 7, 9], "wheel": 2, "channel": [2, 4, 5, 6, 7, 8, 9, 11], "py3": 2, "whl": 2, "For": [2, 5, 6, 7, 9, 10, 11], "instruct": 2, "section": [2, 3, 5, 6, 9, 10], "might": [2, 5, 6, 9, 10], "chapter": [2, 3, 5, 6, 7, 9, 10, 11], "mai": [2, 5, 7, 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, "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], "transceiv": [2, 3, 5, 9, 11], "infrastructur": [2, 3, 5, 6, 9, 10], "launch": [2, 10], "enough": [2, 3, 9], "rnsh": [2, 10], "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, 7, 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, "reboot": 2, "again": [2, 5, 9, 10], "environ": [2, 6, 9], "would": [2, 5, 6, 7, 9], "rather": [2, 7], "graphic": 2, "linux": [2, 3, 9], "peopl": [2, 9], "i2p": [2, 4, 11], "qr": 2, "paper": 2, "anyth": [2, 3, 5, 9, 10, 11], "interoper": [2, 3, 6, 9, 11], "friendli": 2, "voic": 2, "interest": [2, 9], "cours": [2, 5, 9], "come": [2, 9], "easier": [2, 5, 6, 10, 11], "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], "locat": [2, 5, 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], "discov": [2, 5], "topographi": [2, 6, 9], "situat": [2, 3, 5, 6, 9], "where": [2, 3, 4, 5, 6, 7, 9, 10], "often": [2, 5, 6, 9, 10], "suffici": [2, 5, 9, 10], "act": [2, 7, 9, 10], "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], "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], "transmiss": [2, 5, 7, 9], "though": [2, 5, 9], "publicli": [2, 5], "most": [2, 3, 5, 6, 7, 9, 10], "anymor": 2, "invis": [2, 5], "parallel": 2, "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, 11], "attack": 2, "form": [2, 5, 6, 7, 9], "deep": 2, "much": [2, 5, 6, 9, 10, 11], "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], "wide": [2, 3, 5, 9, 10, 11], "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], "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, "flexibl": [2, 3, 5, 11], "broad": [2, 3], "cover": [2, 3, 9, 11], "conceiv": [2, 3], "therefor": [2, 9, 11], "possibl": [2, 3, 5, 6, 7, 9, 10, 11], "subject": [2, 11], "code": [2, 3, 4, 5, 10], "abov": [2, 3, 5, 9, 10], "next": [2, 6, 7, 9], "api": [2, 4, 9, 11], "document": [2, 7, 9], "associ": [2, 7, 9], "recip": 2, "cryptographi": [2, 9, 11], "clone": 2, "repositori": [2, 8, 9], "git": 2, "move": [2, 5, 9, 10], "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, "h": [2, 10], "ping": [2, 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, 11], "good": [2, 3, 6, 9, 10], "idea": [2, 9, 10], "introduc": [2, 9], "disucss": 2, "forum": 2, "maintain": [2, 9], "procedur": [2, 7, 9], "quirk": 2, "worth": 2, "being": [2, 5, 7, 9], "awar": [2, 5, 9], "termux": 2, "droid": 2, "emul": 2, "abil": [2, 3, 11], "pkg": 2, "upgrad": [2, 7, 9], "reason": [2, 5, 9], "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], "apk": 2, "tutori": 2, "architectur": 2, "precompil": 2, "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], "shot": 2, "somewhat": 2, "mislead": 2, "choic": 2, "word": 2, "rare": [2, 5], "lead": [2, 9], "conflict": 2, "pose": [2, 9], "problem": [2, 9], "especi": [2, 3, 5], "vari": [2, 5, 9, 10], "doubt": 2, "pip3": 2, "addition": [2, 3, 5, 9], "init": 2, "zshrc": 2, "9": [2, 7, 10], "bin": [2, 10], "adjust": [2, 7], "storag": 2, "memori": [2, 9], "opkg": 2, "At": [2, 6, 9], "underwai": 2, "uci": 2, "feed": [2, 7], "debug": [2, 10], "vvv": 2, "21": 2, "02": 2, "alter": [2, 7, 9], "free": [2, 6, 8, 11], "overlai": 2, "ram": [2, 5], "rule": [2, 4, 5], "proper": 2, "laucnh": 2, "boot": [2, 10], "ipv6": [2, 5, 10], "intend": [2, 6, 9], "show": [2, 10], "fe80": 2, "question": [2, 3, 5], "64": [2, 9, 10], "32": [2, 7, 9], "rasperri": 2, "os": [2, 5], "oper": [2, 3, 5, 6, 7, 9, 10, 11], "either": [2, 3, 6, 7, 9, 10], "powershel": 2, "12": [2, 5, 10], "7": [2, 5, 9, 10], "directli": [2, 3, 5, 7, 9, 10, 11], "rnspure": 2, "pyca": [2, 9], "cryptograph": [2, 4, 6, 10, 11], "primit": [2, 4], "obscur": 2, "matter": [2, 5], "perfectli": 2, "One": [3, 7], "truli": [3, 9], "valuabl": [3, 8], "almost": [3, 5, 9, 10], "kind": [3, 5, 6, 9], "interfac": [3, 4, 6, 7, 10], "wireless": [3, 6], "decad": 3, "modern": [3, 9], "millimet": 3, "wave": 3, "backhaul": [3, 6], "chanc": 3, "box": 3, "glue": 3, "littl": [3, 9], "effort": 3, "pipeinterfac": [3, 5], "kiss": [3, 4, 10, 11], "simplyequip": 3, "abund": 3, "sometim": 3, "scratch": 3, "real": [3, 6, 11], "world": [3, 5, 6, 11], "minim": [3, 4, 9], "cost": [3, 9, 11], "fundament": [3, 9], "categori": 3, "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, "expens": 3, "hard": 3, "hungri": 3, "allevi": 3, "plaform": 3, "its": [3, 5, 7, 9], "compon": [3, 8, 9], "frequenc": [3, 5, 9, 10], "band": [3, 9], "scheme": 3, "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], "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, "sx1262": 3, "sx1268": 3, "esp32": 3, "manufactur": [3, 5], "sx1276": 3, "sx1278": 3, "nrf52": 3, "rak": 3, "avr": 3, "atmega1284p": 3, "rnodeconf": [3, 4], "autoinstal": [3, 10], "seri": 3, "configuraion": 3, "air": 3, "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], "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, 5], "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], "itself": [4, 9], "pdf": 4, "epub": 4, "caveat": 4, "emptor": 4, "fast": [4, 5, 7, 9], "standalon": 4, "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], "custom": [4, 7, 9, 11], "android": [4, 10], "arm64": 4, "debian": [4, 9, 10], "bookworm": 4, "maco": 4, "openwrt": 4, "raspberri": [4, 6, 9, 10, 11], "risc": 4, "v": [4, 10], "ubuntu": [4, 10], "lunar": 4, "window": [4, 5], "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, 11], "reach": [4, 5, 6], "prioritis": [4, 5, 6, 7], "propag": [4, 5, 7], "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, 5, 7, 9, 11], "buffer": [4, 5, 7, 11], "donat": 4, "contribut": 4, "requestreceipt": [4, 7], "rawchannelread": [4, 7], "rawchannelwrit": [4, 7], "search": 4, "distinct": [5, 9], "topologi": [5, 9, 11], "endless": 5, "give": [5, 9, 10], "respect": [5, 11], "extens": [5, 11], "straightforward": 5, "discover": 5, "autoconfigur": [5, 11], "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], "id": [5, 7, 9, 10], "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, 7, 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, "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, 11], "ipv4": 5, "listen_ip": 5, "listen_port": 5, "bind": 5, "10": [5, 9, 10], "88": 5, "prefer_ipv6": 5, "yggdrasil": 5, "4343": 5, "i2p_tunnel": 5, "127": 5, "5001": 5, "dedic": [5, 9], "natur": 5, "toler": 5, "intermitt": 5, "gracefulli": 5, "reappear": 5, "hostnam": 5, "201": 5, "5d78": 5, "af73": 5, "5caf": 5, "a4d": 5, "a79f": 5, "3278": 5, "71e5": 5, "expos": [5, 7], "soundmodem": 5, "kiss_fram": 5, "8001": 5, "caution": 5, "conjunct": 5, "never": [5, 7, 9], "disabl": [5, 9, 10], "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], "15": 5, "16": [5, 9, 10], "spectrum": [5, 9], "legal": 5, "legisl": 5, "around": [5, 9], "regul": 5, "decis": [5, 9], "ble": 5, "pair": [5, 7, 9, 10], "mac": [5, 9], "3b87": 5, "f4": 5, "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], "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, "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, "individu": [5, 7, 9, 11], "rnodemultiinterfac": 5, "ttyacm0": 5, "subinterfac": 5, "datar": 5, "themselv": 5, "4ghz": 5, "2400000000": 5, "1625": 5, "1625000": 5, "person": [5, 9], "vport": 5, "865": 5, "6": [5, 7, 10], "865600000": 5, "laser": 5, "baud": [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], "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], "encapsul": [5, 11], "callsign": 5, "ssid": 5, "realli": [5, 7], "doesn": 5, "incur": 5, "ax25kissinterfac": 5, "no1cll": 5, "ttyusb2": 5, "150m": 5, "increas": [5, 7, 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, 11], "512": [5, 7, 9, 11], "announce_cap": [5, 7], "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, "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, 7], "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], "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], "hold": [5, 7, 9], "interrupt": 5, "burst": 5, "subsid": 5, "held": [5, 10], "decid": [5, 6, 7, 9], "bogu": 5, "retransmit": [5, 9], "disrupt": 5, "neccessari": 5, "modifi": [5, 9, 10], "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, 7, 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], "hellman": [6, 9], "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, "trustless": [6, 9, 11], "unorganis": 6, "manner": 6, "far": [6, 9], "unexplor": 6, "dissolv": 6, "organ": 6, "restrict": [6, 10], "legaci": 6, "unifi": 6, "carrier": [6, 11], "involv": 6, "hardlin": 6, "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, "cabl": 6, "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], "require_shared_inst": 7, "exactli": [7, 9], "independ": [7, 9, 11], "inter": 7, "soon": 7, "kill": [7, 9], "forcibli": [7, 10], "advantag": 7, "demand": 7, "500": [7, 9, 11], "adher": 7, "prerequisit": 7, "link_mtu_discoveri": 7, "throughput": [7, 9, 11], "intermediari": [7, 9], "percentag": 7, "schedul": 7, "queu": [7, 10], "fewer": 7, "distant": 7, "smaller": 7, "eventu": 7, "minimum_bitr": 7, "static": 7, "get_inst": 7, "should_use_implicit_proof": 7, "explicit": 7, "implicit": [7, 9], "transport_en": 7, "highest": 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, "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, 11], "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, "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], "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_rssi": 7, "strength": [7, 11], "get_snr": 7, "nois": 7, "ratio": 7, "get_q": 7, "qualiti": 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, "stale": 7, "torn": 7, "progress_callback": 7, "info": [7, 9, 10], "track_phy_stat": 7, "track": 7, "retriev": 7, "stat": [7, 10], "get_establishment_r": 7, "ocur": 7, "get_mtu": 7, "get_mdu": 7, "get_expected_r": 7, "flight": 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, "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, "accommod": [7, 9], "abstract": [7, 9], "greater": [7, 9, 11], "popul": 7, "bufferedread": 7, "bufferedwrit": 7, "bufferedrwpair": 7, "create_read": 7, "ready_callback": 7, "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, "announce_packet_hash": 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, "condit": [9, 11], "pmr": 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], "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, 11], "recap": 9, "indirectli": 9, "ledger": 9, "messeng": 9, "nicknam": 9, "ed25519": [9, 11], "reconstruct": 9, "notic": [9, 10], "piec": 9, "intention": 9, "infer": 9, "throughout": 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, "moment": [9, 11], "methodologi": [9, 10], "answer": [9, 10], "malici": 9, "pretend": 9, "recreat": 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, "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, "compos": 9, "field": 9, "context": 9, "465": 9, "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, "spec": 9, "cbc": [9, 11], "pkcs7": [9, 11], "pad": [9, 11], "hmac": [9, 11], "sha256": [9, 11], "iv": [9, 11], "urandom": [9, 11], "hashlib": 9, "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, "ie": 10, "breviti": 10, "socket": [10, 11], "share_inst": 10, "shared_instance_port": 10, "37428": 10, "instance_control_port": 10, "37429": 10, "rpc": 10, "rpc_kei": 10, "e5c032d3ec4e64a6aca9927ba8ab73336780f6d71790": 10, "probe": 10, "respond_to_prob": 10, "warn": 10, "unus": 10, "teach": 10, "task": 10, "18": 10, "17": 10, "59": 10, "56": 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, "5245a8efe1788c6a1cd36144a270e13b": 10, "j": 10, "w": 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, "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, "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, "planetari": 11, "hierarch": 11, "bureaucrat": 11, "resili": 11, "userland": 11, "beta": 11, "bug": 11, "warrant": 11, "heterogen": 11, "scalabl": 11, "mixtur": 11, "foundat": 11, "keyset": 11, "intuit": 11, "decentralis": 11, "gigabyt": 11, "lightweight": 11, "44": 11, "sequenti": 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, 1, 1, "", "add_message_handler"], [7, 1, 1, "", "is_ready_to_send"], [7, 2, 1, "", "mdu"], [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_expected_rate"], [7, 1, 1, "", "get_mdu"], [7, 1, 1, "", "get_mtu"], [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, "", "get_q"], [7, 1, 1, "", "get_rssi"], [7, 1, 1, "", "get_snr"], [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, "", "LINK_MTU_DISCOVERY"], [7, 3, 1, "", "MINIMUM_BITRATE"], [7, 3, 1, "", "MTU"], [7, 1, 1, "", "get_instance"], [7, 1, 1, "", "link_mtu_discovery"], [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, "custom": [0, 2, 5], "interfac": [0, 2, 5, 9, 11], "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], "develop": 2, "particip": 2, "platform": 2, "specif": [2, 9], "note": 2, "android": 2, "arm64": 2, "debian": 2, "bookworm": 2, "maco": 2, "openwrt": 2, "raspberri": 2, "pi": 2, "risc": 2, "v": 2, "ubuntu": 2, "lunar": 2, "window": 2, "pure": 2, "python": 2, "commun": 3, "hardwar": 3, "combin": 3, "type": [3, 9, 11], "rnode": [3, 5], "support": [3, 8], "board": 3, "devic": [3, 11], "lilygo": 3, "t": 3, "beam": 3, "suprem": 3, "t3s3": 3, "rak4631": 3, "unsign": 3, "v2": 3, "x": 3, "lora32": 3, "1": 3, "0": 3, "v1": 3, "deck": 3, "heltec": 3, "v3": 3, "usag": 3, "wifi": 3, "ethernet": 3, "serial": [3, 5, 10], "line": 3, "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"]], "Custom Interfaces": [[0, "custom-interfaces"], [5, "custom-interfaces"]], "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"]], "Creating and Using Custom Interfaces": [[2, "creating-and-using-custom-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"]], "Debian Bookworm": [[2, "debian-bookworm"]], "MacOS": [[2, "macos"]], "OpenWRT": [[2, "openwrt"]], "Raspberry Pi": [[2, "raspberry-pi"]], "RISC-V": [[2, "risc-v"]], "Ubuntu Lunar": [[2, "ubuntu-lunar"]], "Windows": [[2, "windows"]], "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 and Devices": [[3, "supported-boards-and-devices"]], "LilyGO T-Beam Supreme": [[3, "lilygo-t-beam-supreme"]], "LilyGO T-Beam": [[3, "lilygo-t-beam"]], "LilyGO T3S3": [[3, "lilygo-t3s3"]], "RAK4631-based Boards": [[3, "rak4631-based-boards"]], "Unsigned RNode v2.x": [[3, "unsigned-rnode-v2-x"]], "LilyGO LoRa32 v2.1": [[3, "lilygo-lora32-v2-1"]], "LilyGO LoRa32 v2.0": [[3, "lilygo-lora32-v2-0"]], "LilyGO LoRa32 v1.0": [[3, "lilygo-lora32-v1-0"]], "LilyGO T-Deck": [[3, "lilygo-t-deck"]], "Heltec LoRa32 v3.0": [[3, "heltec-lora32-v3-0"]], "Heltec LoRa32 v2.0": [[3, "heltec-lora32-v2-0"]], "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_mtu_discovery (rns.reticulum attribute)": [[7, "RNS.Reticulum.LINK_MTU_DISCOVERY"]], "link (class in rns)": [[7, "RNS.Link"]], "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_expected_rate() (rns.link method)": [[7, "RNS.Link.get_expected_rate"]], "get_hash() (rns.resource method)": [[7, "RNS.Resource.get_hash"]], "get_instance() (rns.reticulum static method)": [[7, "RNS.Reticulum.get_instance"]], "get_mdu() (rns.link method)": [[7, "RNS.Link.get_mdu"]], "get_mtu() (rns.link method)": [[7, "RNS.Link.get_mtu"]], "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_q() (rns.packet method)": [[7, "RNS.Packet.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_rssi() (rns.packet method)": [[7, "RNS.Packet.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_snr() (rns.packet method)": [[7, "RNS.Packet.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"]], "link_mtu_discovery() (rns.reticulum static method)": [[7, "RNS.Reticulum.link_mtu_discovery"]], "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"]], "mdu (rns.channel.channel property)": [[7, "RNS.Channel.Channel.mdu"]], "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