@node UsecaseMulticast
@section Multicast flooding transmission

Do you need to send single mail message or file to many recipients at
once? For example an update of some program, network participants list
or available files for freqing? But you are not connected directly to
each of them?

@verbatim
   A-------->E---->F    A -> B C E
  / \        |\    ^    C -> H J
 /   \       |  \  |    E -> D F G
v     v      v    \v    D -> G
B     C      D---->G    J -> K
     / \     ^    /     K -> D G
    /   \    |   /
   v     v   v  /
   H     J<->K<-
@end verbatim

NNCP has @ref{Multicast, multicast} packets format, allowing you to
flood transmission of the single packet to multiple recipients.
@strong{A} sends packet to three destinations. @strong{C} sends it to
the two nodes next. @strong{E} sends it to three. Some participants may
receive multiple copies of the same packet, like @strong{D}, @strong{J},
@strong{G}, @strong{F}, but that copies will be just ignored. If
@strong{B} sends packet to single known to him @strong{A}, then that
packet will be distributed among all other multicast area subscribers.

Moreover those multicast packets are encrypted and require key knowledge
for reading. But that does not prevent their relaying! Also you are not
required to know sender's public keys. That way you can easily create
echo-conferences for files or commands (like mail message delivering)
transmission.

Let's create keys for the new multicast area:

@verbatim
$ nncp-cfgnew -area filelists -nocomments
areas: {
  filelists: {
    id: TOU5TKOW4JBIZJBX63D4776C72FMWDAUAUSZNJX4DFOITVYQ5ZQA
    pub: DSHL5O6BK2R3QKJAIJ7BC4UIGE73EC2LJPOV3VTS44KYOTUQYZLA
    prv: AYD5FAA4GDDSAD5N65NJLLFS6TG2NSPQ46KAQO5U722JLVG34SOQ
  }
}
@end verbatim

and send that keypair everybody who wants to read that area.
For intermediaries willing to relay packets on, but that should not read
them, you just need to send area's identity. For example @strong{A} adds
to his configuration:

@verbatim
areas: {
  filelists: {
    id: TOU...
    pub: DSH...
    prv: AYD...
    subs: ["B", "C", "E"]
    incoming: /home/A/areas/filelists
  }
@end verbatim

and @strong{E}, that will be relaying intermediary (as we decided):

@verbatim
areas: {
  filelists: {
    id: TOU...
    subs: ["D", "F", "G"]
  }
@end verbatim

After you distributed the knowledge about @code{nodelist} multicast
area, you can share @ref{FreqIndex, file lists}:

@example
$ nncp-file tree-of-A-20210715.txt.zst area:filelists:
$ nncp-toss -node self
@end example
