docs: async def _data_channel_flush(self):
          """
          Try to flush buffered data to the SCTP layer.
  
          We wait until the association is established, as we need to know
          whether we are a client or a server to correctly assign an odd/even ID
          to the data channels.
          """
          if self._association_state != self.State.ESTABLISHED:
              return
  
          while self._data_channel_queue and not self._outbound_queue:
              channel, protocol, user_data = self._data_channel_queue.popleft()
  
              # register channel if necessary
              stream_id = channel.id
              if stream_id is None:
                  while self._data_channel_id in self._data_channels:
                      self._data_channel_id += 2
                  stream_id = self._data_channel_id
                  self._data_channels[stream_id] = channel
                  self._data_channel_id += 2
                  channel._setId(stream_id)
  
              # send data
              if protocol == WEBRTC_DCEP:
                  await self._send(stream_id, protocol, user_data)
              else:
                  if channel.maxPacketLifeTime:
                      expiry = time.time() + (channel.maxPacketLifeTime / 1000)
                  else:
                      expiry = None
                  await self._send(stream_id, protocol, user_data,
                                   expiry=expiry,
                                   max_retransmits=channel.maxRetransmits,
                                   ordered=channel.ordered)
                  channel._addBufferedAmount(-len(user_data))