input boxes vardef drawnodes(text t) = fixsize(t); forsuffixes s=t: fill bpath.s shifted (1pt, -1pt); unfill bpath.s; drawboxed(s); endfor enddef; def send(suffix s, d)(expr angle, pattern, txt)(suffix v) = path p; p = s.c{(d.c-s.c) rotated angle}..d.c cutbefore bpath.s cutafter bpath.d; drawarrow p dashed pattern; label.v(txt, point 1/2 of p); enddef; beginfig(1); picture direct, indirect; u = 4mm; direct = dashpattern(on 10cm); indirect = evenly; circleit.a(btex Alice etex); circleit.n(btex $N_i$ etex); circleit.p(btex $w_1$ etex); circleit.q(btex $w_2$ etex); circleit.r(btex $w_3$ etex); circleit.m(btex $N_{i+1}$ etex); circleit.b(btex Bob etex); n.c-a.c = b.c-m.c = (5u, 0); q.c-n.c = m.c-q.c = (8u, 0); p.c-q.c = q.c-r.c = (0, 7u); a.e-a.c = n.e-n.c = p.e-p.c = q.e-q.c = r.e-r.c = m.e-m.c = b.e-b.c = (5mm, 0); a.n-a.c = n.n-n.c = p.n-p.c = q.n-q.c = r.n-r.c = m.n-m.c = b.n-b.c = (0, 4mm); drawnodes(a, n, p, q, r, m, b); send(a, n, 0, indirect, "", top); send(n, p, 12, direct, btex $M_{i+1}$ etex, ulft); send(n, q, 12, direct, btex $M_{i+1}$ etex, top); send(n, r, 0, direct, btex $M_{i+1}$ etex, urt); send(p, m, 12, direct, btex $M_{i+1}$ etex, urt); send(q, m, 0, direct, btex $M_{i+1}$ etex, top); send(m, p, 12, direct, btex $Rcpt$ etex, llft); send(p, n, 12, direct, btex $Rcpt$ etex, lrt); send(q, n, 12, direct, btex $Stmt$ etex, bot); send(m, b, 0, indirect, "", top); endfig; end