Squashed 'OpenVPN Adapter/Vendors/openvpn/' changes from da99df6..4095565

4095565 OpenVPN 3 client: added tun abstraction layer.
4bfaafc AsioTimer: use expires_after() method when possible.
782e8eb Apple: moved some source files.
f89da96 OpenVPN 3 client: added single-thread mode:
233dfde OpenVPN 3 client: fixed state->session typos.
d689b6d Added new Apple Core Foundation wrappers:
3838a62 i/o layer: added OPENVPN_IO_REQUIRES_STOP compile flag.
138ec96 asiopolysock.hpp: don't call SockOpt::set_cloexec(fd) if fd is undefined (i.e. fd == -1).
10eb723 Apple CF wrapper: renamed OWN/BORROW.
962fe87 Apple CF wrapper: simplify cf.hpp dependency profile.
4fcc99c Objective C++: fix symbol conflicts.
8f63cbb tunwrapasio.hpp: make generic with respect to i/o layer.
67e0013 AsioTimer: added expires_after() method.
fc7eaaf Apple CF wrappers: moved CFRunLoop/CFRunLoopSource wrapper to applecrypto/cf, where all other CF wrappers currently reside.
1215912 Revamped Function (our own functor object) to be more flexible.
10fa276 process.hpp: added compile option to avoid async pipe usage.
9e09451 gwv4.hpp: added missing includes
916856d build script: updated Objective-C support when OBJC=1.

