Eden Abitbol 60515d893a upnp: support libupnp and libnatnatpmp simultaneously
Update libupnp to version 1.8.4.

For windows, the IPV6 preprocessor must be undefined. Or else
libupnp won't initialize. Added visual studio 2017 support
via one patch for windows that also combines previous windows
patches.

UPnPController: Class that the jami classes use to control the
opening and closing of ports. Every  service has it's own upnp
controller. The controller does it's actions by using the upnp
context class. Also refactored the functions used to add
mappings. Instead of using two different functions with
different types of parameters, we now use one function with
parameters that have default values. The logic stays the same
but the function call is more clear.

UPnPContext: Class that holds a (linked) list of discovered IGDs
and their corresponding protocols (which discovered them).
Whenever the controller wants to add or remove a mapping, the
context picks a valid IGD in it's list and uses the correct
protocol to complete the required action. This class also has
the ability to swap protocols for an IGD that was discovered
by more then one protocol.

UPnPProtocol: Virtual base class that defines the functions
needed by the context to use the corresponding protocol.

PUPnP: UPnPProtocol derived class that represents a upnp client
that uses the portable upnp library (libupnp). Every time the
client discovers a new IGD it uses a callback to add it to the
context's main IGD linked list. It also has an internal list of
IGDs that it discovered. Added features to this class include:
	- IGD event subscription.
	- Use UpnpInit2 function instead of deprecated UpnpInit
	  function. It's also supposed to support IPv6.

NatPmp: UPnPProtocol derived class that represents a upnp client
that uses the NAT-PMP library (libnatpmp). Unlike libupnp,
libnatpmp only supports discovering one IGD. Also uses callbacks
to add the IGD it finds to the context's main IGD class.

Also inclided debug warning prints whenever a controller opens
and closes the ports. That way we can keep track of whenever
the application opens and closes ports on the internet
gateway device.

Gitlab: #96

Change-Id: I199271edac2c6d93dc60c24e2e2aefe36de7950c
2019-08-02 17:29:10 -04:00
2019-07-31 18:10:25 -04:00
2019-02-05 17:55:58 -05:00
2019-03-20 11:17:23 -04:00
2018-02-01 12:12:09 -05:00
2019-01-04 16:26:12 -05:00
2019-08-02 12:44:23 -04:00
2019-05-27 11:14:12 -04:00
2019-06-28 15:11:21 -04:00
2019-06-12 09:27:00 -04:00
2018-12-05 12:00:27 -05:00
2015-03-25 15:52:54 -04:00
2015-03-25 15:52:54 -04:00
2018-12-05 12:00:27 -05:00
2018-08-07 16:52:30 -04:00
2019-02-12 13:17:45 -05:00
2019-01-04 16:26:12 -05:00
2019-01-02 17:49:21 -05:00
2019-03-15 17:21:52 -04:00

COPYRIGHT NOTICE

Copyright (C) 2004-2019 Savoir-faire Linux Inc.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

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.  If not, see <http://www.gnu.org/licenses/>.


Introduction
------------

GNU Ring is a Voice-over-IP software phone. We want it to be:
- user friendly (fast, sleek, easy to learn interface)
- professional grade (transfers, holds, optimal audio quality)
- compatible with Asterisk (using SIP account)
- decentralized call (P2P-DHT)
- customizable

As the SIP/audio daemon and the user interface are separate processes,
it is easy to provide different user interfaces. GNU Ring comes with
various graphical user interfaces and even scripts to control the daemon from
the shell.

GNU Ring is currently used by the support team of Savoir-faire Linux Inc.

More information is available on the project homepage:
  https://www.jami.net/

This source tree contains the daemon application only, DRing, that handles
the business logic of GNU Ring. UIs are located in differents repositories. See
the Contributing section for more information.


Short description of content of source tree
-------------------------------------------

- src/ is the core of DRing.
- bin/ contains applications main code.
- bin/dbus, the D-Bus XML interfaces, and C++ bindings
- bin/restcpp, the C++ REST API implemented with Restbed

About Savoir-faire Linux
------------------------

Savoir-faire Linux is a consulting company based in Montreal, Quebec.
For more information, please check out our website:
https://www.savoirfairelinux.com/


How to compile on Linux
-----------------------

1) Compile the dependencies first

cd contrib
mkdir native
cd native
../bootstrap
make

2) Then the dring application

cd ../../
./autogen.sh
./configure
make
make install

Done !

More details available here:
https://git.jami.net/savoirfairelinux/ring-project/wikis/technical/Build-instructions


How to compile on OSX
---------------------

# These first steps are only necessary if you don't use a package manager.
cd extras/tools
./bootstrap
make
export PATH=$PATH:/location/of/ring/daemon/extras/tools/build/bin

# Or, use your favorite package manager to install the necessary tools
(macports or brew).
automake, pkg-config, libtool, gettext, yasm

# Compile the dependencies
cd contrib
mkdir native
cd native
../bootstrap
make -j

# Then the daemon
cd ../../
./autogen.sh
./configure  --without-dbus --prefix=<install_path>
make

If you want to link against libringclient and native client easiest way is to
add to ./configure: --prefix=<prefix_path>

Do a little dance!


Common Issues
-------------

autopoint not found: When using Homebrew, autopoint is not found even when
gettext is installed, because symlinks are not created.
Run: 'brew link --force gettext' to fix it.


Clang compatibility (developers only)
-------------------------------------

It is possible to compile dring with Clang by setting CC and CXX variables
to 'clang' and 'clang++' respectively when calling ./configure.

Currently it is not possible to use the DBus interface mechanism, and the
interaction between daemon and client will not work; for each platform where
D-Bus is not available the client should implement all the methods in the
*_stub.cpp files.

How to compile with the REST API
--------------------------------

GNU Ring offers two REST API. One written in C++, and the other written in Cython.
Up to this date, only the C++ API is available. The Cython API will soon follow.

To compile Ring-daemon with the C++ REST API, follow these two steps :

1) Compile the dependencies
cd contrib
mkdir native
cd native
../bootstrap
make
make .restbed

2) Then compile the daemon
cd ../../
./autogen.sh
./configure --without-dbus --with-restcpp
make

SIP accounts
---------------------

You may register an existing SIP account through the account wizard in both
clients (KDE and GNOME).
By doing this, you will be able to call other accounts known to this server.


Contributing to GNU Ring
------------------------

Of course we love patches. And contributions. And spring rolls.

Development website / Bug Tracker:
 - https://git.jami.net/savoirfairelinux/ring-project

Repositories are hosted on Gerrit, which we use for code review. It also
contains the client subprojects:
 - https://gerrit-ring.savoirfairelinux.com/#/admin/projects/

Do not hesitate to join us and post comments, suggestions, questions
and general feedback on the GNU Ring mailing-list:
https://lists.gnu.org/mailman/listinfo/ring

IRC (on #freenode):
 - #ring

  -- The GNU Ring Team
Description
No description provided
Readme 107 MiB
Languages
C++ 85.3%
SWIG 2.6%
Python 2.6%
Makefile 2.1%
CMake 1.7%
Other 5.5%