gstreamer/gst/tcp
Sebastian Dröge 5a65f5f3b7 multihandlesink: Use the monotonic clock for detecting timeouts and connection durations
Otherwise real-time clock changes can wrongly trigger timeouts, or not
cause timeouts to happen in time.

Unfortunately real-time clock times still have to be kept track inside
the elements for the statistics. Switching those over to the monotonic
clock would cause behaviour changes from the application point of view.

The statistics are extended with fields with monotonic times though.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/1137>
2021-05-05 16:12:38 +00:00
..
gstmultifdsink.c multihandlesink: Use the monotonic clock for detecting timeouts and connection durations 2021-05-05 16:12:38 +00:00
gstmultifdsink.h Fix FSF address 2012-11-03 23:05:09 +00:00
gstmultihandlesink.c multihandlesink: Use the monotonic clock for detecting timeouts and connection durations 2021-05-05 16:12:38 +00:00
gstmultihandlesink.h multihandlesink: Use the monotonic clock for detecting timeouts and connection durations 2021-05-05 16:12:38 +00:00
gstmultisocketsink.c multihandlesink: Use the monotonic clock for detecting timeouts and connection durations 2021-05-05 16:12:38 +00:00
gstmultisocketsink.h multisocketsink: add GstNetworkMessage event 2015-12-10 12:44:42 +01:00
gstsocketsrc.c tcp: cleanup files 2021-04-20 09:49:23 +00:00
gstsocketsrc.h socketsrc: handle GstNetworkMessage events 2015-12-10 12:44:42 +01:00
gsttcpclientsink.c tcp: Rework client start error handling. 2021-04-22 07:17:06 +00:00
gsttcpclientsink.h tcp: cleanup files 2021-04-20 09:49:23 +00:00
gsttcpclientsrc.c tcp: Rework client start error handling. 2021-04-22 07:17:06 +00:00
gsttcpclientsrc.h tcpclientsrc: Expose connection stats as property 2020-02-28 14:17:34 +02:00
gsttcpelements.c tcp: Rework client start error handling. 2021-04-22 07:17:06 +00:00
gsttcpelements.h tcp: Add helper functions to lookup hostnames and create sockets. 2021-04-20 09:49:23 +00:00
gsttcpplugin.c tcp: allow per feature registration 2021-03-16 17:58:59 +00:00
gsttcpserversink.c tcp: Convert tcpserversink to new helpers. 2021-04-20 09:49:23 +00:00
gsttcpserversink.h Fix FSF address 2012-11-03 23:05:09 +00:00
gsttcpserversrc.c tcp: Convert tcpserversrc to new helpers. 2021-04-20 09:49:23 +00:00
gsttcpserversrc.h tcp: cleanup files 2021-04-20 09:49:23 +00:00
gsttcpsrcstats.c tcpserversrc: Add stats property 2020-05-06 15:25:44 +03:00
gsttcpsrcstats.h tcpserversrc: Add stats property 2020-05-06 15:25:44 +03:00
meson.build tcp: cleanup files 2021-04-20 09:49:23 +00:00
README docs: add examples for tcp elements, also use correct section name. Fixes #564139 2009-03-23 17:03:38 +02:00

This part of the documentation is for the new tcp elements:
- tcpclientsrc
- tcpclientsink
- tcpserversrc
- tcpserversink
                                                                                
TESTS
-----
Use these tests to test functionality of the various tcp plugins

* server: nc -l -p 3000
  client: nc localhost 3000
  everything you type in the server is shown on the client
  everything you type in the client is shown on the server

* server: nc -l -p 3000
  client: gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
  everything you type in the server is shown on the client

* server: nc -l -p 3000
  client: gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000
  everything you type in the client is shown on the server

* server: gst-launch tcpserversrc protocol=none port=3000 ! fdsink fd=2
  client: gst-launch fdsrc fd=1 ! tcpclientsink protocol=none port=3000

* server: gst-launch fdsrc fd=1 ! tcpserversink protocol=none port=3000
  client: gst-launch tcpclientsrc protocol=none port=3000 ! fdsink fd=2
  -> Received first buffer without caps set

TODO
----
- implement DNS resolution

multifdsink
-----------
- operation:
  - client fd gets added when "add" signal gets emitted on multifdsink
  - signal handler creates a GstTCPClient structure, adds it to ->clients,
    and adds the fd to ->fd_hash, then emits client-added
  - client 

  - when a buffer comes in:
    - the _render vmethod puts the buffer on the global queue
    - and increases bytes_to_serve
    - (currently it sets streamheaders, but since this is treated globally
       this is wrong - clients can be at different positions in the stream)

  - when a client issues a write (ie requests data):
    - when using GDP, if no caps sent yet, send caps first, then set caps_sent
    - if streamheader buffers, and we haven't sent yet to this client,
      send current streamheader buffers, then set streamheader_sent
    - send out buffers