git-subtree-dir: OpenVPN Adapter/Vendors/openvpn
git-subtree-split: 4095565b4de2c7d738e728cae989f632100a8ce8
This commit is contained in:
Sergey Abramchuk
2017-04-15 11:59:39 +03:00
parent f65d76170b
commit 9b95600d06
39 changed files with 773 additions and 223 deletions
+45
View File
@@ -0,0 +1,45 @@
// OpenVPN -- An application to securely tunnel IP networks
// over a single port, with support for SSL/TLS-based
// session authentication and key exchange,
// packet encryption, packet authentication, and
// packet compression.
//
// Copyright (C) 2012-2017 OpenVPN Technologies, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License Version 3
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program in the COPYING file.
// If not, see <http://www.gnu.org/licenses/>.
#ifndef OPENVPN_TUN_EXTERN_CONFIG_H
#define OPENVPN_TUN_EXTERN_CONFIG_H
// These includes are also intended to resolve forward references in fw.hpp
#include <openvpn/common/options.hpp>
#include <openvpn/tun/client/tunbase.hpp>
#include <openvpn/tun/client/tunprop.hpp>
#include <openvpn/frame/frame.hpp>
#include <openvpn/log/sessionstats.hpp>
#include <openvpn/common/stop.hpp>
namespace openvpn {
namespace ExternalTun {
struct Config
{
TunProp::Config tun_prop;
Frame::Ptr frame;
SessionStats::Ptr stats;
Stop* stop = nullptr;
bool tun_persist = false;
};
}
}
#endif
+49
View File
@@ -0,0 +1,49 @@
// OpenVPN -- An application to securely tunnel IP networks
// over a single port, with support for SSL/TLS-based
// session authentication and key exchange,
// packet encryption, packet authentication, and
// packet compression.
//
// Copyright (C) 2012-2017 OpenVPN Technologies, Inc.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License Version 3
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program in the COPYING file.
// If not, see <http://www.gnu.org/licenses/>.
#ifndef OPENVPN_TUN_EXTERN_FW_H
#define OPENVPN_TUN_EXTERN_FW_H
namespace openvpn {
#if defined(OPENVPN_EXTERNAL_TUN_FACTORY)
struct TunClientFactory;
class OptionList;
namespace ExternalTun {
struct Config; // defined in config.hpp
struct Factory
{
virtual TunClientFactory* new_tun_factory(const Config& conf, const OptionList& opt) = 0;
virtual ~Factory() {}
};
}
#else
namespace ExternalTun {
struct Factory {};
}
#endif
}
#endif
+10 -10
View File
@@ -29,9 +29,9 @@ namespace openvpn {
{
public:
enum Type {
NO,
YES,
DEFAULT,
No,
Yes,
Default,
};
IPv6Setting()
@@ -49,11 +49,11 @@ namespace openvpn {
{
switch (type_)
{
case NO:
case No:
return "no";
case YES:
case Yes:
return "yes";
case DEFAULT:
case Default:
default:
return "default";
}
@@ -62,11 +62,11 @@ namespace openvpn {
static IPv6Setting parse(const std::string& str)
{
if (str == "no")
return IPv6Setting(NO);
return IPv6Setting(No);
else if (str == "yes")
return IPv6Setting(YES);
return IPv6Setting(Yes);
else if (str == "default")
return IPv6Setting(DEFAULT);
return IPv6Setting(Default);
else
throw Exception("IPv6Setting: unrecognized setting: '" + str + '\'');
}
@@ -82,7 +82,7 @@ namespace openvpn {
}
private:
Type type_ = DEFAULT;
Type type_ = Default;
};
}
+2
View File
@@ -26,8 +26,10 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/route.h>
#include <net/if.h>
#include <net/if_dl.h>
#include <cstring>
+1 -1
View File
@@ -34,7 +34,7 @@
#include <openvpn/common/process.hpp>
#include <openvpn/apple/macver.hpp>
#include <openvpn/apple/scdynstore.hpp>
#include <openvpn/applecrypto/cf/cfhelper.hpp>
#include <openvpn/apple/cf/cfhelper.hpp>
#include <openvpn/tun/builder/capture.hpp>
namespace openvpn {
+3 -3
View File
@@ -29,8 +29,8 @@
#include <openvpn/log/logthread.hpp>
#include <openvpn/common/action.hpp>
#include <openvpn/applecrypto/cf/cftimer.hpp>
#include <openvpn/apple/runloop.hpp>
#include <openvpn/apple/cf/cftimer.hpp>
#include <openvpn/apple/cf/cfrunloop.hpp>
#include <openvpn/tun/mac/macdns.hpp>
namespace openvpn {
@@ -183,7 +183,7 @@ namespace openvpn {
// as well.
void thread_func()
{
runloop.reset(CFRunLoopGetCurrent(), CF::BORROW);
runloop.reset(CFRunLoopGetCurrent(), CF::GET);
Log::Context logctx(logwrap);
try {
+1 -1
View File
@@ -28,7 +28,7 @@
#include <openvpn/common/exception.hpp>
#include <openvpn/addr/ip.hpp>
#include <openvpn/apple/scdynstore.hpp>
#include <openvpn/applecrypto/cf/cfhelper.hpp>
#include <openvpn/apple/cf/cfhelper.hpp>
namespace openvpn {
struct MacGWInfo
+7 -8
View File
@@ -22,6 +22,8 @@
#ifndef OPENVPN_TUN_PERSIST_TUNWRAPASIO_H
#define OPENVPN_TUN_PERSIST_TUNWRAPASIO_H
#include <utility>
namespace openvpn {
// This object supports that subset of the Asio stream
@@ -48,17 +50,14 @@ namespace openvpn {
// subset of methods used by TunIO).
// Prototypes from asio/windows/basic_stream_handle.hpp
template <typename MutableBufferSequence, typename ReadHandler>
ASIO_INITFN_RESULT_TYPE(ReadHandler,
void (openvpn_io::error_code, std::size_t))
async_read_some(const MutableBufferSequence& buffers,
ASIO_MOVE_ARG(ReadHandler) handler)
template <typename MUTABLE_BUFFER, typename HANDLER>
void async_read_some(const MUTABLE_BUFFER& buffers, HANDLER&& handler)
{
return tun_wrap->obj()->async_read_some(buffers, handler);
return tun_wrap->obj()->async_read_some(buffers, std::move(handler));
}
template <typename ConstBufferSequence>
std::size_t write_some(const ConstBufferSequence& buffers)
template <typename CONST_BUFFER>
std::size_t write_some(const CONST_BUFFER& buffers)
{
return tun_wrap->obj()->write_some(buffers);
}
+1 -1
View File
@@ -388,7 +388,7 @@ namespace openvpn {
void layer_2_schedule_timer(const unsigned int seconds)
{
l2_timer.expires_at(Time::now() + Time::Duration::seconds(seconds));
l2_timer.expires_after(Time::Duration::seconds(seconds));
l2_timer.async_wait([self=Ptr(this)](const openvpn_io::error_code& error)
{
if (!error && !self->halt)