diff --git a/examples/0_three_forward/amy.exe b/examples/0_three_forward/amy.exe deleted file mode 100644 index d3447385a1a15cf4f37cfa907820bc02f72b1abb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59728 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 diff --git a/examples/0_three_forward/bob.exe b/examples/0_three_forward/bob.exe deleted file mode 100644 index 0482d0817eec1f4cb6df2dc1f6a78093902238b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58519 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 diff --git a/examples/1_load_pdl/amy.exe b/examples/1_load_pdl/amy.exe deleted file mode 100644 index a5e1abdf227f30afecd4fb24d8f137ee573034d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59903 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 r5LIsobp@g8Tb+XBNlqt^t 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 Gl>ZNaP*ddq diff --git a/examples/2_atomic_swap/bob.c b/examples/2_atomic_swap/bob.c deleted file mode 100644 index 595cf304032c4cb00dd33c925bf6c9642b46923f..0000000000000000000000000000000000000000 --- a/examples/2_atomic_swap/bob.c +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include "../../reowolf.h" -#include "../utility.c" - -int main() { // BOB! - char * pdl = buffer_pdl("forward.pdl"); - Connector* c = connector_new(); - - printf("configuring...\n"); - check("config ", connector_configure(c, pdl, "forward_two")); - - check("bind 0 ", connector_bind_active(c, 0, "127.0.0.1:7000")); - check("bind 1 ", connector_bind_active(c, 1, "127.0.0.1:7001")); - check("bind 2 ", connector_bind_native(c, 2)); - check("bind 3 ", connector_bind_native(c, 3)); - - printf("connecting...\n"); - check("connect", connector_connect(c, 5000)); - - int msg_len; - const unsigned char * msg; - - int i; - for (i = 0; i < 3; i++) { - printf("\nround %d\n", i); - - check("get ", connector_get(c, 0)); - check("get ", connector_get(c, 1)); - check("sync", connector_sync(c, 1000)); - - check("read one", connector_gotten(c, 0, &msg, &msg_len)); - printf("Got message one: `%.*s`\n", msg_len, msg); - - check("read two", connector_gotten(c, 1, &msg, &msg_len)); - printf("Got message two: `%.*s`\n", msg_len, msg); - } - - printf("destroying...\n"); - connector_destroy(c); - printf("exiting...\n"); - free(pdl); - return 0; -} \ No newline at end of file diff --git a/examples/2_atomic_swap/bob.exe b/examples/2_atomic_swap/bob.exe deleted file mode 100644 index e118b9d6458523e12bcaf09fd7c18f0d30d5a668..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59718 zcmeIb3t(Htl{Y@JEk{n`NO?FINQwvvI5ctWJRKmcWLt?uWLx-=7)rU8W%)s5N$8O{ zKwE>87FBiEWoZ{$w#~BLZnlrzY`5DQw%c`hG=b9AO}k&y$F`wmS*4*gP)f5jTmOG& zX70VZx{d?>_xrwo|I4+nX6DS9bIzPObLMehO}CD*V#Zhr&Z#NJ#u3ut;=eQh3?qBN z6^}1qUn=|NmE#uwH?M5(A4odmiCAAEIOq%oqtRH(*&TK!(oyF?)Y;h5<{XUmgsaQT z=dP5b10KeD-fw3=NdCp`EWy|cD`RKbHEdo{(L2}*Al2iX%h;(U2pv?&ML!~5B;=-~ zl_5b#jfDeG^jdhm7;|#4C`(aJL<{mD0&fff_-RKMWA{ta8f=Eh@Xd@>O_M+L0N^vw zsZNE5QYbg>#1DzM0w*;}-qFPZUDZ9oR1mO9g1c}M&8untf zdO%i$bUlWX!a5@^=uK2Nw6+tppMDPEB>wd{^9~ntO;o2MoUeo6M{p8eBPH~M@YYG0 z0|cJHNqF0F<{i*q{kqz%98z`#f=QfCoL-!Hhl@Gt*KMff5FgAAhAZfCVRb}~w{a5( zTt)mCkV$`caFF)H@iuMYY0k<4Ji?D^C_I9C)UVr8!{d+8uT$d1IY|24DZNGRo<-iAi8DkiDM)vL-PGdYKcsK!k?d5N2KnpYq~Yni9%N*D^u}T zF~+j&;6!TEV^o#gub1Pe_Z>vG;$MNEU6gU;Hp5y_;!_Qbjnr9Ex7JR0N1m#JZ0s?T zAon#CI`fSE3K#Q+yf=6)$M3Bp$B};6{uOU!@4f#u&yw0oK~eexBjZ$&1@`yfH8nMr zz5g5%wI>cfWB=$Ar~3i%j+Xym9w z-m!aEoA=(A9wOEgkCh|vj<%y%=KH_)e$JcSc9Ividr*smUxgCG-fYP#YJP8a`F!Nn z{?eO`+x*#8>+Xe`7J9dS-F{#r@E*$*gTd7IyqVltul*l3cn?mbf9B0@%E2mXf0->E zIcKpSSOLUrDe8ORPQ;E`&kS<&1dL}_0(kJ3_5-yDQIBo)6fjUq&G*z!JPs(UeP(Jh zcK~8Tx8GcZVWi?y!-Q4QMaY?=-0_7x?<4;`HI?%(gYtJn`5;F9*qgCFzZalJz-ylo zq|?jJD5^akIFVX2^1LN=4L1bu$b`lIWykOv&iB6P&K!4-oV5(UvBGU{JbvbdUfxm% zPNWx}xlFfbpuTUOEQY+Z;5Pt%joCS9 zzj9Gf(GO6zJV9)s`i#S$wRZ4C#V$hrM>ImV{CY$))~)!3nH+c$#IhAvQR+l`Ual9+ zvesotdhdOT?Cf2)EAMvS=6?5+_OCRq>^g0Qp$q-NJe~p9f1z$COyJ;8&~A^B8_Zop zWVl@%%mE0|{sp++Z24yp;unuY)8FmFTG4$$bPd zs)F;~Pf98-q5}VN0EjC7yMX1*c+Po8-gAznuY#2veGmHFBpeUXj1bLVU82(5M%Y=; zIrliV%HyN}7+~&oAP|`1KSMm@c}-vuf`&DToUG?H^f~WCgn5`sWjr~+yrD^Nw&@%S z<$RfEe3{9|dHVtBb9tn{A_$;#wj<}YOn#kn&7qDit&V|Q8N3uEe{?G(FNRvd;%u&m zngG0z@iod=!pU}=C5~{sj{!y^l>?2}`%8rMzTcBka)i$#tySdv&;rN$Yr?uk$NCGx zQYHTf73*V!wLxNW7e}lBg*}sADLi8Sr-?9`Kkm~XK7Yo!b z6}64Bp9ShM&w0}PY5L82&U0CBq|8-nS;{6UZcxi!OW7YLHbh#j!*Vry9%aYWY#Iot z^innZl{#bxxR6aRct<-<5*68!DyttrB{btK($W^8%Wi!yhO3NCilbnuw?Z zJ*X1-3?csn-43>pPvp-Dej|vCc+Oi!-gCal{^2)Bx1;4Bqnu?#9z`Kn-Qu>Qk*AN*#ZY`gJ=~|Z%U^HO!W?eRKrou`|439q-eO>oA z7@7HusC@DDL}B5`8&jFd)K-ig&dd`dIg596*>}9F(eqN@IY*vnYO#0ZjLp0C*XiFt z)c2A(!zsP%_S1j$JDN*ifIm}|nQR<&S#BD+;VAQGo=BfP^A9?|to7r)aHA8cQZX|- zW_>@>q|MWJg4mdMYSmxvho4Z7+6iNQA zGZpRv-hBM_KK|UhohN$XUcKWRq~K@1q3fpu4Z=Na+?)9pH2g@ICLBviitO?a^df*U zV`k#b{9vkL4uNTE^H-=cGEVt2M}3)-q=h=t0?OZp^4?7Q${J+D$WVFALXgHJxZ~th z#W(jMJ8P{5VS;b^0!Ozl#mwD1URJ^;gq>S|Gr;j~Uq#eB@KV;0h@P9O_z2M$E&tgj zlJwI^OjRtv@8eV)<~vm}j8yKgFmr;TS3*A%#AMV1yR>#7dirkYRBdmv#*sIQQ?xznJhjjy?H%tvR?;A5)&S~sA^BXvco(qnu{G4e)HYVpV$mXu3Fe%I~1{g?YN zQhP@?)l;zbC#j!$v&A&uD?-1)#08-AFZ0XfZpr5eBCvA3y$bCU@^?Zz2T5Nby5?28 zpNs$ zom%O#ufAtxpwYe>6P%H)rS=be2VAn~uoW+%CA^`M`!FI+o$`(@AIF-|o4wQaYNOrZ zc0!{4mH4^SAr>rmfHHC*Lya%<3d{%c+ynajOuK69E9oDg`{mrQ3$(E>^OXHSt044c z5b}<0{Id7xi^X2cS%0R>c?<<%{*72axU>G1^ZC-pJa*I=#%fkzZN7*>>wWl!NsZpG!PH@}K8wC*a^GFhKY#*jCJx<}XgX zeCD{fc+)Fz2JUee5rM!?lw4T{%kXBJQF@nSs^U0yBH(onM$sly71tq!?mrK$lzAfe z2&^RQVVS8+akg>W`Ap;W=TFChR{Q$t;~4fbQ<#u%`+YCqzdzjxI23R%_iE)2Y#w0>ZiP;w8+g^Pa?;UVPN%H@5s41@BJ8l=Vh1LKYSe62T#}!d>WyD>x=f0 z{iv9Kbg#`f^3)uEcI`Q;!{~bsH?4lncl4#==Fy%PZD;0+^@wle>$YrjiF>?+SZ3bH zmijZV`z@!7Eg8?@+>Mx&G;Mt`{e!G^H<;JH4k>R+aP5D137F9O!sqB{ZN`%3gn7G^vvImWfuY+ z6FPs{8^HA0eUnnv1_}NbCNHO{)y78Nu%$OO+P`dMgdEQS6CZ9;pP-^Q0s+R_SBq*M z^BhJcS?&QC6=0VGmU}`*d{}T%C+p_He zo_K`l{u!d_7-&+H&mHo!H4^eQnHm+ir6Y}wyy^x^{1ar&Y;LB>U&~4FPyoL%mK^H)7Z!9rXH7G zM7s?dup+zky=j%uliNbSal1{j~Ss>zP-v*TvNV{XyJYz~7h2!EX;@Al*&sBbH}gAo<9N!o@Gl z7GYS-9KH8>WIONuuZD&l=)cs%g{k%nQ@ux;>JenvKfvu%nChnplT0;zg=(hPq1}X; z-Ym`Zpq(OF>)|dgto;D(|6(M?Smk_|cj^?$lW(t`++I`Lg{^*FwbkdTUAX=K6kJL3 zpOf}F4&iA%;(V88U$57fz;)3^XI`c-=$E-c+YjD>Ox36lYPA1R(6%3-jZhyYy@5R!JZ?yb*SmIR0yY@hb+2vnC!i(W^ zgEzbOBnNE^A{figoBB6z=Ic}6M+aB{<4TozvkfrBS7?>_E(eOFe+*h5rQ&=csJt6X zxMma;^%A=^~N z7w;fJt@8*lTE3FQm;X1JQlWgoALI6&wf;Ns!1^0$JNJ*=K!(AU zNc{kLQx$E3{O6G%le#SH*!tb{yfZD?g2S5#F zvo|}unSdjAH+hB8@_RVujlewfJ?;-MI%7_a@AMmFJKgCF7&tbuOQgZDf5_h90482tY4O~sS4KsB>RMDzpV99z#+xbW7Y=|BhGp3 zv7Rn}7+~m+3jJs-_X)VP(1oqe<=Ugh6JF6~^`bZh$E z*uu?uPytl>W^d>wi2ohI{x)Lo#(E8KFfsL{*^!}eq2iqp74z}vdYvuM}7fKEO`K$n5^m@BVG8n9>u;(!d8s!pRM0X zZB2}w?SL-jXc4%X->RS_`%6!KRXFxcx>l!C~3|9YkFVzgq=tVQ;xTr8d_) zNWzc7=nhWMypwtDo+m^td4G}RU|h0)3VFjQkLs!#PubM^lH^`aE%nkxG+&#qd6oV& z`gi2nB4?9zt^Doe(cBf1XCta&xIXF6E`RzOZV%Tt-RjOflkW7xoW6(&E$qSX3pGHW zC$nQ?s4et#J+2X=Z}@F6P8S*HwVH7@9!1}{8TN3ZDKnWUYbe2Mi zq;~w4AEprjX3k^IUu)d!_ zT(pDt-v<=WxB+~b#{mH0#p!`v5F&@}pJ?t}0Sv~^r1w$I)PL~KxCOvhEw+*)Mj z#_^-}kkg-gK~Dfk(-Jy{Yh0kM9|B5y%WoflNDa&_Aa>*;dZ%{CFJed_qbNTU@k0Eu zYL@}yh)hq&aIzr(R6$z3n4uE+ro399rr!?Vng%?rtG=S)!Zu#uEF2i5}cG7U7Iq;^F8(w9kpOvv(j8b|%89bRrt= zafTC#XbiMbE)>t(pXNmQcYP)gF5DK<9|OM}d+p1G_qoN}_{{%D9L!oePAEE;AzaBt#ZIGGIg zg(-aWB-4?U6Ss<{VliiOFc^s-#%~l2$B~KZz<#Pa znj2LqI-+}`v3;_3TyAABnCgeLRjaRau1b>qu1Z#|>RaPn)wkN|tb!Hp4Mw&h0SEWv zXQ!r?8}#Zm}qHI(H2uQt4pi=5#o*pBIMg=q1#vy7#BTNoO$S3~E$lv+3mm ziC7A>)ROxKQvJ>lZjyD@46Pbsz*FlUPlnSyF(@w*3k8Wc-DsPNg<=sW+Av9gRXx?J zKcA^w_dp8mcvm)q#SiyMV*k!~oOn2RE%tw#mbk!g4pBdBf zg7jEH+Vy@T{!qr4ju)g^LBDboq$>;3HHB%Hk$z19f9EP={^T-a`jqV7OdgJc@~&Yc z{<#AD*9y{S3(`9p8m@Cz4b^Q{Hg8-Tk0l3&)+X>Uu9!7Kr>~FQRuDZ6mMiuMr@PCR1ur{^eq=q6#dw5O*M4jk6zdx*z8ToN>fm2;DeShzAgU4CfHy6yAlKn+_mO z;dimeIfnQtgcX-E_6Xumgzv}sX~f46{yokkh#x`t6`Wr}d;;NAw9#I3Gfs!n-iy9wHospTv2X;0V8n^Ye&LAS}5S^+w!* z@Go$FiEt1uc_;D_cOtwU=W)cl5PloyB;u0@=d5AuB;pQ)e~I%H;ztnfT8j;K#K)@9 z7C6rm9N{?5bBIqM{07eRh)*K?5l(uh;}pU(I7<+B)WEKAt_037!h<+%fWLkG-_Zc= zS6fOftfXFs-3aYAX16S6wwgIzrEzPZWTI%YOyUfq9jVNh(D$FiN%l)&Vg3t%otOC( zYCMP^owj1DZGB0xB_QL8y!Zn$uF6$f%u4HvYAju{tV&~UDVy6`T4U`hi5CZoCMuXA^zPGPCOsT<5@ZPU}dqR zdw$KluDS8Di8+(jQ^jX30j<7-zdjG&TEwjDEj1RKmD%b`YKpsx;z9=nX%$Zm)jCr+ zr-aQ}&ubai_^5TgSU4R$NgKi2$Nw-51jh6VS3Qie=K=WWkLa+k0#=86A)J7#$63I< z52`6+cu2y>WjHCr7i9Q`3>_a8<(x8HFGIf!Z3`fGLa07O( zu{2t#*Ta_QLEHOj(+@z_O;CR@ znexy^8rC|LZcAYoEFJendt+{PhC}uzQ{lmO>=(I{+p+CQF*c_dxa|X>Jq_4*OkrMK z?2AI`U<7+Dg@TS3`@_M#CNSGx!Z(rv*p-VV25Fa#6ALHUBPFe=2)3iPr=xu9sXf>o z3A4W-XhSfLO;=z-C3uSX(**O!VtdkY6&cD(>}TwAlp{B+I->iq$;w!RwJn_Li1r7g zJ&|yaXDAeo)9w;#1^u#{t!H_YkMS#D(?zL(qVR=^@2p$ zr>&AH%F=EZ)@dq)SC=0BRg?xL84rhOcTo}2K>w|P_k~lmw;4?IC0QHN1JG(Xx|g+6 zJl3uBLL+#j4XFsWe)sZx#)3#E!zm>gk1MJD@i5kU0+LRmCSv!Hu_RN1p~0R=l--Tk zV6so4?Oeu2nGzDQXPAP0#wZ?R{coo9((~(#?X++vP|zR?6)D(0rb2T{g59x1id|L$ zL&Yu~W7m`j8t*LW4PgfrCF@FhW7slh*Om0fu^*o5Wv-H5GCt;}5Ewg3dXwSs9_B0Q zO@$*7)>P8F55|w2drD}ll;|EP84M4G;%L#)5=n-Aq$HkBB^i6Pg!X8I5v-9*uuUBS zGxj*eqM^Y!`(epml`%S=+$oPG6xwiyCQ<`?!)KF{I_eZi-+s^ulWbtp}@x`5PzYF zIsa|QAD0HOC9JkTZObvW{U4BaK(MViX;`%ke;>QsC2R@eHp`CY4rfE{7IEFkxppv> zj)u2|Vu|p2B!Y=h|F$SDPDX>ywSDS;3$oO+HyT?z(1TgJb8T-oE=%>`LhRbeKzCm# z1PC&dsbFZ&T3nu@2_vTB^Q)`Z<^LxWp>;rB%dcCl6D4J^zB)xLdowKccN z%VCHbE{Ua-y_@-kvD>%+w`tVW0=O)^mJ`{q{x-n?vqb32QX1+HCRj1Ow4lf~ClbRA z5d0?{rMVX_0Apr{9IKu~fRZ$RVcZ4h7!sBNt!rE29i+4=dZpD zc>)*(lofqpB?&xNC5*{^h!tIG;WYE1ds)$P%i{N-wAD7ke~FWZftykKfO4f}=^>u^ z8UFiV9tu_p0|{KIFS{@4LlwMFg>SJ`5Em65OU5I? z6s^`+(G8YMuPG);59J9EOXB)GD{_lGwHOv(9K78G9t_?Ab1&Ly&KQVNMnGhgV!6^C z*@FxDta#HU#1O57+Y)e_O=`aq!t!q*%u3#~r4d};(r zQkz&eYe_(u^*Wxk+7`ju1<5Qg%h2tlepBvY0OoNTxO}HGDSsJ z(NB1{!i^dIxZ4BWXwJ1uNf9OesbDwOkjZ{FXI%w7oMN^8D}LvF6hGg>IiG$2{2qdG zfgQe+&Dm`K4*;yTGx(iH)tf?uQH$W0O;X8Hs*Bt)__yVlE z;DuswB^c?$0+HLr^3tDL@qAD;rl`3{!N1U|5f@();kbg^V0s6Jlv;&uAz?-Nu#Ey% zoDZuLuo8PD23E3^m8V##JsnNNB3Roil*{JW_i~3SQZ{=8n;l%bGFDs*xomHsrGJHp zgB8DkU@n{mmgQ2`B(rr|E~9J-->YZ*oyb_I){1hlU(mOo%`f|RN2HXoMdUcjeqw(Q zbjuczO3Hq^oRm?rC>p~)Nnezeohl>E+gR}`6wqk_ImtGb{m}LWqLUUk1SxbI3oHBa zevi~d> zvPHr{R+i(5l10h>fnE$2aQS7YImjkK7~kOC%6`Ft^A`=`wkEOrPyDsJv6E2t8xHg@f{9AV>*cojxB$-~NsOl8|6d$*+oImMLIhda z?|7+x0thnaIYxv4vdr%}WN69Y;E*iDEWFeK4id#Imh$Cbc0UKng2e(hwq$5GGLbpXGbQu60`^=% z0hv2r}FcDYEeL>lJJ%9e?A72$V->~fJ_gLJ4L>34{94bsUwv13+t zg#c`XXlMd>sj?LUQfH|EM{MGjT_pfFSSrAh04oK+B>*t{RRYims)IqoxLN?b0sxF_ z1i){pfS80)B>({d0LE$oXonyWj8Lu>kWL8!&N~IjTpd|!U(=z}MEeFf8Kev?L zy%ghPCkVE8G<%e`2Ct{FgWfx+!vgNscAwj?w0d?Zjh=u9caAnU+=8)GFV*HzE`U{J z#A*xpeeFc4jTP%TYT506_YTgct=;YSvl1PnsbyCuv*x8eO)agrC{4b$CU<*-R}lqD zb%gC5kg1_5ptzeGmHJk9Gmti{$M~!XJsrm8jm$PPMq3LB*~ZEW(A@rxJXUP3p6zaE z=xFNjyW2fVOGo>T7ToQvxLZMDo{ke}ZSlA4=XF=2LyWOpjwbirT zgGMIJ)O(se+kFi%M|O#h>Td{03#inAtsV%})Y9nNeha%)2a~dV%?*v726mYa^)M+aM`gWS7Xe2t`cWqV7j;%;ngWy|&4Hr(K?_|We7 zY1*)!T7tdf0@-!!3Oz@V1-jA_fawzL25t{d9Y;1xTYD>Xf>yXv&q9xI`*8=lhw8oy z9h&1nhb@X~MQv<_j!)`nb9=Y5tBkM)e|sZaX@u3cvsF4o2)fFND?B-U6#t(bgH!0`7*LXdBsrRCf)t#)#Q|OTgpzv_UYU*T!m%*(6Ji zQh$pQ=xk|a>-9`Bjeycdp;G`9jUUZ3aYR%in0g z1Us#z|HP0(%v5V}={eHN?)J5N$-6MOp5^xMcHh#bY{#gEF%b1rVB)M^M-V-ZI=|o3 z%o_BJHm`4cdo63!A-8(SHFUOPSXTtE=0@hx^Wiy~TA*IpCCR0+?RxfhH#)dbJ=>v! z^PI1;yVck3!K2aI$jcp5Q?0Vg=T>05K0T+og}g<;?Q3;oIAS;HIqDRFCLv<5-Cczt5h(WGa|3X%F)vkn$U?QfC8a2spU^T?b!8@xN}S-=QHjcVA=jS<_v5mIouN zvWptJBM?AW*sW*z(R{3v*`CI{G>e%apKb1zGf6&U>KV?};lSMI`q&?`u z+2o3%()E|fnWMWE6D}IKjOhTWPfi^r3J2BIV;_bLgabRt-o^Zor|a8xy907M$N^kz z+|x;7*Mp^;PKyaJ7fly?P0>=4YVHuIYl}84gjm`2MN5gmB}xzO?ND&%f|9~b0t%jd z3M&GCus4jGL|EA^MdgozhSfHN-=&FgpAy2(jy8?H)>`_vm!hK0EyBu}9rG5dW+Mef z_67=y?e!Ft*xP&*TJ4QIEVW}y0iX?Y(*}P_eZ2>5F90_C%_33;%FT*Q%(b`s+mszG z?e%V$BQH76?!%ZEp!sCZ>f*w7~|^^(pPJp7R$o0_Dc zm8vXSu}kv=(twvqsWial5`c~&xGh8V+jSPp^YXPq@31$y+jc5kOfKRT0>I-=JG$vc zox+t|W}daej)^I;Q5s-$Z5UpzV#SAH1$@=^HMBany#OozJH+SqbPp*o4{Xb02VyXY zCF(ZYBEq7a%^M5yZj^b+y@`#Ax#*vW?4|my8o$*>Y;l(I;a7&nDtm*>5yiR*X_r=xGWFWhV|Ml^{u|f9Ud&AbX>2yZMO$=vw3;2`j%$g zHsZ%hNylsR`7u@DvX|$9cQ*TB`#Rdr<|dfGo^IQD3)LB2zywp=yE-@3u4fDLvKrjY z=#jj{qCBv#!9y^ZiVsS~;z%c^X0>@*As<#od0CjS`LQU{Av-)YEG*4~?A(m?j*fsa z3nLV(%meML!zw2aqp5MbyQ#JYiyR$T-w58dSl1MQ)?-~$0NQ}XOaW*k7BG3Bc24Vx zLeP5V%mdv@6USOCQ1pVdOT8j*gkfctvSpQcqDc4NtgI*>#JzSRfjxG9*;47ICy#@; z<*ux(tb%X)^9_!HXedS(6irxj1(uC`bR3TosXev}@ww=&+?R{qT3)uCFmMr4UTfsn z@Jc#v_VKPa?`}R~6n~s>99FtpE`^C5;&arvc6AY#`idb?JQ5yqiVJ;34h^7Q19WN- z!$m?ziL#xp4RYE#jt;ba782Zm3&y-IQ>=Im;<)-1kHtfDet}qI_OFlpQ-zOaQzCKzi#1s00*>@=I<)BhC?f< zNcq;Xxn;%b!>W~^B+zvPI$Yzzm4pAehh-silrFR^vJ@}4e8H*(i|IOwWuax2ZSlNf z+vPR~hLNI`Y~H*Zk;GNNtC?>xuB|L(#kT9_T|aN@JW5*aK%hwJ#yt3+TzUhHc}@kp z27%3D@h!$9MXc;fP*_JhffCnBGz9Lv3d=Q@3bgrF&Zzuqh_j%?Qf#|%9dhPLXi|*( zFfMrWhQQpsQH1N@Vk2o>U&|+96kWxT^`o0eX23@7y8K#Rn6A7-yE6Yn`|f#Ni{FTu$TY#@&9KH(7jyrjvjQ#A?N%#{Kgfk z?;2TYwGXTJ1G*PD?kjRHs2nbiE^th^7ucSVh;Ijflp1&w-YVbyt}-g3wJke~*`W^;s}9g@?kpgVJ!^EK?TdWW^Y>raSORKfTfr zLmF^6!aevsgaL(8#TL55STBlkj30l6-y;{nc?LKW7s2@zaK<6gAxqi0dMy27yy^5$+EY4o+Q%pFt`<17+OC7>5{K^FkheOC%sPE!7|) z!f|R4N_`EK>CkI&9FUqBcoFu`fisL#m+&`8Ow3@$TtvbkaJpu|sg_?kCAnZU@CmDdy_1sKp?=|%094Cj3j`}Ts^wQk3Cyk6va$e! zG4+e3lmRB7L)~O9CAA~}ZCAvl*wT*Q3N2ra>_@$*ztdUh$5fmV;5cW%Q9bQ#z>%JI ze;=)K*23dg{B|17j>CaY?- z23bO@)8NSOz>+S7R!JwuL)9wjQfO86L^__T4Wc8o(H-k97<6z;8g5$?RyUJ29)mVM zrfGxvGV!?!RWRy@tXEhawbeF4(vClve&ly|i7=R;Et-uD0hnr;Lx>9?hD7LJ`udyvuJ%0!}LeF?;mU~)V(Q3Vp@VXNn zAQv2Jy_|rHemYJ6lHSh+oD23-Ij?&VI6|I%c*Z6~ukH*1#E-Wk54DbvXBr*81$jOV zIzk@Ww#G)gE)JJz8ORI$IH%W-^mV!p$u5kFRCVY=&YPEcntDlJ_a)E~wlNKk?5Bi7 zxy2TmLy-0B2YthOWv8#93Lt9D=|&LMe!hr&p&vYGOcS|0{m|p=1e#F$j1P5s7u1im)n|bt>fV=BlIeIHPeSEY zpIr+AlQYyE#qkt9><8g=eMi;AEx?($2+lo32a^Tev;8R`T`0x1fsnC7fVfa`9rBNW z(9>ANsaW%4LS|}dxsj-r8lLgGAmT{A#0H(>!mT zJOo4qj{jD&F8SX2$W|T61w6H(B2W=}7%tuIXnG zk0uuOWV8XyMd%0pbQ=ATtXGgpsdXm+TMNj9)(0^a9c)S&jIn?%=hP$ec`dqM`#R<%k`q; zspHpH;0SH-i;cLeE`sN-lA1~y!Q|8o+8~PUz&WepXxb2^NE=IZwlX$5ZA?>BIs00s zX=552llD`mX@mM6`2zh=wb7|*L%eAmPsZc1F-;k)2Q_s#g>6jdk%(fFng!j3#yDXI z89-L5ZOYKy=n>^)l?I_w9|g{&T^$(-^7nu^4LDx|BmgA{3#XbwTzROo6M8DOYX%&( zcMA!rb+W)-sgmL0TWK9lLOw?_kYUy8J^%z3GEeWNmZ6qHt0d0=hyYMDt%_<<5Q;;8J;64ylH(x1jV1)R#poJGDGDqPB8M zYh~&I1v5Qqy|gbQtk*c65G~bjWHilV`jhI<-(cV@{|WNaZA9EB0C&3M-$;27fdXN- zKS%Twy15Q{1<_$iM^tcD^j0iWlhEQd z(4d6csISEj2n|k#c!_1Q6D!R>Z;$R zwgnL@I8=G)N|o>cgwR2n*N(R$PZvs2drm8}y0fIoV={To4v%Q^#4(Kt<*SFwH2?{P zew@?tBBT+r7Oq2e_4hGACJd0j2E>7TL3JB@oJtuW-v`8rH_hufzXGJo04ajyP8uMK z0C6nKFSQPkBO1i4)&GUgQqXgIf~g>C(uMP4S`BDg1#-cmTJK?KRd|wVEL_em=&B*v zQn6(SzqqwB?@+DfDXn#S@t|@Zf{fmbn$m%#H|Ws&rJ%5au%aNEG);dFZ-Rv4wiK*@E9MaWDk}&Lj9W zA0Lr8v=%Am-o{8r)${i>J?l4dsnpcEAJXcs=IG%cvhLKT)RLl2e+0uYdmL(0nj?!g z-DGSmDHiFFG$(ZEM9hpv?M|&N+MTS{c&PgMJE$#x&M%jM+?UQyKju2AUUbI(CHJwl zw$OHE;}D!%op${~qr<8PsC%#6GLD{0{R4Z90#Qn&uxF0cbuQG8b1sd!AV-xrBS#kfoiM!Lp{T!^%$o+(g`^2oc zA2xBXG;u#`;{L3O`|(+E|Fnra%?}MV-Iz0RpD=NsoE7&&Chj&9_fsbBUp8?+IVdcxlfw7KWgHhn-%v5P2A6#xYHcKAkXHHo4B8y z756a{_ne9Qgo*nDChq5E#r;Dj?x#%L$4%TnXyQ)OBA}7SmNT?BeFE?=f+oFmb0kn{O|6L*)1`%BmnlcnT*zJFHS z{U+{RChm16?mskfkI#y`*TlWk#J$GE{aF+Dp;>WvnYepR+?^)wNB%(EZ!mFpnYdS) zxF0fcAD&g+>rCA1OxztN?)X@mYISn&{i|4Qi8XbQHs94xa%lULpTydHj7#X8_FApF z?iM(-zkv@YGBD0NOtYqfJ243LO|84-4*6M-7yDWeuHaC2WnHKjCi#$u?@k!7)cpjy z|6AV$-3W~ukG})?BeL$(?Qp6eIw21L#li#7aU!o27~psXkO`Fzhg6`13c(xM)%)U9 zOR!*Tv0$%B)#0$rDW2}$9=YSH$ur$O6;g-i-h>YQnhq~~E$Jtk4)JujBEQF?Sr4vj zp{A2F*bk|LMvp^iEYe@${dJ^4RX>6b;n1$s^foqz94b>t2O!PHXsqPzWh6l;+Ri@_ z5jI9vWIR+G>jBQiZ0u#=2pi-2;oqRiQxDq@Sx#LEbfF*f-f};G)in0i(N1El>`nFK?ZNmGkM8Sa-#M%G9b;QjO6@yGw7O4& zBm2&bwjsv%^|a^7<>C9-qSvbwNA~;*Vs_KXPDAg)NXsXv+()>!5vT6yNs!We{Mzl>>vQS+`@aW64(&zZPSn7Dt>#N9h9?##sfl!^PeiTi|!dtg@F z&%+5DY;4m>6L%WT4LF-WYvSHHEAHn^+$T-k51Y7;nYee&iu-FO?#E5s51F{rQw2t= z>z@_(vnK8nChiZJxZh^t9-kHWmrUI0IbK66ZyYmm_nWv6&5AqSk7VGr>4=H@{U+|~ zP27iP#r*{n_roUc!zS)d6ZiXP#hvbkGS>Z&iTjX=yTinNY*yTVY~ucqiF@3{{S9?K zrmYYknicnxChlVgwP`*SAlLniJ46L;DxkeZjfSjR9YxzK7tT}A42)Kz32FF8k=P-{WUj)LP4yyD=u zF7aB-u!_`WR#%aEGRwOEc!s*GD~|tz_1b7t*C5mFKFO6-jXHaK3;4Kd7{>~xr8Ftbd z);awe_Wz*Ok^a7<$wO;uxbA{IG{SiTI5zY_%AM|>ZNm8uaP9#Pst+9V{wm>|0?tED zb^VTRUchUb78JIziu0nHaZKv#OCvQ>qxC0SNpQsf?J+5Q4W|WSD7d; z(S4MpJZYjlX`1wPOq9D!ll?nJAw$QSLWUc9|%5nkeT? zlz(iZ95+$+nkYw1l+T(dlT{gQW5`4~V4{4$MERVF@(U))!zRj|Cdv<*D5I-$OV_Rj zZpoP_-*2MaWuko8MA>Gd{E~_Cn2B<~iSoEkS@fp$Rp^~Yt-gsKw=rHwdDBCM+_#+7 zB*b&IA$qRX0bUS*p)ihLBA=cbgZq_``M6Q^u%s+-Rsf>fkAQ3=9OKC{Rbwv$5;th$Jg4K#E435@3ynfLo%MhiYuX5iIwO+W=)qGzD5YzIp4+}3 z5UM3`@SqF5X^HZ6Js$*)%b@2^0KyC!I}AuAfI8*J0XbqQ^=&|g4D~t%h*9RVfZT7u z`ENj|=jvL;`)t`+1J0Fl5+r1nUlwEHZcJ6HYk<=Q1av4~TgJ8%L~E~j8sALBA?{yQ zOYH`Z+TVpGB&n1^o`(TZM>K)+kAS$qNayt&AP*r^?*;z>$b`mSyd4$2iQmhoaxcM6 z@egTwR_M{zrgld2UeR78ZzXV4KQFki0i;qZML2bUI1LaVAav*w?gm7?3M1$w0MTup zus;fj%RuMzM8{yyPXThsP}A=NQlr(B=$rxMl%WM*2P9`GwHOZ#*bKZ@07CNUGS>pq z33|HKH2`wlK<9Qqsth<0K!)WNF;UZd0U0w$_z6J94RrnvkO{5bgWY(A2dLH_jSNALRtVhVvukUki!Oz-3Le) zicu{^O+N)lrGfir0dW}W{um%==REGm0dX4YbrKM-f!8mn6i!`chL?4%l$?tgeFHWY zLQM@Cs|3!lCBJvC07M-bh0I$3aTs_70C9n`ZVBCh95U1^3Wz$F5OnSX#Ad+xQ$TbJ z$1~t~rF<{586^Aya881NXq~o5I2;G(DuX=7fD%nGu!Foxtfd=eVHxEn}YmM7^ddAmc>Yncq6c0EruF`k#O}4VLg4Ajb{0 zm`j(@ap=8iIUtjo%#?RMAXNrBUMgjPbVxcRoscjJh!ZJY8+QW|&|0|{pZ@GYJ~Q-! zj}sjb(B=68AYBGtPXjVxknleMiE}zC_g4WC_p_;brk4`-8*Jk;K*lxA_r~JkD4078 z@~i?*oq_vCKmd>u_NK!4 zX@LA0Ad^}P@|h=kQvkR^&k9Ye$g4Z@XI6iMQs)dBdxm&vZ9%+F0dmN|>t#R=JM(Sq zJRo(N4tZb3yw}(V%klZBLr@S%NlUm25OH6n+7{~pAq3q^+z7~+EFtVC07zFpuMo|# z>Ci1IOq30D?jg#kyly`q1;jWq{tX}`oxoA}-9Ye2h7tdtsFb0-CIFd0DUwb|`0s!? z4BUSO$RSN;ATkS{x9&2~Sp>+Wp_CI4>MHuPuGN4zH5}f`A;w%l)9c;<95iy?{5b$f zr-6GvAXOS2AhWvxdB_0C0`i*X{RoG?f;C~l`FlWWkfYcAp8*LNaGnFC%aY&jF90&E zS%Uh8t5XJEzXOg-(@*cd!~nk5&cri5saV zt2;^d3*hMU1hMvmB^Yqd6J_A)ZE+=@uBMb;uWf+Pp+hC)Ou!5e|1G59D>S(Ik% z4&a>AT1Szu7j%J+&g(wlP@C#K_hCRB2FPasIjQj?Ilc(US>ON&S{Mf-dQ2cOO1& zv=?80?+JkFU>Kh>^9G|m5q!5DFEUc-8`}dZ`5u;))%X-TJ|$GGmK#V#QpuhKzKGo$ zON2n2zwqJ$X#1mY0xOx0T?|W_WFa$rmT5597goB1_`IJ|m@6a>#^VbAywhMX3fvx~ z3lZf=P*4+mf4X@GKJ!bTmc>Wz8a?$L_;@q_-e{}P6DUuoDb?Y@-toF<(NIPu;hTi& zJ4MkVDSEFfmfmfIo;FLT;C-kAd-3`ok+1Mi(iaL_hy-LfRD9$_3DM_COjTBT&^ELi zLp4xn?bIE_D}zmBg%V?tp72m8uDu?{j5jcd`;R#>yj9(t&9@&-!~qRXgG&nqGwuLz zcMn9H3X~<^%Dsts0q#!s_TnRf@t%mv;;y^y0)?KK(ie$!2O~-keKf`Z;h&LF(baBe{9G3` z)&M&0UEv-!xL=9jlQnyV4J!0@s5C~={jx=4u{{IS_35eiyv)#yaC};xzG*fXj;0`5 zB24cQRr->>!GQ=q6Uuh9DGm6VW_T#o8VOpJK!3gistk zGD!8>hwer-s@}S(cFRU{Q?_>CYm80!nsJ+_qme!*>ThWf-&~^)^qL%)qFlHDkf|N2 z)6vMlo^WKpymdY=&0jI1r&Z72=JC=jAePYjfSSWSL0EmPg6cvaOGRC3YB#X(U>ep; zZ%Cn-c#J`rzE4Sdc%c!gNZAwKFN|H)WnO+L$<%Bmg70d=GL(Jzk|u9#A`tB9(Fh<@ zgNKBoP52448eFAHR4t<5tE!rh%YRARTH=Z;#>y@l4&gF=G@#UDJkg{zE`mSFACC^Y8f&nMs(WGLEFWDT6 zl8FYpBVk{(A&qY*MpGO?qZ^K<2Qf7A-iw!+B=9*!j1Plvb@os&<)Hb4oPDUi&+ya| z6P3c}w$KUq^g==J5%UY(*k;ZaB+!FrA~AFJ1$k35>rcs;dnX^lf}z2lNK_z-1)^yr z;&>v@==Bvb((-;O2Wz!kYDv*6wWRoT*yc@}Hf#dV8T&g;cH(3XZDJna!wirHC4yoc zh{8RgQ;V)0r>#DbB{q_Egl^a_9u%S(1u$S8=x+Gk6HY|KkqzsWAT%!wn0mXIbig%1 zxco0f3fgkwq!X7h$+|Ta*)@PEO)%0C#pmsMSX(&N5fu)mM;kY`4@59V$RctRSCXgJ z5{d?UnyhfWaYrd8rONcv9!1eR3>4-MCQ}$7;Gju+`|+l;9Umbt4M!IjM_@9m+BDOLj&y~CSH`G zKJ_P6AfMtgm7rIQCg9ts$YAgev~@Dwo#eGq_F|BwX$@~DdXf+qCRJStT{eaznCCaZ zZwx@kn(N}$LvKf)p}(m$Hcmxk%if$0<6Et09?o?@n^fcgM-OF%*C+A(94P4 zD~SLj#wxXd1SG^B0VbCMNo>IBRzX_fOB+}kO$C)mykW4%&lf|o$+UTcprD&=exJ~} z&NTQIQUEP{&5`Cvsu-pzvnT=!lrFoypEg2$Jz715_$DLNO9T?J5QYyFDP-S=FYvTS zl0e01l@7CZOn=agQ(;*I1@MHG);OX#+EYo!!=ZuRfspQ>XL3SfmV$2W$1E}(-;U4B z(v-*(O>rAgExbP*B$uQcxbRzgH`H`&SO<}z@MW?P?*eS3-JxPBcs$v2wMCw4Q1ODg z`oqD!(^$Vyd7N|(6-}cKRZ_ie)TOA_ob3alJ!1G)kuPWhI>Lo*OXygyM}EgBuvoD! zWSFJ}doT-)?TbZvl|+)R?+G)6kBB7=&OseQrgMU5#&E*qA!b?y3mxza+j`Y-ohQf* z)UYy_{#s7$(Y6i2cnbZcL98cGASve83MOKGQCfj;Zzk8is1ong=rYL|hG!ZKFv;&> z#%jy4>w<&Kbj|2 z&VaPLP+T=V;~?G>##}2#{P-B0Zvt|s)aZ+Kk(2wQG|S;WSAka`rQyRDm~wI>nP#{L zHn|4DLv2M}PsYt2I2hgBwZV69C=|iK0uvOCBL{rd@Cm4lbj5{^74sqx*H+e~&1pQUrp&?QUK;(-)%3}e z;Vav!TJ>cxc^rM$MbuYbfYhtShb6U>8>b?eOUP#C18^Xmz-}CNxI*YqSV?H}DY@k; z7|44-RQIF~l+m{S*glMv(wD|V+#PB%Uucm>H$WG3R-+Zmiby$qsIl0(Fu53`w)3ra zrb5I_P9i9(Zn=V;m>o^y`Je`E4nf`CI7N~-T?t)X(1qyDgP1nvlLRx(ZdGlHj+HlD zQ9<>ZfN_eAZeyH1t2BgwdDBG9-U=v+y9gv=-kRqE!yp%eW`Tx%6K%%I$MgK@rRhTNl0K^q^sRyfbX2=FB~GVAoekp-bfH15mNHqD`uDEMEmz7Q+t#_ z+P^4pw9;z}>sI|rzb}do2A9N_UHOYvy`8m5uyLt{)&dhQKHLFRal!2bn)F|ADJ1gD zH5GcHRgczhgy_^V#t~0Qq1%}@)DR7MKaaEleqV#$nsRenU8wTgU$oqrW>qsS)ux*` zU3gBS&Lv4!ahrn>RoB0|KF}+u&OJ0y#jV3Sf? +#include +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // AMY + char * pdl = buffer_pdl("eg_protocols.pdl"); + + Connector* c = connector_new(); + printf("configuring...\n"); + + check("config ", connector_configure(c, pdl, "sync")); + check("bind 0 ", connector_bind_native(c, 0)); + check("bind 1 ", connector_bind_passive(c, 1, "127.0.0.1:7000")); + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int send_next = 0; + char msg_buf[32]; + int code; + int i; + for (i = 0; 1; i++) { + itoa(send_next, msg_buf, 10); + + printf("\nround %d. Will send msg `%s` next", i, msg_buf); + + + // batch 0: no messages sent + check("next_batch ", connector_next_batch(c)); + + // batch 1: put 0 + check("put ", connector_put(c, 0, msg_buf, strlen(msg_buf) + 1)); + code = connector_sync(c, 3000); + + if (code == 0) printf("Sent no message!"); + else if (code == 1) { + printf("Sent message `%s`!", msg_buf); + send_next++; + } else { + printf( + "Connector error! %d (%s)\nBreaking loop!\n", + code, connector_error_peek() + ); + break; + } + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/3_nondeterminism/bob.c b/examples/3_nondeterminism/bob.c new file mode 100644 index 0000000000000000000000000000000000000000..b2417f6f54bea8e46041f60e87c83e51b4d14fae --- /dev/null +++ b/examples/3_nondeterminism/bob.c @@ -0,0 +1,44 @@ +#include +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // BOB! + char * pdl = buffer_pdl("eg_protocols.pdl"); + Connector* c = connector_new(); + + printf("configuring...\n"); + check("config ", connector_configure(c, pdl, "sync")); + + check("bind 0 ", connector_bind_active(c, 0, "127.0.0.1:7000")); + check("bind 1 ", connector_bind_native(c, 1)); + + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int msg_len; + const unsigned char * msg; + + int i; + srand(time(NULL)); + for (i = 0; i < 10; i++) { + printf("\nround %d...\n", i); + int random = rand() % 2; + if (random == 0) { + printf("I don't want a message!\n"); + check("sync", connector_sync(c, 1000)); + } else { + printf("I want a message!\n"); + check("get ", connector_get(c, 0)); + check("sync", connector_sync(c, 1000)); + check("read msg", connector_gotten(c, 0, &msg, &msg_len)); + printf("Got message: `%.*s`\n", msg_len, msg); + } + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/2_atomic_swap/make.sh b/examples/3_nondeterminism/make.sh similarity index 100% rename from examples/2_atomic_swap/make.sh rename to examples/3_nondeterminism/make.sh diff --git a/examples/2_atomic_swap/amy.c b/examples/4_atomicity/amy.c similarity index 59% rename from examples/2_atomic_swap/amy.c rename to examples/4_atomicity/amy.c index 89fa2a6d523007c1e1a192b6a765e3d3e8402f7a..82070a549a00f05f95f7aa77fbbfc07dfe4d482c 100644 --- a/examples/2_atomic_swap/amy.c +++ b/examples/4_atomicity/amy.c @@ -5,12 +5,12 @@ #include "../utility.c" int main() { // AMY - char * pdl = buffer_pdl("swap.pdl"); + char * pdl = buffer_pdl("eg_protocols.pdl"); Connector* c = connector_new(); printf("configuring...\n"); - check("config ", connector_configure(c, pdl, "forward_two")); + check("config ", connector_configure(c, pdl, "sync_two")); check("bind 0 ", connector_bind_native(c, 0)); check("bind 1 ", connector_bind_native(c, 1)); check("bind 2 ", connector_bind_passive(c, 2, "127.0.0.1:7000")); @@ -19,14 +19,27 @@ int main() { // AMY check("connect", connector_connect(c, 5000)); int i; - for (i = 0; i < 3; i++) { + int code; + while (1) { printf("\nround %d\n", i); + // batch 0: no messages sent + check("next_batch ", connector_next_batch(c)); + + // batch 1: put 0 and put 1 check("put ", connector_put(c, 0, "one", 3)); check("put ", connector_put(c, 1, "two", 3)); - check("sync", connector_sync(c, 1000)); + code = connector_sync(c, 3000); - printf("Sent both messages!\n"); + if (code == 0) printf("Sent neither message!"); + else if (code == 1) printf("Sent both messages!"); + else { + printf( + "Connector error! %d (%s)\nBreaking loop!\n", + code, connector_error_peek() + ); + break; + } } printf("destroying...\n"); diff --git a/examples/4_atomicity/bob.c b/examples/4_atomicity/bob.c new file mode 100644 index 0000000000000000000000000000000000000000..70689d964ffc3e2340b3dc37371049608dc18840 --- /dev/null +++ b/examples/4_atomicity/bob.c @@ -0,0 +1,73 @@ +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // BOB! + char * pdl = buffer_pdl("eg_protocols.pdl"); + Connector* c = connector_new(); + + printf("configuring...\n"); + check("config ", connector_configure(c, pdl, "sync_two")); + + check("bind 0 ", connector_bind_active(c, 0, "127.0.0.1:7000")); + check("bind 1 ", connector_bind_active(c, 1, "127.0.0.1:7001")); + check("bind 2 ", connector_bind_native(c, 2)); + check("bind 3 ", connector_bind_native(c, 3)); + + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int msg_len; + const unsigned char * msg; + + int i; + + // rounds 0..=2: get both messages + for (i = 0; i <= 2; i++) { + printf("\nround %d\n", i); + + check("get ", connector_get(c, 0)); + check("get ", connector_get(c, 1)); + check("sync", connector_sync(c, 1000)); + + check("read one", connector_gotten(c, 0, &msg, &msg_len)); + printf("Got message one: `%.*s`\n", msg_len, msg); + + check("read two", connector_gotten(c, 1, &msg, &msg_len)); + printf("Got message two: `%.*s`\n", msg_len, msg); + } + // rounds 3..=5: get neither message + for (i = 3; i <= 5; i++) { + printf("\nround %d\n", i); + + //check("get ", connector_get(c, 0)); + //check("get ", connector_get(c, 1)); + check("sync", connector_sync(c, 3000)); + + //check("read one", connector_gotten(c, 0, &msg, &msg_len)); + //printf("Got message one: `%.*s`\n", msg_len, msg); + + //check("read two", connector_gotten(c, 1, &msg, &msg_len)); + //printf("Got message two: `%.*s`\n", msg_len, msg); + } + // round 6: attempt to get just one message + for (i = 6; i <= 6; i++) { + printf("\nround %d\n", i); + + check("get ", connector_get(c, 0)); + //check("get ", connector_get(c, 1)); + check("sync", connector_sync(c, 3000)); + + //check("read one", connector_gotten(c, 0, &msg, &msg_len)); + //printf("Got message one: `%.*s`\n", msg_len, msg); + + check("read two", connector_gotten(c, 1, &msg, &msg_len)); + printf("Got message two: `%.*s`\n", msg_len, msg); + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/4_atomicity/make.sh b/examples/4_atomicity/make.sh new file mode 100644 index 0000000000000000000000000000000000000000..29265a080aec2c404da4a511f2c78a513596c536 --- /dev/null +++ b/examples/4_atomicity/make.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +LIB_PATH="../" +gcc -L $LIB_PATH -lreowolf_rs -Wl,-R$LIB_PATH amy.c -o amy +gcc -L $LIB_PATH -lreowolf_rs -Wl,-R$LIB_PATH bob.c -o bob diff --git a/examples/5_recovery/amy.c b/examples/5_recovery/amy.c new file mode 100644 index 0000000000000000000000000000000000000000..2d045ff9759041aab5e4c479e786336f8379436f --- /dev/null +++ b/examples/5_recovery/amy.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // AMY + char * pdl = buffer_pdl("eg_protocols.pdl"); + + Connector* c = connector_new(); + printf("configuring...\n"); + + check("config ", connector_configure(c, pdl, "sync")); + check("bind 0 ", connector_bind_native(c, 0)); + check("bind 1 ", connector_bind_passive(c, 1, "127.0.0.1:7000")); + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int i; + int code; + while (1) { + printf("\nround %d. I will offer the message \"hello\".\n", i); + connector_next_batch(c); + check("put ", connector_put(c, 0, "hello", 5)); + code = connector_sync(c, 3000); + + if (code == 0) printf("OK! No message was sent!"); + else if (code == 1) printf("OK! My message was received!"); + else if (code == -1) printf("!!! UH OH! The round rolled back! Let's try again"); + else { + printf( + "Something went wrong!\n", + code, connector_error_peek() + ); + break; + } + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/5_recovery/amy.exe b/examples/5_recovery/amy.exe new file mode 100644 index 0000000000000000000000000000000000000000..1a9d5528adc9589bc3e41352c0612c49c6a5eb17 GIT binary patch literal 60240 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�{?qo9tu{9{WyEWimni3)S@_*BQw^B z!fHmmcL0sViq=~e6GIieSA}0?DJL!}JeG_{f+ zu!oTBV{_J((~qaDwtvIlc^}80@8X_Me*pYGf&~IQ`~fy+ll|uaSZ!zVcOF%55)qCo z3Y2Pem3R!S(X4a+W%1twN#uk-pu@lE_yOPxvF^qw6pJgtNH3dH!tG*t=})bAf*Oq} zYA#Y3Uuf3=58o2uIF8SSd-?~JT7`}Pv7&rfoq!eR!!`?8i9HenD_P3QQ>@gUj*5e7 z3gxmn_C0(+6)BrNg3T^2T^TE`gz z__D}Yq}GaZuwT@>kIgUp4@aaFPpE0&DEo>1PUw~`CY6-^bU7)bWN|cxeX`ytD?43A znzymyRVbj-0&;XXE?|v zL73k#x|RJW2hLwSfMaQ5_o?jcg5Q9qLx6B#ik1D6BULW$?%#uXkCnZ`F{&01#P%ei zl!-Z1?Q1D{8(G)fq_9; zh*@~4{Tw8USu6{dgV{k2k_C$eY;@`1zi_TrPK*;zS zm83f7=h;Qxxuv~)FA*w2i-cI2L%`oGm+*Kvp@bta0EgugZd;b}Bo5$V@X(4Z7DY<* z9Ien|%W^7Yvy?|_l~6F$7nU}^RFs*IjP-_$a*^S%l+z#*#;%#tg-yfVtZbRcSqe7& zWU9evIF?TGv4+sXNmh1&K&h~lci})Mic%+GWfuzYC6@9Y-b*eLX(!Sk#L6xf=}M$w z-mL5rk**^AE|6U=(rb_o^&$N(k*+~H`2p;hmR%|Ubr20rfKjS!rGRXV0dNTb%zl*sG=S;=b}U)hN4M_~VjCCrkO#*8_ z-k16)21pw*rm>5UnkB6GXNYqkjUXIY#EQ?UK%C#+M7H|YrWUg(C+u- z!vgM>HlN$Cw0L$X4W57pCx4sjZ^B%vmumGW(_j@Dv04LuUmHRYZYO9btPrWU6lrDDI{PWm}882}m2( zV}90zo(f}A9kb1h(b`Nxwz9GUG`GJ!j}@D%XS?g`+Z)^c?lzCo+}^gM8K?afcMC|& z({TbV&Hm;c?H;AQm9kM=51X%NdjdXF_5wYds_OT+QD&hI479g;l}4^6X4k<)-;dTp zE_3MMhUWHdDtM6&Rn$eH8-)P#@rT9TYF1W zD=XK*+nd{4lT7EA?C`WG4ck$|!yBNLU99If2ig?( zj&^p54s!2m_BD{+mF>+fio2nqg)P@}TX8^N@uA)Er*Xr2Y6$yERbsX6&t!*vP30h%=o`oLa_Tv`>9;*8;bZCwP9X2bf6}7UJIzFkR)$QHR zE;GXF{cR1b(g@qu##ZSNA?S9u9~3Ywa7ni{`q<@pC=J)Qx3($mO)zgiyF$-s#!%zi zuGBX-?LuR;HnA!_k0kQ?cr$GGp>nH@S*>|lR~oanZ*TE<0_@#7)YH+XY_8d``6^zl zq6OUbJJB|>1*z^DW{nZE?WTao?`ef#M6Z?A8na238fDu}N}!{;g{{{!$&_0lG{#x7 zfL5igS=j|^-!KEp_Lk;Gj#M`#619`3r4?Pem2K29#9(eP)$IY^sGb%mdXtVxZ3-Ds z5hWkvswpu9HxSsYXY=k9X!W*l-^RA+U}1xG+it?(O2dS&1B$v@&nLb++-+V@3%f># zic+=fH*arrEA?Ld7N?b6o1fjWe&eR;ntkgGh{l$`&VUJaT1&sjkVDK=YjNp0a+JN% z*XE_sg}L=CxBo`>O|8my%xaheQ9lJH&bH|YqQ_C^_j{UHy`ItP^=)sfWeqyyW)BSw z9c`G_6~U{ifqC?Nj2w;4P_OKgG^DZZdiHiVI=E0h+o6N=24CgI7GIkOKi$`6UOq52 z)+)PvZUwgM({q}dX|xEqeJyTGN9=k%M|Ba%2@#Y1&b&-1;|+XlV19Fs*C(8gMmAs@-f0|TEqacyJ=qs92~l>d zo-I8UD73-H=TPXK2CX(7MO2bEJ8Rd$YCGK^Yr0F%@?d6Fc2PsO2Lk8{H|kk_G#~3= zwkP11X5k5PZ}Ud!Npg>|Cmf{XFYwhrYgtClqVOhZ54zBsTv=4Q{sQSax?A9I(Zpp; z2S|O=b(AO^w0Rr$VaPx@u!HPf_=h~bt@TECK)Qn*z{SRyUJ`p7SW0(VIKW&qUFl4LmHh zV@?5}6~1Y`zj@m>587S;Z1x*Oqzsgs6q%T7Z}Yb*JDS_JxnYjH5ig1qZwUUE;O zPB9mKkH}u8@2c^mR$`+Qn{}nX!~;V+I(|Le1Wc{GrG51Vm~X@8O)x|q$yWzJQ62yb zx;9^XBkWU0^1F9p<5+fp<3f zVf#AT&Zb6~zn*U0c@xzcUBCoW+`Bq9)~;uZ^0MmPP3V!l#Ns@#uiis2n2HZd#o|aO zre?KzS|A@*MtNCq*!)-&>5v^BniiJjL3VD!dPhgVoP`;RRpfzoZpJDn52LYRySuTr z28$dWxUB)aYq72=0IkQmrU0}7ie z32Uyvve6hF$4|)A9!ozbn~UDc$8ynI7nCh03_OIC&l>qNypr}Ce7x(;yPeM%#h)S^ zhm}rCrr_8iK1YpfPZ#m1uNVTwBjG`(c+gkm&;aT)K&J*VJS23KDBJ1TAg8V4=s?>) zK!R)Wz?j!%k`=E(98bUEv3Q8i$6_z4i_Lq}vW##54@GVhprRrUDxqVY3O$LNf2Csy z9=O>eKs<=sK~K84r|$P*=vUbMb&Ku<9MA^x-&JT0hgMLL1zXDImK9IP9~)PEhCo*n z$X4URlY{@hmt_%ilrFL?wiGYCc;TvrOXxX@Wszl-ZOOc1+r>5qrjepbHgDc_Na88r z<;=GP&sLVPV%yd8u9>%G9wn`IAW)>VE)V{m3$KMS&nahDAh201z9slc87o@>3hQVm zP~uvNhQOUyZn@$@fi~aD87;UR;w&t&6x*(wM=S(SqGPWDt4lz~u>vTImH=hmJUx5y zf;>q!18oV%u<95~B?jkD807{4^svmp7kI??f(t;HDppa)c91-P7ghZE+Rt8yUc{R5 z*JAno!UgzifxpRcTk;QEAU@@J3v4~(2=Kaon!;IVUoW0&SGQ7Wv~-brmZbPKhP~?E zn`+WKdwXlP`d6+jvVhU&fmXymL#zr}*I&I(J-o4woMN2AnD+37z}!?P!gUy8BWXNe z%O_zJUB!^~qeCP!U?X>3el4e`D^G~L1+_s{iBxyECt2M`x=N$kWD!}xVa4ml%8H}cgHXh_s%OHkF(G*(?5|n|Ykaj&1F!kQ9 z$XYsNLwQK5c_D_q{CBSZKWl)_a?v}Q&>;t%^XKq`D^%Y#veIfFR?h>v7dq}PaxbhH zDvmC6jJX%u9+imi1b>zqcnhOd{_wX>8{_{sov)))h3;18`sxief0p|Ea}&CnUg8Cz z8*%>;FLUd)U}_2vhH-+@aNQtN7UpEdn6sw3@Ja`I(=fQc3FfkX+MCVsP89xsldg1pNCcl~JR1?m5==gy{wV~;eXfbvpAVcRV zH2|FWdANTPI5oI+9ex3+BQsFOF~&GaK$;iw@FS5(kz1-kLP#*D2BFk9L76VS7AF9S z&%leYe+HZ(+`5FnMaprWQgr;&c^(`WaG;(%d9DZK$ayqIpDkqPq5MhUjL$%aeqM-I ze&JVV`P}KVX|D57{w{E8&V%zJa5~R}^9FDN=fQEn)JPkod7$H33CPztgygP{DB)=L zUiNJbLO5%Hb6P6}9PCgeQZH&aq7;7VtwC^RkN*ae+EnLt4d{%XN5UX*4$pv7Ex&S0 za=~aYCaebbPD*N*`h{BpP%Vos5Uk*;mS34AFt=VyWdR0b>KAJ%157}Ny2)HhYFGZ- z%7{y`r44_}wR|!nrBT8y||*pQ8iF?R%X z$fCIBNl8;&_XEeJ;xJXKq7+HE2xW{#Rjtw}A+%~Ht7^3dSwgE*;K=U)lP-l;Nhiij z)hg*yXjL7FbUalXL`P^NIIyo^(!r5599t9pVkT`o3~hWu(+2fr;kGRk?7PO?I0$u+*2)NLc)9E>0y=BAZx=nnR;r7EhJ&#gDYAFu+4M8BV zkcVtTuRfK-PY8JXOc+WzP(rgh&7Orkq{Dwl$vK?9`p4W}MqY$xwr8*@xYV}zG~l8w z%$qr?J&yv1C=^>N@z>ZEs-8cF9HD3Yn3|8Yx}sG(bf73{Why^Pt(Oz|qMuT|jF(z3 z7r@i@Q|Z^;2OJ>}UXt1!3MRT|Cl9rbkY@@V%F+0($n$wk9@@6XM!PN!a_~MikQe%K zPOTp~gXlUWyU=ZnXs9}LA^z57o}ylItos`12-}zfNA^>~q1<8%`4D9N`bFO`uk7&E zR{=z=In@lJ+Rs;zFWL(~FegVYPe1fJ0|Gg@{W$RmKuwATIQy zmexbn#t3Ix8POn@)4-8qR8mQ%<8k~FDzEzNN)V`-q3$S-w%|ptPTJnmj2S5KqT-X@u-2 zP-!8Lb4qy#>xa~)TxRqyUhE}6I&t$honj5ED1+Tf5N~z_Ht*e-;{dr0r8Ec;`U7Z; zX_U?S`6_UX&H8q1V?xu9gP0jE)i$03RM-Z!yYW(O<3)fWDD+c_zXfv~AIJO+UgS(W zjtQK4*GxFl#ty?UgjR`SLESl>hMPMLbdboq#JJkv)-=ysCl3Kpf#biKY)qGVN*wp* znQ&lIl{epfGtnTeh%vl?4scY+v^dgMZK%8GJ0bo$oBSOY)i%ceM16+_4KZ%0(&?el zPyNkgH8bm{-c6-u#_`=;bABB9F8B0wq<${e^fQ2;CKmQ&v;oXT=x6GAkYv4-OiHag z0oYnVoS2}+s18?@zXQBRgP1jc3*=bH%c_6gPOsFsPi2{M_IwS5Nl?+_R4yV^dnH-R zw7pVYabUO-y~zda0&iJr^-4{v=w3=sytYQyERyu@^i<6PsUP4LUJ`|AIQksNOHnOI z2IKX1G)8NgX>C<%tOAk=jgd}_m#VQfz!4go!XJ~`*rI8JKWxOQx(I%EmDE(y04A;( zv_YKPfD=%0G;N4dq>ZIU@sOIGHm0bl)W#*6HmGkJFI5|xHEmGeBmL@^I-7TB+7NGw z$1mgYvoTE>tQ$3rMoKvYj9x95FJ9t z7j#ss)3vb|%ANfxz@_rC999iq*Qy*7s4t6Fc4~QQL~Z31a6~ItBCEjDlhzvmg0NoW zd_uI;aU-K?9_~-7FMor9v-~>bjpI=EOykB6NO=%}0%5m5L-aJdxeoa?K_nef@r4j7 zXTVtjNGFag=`H9c!C}V6wh;1=McoQgS8zGiKX1n}H3=l;k{2NjQ!Q|~OShj- z07Bmw&>?>ZNZbH zFLaiIp4%Nv1tCr+?(=CiplKDz1(#~Q4?wG8B$>j(<$eM^H54PsAgJJIW!|M)@8eqQ z^x%iec?dFk18PbamON-3dcPDY)p)&6;&6{{3eSqLcS{^NA)rHV>jC4uOV!~R*DB$t zCtGwRwWo9f^#4YOL~*Z_hn_nXTc~%NE%?I{2QCnBK8?TT>mG?iYms6;+8F7mdj7tq zXZ;YDN=>ahO+KWRDSOUSZ-sVdDO@iF?(o zxPQsSou1nnYFd{waUU~rubCD12Ta^;Chn(A+#fV?-#jbspEq%*!OU3qQzq_TGI4j! ziu+*`_j8!}joimg-0wGW_s)v@r%l`^Ox(!_Fvzp%Qzq_#S#dvP;+`{cA2V^k*TlVJ zR^0D1aX)S1e$>SMqbBa1v*JE#;(p4+o%~*-=I=If@0%6(kD0iSo4C_VYvev?;!ZzT z0vgR$(z|#obKF4__Y)@WhfUn$Chmi?;=bR+eayt2R&B<*_n5d3&5HYwiThC#_fZq~ z_nWvMoE7&wOx%x{xF0leZ!>WpofY>%6ZZ#9+=oou{U+{*X2m^a;(pk~ebB^xn~D43 zS#gh>xF0fckDIt}GI4)kR^0nc+z*<#cbd4bG;u#NEAHJU?n5T-9VYG-ChkXP#l6$S zebB@`VB$X4#C>d5+&fI%`%K(jChjj|M+^ecxGMem6SLypX5!vy;=b9${aF+D@mX=F z)s3u$T+4KrxYwAtKW*ZEYF6C6ChlGncc+Q_kv|dl1`~IeiF<{K`(YFJ)3d6(%fx-N ziMzwZ9Use6+e_{Qegms5v8E2v=DYey7Hxm>GgzBXa0#6=o>>w&v@e0jObm?kE|cd_ za1w)1-_p8U?vPJ_yx7-*a0QpTE9*kN;N(LdzB^&SQuh<+{I|XfS_h39uP=kV13MqI z%Qw}2i~6A(>IG0N`Z8T7^GbmMu3rP@}%69FjT3 zQ=RRRJFc2MGd#II_ZD>M*K|1jv!tJBI>fKT75P0L&3f=$3pK5gb)Whv8e_Kr=QJ9N z^jCPkjx?z1N6;Z0+LfBx#zr;$kZly;Nd3@!!Q0E24SevDHb&|fHbz!tyi^;4%NhXseR`Nz@qNPd`i8gx{En( zJ?(jNdH6oI==CZ^xu;jB%dGA4O)s;yw$dat%cJfVUPZmdIOoQ7%0j|Auck4{eG?Ut zr3y9nwz&IE+yf@=RVMD=FwHx3?ti*=SNnVC|G74;tAJsMHl=aHc&RPuLLWR2&Q*`A z`r%_#0UfD%tzK_S^J`SfswHf!GHIR$JlV>^5;hI$nwQ-BRIR=(?o}r4P80WYsIHNF zkBNJHR@^I1+$&7nCrsS0H*p`F6?dnJyTimiXX1XXiTlv3xL;!8ZZmN|ZQ@R+bYxq| zcBfaVz&tR^n#RK!Mwg$RJ2P<~H*tT!#C_DneQZ|T-^2uDsMp35Chmt#-04>ZMyoq9 zEAHn^+{aAZ51F{%V&XnNEAFqExYO@=4ce$1HF5WwxSyI8cluqMf!D?(ChiAK+}E49 zpPm)>mrdLsFmWF;ad(=y=Vry7&SDwse%Qo)(8S$g;yy7e?k}3SA2M-|o4CKB`eWJ( z@!YJq(@8L6-A7H_`%K*FSJ<+YoM9P1Vf%Jx*yl{#51P1lnz)afxZ7sM{gjFOkcoST ziThC#cgL)_f8WG?(8N7p;(l1?E_bnx!zY<;HKDE|bvo)QGLM&RL8n>^a+C@#lh-sA z&Rf}GkgG@{&+TW1RirMnx(3OUS=Rlz8S1XCr2Y@qtInpbL8jV$5_R8Lqxz83<6Kpv z&cYTt7i7Fl^?F-AZA7K4`j8t(Re4lMU7uPD6|!j!8cX(fsrk!chr;UcW*zly0C*5SOZF#YB3d#eCm1x_~;r_(|HS4NBq8~$wPE7bQkQ85zeE)v4Iig zPIYFRaGn9q9l$~Lfn(nLBAnB}Ij8j|bn^mUrn;+ozG@sLrJkj=c=i4+Aa%~dQDW1Z zdh5u(T%~f?D1YBXIbfn(Wum-PAEPAY8WZJHCdwTq$~7j+H73fNO_ZNAQSLNR-fW`m zHBok%C{qg=_1tHo>@rcl#YEX_qWq$Xa@<7OYoZ)CQ4W|W=S-9bO_T#B$_Gu9J4}>c zHc=ijQSLBNK4hZYX`(z~qI}Rqxzj}Xh>3EaiSlbE%A+RAeJ09dI%PQ%RiSqpE#WQn zxVm^D<&B35xnFfolMuhF4bksv9pD84_*ll+FOeU>Y8}I`gv`f5(FY`D1h`fLqS}vu zY$Y5yVhe~55Oux~kT4*0QA$8kfY_X391@UWK-7_6Kt=%(eb9+gaeV$S)q`)ctIxlP zAiEzp6F?`8iBb;}9qD-r$PWNHVvz6!Kn}|i0_Qh?&;=DpIz@P_LH@k1jTQ8ugSqgQ zKf-|yBlK(K&4B4TTnil4=NFW(21H!}2}lbd>aUCiq#qDn^GZm(HAp=Dr@GU1r!1w* z^Jzfn67o>&YXm`~>X7dcWv&gC&M83R25r2=={WOB(IH}*b96eF0Aj3ZH6W`0Bel_u z-}s=Eu8r$~a}W@!0dVlM7J9D|s?sJRrte{2Gvh2An?vGH#%=3@*=v0cWLjf&d>IbT4;dgA(NTI_x;#~Ys85B2%=Lii7Eahb zfE+f^xs&J^toP%DW2n~yfW$Q&5}j`Va@x>3#{tP1O1%h3pMlqJ0C5;}ScD%9bby|2 zy-NW(VW6`PkSYVtRzTD<1EQuafQ%a?i~w@fK<7h%FbyZzh1YWcFluO>!@!{#M6@8X z+0%d+C43eTb#@TkUk8LF6qcYUc=rij>rI#5m*>&2Z-6)fIbx9TIzVi4juVty0qI03 zN(o3DkP1ksTixw|1hjeqk$n^p#$0*aKS^{9_4*VtZ{-UEp0+Xy8j5l;Rk^ud=jVB;l}_u1(JeSYa|?wLzaUE3BLfGBL=NL1PIxwZmUlM z(r1w8CxDCthvY3{J;`u*H(~*UJZFK^!CP6Chb@N2pg_Iu3jmogSi;4C2>(YdbtND! zL#gWkp-ZRJ0mzUx9%ADss*kWsBIdhqGb zZsd0wwDBpT0|L4{{{%>`R2K*V`Ar<8|YN_fIx8y5j`RMUJ< zEFO-6dE6k+D&TB3aIXUd04ZTlDvVD~V>C9D@&U)IQw~L9$uLF|1I|sr(fufpV7-70 zX{88~0;IwK`71!g%9rZJeNptL0C0t#6>_v_j5DIeU!KkkWpDe*iQhE zv3y=3^1A8LEh-G0J_DUQh%zd#+t0@VG0vWU4+u#oa1?$T2wF9G1z!iwQG?85fQ+FO zNhc)y4?r9S?!N+r8OBTteoH-OptBf|aYHF5AYzqGZAw=)AWjX3w{nOv7jpEv*8>NQ zoaa#o06D5@3|XuXkSdK1L2d`+kO7hf5%sV(y6tVf;R$1WAMH> zFHsuW0?s+Dbrkt}K^N%gybc1#VUXwJfSl4O6W6~5q{h$|M*tbpN?{(1&`|3z)bv}x z=`@sj7LYhffjE}{^#R0T=wIddMfhomr;j9S0nxQe@-zc-!XV*$0Xb+Wl?23Pm>CZc z#30XofOri!Uj(EB9Q0oKFd#XN*B;d!)M|=ZFHACZXb?(0fl@~h>U#bmAfuYbUPh|A zJKUA-Rf71ccrU)xCzJiro|qaBc6BAfd(>2qdfiOO2<_$)>BlvDRUSy=uH@5pz@;xk-)%X-TJ|$GGmg`SNQpxTFzKGouON2n2 zzwlxjw0+UHfR#+g&W9yUvXB`*%QO(|4J%zieBMtf%oP#`<8g(5-f18h1#UOeg@|${ zD5wd(Ki#wgpZTRv%i<$<4W4c7_;@q_-e`-^6DUumDRscZ*GcfYXwgtcCE=Td>N`cz zA}M;WD;DFegq}7_r{I04{d@5GACa%{Ptq3(TZjZ?45;|Xi4vmElbEWkbfax(e}-zH z(E6$iU*9sL2_?oN-QmGdTzfr?8Lxi;=Z`rtyj9(t&9@&-G6Nc%0+$vFX54<@-q;^) zEKrtwEB9V@9xe7p(+cVkj;H!#QS~)9CN}a%?egV!^=`L}`4CeSyZ~7L$e-w20@#hO zO3Lp73UF7trw1PijCV&=7PsAY8z^+gl-@|JD;QC_>7y|Q2>*6>N);b;n?CBpO` zQKdK86YP)RGofrpt5T1zX@&<=E#Xis(MbdyTkZ;8W)Da zQ8uR4dSY(mvToWxR*#pwfLKE718NQ*3Bu~nDyS~>u~gKhrgj4h52Rtu^oA6Q ziDUZ8)O||Q!wZc_Mau5*K4I*tF7xt3Nv38i5qwt@mZ9v$mo#}}6MTAxVyXYqCn~n!kYEWdit(k0VU617=i&O;L)UFiZ9s|i;{^3 zyCPv0-klu$n_8ES)#6+d= zxh-@8?p`S9J;J}xjcw*^K>|H^CK5AePs^K{S^t%cxp(p@EEpQ-jzk5bSRk5aB915W zjHA9HW?J4aAd2A$ zomzD5IBoukEV0?FpnG+pW8v@aa3UIxY*?=Zp<`jH)USnmfk6mj1 zla^FuS3jJWV5B{Y57~9I)^MslDu$A7ZHCz1AHi&(iY&HtC3$KWp;E9Xw}fkm4~fG4 zRHk-t6h-eEP>nyBOkpa(P)vH-hY$4*v|)&LC&4;QF=?YT)WMC_Jx@$_DJ7odL%C!Q z1DVS6)m&P!*G`^kFobGh9O=iXMEXl&epX^VR0n*}6jSN|TrA2^f8QrnAb+oADnTz3 zO<)wGA_Ku&(W=RGSCZF8*@Nkn92nkC^qWCElvH&kblDJ&z@x9n2+@xrPaCATozQ#G zXXsgKjg3x+-soLuTJ-5;67DFI4Sqv9jE}XV)wnSInlL)8y#69vJ2;T+g)@dlhF(r= zUr7X5F_x(XBp^683E*7{B(Vdh8w)9muWev}O@PpRa~wOKOgTPI;yoR`AiQ zj~G7LNRE)o%H$V|A}~HVF1Pj3Zl|wXtBVlPWPf^zKq3~x9DyQjktD#Fe$rvq27d;< zH5HcGkO0SyG-XS*DfLP+9uD>Q^oR5TccxKAxE<)dez=9{_;!3ZmV6vfG{xIgHRQf< zkj5C@j>SNv_cl$RhJ_6^JYV+;@up!T?Fbc1VF;5QR9m&F1`;o*t3MpvGlh{0^~OoR zP|+0XP$kvdL0wyFP1n{R+AZc|6?xj`))A(+BcWrx9{Gl@+ZOLyVxh<2cLlrQR>tI1O9Vx0}NB)`3Q3K~xl8oZ3;^$O+T>wzlw>Rv3z_hG?9l zyTfp$V#J+Kyh2u;8MX{l*wRRa`Xo=eJ38H{oZJ^B&xQ}PN^h8NC*Wfja5K3bO)>EU zn??`8SZ!!smBtMoj6r&j(5B%%p-==<46IbNpB(=~lIVtVy#|48WRV2aV$9nI8v zGTPb~+l#4E4!v>yT7BK9r(5LFG2DW_Z8URP5hv zJ4^y%S4wO=88?`SZ@!mf>XEP=lT=hl-CoxlLm%1;{0a1anp?zJH*;qx@MyVK$Y9W& z28;^_+RYN%-$KVd;z_S@Usq@~&*xY7z=)>a`SY7KZ!?>lD(5U%peOS~1O2PBrq=0)$Spt^ZeyRBo@RzrqUA$_KI~3o&@bqrgkd>v|~{)w8}AC*t0s4^!cLb zQW%8z@+*Its<*7>5gV6WXdgLH=xwUcx-_jpA=7Rukmo<`GD+l_>npTFD$Gg7P|1No02Cv9U|5d40{dgm>@cu)Db^~WZr!)R1^1L{vQ_Nm+}Ar literal 0 HcmV?d00001 diff --git a/examples/5_recovery/bob.c b/examples/5_recovery/bob.c new file mode 100644 index 0000000000000000000000000000000000000000..91371cff82113e6c58d3dd225be6ae6960ca768c --- /dev/null +++ b/examples/5_recovery/bob.c @@ -0,0 +1,65 @@ +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main() { // BOB! + + char * pdl = buffer_pdl("eg_protocols.pdl"); + Connector* c = connector_new(); + + printf("configuring...\n"); + check("config ", connector_configure(c, pdl, "recovery_bob")); + check("bind 0 ", connector_bind_active(c, 0, "127.0.0.1:7000")); + check("bind 1 ", connector_bind_native(c, 1)); + + printf("connecting...\n"); + check("connect", connector_connect(c, 5000)); + + int msg_len; + const unsigned char * msg; + + int i; + char msg_buf[1]; + int code; + char answer; + + for (i = 0; true; i++) { + printf("\nround %d...\n", i); + printf("Should I receive a message? (y/n): "); + scanf(" %c", &answer); + if (answer == 'y') { + printf("OK! Let's receive a message!\n"); + connector_get(c, 0); + } else if (answer == 'n') { + printf("OK! Let's NOT receive a message!\n"); + } else { + printf("Expected (y/n) input!"); + continue; + } + + code = connector_sync(c, 1000); + + // lets see how it went + if (code == 0) { + printf("Success!\n"); + if (answer == 'y') { + check("read ", connector_gotten(c, 0, &msg, &msg_len)); + printf("Got message: `%.*s`\n", msg_len, msg); + } + } else if (code == -1) { + printf("!!! UH OH! The round rolled back! Let's try again\n"); + } else { + printf( + "Something went wrong!\n", + code, connector_error_peek() + ); + break; + } + } + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/5_recovery/bob.exe b/examples/5_recovery/bob.exe new file mode 100644 index 0000000000000000000000000000000000000000..17e9ec8ea6fe2dcfd47e16a5dcb82cccf3d02b28 GIT binary patch literal 60404 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 literal 0 HcmV?d00001 diff --git a/examples/5_recovery/make.sh b/examples/5_recovery/make.sh new file mode 100644 index 0000000000000000000000000000000000000000..29265a080aec2c404da4a511f2c78a513596c536 --- /dev/null +++ b/examples/5_recovery/make.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +LIB_PATH="../" +gcc -L $LIB_PATH -lreowolf_rs -Wl,-R$LIB_PATH amy.c -o amy +gcc -L $LIB_PATH -lreowolf_rs -Wl,-R$LIB_PATH bob.c -o bob diff --git a/examples/6_constraint_solve/THIS IS TODO.txt b/examples/6_constraint_solve/THIS IS TODO.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/examples/6_constraint_solve/main.c b/examples/6_constraint_solve/main.c new file mode 100644 index 0000000000000000000000000000000000000000..dfb5fff5279fd85a2ca37fe175d5d60fceb516b4 --- /dev/null +++ b/examples/6_constraint_solve/main.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include "../../reowolf.h" +#include "../utility.c" + +int main(int arg_c, char * argv[]) { + int index; + if (arg_c != 2) { + printf("Expected one arg: which peer I am in 0..4"); + return 1; + } + index = atoi(argv[1]); + printf("I am peer %d\n", index); + + const char* addrs[] = { + "127.0.0.1:7000", + "127.0.0.1:7001", + "127.0.0.1:7002", + "127.0.0.1:7003", + "127.0.0.1:7004", + "127.0.0.1:7005", + }; + + char * pdl = buffer_pdl("eg_protocols.pdl"); + + Connector* c = connector_new(); + printf("configuring...\n"); + + check("config ", connector_configure(c, pdl, "xor_three")); + int i, j; + int addr_index = 0; + int port = 0; + for (i = 0; i < 4; i++) { + for (j = i+1; j < 4; j++) { + if (i==index) { + printf("ports %d and %d are for a passive channel to peer %d over addr %s\n", port, port+1, j, addrs[addr_index]); + check("bind an ", connector_bind_native(c, port)); + port++; + check("bind a ", connector_bind_active(c, port, addrs[addr_index])); + port++; + } else if (j==index) { + printf("ports %d and %d are for an active channel to peer %d over addr %s\n", port, port+1, i, addrs[addr_index]); + check("bind p ", connector_bind_passive(c, port, addrs[addr_index])); + port++; + check("bind pn ", connector_bind_native(c, port)); + port++; + } + addr_index++; + } + } + check("connect", connector_connect(c, 5000)); + + for (i = 0; i < 4; i++) { + if (i == index) continue; + // another batch + for (j = 0; j < 4; j++) { + + } + } + connector_sync(); + + printf("destroying...\n"); + connector_destroy(c); + printf("exiting...\n"); + free(pdl); + return 0; +} \ No newline at end of file diff --git a/examples/6_constraint_solve/main.exe b/examples/6_constraint_solve/main.exe new file mode 100644 index 0000000000000000000000000000000000000000..6c6966ab381560d5e532f865b648918c94b53cd9 GIT binary patch literal 59413 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 IdB6Do0ga2OZ2$lO literal 0 HcmV?d00001 diff --git a/examples/6_constraint_solve/make.sh b/examples/6_constraint_solve/make.sh new file mode 100644 index 0000000000000000000000000000000000000000..0fc253d99f1b661b85f559df9687262c0c24c2e1 --- /dev/null +++ b/examples/6_constraint_solve/make.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +LIB_PATH="../" +gcc -L $LIB_PATH -lreowolf_rs -Wl,-R$LIB_PATH main.c -o main diff --git a/examples/eg_protocols.pdl b/examples/eg_protocols.pdl new file mode 100644 index 0000000000000000000000000000000000000000..0cf53722a500a19b91dff11ac48aba855c664578 --- /dev/null +++ b/examples/eg_protocols.pdl @@ -0,0 +1,33 @@ +primitive forward(in i, out o) { + while(true) synchronous { + put(o, get(i)); + } +} +primitive sync(in i, out o) { + while(true) synchronous { + if(fires(i)) { + put(o, get(i)); + } + } +} + +primitive sync_two(in ia, in ib, out oa, out ob) { + while(true) synchronous { + if (fires(ia)) { + put(oa, get(ia)); + put(ob, get(ib)); + } + } +} + +composite recovery_bob(in i, out o) { + new sync(i, o); +} + +primitive xor_three(in ai, out ao, in bi, out bo, in ci, out co) { + synchronous { + if (fires(ai)) put(ao, get(ai)); + else if (fires(bi)) put(bo, get(bi)); + else put(co, get(ci)); + } +} \ No newline at end of file diff --git a/examples/forward.pdl b/examples/forward.pdl deleted file mode 100644 index 119899e9aea75cdf6a16a3ab6b3d76dcfacd5b4e..0000000000000000000000000000000000000000 --- a/examples/forward.pdl +++ /dev/null @@ -1,13 +0,0 @@ -primitive forward(in i, out o) { - while(true) synchronous { - put(o, get(i)); - } -} - -primitive forward_two(in ia, in ib, out oa, out ob) { - while(true) synchronous { - put(oa, get(ia)); - put(ob, get(ib)); - } -} - diff --git a/examples/utility.c b/examples/utility.c index c4fb811fd4f52a0c0c53632148c5e35c90bb934b..fecf464f64ae5742fa6a24cd0086f8e7dc07fb8b 100644 --- a/examples/utility.c +++ b/examples/utility.c @@ -12,7 +12,7 @@ void check(const char* phase, int err) { // allocates a buffer! char * buffer_pdl(char * filename) { - FILE *f = fopen("forward.pdl", "rb"); + FILE *f = fopen(filename, "rb"); if (f == NULL) { printf("Opening pdl file returned errno %d!\n", errno); exit(1); diff --git a/reowolf.h b/reowolf.h index d5d491feda2e55a058b56d62adf92463d73db0a5..50ccf082babecad2021b559b794e97a2c5606683 100644 --- a/reowolf.h +++ b/reowolf.h @@ -69,6 +69,12 @@ int connector_connect(Connector *connector, uint64_t timeout_millis); */ void connector_destroy(Connector *connector); +/** + * # Safety + * TODO + */ +int connector_dump_log(Connector *connector); + /** * Resets the error message buffer. * Returns: @@ -138,10 +144,4 @@ int connector_sync(Connector *connector, uint64_t timeout_millis); */ Connector *connector_with_controller_id(ControllerId controller_id); -/** - * # Safety - * TODO - */ -int port_close(Connector *connector, unsigned int _proto_port_index); - #endif /* REOWOLF_HEADER_DEFINED */ diff --git a/src/runtime/connector.rs b/src/runtime/connector.rs index 6b27ba61f760e759a4f6c41bd1308974b2031342..9a3242d99e4ff1b599f822902ad7c4591606488a 100644 --- a/src/runtime/connector.rs +++ b/src/runtime/connector.rs @@ -147,7 +147,7 @@ impl Connector { _ => return Err(()), }; connected.sync_batches.push(SyncBatch::default()); - Ok(connected.sync_batches.len() - 1) + Ok(connected.sync_batches.len() - 2) } pub fn sync(&mut self, timeout: Duration) -> Result { diff --git a/src/runtime/ffi.rs b/src/runtime/ffi.rs index c3c5c989ce49c35441d99a190de50f36590fb33e..d204ece961565af9bd0868440979f2118edff7d6 100644 --- a/src/runtime/ffi.rs +++ b/src/runtime/ffi.rs @@ -278,7 +278,10 @@ pub unsafe extern "C" fn connector_put( /// # Safety /// TODO #[no_mangle] -pub unsafe extern "C" fn connector_get(connector: *mut Connector, proto_port_index: c_uint) -> c_int { +pub unsafe extern "C" fn connector_get( + connector: *mut Connector, + proto_port_index: c_uint, +) -> c_int { let mut b = Box::from_raw(connector); // unsafe! let ret = b.get(proto_port_index.try_into().unwrap()); Box::into_raw(b); // don't drop! @@ -324,11 +327,17 @@ pub unsafe extern "C" fn connector_gotten( /// # Safety /// TODO #[no_mangle] -pub unsafe extern "C" fn port_close(connector: *mut Connector, _proto_port_index: c_uint) -> c_int { - let b = Box::from_raw(connector); // unsafe! - // TODO +pub unsafe extern "C" fn connector_dump_log(connector: *mut Connector) -> c_int { + let mut b = Box::from_raw(connector); // unsafe! + let result = match b.get_mut_logger() { + Some(s) => { + println!("{}", s); + 0 + } + None => 1, + }; Box::into_raw(b); // don't drop! - 0 + result } /// # Safety @@ -354,9 +363,10 @@ pub unsafe extern "C" fn connector_sync(connector: *mut Connector, timeout_milli let mut b = Box::from_raw(connector); // unsafe! let result = match b.sync(Duration::from_millis(timeout_millis)) { Ok(batch_index) => batch_index.try_into().unwrap(), + Err(SyncErr::Timeout) => -1, // timeout! Err(e) => { overwrite_last_error(format!("{:?}", e).as_bytes()); - -1 + -2 } }; Box::into_raw(b); // don't drop!