summaryrefslogtreecommitdiffstats
path: root/examples/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'examples/README.md')
-rw-r--r--examples/README.md114
1 files changed, 114 insertions, 0 deletions
diff --git a/examples/README.md b/examples/README.md
new file mode 100644
index 0000000..33d5309
--- /dev/null
+++ b/examples/README.md
@@ -0,0 +1,114 @@
+# Examples
+
+- `reader`: Example of reading DNSTAP from a file and printing it's content, using `dnswire_reader` (unidirectional mode)
+- `writer`: Example of constructing a DNSTAP message and writing it to a file, using `dnswire_writer` (unidirectional mode)
+- `receiver`: Example of receiving a DNSTAP message over a TCP connection and printing it's content, using `dnswire_reader` (bidirectional mode)
+- `sender`: Example of constructing a DNSTAP message and sending it over a TCP connection, using `dnswire_writer` (bidirectional mode)
+- `daemon_sender_uv`: Example of a daemon that will continuously send DNSTAP messages to connected clients (unidirectional mode), using the event engine `libuv` and `dnstap_encode_protobuf` along with `tinyframe` to encode once and send to many
+- `client_receiver_uv`: Example of a client that will receive DNSTAP message from the daemon (unidirectional mode), using the event engine `libuv` and `dnswire_reader` with the buffer push interface
+- `reader_sender`: Example of a reader that read DNSTAP from a file (unidirectional mode) and then sends the DNSTAP messages over a TCP connection (bidirectional mode)
+
+## receiver and sender
+
+These examples uses the way of connecting as implemented in the `fstrm`
+library, the receiver listens for connections by the sender and the sender
+connects to the receiver.
+
+```
+$ ./receiver 127.0.0.1 5353
+socket
+bind
+listen
+accept
+receiving...
+---- dnstap
+identity: sender
+version: 0.1.0
+message:
+ type: MESSAGE
+ query_time: 1574765731.199945162
+ response_time: 1574765731.199945362
+ socket_family: INET
+ socket_protocol: UDP
+ query_address: 127.0.0.1
+ query_port: 12345
+ response_address: 127.0.0.1
+ response_port: 53
+ query_message_length: 27
+ query_message: dns_wire_format_placeholder
+ response_message_length: 27
+ response_message: dns_wire_format_placeholder
+----
+stopped
+```
+
+```
+$ ./sender 127.0.0.1 5353
+socket
+connect
+sending...
+sent, stopping...
+stopped
+```
+
+## daemon_sender_uv and client_receiver_uv
+
+These examples works in the reverse way compared to `receiver` and `sender`,
+and maybe a more traditional way, the daemon listens and accepts connections
+from new clients, and will continuously send messages to established clients
+that are ready to receive them.
+
+```
+$ ./daemon_sender_uv 127.0.0.1 5353
+client 1 connected
+client 1: sending control start and content type
+client 1: sending DNSTAP
+client 1: sending DNSTAP
+client 1 disconnected
+```
+
+```
+$ ./client_receiver_uv 127.0.0.1 5353
+received 42 bytes
+got control start
+got content type DNSTAP
+received 133 bytes
+---- dnstap
+identity: daemon_sender_uv
+version: 0.1.0
+message:
+ type: MESSAGE
+ query_time: 1574257180.95619354
+ response_time: 1574257180.95619490
+ socket_family: INET
+ socket_protocol: UDP
+ query_address: 127.0.0.1
+ query_port: 12345
+ response_address: 127.0.0.1
+ response_port: 53
+ query_message_length: 27
+ query_message: dns_wire_format_placeholder
+ response_message_length: 27
+ response_message: dns_wire_format_placeholder
+----
+received 133 bytes
+---- dnstap
+identity: daemon_sender_uv
+version: 0.1.0
+message:
+ type: MESSAGE
+ query_time: 1574257181.96381443
+ response_time: 1574257181.96381557
+ socket_family: INET
+ socket_protocol: UDP
+ query_address: 127.0.0.1
+ query_port: 12345
+ response_address: 127.0.0.1
+ response_port: 53
+ query_message_length: 27
+ query_message: dns_wire_format_placeholder
+ response_message_length: 27
+ response_message: dns_wire_format_placeholder
+----
+^C
+```