From: Stephen-Seo Date: Wed, 23 Nov 2022 05:17:28 +0000 (+0000) Subject: deploy: b7cd3a00c77c17b709f6e9867edd7c9821f1d7c1 X-Git-Url: https://git.seodisparate.com/stephenseo/static/gitweb.css?a=commitdiff_plain;h=436e1171d8a77000559a3f01cd13a52ff10ed08f;p=UDPConnection deploy: b7cd3a00c77c17b709f6e9867edd7c9821f1d7c1 --- diff --git a/UDPC_8h.html b/UDPC_8h.html index 72e9219..722ac98 100644 --- a/UDPC_8h.html +++ b/UDPC_8h.html @@ -2,8 +2,8 @@ - - + + UDPConnection: src/UDPC.h File Reference @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ +
Typedefs | Functions | Variables
-
-
UDPC.h File Reference
+
UDPC.h File Reference
@@ -86,7 +86,7 @@ $(function() {

Go to the source code of this file.

- @@ -100,22 +100,22 @@ Data Structures

+

Data Structures

struct  UDPC_ConnectionId
 Data identifying a peer via addr, port, and scope_id. More...
union  UDPC_Event::Value
 
- - + -

+

Macros

-#define UDPC_PACKET_MAX_SIZE   8192
+#define UDPC_PACKET_MAX_SIZE   8192
 The maximum size of a UDP packet.
 
+
#define UDPC_DEFAULT_PROTOCOL_ID   1357924680
 
- - - @@ -133,7 +133,7 @@ typedef enum UDPC_EXPORT UDPC_LoggingType 

+

Typedefs

+
typedef struct UDPC_Context * UDPC_HContext
 
+
typedef enum UDPC_EXPORT UDPC_LoggingType UDPC_LoggingType
 
typedef enum UDPC_EXPORT UDPC_AuthPolicy UDPC_AuthPolicy
 A struct containing information related to the type of event. More...
 
- @@ -147,7 +147,7 @@ Functions - @@ -201,9 +201,9 @@ UDPC_EXPORT UDPC_ConnectionId - - - + + + @@ -261,97 +261,97 @@ UDPC_EXPORT UDPC_ConnectionId - - - + - - + + - - - - - - - -

+

Functions

UDPC_EXPORT UDPC_ConnectionId UDPC_create_id (UDPC_IPV6_ADDR_TYPE addr, uint16_t port)
 Creates an UDPC_ConnectionId with the given addr and port. More...
UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_easy (const char *addrString, uint16_t port)
 Creates an UDPC_ConnectionId with the given addr string and port. More...
 
+
UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_hostname (const char *hostname, uint16_t port)
 
UDPC_EXPORT UDPC_HContext UDPC_init (UDPC_ConnectionId listenId, int isClient, int isUsingLibsodium)
UDPC_EXPORT int UDPC_has_connection (UDPC_HContext ctx, UDPC_ConnectionId connectionId)
 Checks if a connection exists to the peer identified by the given connectionId. More...
 
UDPC_EXPORT UDPC_ConnectionIdUDPC_get_list_connected (UDPC_HContext ctx, unsigned int *size)
 Gets a dynamically allocated array of connected peers' identifiers. More...
 
UDPC_EXPORT UDPC_ConnectionIdUDPC_get_list_connected (UDPC_HContext ctx, unsigned int *size)
 Gets a dynamically allocated array of connected peers' identifiers. More...
 
UDPC_EXPORT void UDPC_free_list_connected (UDPC_ConnectionId *list)
 Cleans up a dynamically allocated array of connected peers' identifiers. More...
 
UDPC_EXPORT int UDPC_set_auth_policy (UDPC_HContext ctx, int value)
 Sets how peers are handled regarding public key verification. More...
 
+
UDPC_EXPORT const char * UDPC_atostr_cid (UDPC_HContext ctx, UDPC_ConnectionId connectionId)
 
+
 
UDPC_EXPORT const char * UDPC_atostr (UDPC_HContext ctx, UDPC_IPV6_ADDR_TYPE addr)
 
-UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa (const char *addrStr)
 
+UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa (const char *addrStr)
 addrStr must be a valid ipv6 address or a valid ipv4 address
 
+
UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa_link (const char *addrStr, uint32_t *linkId_out)
 
+
UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_a4toa6 (uint32_t a4_be)
 
+
UDPC_EXPORT int UDPC_is_big_endian ()
 
+
UDPC_EXPORT uint16_t UDPC_no16i (uint16_t i)
 
+
UDPC_EXPORT uint32_t UDPC_no32i (uint32_t i)
 
+
UDPC_EXPORT uint64_t UDPC_no64i (uint64_t i)
 
+
UDPC_EXPORT float UDPC_no32f (float f)
 
+
UDPC_EXPORT double UDPC_no64f (double f)
 
- - + - + - + - + - + - + - + - - - - - - -

+

Variables

UDPC_SILENT
UDPC_SILENT
 Does not log anything.
 
UDPC_ERROR
UDPC_ERROR
 Only log errors.
 
UDPC_WARNING
UDPC_WARNING
 Log errors and warnings.
 
UDPC_INFO
UDPC_INFO
 Log errors, warnings, and info.
 
UDPC_VERBOSE
UDPC_VERBOSE
 Log errors, warning, info, and verbose.
 
UDPC_AUTH_POLICY_FALLBACK =0
UDPC_AUTH_POLICY_FALLBACK =0
 All peers will not be denied regardless of use of public key verification.
 
UDPC_AUTH_POLICY_STRICT
UDPC_AUTH_POLICY_STRICT
 Only peers with public key verification will be allowed.
 
+
 UDPC_ET_NONE
 
+
 UDPC_ET_REQUEST_CONNECT
 
+
 UDPC_ET_REQUEST_DISCONNECT
 
+
 UDPC_ET_CONNECTED
 
+
 UDPC_ET_DISCONNECTED
 
+
 UDPC_ET_FAIL_CONNECT
 
+
 UDPC_ET_GOOD_MODE
 

Detailed Description

-

Public API for UDPConnection.

+

Public API for UDPConnection.

Typedef Documentation

- +

◆ UDPC_AuthPolicy

@@ -362,11 +362,11 @@ Variables
-

Note auth policy will only take effect if public key verification of packets is enabled (if libsodium is enabled).

+

Note auth policy will only take effect if public key verification of packets is enabled (if libsodium is enabled).

- +

◆ UDPC_ConnectionId

@@ -379,11 +379,11 @@ Variables

Data identifying a peer via addr, port, and scope_id.

-

This struct needn't be used directly; use UDPC_create_id(), UDPC_create_id_full(), UDPC_create_id_anyaddr(), or UDPC_create_id_easy() to create one. This struct does not hold dynamic data, so there is no need to free it.

+

This struct needn't be used directly; use UDPC_create_id(), UDPC_create_id_full(), UDPC_create_id_anyaddr(), or UDPC_create_id_easy() to create one. This struct does not hold dynamic data, so there is no need to free it.

- +

◆ UDPC_Event

@@ -396,11 +396,11 @@ Variables

A struct containing information related to the type of event.

-

Note that instances of this struct received from a call to UDPC_get_event() will not store any useful data in its union member variable v (it will only be used internally). Thus, all events received through a call to UDPC_get_event() will contain a valid UDPC_ConnectionId conId that identifies the peer that the event is referring to.

+

Note that instances of this struct received from a call to UDPC_get_event() will not store any useful data in its union member variable v (it will only be used internally). Thus, all events received through a call to UDPC_get_event() will contain a valid UDPC_ConnectionId conId that identifies the peer that the event is referring to.

- +

◆ UDPC_EventType

@@ -413,7 +413,7 @@ Variables

An enum describing the type of event.

-

Note that only the following values will be presented when using UDPC_get_event()

- +

◆ UDPC_PacketInfo

@@ -439,13 +439,13 @@ Variables

Data representing a received/sent packet.

-

If data is NULL or dataSize is 0, then this packet is invalid.

+

If data is NULL or dataSize is 0, then this packet is invalid.

Warning
This struct must be free'd with a call to UDPC_free_PacketInfo to avoid a memory leak.

Function Documentation

- +

◆ UDPC_add_whitelist_pk()

@@ -472,14 +472,14 @@ Variables

Adds a public key to the whitelist.

-

By default the whitelist is empty and any peer regardless of key will not be denied connection.

-

This function adds one public key to the whitelist. If the whitelist is not empty, then all peers that do not have the matching public key will be denied connection.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

By default the whitelist is empty and any peer regardless of key will not be denied connection.

+

This function adds one public key to the whitelist. If the whitelist is not empty, then all peers that do not have the matching public key will be denied connection.

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
The size of the whitelist on success, zero otherwise
- +

◆ UDPC_clear_whitelist()

@@ -496,14 +496,14 @@ Variables

Clears the public key whitelist.

-

If the whitelist is empty, then no connections will be denied.

-

If there are keys in the whitelist, then new connections will only be allowed if the peer uses a public key in the whitelist.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

If the whitelist is empty, then no connections will be denied.

+

If there are keys in the whitelist, then new connections will only be allowed if the peer uses a public key in the whitelist.

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
Zero if the context is invalid or libsodium is not enabled, non-zero if the whitelist was successfully cleared
- +

◆ UDPC_client_initiate_connection()

@@ -536,7 +536,7 @@ Variables

Initiate a connection to a server peer.

-

Note that this function does nothing on a server context.

+

Note that this function does nothing on a server context.

Parameters
@@ -548,7 +548,7 @@ Variables - +

◆ UDPC_create_id()

@@ -575,12 +575,12 @@ Variables

Creates an UDPC_ConnectionId with the given addr and port.

-

port should be in native byte order (not network/big-endian). This means that there is no need to convert the 16-bit value to network byte order, this will be done automatically by this library when necessary (without modifying the value in the used UDPC_ConnectionId).

+

port should be in native byte order (not network/big-endian). This means that there is no need to convert the 16-bit value to network byte order, this will be done automatically by this library when necessary (without modifying the value in the used UDPC_ConnectionId).

Returns
An initialized UDPC_ConnectionId
- +

◆ UDPC_create_id_anyaddr()

@@ -597,12 +597,12 @@ Variables

Creates an UDPC_ConnectionId with the given port.

-

The address contained in the returned UDPC_ConnectionId will be zeroed out (the "anyaddr" address). port should be in native byte order (not network/big-endian).

+

The address contained in the returned UDPC_ConnectionId will be zeroed out (the "anyaddr" address). port should be in native byte order (not network/big-endian).

Returns
An initialized UDPC_ConnectionId
- +

◆ UDPC_create_id_easy()

@@ -629,12 +629,12 @@ Variables

Creates an UDPC_ConnectionId with the given addr string and port.

-

The address string should be a valid ipv6 or ipv4 address. (If an ipv4 address is given, the internal address of the returned UDPC_ConnectionId will be ipv4-mapped ipv6 address.) port should be in native byte order (not network/big-endian).

+

The address string should be a valid ipv6 or ipv4 address. (If an ipv4 address is given, the internal address of the returned UDPC_ConnectionId will be ipv4-mapped ipv6 address.) port should be in native byte order (not network/big-endian).

Returns
An initialized UDPC_ConnectionId
- +

◆ UDPC_create_id_full()

@@ -667,12 +667,12 @@ Variables

Creates an UDPC_ConnectionId with the given addr, scope_id, and port.

-

port should be in native byte order (not network/big-endian).

+

port should be in native byte order (not network/big-endian).

Returns
An initialized UDPC_ConnectionId
- +

◆ UDPC_destroy()

@@ -689,12 +689,12 @@ Variables

Cleans up the UDPC_HContext.

-

If auto updating was enabled for the given context, it will gracefully stop the thread before cleaning up the context.

+

If auto updating was enabled for the given context, it will gracefully stop the thread before cleaning up the context.

Warning
This function must be called after a UDPC_HContext is no longer used to avoid memory leaks.
- +

◆ UDPC_disable_threaded_update()

@@ -721,7 +721,7 @@ Variables
- +

◆ UDPC_drop_connection()

@@ -754,7 +754,7 @@ Variables

Drops an existing connection to a peer.

-

Note that UDPC will send a disconnect packet to the peer before removing the internal connection data handling the connection to that peer.

+

Note that UDPC will send a disconnect packet to the peer before removing the internal connection data handling the connection to that peer.

Parameters
ctxThe context to initiate a connection from
@@ -766,7 +766,7 @@ Variables - +

◆ UDPC_enable_threaded_update()

@@ -783,7 +783,7 @@ Variables

Enables auto updating on a separate thread for the given UDPC_HContext.

-

By default, the update interval is set to 8 milliseconds.

+

By default, the update interval is set to 8 milliseconds.

Parameters
ctxThe UDPC context
@@ -794,7 +794,7 @@ Variables - +

◆ UDPC_enable_threaded_update_ms()

@@ -832,7 +832,7 @@ Variables
- +

◆ UDPC_free_list_connected()

@@ -858,7 +858,7 @@ Variables
- +

◆ UDPC_free_PacketInfo()

@@ -875,11 +875,11 @@ Variables

Frees a UDPC_PacketInfo.

-

Internally, the member variable UDPC_PacketInfo::data will be free'd and set to NULL and UDPC_PacketInfo::dataSize will be set to 0 if the given packet is valid.

+

Internally, the member variable UDPC_PacketInfo::data will be free'd and set to NULL and UDPC_PacketInfo::dataSize will be set to 0 if the given packet is valid.

- +

◆ UDPC_get_auth_policy()

@@ -896,13 +896,13 @@ Variables

Gets how peers are handled regarding public key verification.

-

If libsodium is enabled and the auth policy is "strict", then peers attempting to connect will be denied if they do not have public key verification enabled. Otherwise if the auth policy is "fallback", then peers will not be denied a connection regardless of whether or not they use public key verification of packets.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

If libsodium is enabled and the auth policy is "strict", then peers attempting to connect will be denied if they do not have public key verification enabled. Otherwise if the auth policy is "fallback", then peers will not be denied a connection regardless of whether or not they use public key verification of packets.

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
The current auth policy (see UDPC_AuthPolicy) , or zero on fail
- +

◆ UDPC_get_event()

@@ -929,7 +929,7 @@ Variables

Gets a recorded event.

-

See UDPC_EventType for possible types of a UDPC_Event.

+

See UDPC_EventType for possible types of a UDPC_Event.

Parameters
ctxThe context to enable auto updating for
@@ -941,14 +941,14 @@ Variables - -

◆ UDPC_get_list_connected()

+ +

◆ UDPC_get_list_connected()

ctxThe UDPC context
- + @@ -968,7 +968,7 @@ Variables

Gets a dynamically allocated array of connected peers' identifiers.

-

Note that an additional element is appended to the array that is initialized with all fields to zero.

+

Note that an additional element is appended to the array that is initialized with all fields to zero.

Warning
One must call UDPC_free_list_connected() with the returned array to clean up data to avoid a memory leak
Parameters
UDPC_EXPORT UDPC_ConnectionId* UDPC_get_list_connected UDPC_EXPORT UDPC_ConnectionId * UDPC_get_list_connected ( UDPC_HContext  ctx,
@@ -981,7 +981,7 @@ Variables - +

◆ UDPC_get_logging_type()

@@ -998,7 +998,7 @@ Variables

Gets the logging type of the UDPC context.

-

See UDPC_LoggingType for possible values.

+

See UDPC_LoggingType for possible values.

Parameters
@@ -1009,7 +1009,7 @@ Variables - +

◆ UDPC_get_max_queued_size()

@@ -1025,12 +1025,12 @@ Variables

Gets the size limit of a connection's queue of queued packets.

-

Note that a call to this function does not use any locks, as the limit is known at compile time and is the same for all UDPC connections.

+

Note that a call to this function does not use any locks, as the limit is known at compile time and is the same for all UDPC connections.

Returns
The size limit of a connection's queue
- +

◆ UDPC_get_protocol_id()

@@ -1047,8 +1047,8 @@ Variables

Gets the protocol id of the UDPC context.

-

UDPC uses the protocol id by prefixing every sent packet with it. Other UDPC instances will only accept packets with the same protocol id.

-

One can use UDPC_set_protocol_id() to change it.

+

UDPC uses the protocol id by prefixing every sent packet with it. Other UDPC instances will only accept packets with the same protocol id.

+

One can use UDPC_set_protocol_id() to change it.

Parameters
ctxThe UDPC context
@@ -1059,7 +1059,7 @@ Variables - +

◆ UDPC_get_queue_send_current_size()

@@ -1076,12 +1076,12 @@ Variables

Gets the size of the data structure holding queued packets.

-

Note that a UDPC context holds a different data structure per established connection that holds a limited amount of packets to send. If a connection's queue is full, it will not be removed from the main queue that this function (and UDPC_queue_send()) uses. The queue that this function refers to does not have an imposed limit as it is implemented as a thread-safe linked list (data is dynamically stored on the heap) and access to this data structure is faster than accessing a connection's internal queue. Also note that this queue holds packets for all connections this context maintains. Thus if one connection has free space, then it may partially remove packets only destined for that connection from the queue this function refers to.

+

Note that a UDPC context holds a different data structure per established connection that holds a limited amount of packets to send. If a connection's queue is full, it will not be removed from the main queue that this function (and UDPC_queue_send()) uses. The queue that this function refers to does not have an imposed limit as it is implemented as a thread-safe linked list (data is dynamically stored on the heap) and access to this data structure is faster than accessing a connection's internal queue. Also note that this queue holds packets for all connections this context maintains. Thus if one connection has free space, then it may partially remove packets only destined for that connection from the queue this function refers to.

Returns
The size of the queue
- +

◆ UDPC_get_queued_size()

@@ -1114,13 +1114,13 @@ Variables

Gets the size of a connection's queue of queued packets.

-

Note that a UDPC context holds a queue per established connection that holds a limited amount of packets to send. This function checks a connection's internal queue, but must do so after locking an internal mutex (a call to UDPC_update() will lock this mutex, regardless of whether or not the context is using threaded update).

-

If exists is a non-null pointer to an int, and a connection to a peer identified by id exists, then the value of exists will be set to non-zero, otherwise a non-existing peer will set the value of exists to zero.

+

Note that a UDPC context holds a queue per established connection that holds a limited amount of packets to send. This function checks a connection's internal queue, but must do so after locking an internal mutex (a call to UDPC_update() will lock this mutex, regardless of whether or not the context is using threaded update).

+

If exists is a non-null pointer to an int, and a connection to a peer identified by id exists, then the value of exists will be set to non-zero, otherwise a non-existing peer will set the value of exists to zero.

Returns
The size of a connection's queue
- +

◆ UDPC_get_received()

@@ -1151,7 +1151,7 @@ Variables
- +

◆ UDPC_get_receiving_events()

@@ -1168,7 +1168,7 @@ Variables

Returns non-zero if the UDPC context will record events.

-

Events that have ocurred can by polled by calling UDPC_get_event()

+

Events that have ocurred can by polled by calling UDPC_get_event()

Parameters
ctxThe UDPC context
@@ -1179,7 +1179,7 @@ Variables - +

◆ UDPC_has_connection()

@@ -1217,7 +1217,7 @@ Variables
- +

◆ UDPC_has_whitelist_pk()

@@ -1244,12 +1244,12 @@ Variables

Checks if a public key is in the whitelist.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
Non-zero if the given public key is in the whitelist
- +

◆ UDPC_init()

@@ -1296,7 +1296,7 @@ Variables
- +

◆ UDPC_init_threaded_update()

@@ -1329,7 +1329,7 @@ Variables

Creates an UDPC_HContext that holds state for connections that auto-updates via a thread.

-

By default, the update interval is set to 8 milliseconds.

+

By default, the update interval is set to 8 milliseconds.

Parameters
ctxThe UDPC context
@@ -1344,7 +1344,7 @@ Variables - +

◆ UDPC_init_threaded_update_ms()

@@ -1398,7 +1398,7 @@ Variables
- +

◆ UDPC_is_valid_context()

@@ -1419,7 +1419,7 @@ Variables
- +

◆ UDPC_queue_send()

@@ -1464,7 +1464,7 @@ Variables

Queues a packet to be sent to the specified peer.

-

Note that there must already be an established connection with the peer. If a packet is queued for a peer that is not connected, it will be dropped and logged with log-level warning. A client can establish a connection to a server peer via a call to UDPC_client_initiate_connection() or UDPC_client_initiate_connection_pk(). A server must receive an initiate-connection-packet from a client to establish a connection (sent by previously mentioned UDPC_client_initiate_* functions).

+

Note that there must already be an established connection with the peer. If a packet is queued for a peer that is not connected, it will be dropped and logged with log-level warning. A client can establish a connection to a server peer via a call to UDPC_client_initiate_connection() or UDPC_client_initiate_connection_pk(). A server must receive an initiate-connection-packet from a client to establish a connection (sent by previously mentioned UDPC_client_initiate_* functions).

Parameters
listenIdThe addr and port to listen on (contained in a UDPC_ConnectionId)
@@ -1478,7 +1478,7 @@ Variables - +

◆ UDPC_remove_whitelist_pk()

@@ -1505,12 +1505,12 @@ Variables

Removes a public key from the whitelist.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
Non-zero if a public key was removed
- +

◆ UDPC_set_accept_new_connections()

@@ -1548,7 +1548,7 @@ Variables
- +

◆ UDPC_set_auth_policy()

@@ -1575,13 +1575,13 @@ Variables

Sets how peers are handled regarding public key verification.

-

If libsodium is enabled and the auth policy is "strict", then peers attempting to connect will be denied if they do not have public key verification enabled. Otherwise if the auth policy is "fallback", then peers will not be denied a connection regardless of whether or not they use public key verification of packets.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

If libsodium is enabled and the auth policy is "strict", then peers attempting to connect will be denied if they do not have public key verification enabled. Otherwise if the auth policy is "fallback", then peers will not be denied a connection regardless of whether or not they use public key verification of packets.

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
The previous auth policy (see UDPC_AuthPolicy), or zero on fail
- +

◆ UDPC_set_libsodium_key_easy()

@@ -1608,13 +1608,13 @@ Variables

Sets the public/private keys used for packet verification.

-

This function is almost identical with UDPC_set_libsodium_keys, except it will utilize libsodium to generate the associated public key with the given private key.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

This function is almost identical with UDPC_set_libsodium_keys, except it will utilize libsodium to generate the associated public key with the given private key.

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
Non-zero if keys were successfully set, zero if context is invalid or libsodium is not enabled
- +

◆ UDPC_set_libsodium_keys()

@@ -1647,14 +1647,14 @@ Variables

Sets public/private keys used for packet verification.

-

If keys are not set and packet verification is enabled, for each new connection new keys will be generated then used. The auto-generated keys used will be unique per connection. Conversely if keys are set, then new connections will use the given keys.

-

Note that connections established before calling this function will not use the given keys.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

If keys are not set and packet verification is enabled, for each new connection new keys will be generated then used. The auto-generated keys used will be unique per connection. Conversely if keys are set, then new connections will use the given keys.

+

Note that connections established before calling this function will not use the given keys.

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
Non-zero if keys were successfully set, zero if context is invalid or libsodium is not enabled
- +

◆ UDPC_set_logging_type()

@@ -1681,7 +1681,7 @@ Variables

Sets the logging type of the UDPC context.

-

See UDPC_LoggingType for possible values.

+

See UDPC_LoggingType for possible values.

Parameters
ctxThe context to send a packet on
@@ -1693,7 +1693,7 @@ Variables - +

◆ UDPC_set_protocol_id()

@@ -1720,7 +1720,7 @@ Variables

Sets the protocol id of the UDPC context.

-

UDPC uses the protocol id by prefixing every sent packet with it. Other UDPC instances will only accept packets with the same protocol id.

+

UDPC uses the protocol id by prefixing every sent packet with it. Other UDPC instances will only accept packets with the same protocol id.

Parameters
ctxThe UDPC context
@@ -1732,7 +1732,7 @@ Variables - +

◆ UDPC_set_receiving_events()

@@ -1759,7 +1759,7 @@ Variables

Sets whether or not UDPC will record events.

-

Events that have ocurred can by polled by calling UDPC_get_event()

+

Events that have ocurred can by polled by calling UDPC_get_event()

Parameters
ctxThe UDPC context
@@ -1771,7 +1771,7 @@ Variables - +

◆ UDPC_unset_libsodium_keys()

@@ -1788,12 +1788,12 @@ Variables

Removes set keys if any used for packet verification.

-

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

+

Note that public key verification will not occur if it is not enabled during the call to UDPC_init().

Returns
Zero if context is invalid or libsodium is not enabled
- +

◆ UDPC_update()

@@ -1810,7 +1810,7 @@ Variables

Updates the context.

-

Updating consists of:

    +

    Updating consists of:

    • Checking if peers have timed out
    • Handling requests to connect to server peers as a client
    • Sending packets to connected peers
    • @@ -1818,15 +1818,15 @@ Variables
    • Calculating round-trip-time (RTT) to peers
    • Checking if a peer has not received a packet and queuing that packet to be resent (this is done by using an ack)
    -

    If auto updating was enabled for the context, then there is no need to call this function.

    -

    Note that the context can only receive at most one packet per call to update (due to the fact that UDPC created its UDP socket to not block on receive checks). This is why it is expected to either call this function several times a second (such as in a game's update loop), or have auto-updating enabled via UDPC_init_threaded_update(), UDPC_init_threaded_update_ms(), UDPC_enable_threaded_update(), or UDPC_enable_threaded_update_ms().

    +

    If auto updating was enabled for the context, then there is no need to call this function.

    +

    Note that the context can only receive at most one packet per call to update (due to the fact that UDPC created its UDP socket to not block on receive checks). This is why it is expected to either call this function several times a second (such as in a game's update loop), or have auto-updating enabled via UDPC_init_threaded_update(), UDPC_init_threaded_update_ms(), UDPC_enable_threaded_update(), or UDPC_enable_threaded_update_ms().

diff --git a/UDPC_8h_source.html b/UDPC_8h_source.html index 1da0baa..7428b1b 100644 --- a/UDPC_8h_source.html +++ b/UDPC_8h_source.html @@ -2,8 +2,8 @@ - - + +UDPConnection: src/UDPC.h Source File @@ -19,8 +19,8 @@
ctxThe UDPC context
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ +
-
-
UDPC.h
+
UDPC.h
-Go to the documentation of this file.
1 
-
11 #ifndef UDPC_CONNECTION_H
-
12 #define UDPC_CONNECTION_H
-
13 
-
14 #ifndef DOXYGEN_SHOULD_SKIP_THIS
-
15 
-
16 // Determine platform macros
-
17 # define UDPC_PLATFORM_WINDOWS 1
-
18 # define UDPC_PLATFORM_MAC 2
-
19 # define UDPC_PLATFORM_LINUX 3
-
20 # define UDPC_PLATFORM_UNKNOWN 0
-
21 
-
22 # if defined _WIN32
-
23 # define UDPC_PLATFORM UDPC_PLATFORM_WINDOWS
-
24 # elif defined __APPLE__
-
25 # define UDPC_PLATFORM UDPC_PLATFORM_MAC
-
26 # elif defined __linux__
-
27 # define UDPC_PLATFORM UDPC_PLATFORM_LINUX
-
28 # else
-
29 # define UDPC_PLATFORM UDPC_PLATFORM_UNKNOWN
-
30 # endif
-
31 
-
32 #endif // DOXYGEN_SHOULD_SKIP_THIS
-
33 
-
34 // OS-based networking macros
-
35 #if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS
-
36 # include <winsock2.h>
-
37 # ifdef UDPC_PLATFORM_MINGW
-
38 # include <ws2ipdef.h>
-
39 # include <in6addr.h>
-
40 # else
-
41 # include <Ws2ipdef.h>
-
42 # include <In6addr.h>
-
43 # endif
-
44 
-
45 # ifndef DOXYGEN_SHOULD_SKIP_THIS
-
46 
-
47 # define UDPC_CLEANUPSOCKET(x) closesocket(x)
-
48 # define UDPC_SOCKETTYPE SOCKET
-
49 # define UDPC_IPV6_SOCKADDR_TYPE SOCKADDR_IN6
-
50 # define UDPC_IPV6_ADDR_TYPE IN6_ADDR
-
51 # define UDPC_IPV6_ADDR_SUB(addr) addr.u.Byte
-
52 # define UDPC_SOCKET_RETURN_ERROR(socket) (socket == INVALID_SOCKET)
-
53 
-
54 # endif // DOXYGEN_SHOULD_SKIP_THIS
-
55 
-
56 #elif UDPC_PLATFORM == UDPC_PLATFORM_MAC || UDPC_PLATFORM == UDPC_PLATFORM_LINUX
-
57 # include <fcntl.h>
-
58 # include <netinet/in.h>
-
59 # include <sys/socket.h>
-
60 # include <unistd.h>
-
61 
-
62 # ifndef DOXYGEN_SHOULD_SKIP_THIS
-
63 
-
64 # define UDPC_CLEANUPSOCKET(x) close(x)
-
65 # define UDPC_SOCKETTYPE int
-
66 # define UDPC_IPV6_SOCKADDR_TYPE struct sockaddr_in6
-
67 # define UDPC_IPV6_ADDR_TYPE struct in6_addr
-
68 # define UDPC_IPV6_ADDR_SUB(addr) addr.s6_addr
-
69 # define UDPC_SOCKET_RETURN_ERROR(socket) (socket <= 0)
-
70 
-
71 # endif // DOXYGEN_SHOULD_SKIP_THIS
-
72 
-
73 #else
-
74 # ifndef DOXYGEN_SHOULD_SKIP_THIS
-
75 # define UDPC_CLEANUPSOCKET(x) ((void)0)
-
76 # endif // DOXYGEN_SHOULD_SKIP_THIS
-
77 #endif
-
78 
-
79 // other defines
-
81 #define UDPC_PACKET_MAX_SIZE 8192
-
82 #define UDPC_DEFAULT_PROTOCOL_ID 1357924680 // 0x50f04948
-
83 
-
84 #ifndef DOXYGEN_SHOULD_SKIP_THIS
-
85 
-
86 // other defines continued
-
87 
-
88 # ifndef UDPC_LIBSODIUM_ENABLED
-
89 # ifndef crypto_sign_PUBLICKEYBYTES
-
90 # define crypto_sign_PUBLICKEYBYTES 1
-
91 # endif
-
92 # ifndef crypto_sign_SECRETKEYBYTES
-
93 # define crypto_sign_SECRETKEYBYTES 1
-
94 # endif
-
95 # ifndef crypto_sign_BYTES
-
96 # define crypto_sign_BYTES 1
-
97 # endif
-
98 # endif
-
99 
-
100 # if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS
-
101 # define UDPC_EXPORT __declspec(dllexport)
-
102 # else
-
103 # define UDPC_EXPORT
-
104 # endif
-
105 
-
106 #endif // DOXYGEN_SHOULD_SKIP_THIS
-
107 
-
108 #ifdef __cplusplus
-
109 # include <cstdint>
-
110 extern "C" {
-
111 #else
-
112 # include <stdint.h>
-
113 #endif
-
114 
-
116 struct UDPC_Context;
-
117 typedef struct UDPC_Context *UDPC_HContext;
-
118 
-
119 typedef enum UDPC_EXPORT UDPC_LoggingType {
- - - - - -
131  UDPC_DEBUG
-
132 } UDPC_LoggingType;
-
133 
-
136 typedef enum UDPC_EXPORT UDPC_AuthPolicy {
- - -
141  // Used internally to get max size of enum
-
142  UDPC_AUTH_POLICY_SIZE
- -
144 
-
153 typedef struct UDPC_EXPORT UDPC_ConnectionId {
-
154  UDPC_IPV6_ADDR_TYPE addr;
-
155  uint32_t scope_id;
-
156  uint16_t port;
- -
158 
-
167 typedef struct UDPC_EXPORT UDPC_PacketInfo {
-
172  // id is stored at offset 8, size 4 (uint32_t) even for "empty" PktInfos
-
173  char *data;
-
184  uint32_t flags;
-
192  uint32_t id;
-
202  uint16_t dataSize;
-
203  uint16_t rtt;
- - - -
209 
-
229 typedef enum UDPC_EXPORT UDPC_EventType {
-
230  UDPC_ET_NONE,
-
231  UDPC_ET_REQUEST_CONNECT,
-
232  UDPC_ET_REQUEST_DISCONNECT,
-
233  UDPC_ET_CONNECTED,
-
234  UDPC_ET_DISCONNECTED,
-
235  UDPC_ET_FAIL_CONNECT,
-
236  UDPC_ET_GOOD_MODE,
-
237  UDPC_ET_BAD_MODE
- -
239 
-
250 typedef struct UDPC_EXPORT UDPC_Event {
-
251  UDPC_EventType type;
-
252  UDPC_ConnectionId conId;
-
253  union Value {
-
254  int dropAllWithAddr;
-
255  int enableLibSodium;
-
256  } v;
- -
258 
-
269 UDPC_EXPORT UDPC_ConnectionId UDPC_create_id(UDPC_IPV6_ADDR_TYPE addr, uint16_t port);
-
270 
-
278 UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_full(UDPC_IPV6_ADDR_TYPE addr, uint32_t scope_id, uint16_t port);
-
279 
-
289 UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_anyaddr(uint16_t port);
-
290 
-
301 UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_easy(const char *addrString, uint16_t port);
-
302 
-
303 UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_hostname(const char *hostname, uint16_t port);
-
304 
-
321 UDPC_EXPORT UDPC_HContext UDPC_init(UDPC_ConnectionId listenId, int isClient, int isUsingLibsodium);
-
341 UDPC_EXPORT UDPC_HContext UDPC_init_threaded_update(
-
342  UDPC_ConnectionId listenId,
-
343  int isClient,
-
344  int isUsingLibsodium);
-
364 UDPC_EXPORT UDPC_HContext UDPC_init_threaded_update_ms(
-
365  UDPC_ConnectionId listenId,
-
366  int isClient,
-
367  int updateMS,
-
368  int isUsingLibsodium);
-
369 
-
379 UDPC_EXPORT int UDPC_enable_threaded_update(UDPC_HContext ctx);
-
390 UDPC_EXPORT int UDPC_enable_threaded_update_ms(UDPC_HContext ctx, int updateMS);
-
399 UDPC_EXPORT int UDPC_disable_threaded_update(UDPC_HContext ctx);
-
400 
-
406 UDPC_EXPORT int UDPC_is_valid_context(UDPC_HContext ctx);
-
407 
-
417 UDPC_EXPORT void UDPC_destroy(UDPC_HContext ctx);
-
418 
-
441 UDPC_EXPORT void UDPC_update(UDPC_HContext ctx);
-
442 
- -
454  UDPC_HContext ctx,
-
455  UDPC_ConnectionId connectionId,
-
456  int enableLibSodium);
-
457 
-
476 UDPC_EXPORT void UDPC_queue_send(UDPC_HContext ctx, UDPC_ConnectionId destinationId,
-
477  int isChecked, const void *data, uint32_t size);
-
478 
-
495 UDPC_EXPORT unsigned long UDPC_get_queue_send_current_size(UDPC_HContext ctx);
-
496 
-
513 UDPC_EXPORT unsigned long UDPC_get_queued_size(UDPC_HContext ctx, UDPC_ConnectionId id, int *exists);
-
514 
-
523 UDPC_EXPORT unsigned long UDPC_get_max_queued_size();
-
524 
-
531 UDPC_EXPORT int UDPC_set_accept_new_connections(UDPC_HContext ctx, int isAccepting);
-
532 
-
544 UDPC_EXPORT void UDPC_drop_connection(UDPC_HContext ctx, UDPC_ConnectionId connectionId, int dropAllWithAddr);
-
545 
-
555 UDPC_EXPORT int UDPC_has_connection(UDPC_HContext ctx, UDPC_ConnectionId connectionId);
-
556 
-
571 UDPC_EXPORT UDPC_ConnectionId* UDPC_get_list_connected(UDPC_HContext ctx, unsigned int *size);
-
572 
- -
578 
-
590 UDPC_EXPORT uint32_t UDPC_get_protocol_id(UDPC_HContext ctx);
-
591 
-
602 UDPC_EXPORT uint32_t UDPC_set_protocol_id(UDPC_HContext ctx, uint32_t id);
-
603 
-
612 UDPC_EXPORT UDPC_LoggingType UDPC_get_logging_type(UDPC_HContext ctx);
-
613 
-
623 UDPC_EXPORT UDPC_LoggingType UDPC_set_logging_type(UDPC_HContext ctx, UDPC_LoggingType loggingType);
-
624 
-
633 UDPC_EXPORT int UDPC_get_receiving_events(UDPC_HContext ctx);
-
634 
-
644 UDPC_EXPORT int UDPC_set_receiving_events(UDPC_HContext ctx, int isReceivingEvents);
-
645 
-
657 UDPC_EXPORT UDPC_Event UDPC_get_event(UDPC_HContext ctx, unsigned long *remaining);
-
658 
-
665 UDPC_EXPORT UDPC_PacketInfo UDPC_get_received(UDPC_HContext ctx, unsigned long *remaining);
-
666 
-
674 UDPC_EXPORT void UDPC_free_PacketInfo(UDPC_PacketInfo pInfo);
-
675 
-
693 UDPC_EXPORT int UDPC_set_libsodium_keys(UDPC_HContext ctx, const unsigned char *sk, const unsigned char *pk);
-
694 
-
708 UDPC_EXPORT int UDPC_set_libsodium_key_easy(UDPC_HContext ctx, const unsigned char *sk);
-
709 
-
718 UDPC_EXPORT int UDPC_unset_libsodium_keys(UDPC_HContext ctx);
-
719 
-
735 UDPC_EXPORT int UDPC_add_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk);
-
736 
-
745 UDPC_EXPORT int UDPC_has_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk);
-
746 
-
755 UDPC_EXPORT int UDPC_remove_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk);
-
756 
-
771 UDPC_EXPORT int UDPC_clear_whitelist(UDPC_HContext ctx);
-
772 
-
787 UDPC_EXPORT int UDPC_get_auth_policy(UDPC_HContext ctx);
-
788 
-
803 UDPC_EXPORT int UDPC_set_auth_policy(UDPC_HContext ctx, int value);
-
804 
-
805 UDPC_EXPORT const char *UDPC_atostr_cid(UDPC_HContext ctx, UDPC_ConnectionId connectionId);
-
806 
-
807 UDPC_EXPORT const char *UDPC_atostr(UDPC_HContext ctx, UDPC_IPV6_ADDR_TYPE addr);
-
808 
-
809 // =============================================================================
-
810 // Helpers
-
811 
-
813 UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa(const char *addrStr);
-
814 
-
815 UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa_link(const char *addrStr, uint32_t *linkId_out);
-
816 
-
817 UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_a4toa6(uint32_t a4_be);
-
818 
-
819 UDPC_EXPORT int UDPC_is_big_endian();
-
820 UDPC_EXPORT uint16_t UDPC_no16i(uint16_t i);
-
821 UDPC_EXPORT uint32_t UDPC_no32i(uint32_t i);
-
822 UDPC_EXPORT uint64_t UDPC_no64i(uint64_t i);
-
823 UDPC_EXPORT float UDPC_no32f(float f);
-
824 UDPC_EXPORT double UDPC_no64f(double f);
-
825 
-
826 #ifdef __cplusplus
-
827 }
-
828 #endif
-
829 #endif
+Go to the documentation of this file.
1
+
11#ifndef UDPC_CONNECTION_H
+
12#define UDPC_CONNECTION_H
+
13
+
14#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
15
+
16// Determine platform macros
+
17# define UDPC_PLATFORM_WINDOWS 1
+
18# define UDPC_PLATFORM_MAC 2
+
19# define UDPC_PLATFORM_LINUX 3
+
20# define UDPC_PLATFORM_UNKNOWN 0
+
21
+
22# if defined _WIN32
+
23# define UDPC_PLATFORM UDPC_PLATFORM_WINDOWS
+
24# elif defined __APPLE__
+
25# define UDPC_PLATFORM UDPC_PLATFORM_MAC
+
26# elif defined __linux__
+
27# define UDPC_PLATFORM UDPC_PLATFORM_LINUX
+
28# else
+
29# define UDPC_PLATFORM UDPC_PLATFORM_UNKNOWN
+
30# endif
+
31
+
32#endif // DOXYGEN_SHOULD_SKIP_THIS
+
33
+
34// OS-based networking macros
+
35#if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS
+
36# include <winsock2.h>
+
37# ifdef UDPC_PLATFORM_MINGW
+
38# include <ws2ipdef.h>
+
39# include <in6addr.h>
+
40# else
+
41# include <Ws2ipdef.h>
+
42# include <In6addr.h>
+
43# endif
+
44
+
45# ifndef DOXYGEN_SHOULD_SKIP_THIS
+
46
+
47# define UDPC_CLEANUPSOCKET(x) closesocket(x)
+
48# define UDPC_SOCKETTYPE SOCKET
+
49# define UDPC_IPV6_SOCKADDR_TYPE SOCKADDR_IN6
+
50# define UDPC_IPV6_ADDR_TYPE IN6_ADDR
+
51# define UDPC_IPV6_ADDR_SUB(addr) addr.u.Byte
+
52# define UDPC_SOCKET_RETURN_ERROR(socket) (socket == INVALID_SOCKET)
+
53
+
54# endif // DOXYGEN_SHOULD_SKIP_THIS
+
55
+
56#elif UDPC_PLATFORM == UDPC_PLATFORM_MAC || UDPC_PLATFORM == UDPC_PLATFORM_LINUX
+
57# include <fcntl.h>
+
58# include <netinet/in.h>
+
59# include <sys/socket.h>
+
60# include <unistd.h>
+
61
+
62# ifndef DOXYGEN_SHOULD_SKIP_THIS
+
63
+
64# define UDPC_CLEANUPSOCKET(x) close(x)
+
65# define UDPC_SOCKETTYPE int
+
66# define UDPC_IPV6_SOCKADDR_TYPE struct sockaddr_in6
+
67# define UDPC_IPV6_ADDR_TYPE struct in6_addr
+
68# define UDPC_IPV6_ADDR_SUB(addr) addr.s6_addr
+
69# define UDPC_SOCKET_RETURN_ERROR(socket) (socket <= 0)
+
70
+
71# endif // DOXYGEN_SHOULD_SKIP_THIS
+
72
+
73#else
+
74# ifndef DOXYGEN_SHOULD_SKIP_THIS
+
75# define UDPC_CLEANUPSOCKET(x) ((void)0)
+
76# endif // DOXYGEN_SHOULD_SKIP_THIS
+
77#endif
+
78
+
79// other defines
+
81#define UDPC_PACKET_MAX_SIZE 8192
+
82#define UDPC_DEFAULT_PROTOCOL_ID 1357924680 // 0x50f04948
+
83
+
84#ifndef DOXYGEN_SHOULD_SKIP_THIS
+
85
+
86// other defines continued
+
87
+
88# ifndef UDPC_LIBSODIUM_ENABLED
+
89# ifndef crypto_sign_PUBLICKEYBYTES
+
90# define crypto_sign_PUBLICKEYBYTES 1
+
91# endif
+
92# ifndef crypto_sign_SECRETKEYBYTES
+
93# define crypto_sign_SECRETKEYBYTES 1
+
94# endif
+
95# ifndef crypto_sign_BYTES
+
96# define crypto_sign_BYTES 1
+
97# endif
+
98# endif
+
99
+
100# if UDPC_PLATFORM == UDPC_PLATFORM_WINDOWS
+
101# define UDPC_EXPORT __declspec(dllexport)
+
102# else
+
103# define UDPC_EXPORT
+
104# endif
+
105
+
106#endif // DOXYGEN_SHOULD_SKIP_THIS
+
107
+
108#ifdef __cplusplus
+
109# include <cstdint>
+
110extern "C" {
+
111#else
+
112# include <stdint.h>
+
113#endif
+
114
+
116struct UDPC_Context;
+
117typedef struct UDPC_Context *UDPC_HContext;
+
118
+
119typedef enum UDPC_EXPORT UDPC_LoggingType {
+ + + + + +
131 UDPC_DEBUG
+
132} UDPC_LoggingType;
+
133
+
136typedef enum UDPC_EXPORT UDPC_AuthPolicy {
+ + +
141 // Used internally to get max size of enum
+
142 UDPC_AUTH_POLICY_SIZE
+ +
144
+
153typedef struct UDPC_EXPORT UDPC_ConnectionId {
+
154 UDPC_IPV6_ADDR_TYPE addr;
+
155 uint32_t scope_id;
+
156 uint16_t port;
+ +
158
+
167typedef struct UDPC_EXPORT UDPC_PacketInfo {
+
172 // id is stored at offset 8, size 4 (uint32_t) even for "empty" PktInfos
+
173 char *data;
+
184 uint32_t flags;
+
192 uint32_t id;
+
202 uint16_t dataSize;
+
203 uint16_t rtt;
+ + + +
209
+
229typedef enum UDPC_EXPORT UDPC_EventType {
+
230 UDPC_ET_NONE,
+
231 UDPC_ET_REQUEST_CONNECT,
+
232 UDPC_ET_REQUEST_DISCONNECT,
+
233 UDPC_ET_CONNECTED,
+
234 UDPC_ET_DISCONNECTED,
+
235 UDPC_ET_FAIL_CONNECT,
+
236 UDPC_ET_GOOD_MODE,
+
237 UDPC_ET_BAD_MODE
+ +
239
+
250typedef struct UDPC_EXPORT UDPC_Event {
+
251 UDPC_EventType type;
+
252 UDPC_ConnectionId conId;
+
253 union Value {
+
254 int dropAllWithAddr;
+
255 int enableLibSodium;
+
256 } v;
+ +
258
+
269UDPC_EXPORT UDPC_ConnectionId UDPC_create_id(UDPC_IPV6_ADDR_TYPE addr, uint16_t port);
+
270
+
278UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_full(UDPC_IPV6_ADDR_TYPE addr, uint32_t scope_id, uint16_t port);
+
279
+
289UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_anyaddr(uint16_t port);
+
290
+
301UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_easy(const char *addrString, uint16_t port);
+
302
+
303UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_hostname(const char *hostname, uint16_t port);
+
304
+
321UDPC_EXPORT UDPC_HContext UDPC_init(UDPC_ConnectionId listenId, int isClient, int isUsingLibsodium);
+
341UDPC_EXPORT UDPC_HContext UDPC_init_threaded_update(
+
342 UDPC_ConnectionId listenId,
+
343 int isClient,
+
344 int isUsingLibsodium);
+
364UDPC_EXPORT UDPC_HContext UDPC_init_threaded_update_ms(
+
365 UDPC_ConnectionId listenId,
+
366 int isClient,
+
367 int updateMS,
+
368 int isUsingLibsodium);
+
369
+
379UDPC_EXPORT int UDPC_enable_threaded_update(UDPC_HContext ctx);
+
390UDPC_EXPORT int UDPC_enable_threaded_update_ms(UDPC_HContext ctx, int updateMS);
+
399UDPC_EXPORT int UDPC_disable_threaded_update(UDPC_HContext ctx);
+
400
+
406UDPC_EXPORT int UDPC_is_valid_context(UDPC_HContext ctx);
+
407
+
417UDPC_EXPORT void UDPC_destroy(UDPC_HContext ctx);
+
418
+
441UDPC_EXPORT void UDPC_update(UDPC_HContext ctx);
+
442
+ +
454 UDPC_HContext ctx,
+
455 UDPC_ConnectionId connectionId,
+
456 int enableLibSodium);
+
457
+
476UDPC_EXPORT void UDPC_queue_send(UDPC_HContext ctx, UDPC_ConnectionId destinationId,
+
477 int isChecked, const void *data, uint32_t size);
+
478
+
495UDPC_EXPORT unsigned long UDPC_get_queue_send_current_size(UDPC_HContext ctx);
+
496
+
513UDPC_EXPORT unsigned long UDPC_get_queued_size(UDPC_HContext ctx, UDPC_ConnectionId id, int *exists);
+
514
+
523UDPC_EXPORT unsigned long UDPC_get_max_queued_size();
+
524
+
531UDPC_EXPORT int UDPC_set_accept_new_connections(UDPC_HContext ctx, int isAccepting);
+
532
+
544UDPC_EXPORT void UDPC_drop_connection(UDPC_HContext ctx, UDPC_ConnectionId connectionId, int dropAllWithAddr);
+
545
+
555UDPC_EXPORT int UDPC_has_connection(UDPC_HContext ctx, UDPC_ConnectionId connectionId);
+
556
+
571UDPC_EXPORT UDPC_ConnectionId* UDPC_get_list_connected(UDPC_HContext ctx, unsigned int *size);
+
572
+ +
578
+
590UDPC_EXPORT uint32_t UDPC_get_protocol_id(UDPC_HContext ctx);
+
591
+
602UDPC_EXPORT uint32_t UDPC_set_protocol_id(UDPC_HContext ctx, uint32_t id);
+
603
+
612UDPC_EXPORT UDPC_LoggingType UDPC_get_logging_type(UDPC_HContext ctx);
+
613
+
623UDPC_EXPORT UDPC_LoggingType UDPC_set_logging_type(UDPC_HContext ctx, UDPC_LoggingType loggingType);
+
624
+
633UDPC_EXPORT int UDPC_get_receiving_events(UDPC_HContext ctx);
+
634
+
644UDPC_EXPORT int UDPC_set_receiving_events(UDPC_HContext ctx, int isReceivingEvents);
+
645
+
657UDPC_EXPORT UDPC_Event UDPC_get_event(UDPC_HContext ctx, unsigned long *remaining);
+
658
+
665UDPC_EXPORT UDPC_PacketInfo UDPC_get_received(UDPC_HContext ctx, unsigned long *remaining);
+
666
+
674UDPC_EXPORT void UDPC_free_PacketInfo(UDPC_PacketInfo pInfo);
+
675
+
693UDPC_EXPORT int UDPC_set_libsodium_keys(UDPC_HContext ctx, const unsigned char *sk, const unsigned char *pk);
+
694
+
708UDPC_EXPORT int UDPC_set_libsodium_key_easy(UDPC_HContext ctx, const unsigned char *sk);
+
709
+
718UDPC_EXPORT int UDPC_unset_libsodium_keys(UDPC_HContext ctx);
+
719
+
735UDPC_EXPORT int UDPC_add_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk);
+
736
+
745UDPC_EXPORT int UDPC_has_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk);
+
746
+
755UDPC_EXPORT int UDPC_remove_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk);
+
756
+
771UDPC_EXPORT int UDPC_clear_whitelist(UDPC_HContext ctx);
+
772
+
787UDPC_EXPORT int UDPC_get_auth_policy(UDPC_HContext ctx);
+
788
+
803UDPC_EXPORT int UDPC_set_auth_policy(UDPC_HContext ctx, int value);
+
804
+
805UDPC_EXPORT const char *UDPC_atostr_cid(UDPC_HContext ctx, UDPC_ConnectionId connectionId);
+
806
+
807UDPC_EXPORT const char *UDPC_atostr(UDPC_HContext ctx, UDPC_IPV6_ADDR_TYPE addr);
+
808
+
809// =============================================================================
+
810// Helpers
+
811
+
813UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa(const char *addrStr);
+
814
+
815UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_strtoa_link(const char *addrStr, uint32_t *linkId_out);
+
816
+
817UDPC_EXPORT UDPC_IPV6_ADDR_TYPE UDPC_a4toa6(uint32_t a4_be);
+
818
+
819UDPC_EXPORT int UDPC_is_big_endian();
+
820UDPC_EXPORT uint16_t UDPC_no16i(uint16_t i);
+
821UDPC_EXPORT uint32_t UDPC_no32i(uint32_t i);
+
822UDPC_EXPORT uint64_t UDPC_no64i(uint64_t i);
+
823UDPC_EXPORT float UDPC_no32f(float f);
+
824UDPC_EXPORT double UDPC_no64f(double f);
+
825
+
826#ifdef __cplusplus
+
827}
+
828#endif
+
829#endif
UDPC_EXPORT uint32_t UDPC_set_protocol_id(UDPC_HContext ctx, uint32_t id)
Sets the protocol id of the UDPC context.
UDPC_EXPORT int UDPC_clear_whitelist(UDPC_HContext ctx)
Clears the public key whitelist.
UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_anyaddr(uint16_t port)
Creates an UDPC_ConnectionId with the given port.
@@ -366,12 +366,12 @@ $(function() {
UDPC_EXPORT void UDPC_free_PacketInfo(UDPC_PacketInfo pInfo)
Frees a UDPC_PacketInfo.
UDPC_EXPORT void UDPC_update(UDPC_HContext ctx)
Updates the context.
UDPC_AUTH_POLICY_STRICT
Only peers with public key verification will be allowed.
Definition: UDPC.h:140
+
UDPC_EXPORT UDPC_ConnectionId * UDPC_get_list_connected(UDPC_HContext ctx, unsigned int *size)
Gets a dynamically allocated array of connected peers' identifiers.
UDPC_EXPORT UDPC_LoggingType UDPC_set_logging_type(UDPC_HContext ctx, UDPC_LoggingType loggingType)
Sets the logging type of the UDPC context.
UDPC_EXPORT int UDPC_add_whitelist_pk(UDPC_HContext ctx, const unsigned char *pk)
Adds a public key to the whitelist.
UDPC_EXPORT void UDPC_queue_send(UDPC_HContext ctx, UDPC_ConnectionId destinationId, int isChecked, const void *data, uint32_t size)
Queues a packet to be sent to the specified peer.
UDPC_EXPORT unsigned long UDPC_get_max_queued_size()
Gets the size limit of a connection's queue of queued packets.
struct UDPC_EXPORT UDPC_Event UDPC_Event
A struct containing information related to the type of event.
-
UDPC_EXPORT UDPC_ConnectionId * UDPC_get_list_connected(UDPC_HContext ctx, unsigned int *size)
Gets a dynamically allocated array of connected peers' identifiers.
UDPC_EXPORT void UDPC_free_list_connected(UDPC_ConnectionId *list)
Cleans up a dynamically allocated array of connected peers' identifiers.
UDPC_EXPORT UDPC_HContext UDPC_init(UDPC_ConnectionId listenId, int isClient, int isUsingLibsodium)
Creates an UDPC_HContext that holds state for connections.
UDPC_EXPORT UDPC_ConnectionId UDPC_create_id_easy(const char *addrString, uint16_t port)
Creates an UDPC_ConnectionId with the given addr string and port.
@@ -412,7 +412,7 @@ $(function() {
diff --git a/annotated.html b/annotated.html index df6a8f6..73d73a3 100644 --- a/annotated.html +++ b/annotated.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Data Structures @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ +
@@ -62,8 +63,7 @@ $(function() {
-
-
Data Structures
+
Data Structures
Here are the data structures with brief descriptions:
@@ -77,7 +77,7 @@ $(function() {
diff --git a/classes.html b/classes.html index e2ed61a..3909373 100644 --- a/classes.html +++ b/classes.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Data Structure Index @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ +
@@ -62,23 +63,22 @@ $(function() {
-
-
Data Structure Index
+
Data Structure Index
U | V
diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html index 4509c80..f2ede20 100644 --- a/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -2,8 +2,8 @@ - - + + UDPConnection: src Directory Reference @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ +
-
-
src Directory Reference
+
src Directory Reference
- - +

+

Files

file  UDPC.h [code]
file  UDPC.h [code]
 Public API for UDPConnection.
 
diff --git a/doxygen.css b/doxygen.css index ffbff02..2010785 100644 --- a/doxygen.css +++ b/doxygen.css @@ -1,4 +1,4 @@ -/* The standard CSS for doxygen 1.9.1 */ +/* The standard CSS for doxygen 1.9.4 */ body, table, div, p, dl { font: 400 14px/22px Roboto,sans-serif; @@ -228,6 +228,33 @@ a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { color: #4665A2; } +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + /* @end */ dl.el { @@ -235,7 +262,7 @@ dl.el { } ul { - overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ + overflow: visible; } #side-nav ul { @@ -313,6 +340,7 @@ div.line.glow { span.lineno { padding-right: 4px; + margin-right: 9px; text-align: right; border-right: 2px solid #0F0; background-color: #E8E8E8; @@ -439,6 +467,12 @@ img.footer { vertical-align: middle; } +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + /* @group Code Colorization */ span.keyword { @@ -1322,6 +1356,11 @@ dl.section dd { } +#projectrow +{ + height: 56px; +} + #projectlogo { text-align: center; @@ -1337,18 +1376,19 @@ dl.section dd { #projectalign { vertical-align: middle; + padding-left: 0.5em; } #projectname { - font: 300% Tahoma, Arial,sans-serif; + font: 200% Tahoma, Arial,sans-serif; margin: 0px; padding: 2px 0px; } #projectbrief { - font: 120% Tahoma, Arial,sans-serif; + font: 90% Tahoma, Arial,sans-serif; margin: 0px; padding: 0px; } @@ -1487,6 +1527,10 @@ span.emoji { */ } +span.obfuscator { + display: none; +} + .PageDocRTL-title div.toc li.level1 { margin-left: 0 !important; margin-right: 0; @@ -1541,7 +1585,7 @@ tr.heading h2 { #powerTip { cursor: default; - white-space: nowrap; + /*white-space: nowrap;*/ background-color: white; border: 1px solid gray; border-radius: 4px 4px 4px 4px; @@ -1780,6 +1824,10 @@ table.DocNodeLTR { margin-left: 0; } +code.JavaDocCode { + direction:ltr; +} + tt, code, kbd, samp { display: inline-block; diff --git a/files.html b/files.html index c41234a..9acc6cd 100644 --- a/files.html +++ b/files.html @@ -2,8 +2,8 @@ - - + + UDPConnection: File List @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ + @@ -62,8 +63,7 @@ $(function() {
-
-
File List
+
File List
Here is a list of all documented files with brief descriptions:
@@ -75,7 +75,7 @@ $(function() {
diff --git a/functions.html b/functions.html index ce07d71..c708655 100644 --- a/functions.html +++ b/functions.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Data Fields @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ +
@@ -63,29 +64,17 @@ $(function() {
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
diff --git a/functions_vars.html b/functions_vars.html index 7448fc7..f4ce27b 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Data Fields - Variables @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ + @@ -63,29 +64,17 @@ $(function() {
 
diff --git a/globals.html b/globals.html index 39a38bb..a923dce 100644 --- a/globals.html +++ b/globals.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Globals @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ + @@ -64,177 +65,67 @@ $(function() {
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
-

- u -

diff --git a/globals_defs.html b/globals_defs.html index f4c7cee..b2b401d 100644 --- a/globals_defs.html +++ b/globals_defs.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Globals @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ + @@ -63,14 +64,12 @@ $(function() {
 
diff --git a/globals_func.html b/globals_func.html index 86aeb3a..6d25e9e 100644 --- a/globals_func.html +++ b/globals_func.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Globals @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ + @@ -64,138 +65,54 @@ $(function() {
  -

- u -

diff --git a/globals_type.html b/globals_type.html index 9ef8c09..fa96691 100644 --- a/globals_type.html +++ b/globals_type.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Globals @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ + @@ -63,26 +64,16 @@ $(function() {
 
diff --git a/globals_vars.html b/globals_vars.html index f650fc2..b64d326 100644 --- a/globals_vars.html +++ b/globals_vars.html @@ -2,8 +2,8 @@ - - + + UDPConnection: Globals @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ + @@ -63,32 +64,18 @@ $(function() {
 
diff --git a/index.html b/index.html index 0a52389..e108369 100644 --- a/index.html +++ b/index.html @@ -2,8 +2,8 @@ - - + + UDPConnection: UDPConnection @@ -19,8 +19,8 @@
- - +
+
UDPConnection
A network connection implementation over UDP
@@ -30,21 +30,22 @@
- + +/* @license-end */ + @@ -61,17 +62,16 @@ $(function() { -
-
-
UDPConnection
+
+
UDPConnection
diff --git a/jquery.js b/jquery.js index 103c32d..c9ed3d9 100644 --- a/jquery.js +++ b/jquery.js @@ -1,5 +1,5 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0'+ + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ data.children[i].text+''+ makeTree(data.children[i],relPath)+'
  • '; } @@ -36,15 +44,91 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { } return result; } - - $('#main-nav').append(makeTree(menudata,relPath)); - $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + var searchBox; if (searchEnabled) { if (serverSide) { - $('#main-menu').append('
  • '); + searchBox='
    '+ + '
    '+ + '
    '+ + ''+ + '
    '+ + '
    '+ + '
    '+ + '
    '; } else { - $('#main-menu').append('
  • '); + searchBox='
    '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '' + '' + '
    '; + } + } + + $('#main-nav').before('
    '+ + ''+ + ''+ + '
    '); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBox) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBox); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBox); + $('#searchBoxPos2').show(); + } + prevWidth = newWidth; + } } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); } $('#main-menu').smartmenus(); } diff --git a/search/all_0.html b/search/all_0.html index 1ec5b2d..bb9e364 100644 --- a/search/all_0.html +++ b/search/all_0.html @@ -2,7 +2,7 @@ - + @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    @@ -12,14 +12,14 @@
    Loading...
    Searching...
    No Matches
    +/* @license-end */ +
    -
    -
    UDPC_ConnectionId Struct Reference
    +
    UDPC_ConnectionId Struct Reference
    @@ -74,28 +74,28 @@ $(function() {

    #include <UDPC.h>

    - - - -

    +

    Data Fields

    +
    UDPC_IPV6_ADDR_TYPE addr
     
    +
    uint32_t scope_id
     
    +
    uint16_t port
     

    Detailed Description

    -

    Data identifying a peer via addr, port, and scope_id.

    -

    This struct needn't be used directly; use UDPC_create_id(), UDPC_create_id_full(), UDPC_create_id_anyaddr(), or UDPC_create_id_easy() to create one. This struct does not hold dynamic data, so there is no need to free it.

    +

    Data identifying a peer via addr, port, and scope_id.

    +

    This struct needn't be used directly; use UDPC_create_id(), UDPC_create_id_full(), UDPC_create_id_anyaddr(), or UDPC_create_id_easy() to create one. This struct does not hold dynamic data, so there is no need to free it.


    The documentation for this struct was generated from the following file:
    diff --git a/structUDPC__Event.html b/structUDPC__Event.html index 576d9b9..03667d8 100644 --- a/structUDPC__Event.html +++ b/structUDPC__Event.html @@ -2,8 +2,8 @@ - - + + UDPConnection: UDPC_Event Struct Reference @@ -19,8 +19,8 @@
    - - +
    +
    UDPConnection
    A network connection implementation over UDP
    @@ -30,21 +30,22 @@
    - + +/* @license-end */ + -
    -
    UDPC_Event Struct Reference
    +
    UDPC_Event Struct Reference
    @@ -75,33 +75,33 @@ $(function() {

    #include <UDPC.h>

    -

    +

    Data Structures

    union  Value
     
    - - - -

    +

    Data Fields

    +
    UDPC_EventType type
     
    +
    UDPC_ConnectionId conId
     
    +
    union UDPC_Event::Value v
     

    Detailed Description

    -

    A struct containing information related to the type of event.

    -

    Note that instances of this struct received from a call to UDPC_get_event() will not store any useful data in its union member variable v (it will only be used internally). Thus, all events received through a call to UDPC_get_event() will contain a valid UDPC_ConnectionId conId that identifies the peer that the event is referring to.

    +

    A struct containing information related to the type of event.

    +

    Note that instances of this struct received from a call to UDPC_get_event() will not store any useful data in its union member variable v (it will only be used internally). Thus, all events received through a call to UDPC_get_event() will contain a valid UDPC_ConnectionId conId that identifies the peer that the event is referring to.


    The documentation for this struct was generated from the following file:
    diff --git a/structUDPC__PacketInfo.html b/structUDPC__PacketInfo.html index 749ae70..f795c21 100644 --- a/structUDPC__PacketInfo.html +++ b/structUDPC__PacketInfo.html @@ -2,8 +2,8 @@ - - + + UDPConnection: UDPC_PacketInfo Struct Reference @@ -19,8 +19,8 @@
    - - +
    +
    UDPConnection
    A network connection implementation over UDP
    @@ -30,21 +30,22 @@
    - + +/* @license-end */ +
    -
    -
    UDPC_PacketInfo Struct Reference
    +
    UDPC_PacketInfo Struct Reference
    @@ -74,7 +74,7 @@ $(function() {

    #include <UDPC.h>

    - @@ -87,24 +87,24 @@ Data Fields - - + - +

    +

    Data Fields

    char * data
     
    uint16_t dataSize
     The size in bytes of the received packet's data inside the data pointer member variable. More...
     
    +
    uint16_t rtt
     
    -UDPC_ConnectionId sender
    +UDPC_ConnectionId sender
     The UDPC_ConnectionId of the sender.
     
    -UDPC_ConnectionId receiver
    +UDPC_ConnectionId receiver
     The UDPC_ConnectionId of the receiver.
     

    Detailed Description

    -

    Data representing a received/sent packet.

    -

    If data is NULL or dataSize is 0, then this packet is invalid.

    +

    Data representing a received/sent packet.

    +

    If data is NULL or dataSize is 0, then this packet is invalid.

    Warning
    This struct must be free'd with a call to UDPC_free_PacketInfo to avoid a memory leak.

    Field Documentation

    - +

    ◆ data

    @@ -115,11 +115,11 @@ uint16_t rtt
    -

    A char array of size dataSize. Will be NULL if this UDPC_PacketInfo is invalid.

    +

    A char array of size dataSize. Will be NULL if this UDPC_PacketInfo is invalid.

    - +

    ◆ dataSize

    @@ -132,11 +132,11 @@ uint16_t rtt

    The size in bytes of the received packet's data inside the data pointer member variable.

    -

    UDPC does not return an empty packet when calling UDPC_get_received(), so in such a packet dataSize shouldn't be zero. (UDPC only stores received packets that do have a payload.) This means that if this variable is 0, then this UDPC_PacketInfo is invalid.

    +

    UDPC does not return an empty packet when calling UDPC_get_received(), so in such a packet dataSize shouldn't be zero. (UDPC only stores received packets that do have a payload.) This means that if this variable is 0, then this UDPC_PacketInfo is invalid.

    - +

    ◆ flags

    @@ -149,7 +149,7 @@ uint16_t rtt

    Flags indication some additional information about the received packet.

    -

    The following list indicates what each used bit in flags refers to.

      +

      The following list indicates what each used bit in flags refers to.

      • 0x1: Is an initiate-connection packet
      • 0x2: Is a ping packet
      • 0x4: Is a packet that will not be re-sent if not received
      • @@ -158,7 +158,7 @@ uint16_t rtt
    - +

    ◆ id

    @@ -171,7 +171,7 @@ uint16_t rtt

    The packet's id.

    -

    Packets start with id = 0, and will wrap around. This can be used to determine specifically how out of order a packet may be.

    +

    Packets start with id = 0, and will wrap around. This can be used to determine specifically how out of order a packet may be.

    @@ -181,7 +181,7 @@ uint16_t rtt
    diff --git a/tabs.css b/tabs.css index 85a0cd5..00d1c60 100644 --- a/tabs.css +++ b/tabs.css @@ -1 +1 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/unionUDPC__Event_1_1Value.html b/unionUDPC__Event_1_1Value.html index 8f11037..1692b2e 100644 --- a/unionUDPC__Event_1_1Value.html +++ b/unionUDPC__Event_1_1Value.html @@ -2,8 +2,8 @@ - - + + UDPConnection: UDPC_Event::Value Union Reference @@ -19,8 +19,8 @@
    - - +
    +
    UDPConnection
    A network connection implementation over UDP
    @@ -30,21 +30,22 @@
    - + +/* @license-end */ +
    -
    -
    UDPC_Event::Value Union Reference
    +
    UDPC_Event::Value Union Reference
    - - -

    +

    Data Fields

    +
    int dropAllWithAddr
     
    +
    int enableLibSodium
     
    @@ -88,7 +88,7 @@ int enableLibSodium