aboutsummaryrefslogtreecommitdiff
path: root/src/transport/ws/websocket.h
blob: 1f261067a03de2183ae8ca18e63162315b96b227 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//
// Copyright 2017 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2017 Capitar IT Group BV <info@capitar.com>
//
// This software is supplied under the terms of the MIT License, a
// copy of which should be located in the distribution where this
// file was obtained (LICENSE.txt).  A copy of the license may also be
// found online at https://opensource.org/licenses/MIT.
//

#ifndef NNG_TRANSPORT_WS_WEBSOCKET_H
#define NNG_TRANSPORT_WS_WEBSOCKET_H

// WebSocket transport.  This is used for communication via WebSocket.

NNG_DECL int nng_ws_register(void);

// NNG_OPT_WS_REQUEST_HEADERS is a string containing the
// request headers, formatted as CRLF terminated lines.
#define NNG_OPT_WS_REQUEST_HEADERS "ws:request-headers"

// NNG_OPT_WS_RESPONSE_HEADERS is a string containing the
// response headers, formatted as CRLF terminated lines.
#define NNG_OPT_WS_RESPONSE_HEADERS "ws:response-headers"

// NNG_OPT_WSS_TLS_CONFIG is a pointer to a an nng_tls_config
// object.  This property is only available for wss:// style
// endpoints.  Note that when configuring the object, a hold
// is placed on the TLS configuration.  When retrieving the
// object, no hold is placed, and so the caller must take care
// not to use the configuration object after the endpoint it
// is associated with is removed.  Furthermore, as this is a
// pointer, applications must take care to pass only valid
// data -- incorrect pointer values will lead to undefined
// behavior.
#define NNG_OPT_WSS_TLS_CONFIG "wss:tls-config"

// NNG_OPT_WSS_TLS_CERT_KEY_FILE names a single file that
// contains a certificate and key identifying ourself.  This
// is a write-only value.  Listeners can call this multiple
// times for different keys/certs corresponding to different
// algorithms, whereas clients only get one.  The file must
// contain both cert and key as PEM blocks, and the key must
// not be encrypted.  (If more flexibility is needed, use the
// TLS configuration directly.)  Note that TLS configuration
// cannot be changed if the listener, or any other from the same
// server and port, is already started.
#define NNG_OPT_WSS_TLS_CERT_KEY_FILE "wss:tls-cert-key-file"

// NNG_OPT_WSS_TLS_CA_FILE names a single file that
// contains certificate(s) for a CA, and optinally CRLs.  This
// is a write-only value.  Listeners can call this multiple
// times for different keys/certs corresponding to different
// algorithms, whereas clients only get one.  The file must
// contain certs as PEM blocks, and may contain CRLs as PEM
// as well.  (If more flexibility is needed, use the
// TLS configuration directly.)  Note that TLS configuration
// cannot be changed if the listener, or any other from the same
// server and port, is already started.
#define NNG_OPT_WSS_TLS_CA_FILE "wss:tls-ca-file"

// NNG_OPT_WSS_TLS_AUTH_MODE is a write-only integer (int) option
// that specifies whether the peer is verified or not.  The option
// can take one of the values of NNG_TLS_AUTH_MODE_NONE,
// NNG_TLS_AUTH_MODE_OPTIONAL, or NNG_TLS_AUTH_MODE_REQUIRED.
// The default is NNG_TLS_AUTH_MODE_NONE for listeners, and
// NNG_TLS_AUTH_MODE_REQUIRED for dialers.
#define NNG_OPT_WSS_TLS_AUTH_MODE "wss:tls-auth-mode"

// NNG_OPT_WSS_TLS_SERVER_NAME is a write-only string that can be
// set on dialers to check the CN of the server for a match.  This
// can also affect SNI (server name indication).
#define NNG_OPT_WSS_TLS_SERVER_NAME "wss:tls-server-name"

// NNG_OPT_WSS_TLS_VERIFIED returns a single integer, indicating
// whether the peer was verified or not.  This is a read-only value
// available only on pipes.
#define NNT_OPT_WSS_TLS_VERIFIED "wss:tls-verified"

// These aliases are for WSS naming consistency.
#define NNG_OPT_WSS_REQUEST_HEADERS NNG_OPT_WS_REQUEST_HEADERS
#define NNG_OPT_WSS_RESPONSE_HEADERS NNG_OPT_WS_RESPONSE_HEADERS

NNG_DECL int nng_wss_register(void);

#endif // NNG_TRANSPORT_WS_WEBSOCKET_H