summaryrefslogtreecommitdiff
path: root/src/transport
Commit message (Collapse)AuthorAge
* fixes #1040 Convert rest of the protocols to new CMake infraGarrett D'Amore2019-12-25
|
* fixes #1032 Figure out Darwin bustednessGarrett D'Amore2019-12-24
| | | | | | | | | | | | | | | | | | | | | | | | fixes #1035 Convey is awkward -- consider acutest.h This represents a rather large effort towards cleaning up our testing and optional configuration infrastructure. A separate test library is built by default, which is static, and includes some useful utilities design to make it easier to write shorter and more robust (not timing dependent) tests. This also means that we can cover pretty nearly all the tests (protocols etc.) in every case, even if the shipped image will be minimized. Subsystems which are optional can now use a few new macros to configure what they need see nng_sources_if, nng_headers_if, and nng_defines_if. This goes a long way to making the distributed CMakefiles a lot simpler. Additionally, tests for different parts of the tree can now be located outside of the tests/ tree, so that they can be placed next to the code that they are testing. Beyond the enabling work, the work has only begun, but these changes have resolved the most often failing tests for Darwin in the cloud.
* fixes #979 ZeroTier fails with zero recvmaxGarrett D'Amore2019-08-11
|
* Tuning zt transport pingJanjaap Bos2019-04-07
| | | | | | There is quite some package loss, which I will pursue later (in nng / zerotier). For now it helps to tune these settings to keep the peer relations.
* fixes #815 Eliminate socket filters on message queuesGarrett D'Amore2019-03-13
| | | | | | | This also eliminates the enforcement of NNG_OPT_RECVMAXSZ for inproc, which never really made much sense. This helps inproc go faster. While here, also clean up the entry point for protocols to support a drain option, since we don't use that anywhere.
* fix zt_pipe_getoptJanjaap Bos2019-03-08
| | | | nni_getopt needs extra var
* fixes #848 server hang waiting for client handshakeGarrett D'Amore2019-02-23
| | | | | | | | | | | | | | | | | | | | | | | fixes #698 Need TCP stats fixes #699 Need IPC stats fixes #701 Need TLS stats This commit addresses a problem when negotiating using one of the stream based negotiation APIs -- a slow or misbehaving peer can prevent well behaved ones from establishing a connection. The fix is a fairly significant change in how these transports link up, and it does rely on the fact that the socket only has a single accept() or connect() pending at a time (on a given endpoint that is). While here, we have completely revamped the way transport statistics are done, offering a standard API for collecting these statistics. Unfortunately, this completely borks the statistics for inproc. As we are planning to change the way inproc works soon, in order to provide more control and work on performance fixes for the message queue, we feel this is an acceptable trade-off. Furthermore, almost nobody uses inproc for anything, and even fewer people are making use of the statistics at this time.
* fixes #879 Desire NNG_OPT_TCP_BOUND_PORTGarrett D'Amore2019-02-16
| | | | | | We also have made some support changes, including new APIs for printing URLs, and some improvements to the NNG_OPT_URL to make use of this new property.
* fixes #872 create unified nng_stream APIGarrett D'Amore2019-02-16
| | | | | | | | | This is a major change, and includes changes to use a polymorphic stream API for all transports. There have been related bugs fixed along the way. Additionally the man pages have changed. The old non-polymorphic APIs are removed now. This is a breaking change, but the old APIs were never part of any released public API.
* fixes #839 TCP listener_start API should use constant sockaddrGarrett D'Amore2019-01-06
|
* fixes #847 Define public TLS APIGarrett D'Amore2019-01-06
|
* fixes #852 Eliminate pipe p_options and use new style getoptGarrett D'Amore2019-01-06
|
* fixes #825 TCP public API should use generic setopt/getoptGarrett D'Amore2018-12-31
| | | | | | | | | | | | This changes much of the internal API for TCP option handling, and includes hooks for some of this in various consumers. Note that the consumers still need to have additional work done to complete them, which will be part of providing public "raw" TLS and WebSocket APIs. We would also like to finish addressing the call sites of nni_tcp_listener_start() that assume the sockaddr is modified -- it would be superior to use the NNG_OPT_LOCADDR option. Thaat will be addressed in a follow up PR.
* fixes #835 inproc should use new option APIGarrett D'Amore2018-12-31
| | | | | Some more changes to use nni_type instead of nni_opt_type are included as well.
* fixes #834 Simplify IPC internal API & updateGarrett D'Amore2018-12-31
| | | | | This also makes some smaller related changes to use the new nni_type instead of nni_opt_type.
* progress on IPC endpointsGarrett D'Amore2018-12-29
|
* IPC option rework (pipe/conn) to reduce code duplication.Garrett D'Amore2018-12-29
|
* fixes #831 Unify option structures, o_type is unusedGarrett D'Amore2018-12-29
|
* Allow recv_maxsize to be set after calling listen() on listener. (#747)Cody Piersall2018-12-16
| | | | fixes #724 set recvmaxsize after listen for tcp.
* move all public headers to include/nng/ folderGregor Burger2018-11-22
| | | | | | | | | | This change makes embedding nng + nggpp (or other projects depending on nng) in cmake easier. The header files are moved to a separate include directory. This also makes installation of the headers easier, and allows clearer identification of private vs public heade files. Some additional cleanups were performed by @gedamore, but the main credit for this change belongs with @gregorburger.
* fixes #456 TLS configuration object holdGarrett D'Amore2018-11-05
| | | | fixes #776 Configuration of mbedTLS should warn about license
* fixes #577 target library dependencies should be publicGarrett D'Amore2018-11-05
| | | | | | | | | | | This is a significant refactor of the library configuration. We use the modern package configuration helper, with a template script that also does the find_package dance for any of our dependencies. We also have restructured the code so that most protocols and transports have their configuration isolated to their own CMakeLists file, reducing the size of the global CMakeLists file.
* fixes #755 zerotier transport segfaults on alpine linuxGarrett D'Amore2018-10-27
|
* Clean up some zerotier compiler warnings.Garrett D'Amore2018-10-25
|
* Add local IP address tuning for ZeroTier.Garrett D'Amore2018-10-25
| | | | | These options are undocumented -- for now. We need to get some experience with them to ensure that they are worth keeping.
* Fix for possible overruns in fragsz.Garrett D'Amore2018-10-23
| | | | | | | | While the fragment size itself fits within 16-bits, when we do math on it (such as multiplying by a fragment count), we may need to calculate values that exceed 16-bits (e.g. 1MB). Therefore we should treat this as a size_t, but cast it down to 16-bits only when we write it out to the packet field.
* fixes #744 ZeroTier should not create node until first referencedGarrett D'Amore2018-10-17
|
* fixes #735 Configuring ZeroTier for a unified build is too hardGarrett D'Amore2018-09-24
| | | | | | | This changes the code to make use of a different project we have created (libzerotiercore) that is "CMake clean". This should make using and configuring this code *much* better. It may also have the benefit of making this configuration work better for Windows systems.
* fixes #734 ZeroTier port discrimination bustedGarrett D'Amore2018-09-21
| | | | | | This reverts 707, and provides a correct fix for busted port discrimination. It also has a few minor cleanups and reduces the listen timeout to 10 seconds.
* fixes #707 ZeroTier pipe logic could be condensedGarrett D'Amore2018-09-07
|
* fixes #4 Statistics supportGarrett D'Amore2018-09-03
| | | | | | | | | | | | | | | | This introduces new public APIs for obtaining statistics, and adds some generic stats for dialers, listeners, pipes, and sockets. Also added are stats for inproc and pairv1 protocol. The other protocols and transports will have stats added incrementally as time goes on. A simple test program, and man pages are provided for this. Start by looking at nng_stat(5). Statistics does have some impact, and they can be disabled by using the advanced NNG_ENABLE_STATS (setting it to OFF, it's ON by default) if you need to build a minimized configuration.
* fixes #690 Zerotier listener LOCADDR property wantedGarrett D'Amore2018-08-31
| | | | | While here we separate out the dialer and listener options, so that options for tuning connection are only available for listeners.
* fixes #686 strtoull() not present on WindowsGarrett D'Amore2018-08-30
| | | | | | This both makes new functions available to the core, and addresses a bug which would have prevented building the ZeroTier transport on Windows.
* fixes #678 local binding for TLS+TCP socketsGarrett D'Amore2018-08-28
|
* fixes #673 transports could benefit from access to upper layerGarrett D'Amore2018-08-27
|
* fixes #608 Add TCP support to specify local network interfaceGarrett D'Amore2018-08-27
| | | | | This also fixes a leaked TCP connection on a failure path, which we noticed while working this change.
* fixes #664 aio cancellation could be betterGarrett D'Amore2018-08-20
| | | | | | | | | This changes the signature of the aio cancellation routines to take the argument for cancellation directly, so we do not need to lookup the argument using the nni_aio_get_prov_data. We should probably consider eliminating nni_aio_get_prov_data, and co, and changing the prov_extra to reflect prov_data. Later.
* fixes #541 inproc does not honor maxrecvsize optionGarrett D'Amore2018-08-20
|
* fixes #652 dial has no timeout with UNIX domain socketsGarrett D'Amore2018-08-14
|
* fixes #645 remove start from ZeroTier transportGarrett D'Amore2018-08-14
|
* fixes #647 IPC and TCP fixes from rewriteGarrett D'Amore2018-08-14
|
* fixes #644 remove start from TLS codeGarrett D'Amore2018-08-14
|
* fixes #632 TCP start eliminationGarrett D'Amore2018-08-13
| | | | | While here, perform a more aggressive close of the pipe on reaping (IPC).
* fixes #615 IPC close on Windows leaves handle openGarrett D'Amore2018-08-12
|
* fixes #640 IPC leaks foundGarrett D'Amore2018-08-11
|
* fixes #630 IPC start eliminationGarrett D'Amore2018-08-08
| | | | | | | | | fixes #615 IPC close on Windows leaves handle open This reintroduces the code to eradicate the separate transport start function for IPC, as a incremental step towards the full fix for 599 and 208. It also addresses 615, by including revised logic for the handling of close.
* Revert "fixes #599 nng_dial sync should not return until added to socket"Garrett D'Amore2018-08-06
| | | | | This changeset needs work. We are seeing errors described by This reverts commit d7f7c896c0ede24249ef63b1e45b1878bf4bd473.
* fixes #599 nng_dial sync should not return until added to socketGarrett D'Amore2018-08-05
| | | | | | | | | | fixes #208 pipe start should occur before connect / accept fixes #616 Race condition closing between header & body This refactors the transports to handle their own connection handshaking before passing the pipe to the socket. This changes and simplifies the setup. This also fixes a rather challenging race condition described by #616.
* fixes #595 mutex leak and other minor errors in TCPGarrett D'Amore2018-07-18
| | | | | | | | | | | | | | | | fixes #596 POSIX IPC should move away from pipedesc/epdesc fixes #598 TLS and TCP listeners could support NNG_OPT_LOCADDR fixes #594 Windows IPC should use "new style" win_io code. fixes #597 macOS could support PEER PID This large change set cleans up the IPC support on Windows and POSIX. This has the beneficial impact of significantly reducing the complexity of the code, reducing locking, increasing concurrency (multiple dial and accepts can be outstanding now), reducing context switches (we complete thins synchronously now). While here we have added some missing option support, and fixed a few more bugs that we found in the TCP code changes from last week.
* fixes #523 dialers could support multiple outstanding dial requestsGarrett D'Amore2018-07-16
| | | | | | | | | | | | | | | | | | | | | | | | fixes #179 DNS resolution should be done at connect time fixes #586 Windows IO completion port work could be better fixes #339 Windows iocp could use synchronous completions fixes #280 TCP abstraction improvements This is a rather monstrous set of changes, which refactors TCP, and the underlying Windows I/O completion path logic, in order to obtain a cleaner, simpler API, with support for asynchronous DNS lookups performed on connect rather than initialization time, the ability to have multiple connects or accepts pending, as well as fewer extraneous function calls. The Windows code also benefits from greatly reduced context switching, fewer lock operations performed, and a reduced number of system calls on the hot code path. (We use automatic event resetting instead of manual.) Some dead code was removed as well, and a few potential edge case leaks on failure paths (in the websocket code) were plugged. Note that all TCP based transports benefit from this work. The IPC code on Windows still uses the legacy IOCP for now, as does the UDP code (used for ZeroTier.) We will be converting those soon too.