# `IEC60870.FileService.Receiver`
[🔗](https://github.com/Ultraluv/ex_iec60870/blob/main/lib/iec60870/file_service/receiver.ex#L20)

Accumulator for receiving multi-section / multi-segment files during IEC 60870-5-101/104
file transfers (`CS101_IFileReceiver` in `cs101_file_service.h`).

# `t`

```elixir
@type t() :: %IEC60870.FileService.Receiver{
  ca: non_neg_integer(),
  data: binary(),
  expected_length: non_neg_integer(),
  ioa: non_neg_integer(),
  name: String.t() | nil,
  nof: non_neg_integer(),
  on_finished: (t(), :ok | {:error, term()} -&gt; any()) | nil,
  sections: %{optional(pos_integer()) =&gt; binary()}
}
```

# `new`

```elixir
@spec new(
  non_neg_integer(),
  non_neg_integer(),
  non_neg_integer(),
  non_neg_integer(),
  keyword()
) :: t()
```

# `put_segment`

```elixir
@spec put_segment(t(), pos_integer(), non_neg_integer(), binary()) :: t()
```

Appends a received segment to section `nos` (1-based section number).

# `sections_list`

```elixir
@spec sections_list(t()) :: [binary()]
```

Returns the ordered list of section binaries.

# `to_binary`

```elixir
@spec to_binary(t()) :: binary()
```

Reconstructs the complete file binary in section order (`1..N`).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
