Commit Graph

3656 Commits

Author SHA1 Message Date
Andrew Bettison
641298b0e6 Fix JNI command-line exception return path
If an exception was raised while executing a CLI command via JNI, then
a warning was logged while cleaning up: calling GetObjectArrayElement()
while an exception is pending.  This fix removes that call.
2016-10-20 13:28:12 +10:30
Andrew Bettison
e2086249ac Load config earlier in the JNI server entry point 2016-10-20 13:28:12 +10:30
Andrew Bettison
1efe6686fc Use config.h instead of -DHAVE_FOO=1
swiftc(1) requires every -D option to be prefixed with -Xcc, which
is not easy to achieve using autoconf.

Now instead of setting configuration macros like HAVE_LSEEK64 on the
command line using -D, they are defined in config.h, which is generated
by ./configure, ignored by Git, and included by all headers and source
files that use any configuration macro.

The dependency on Makefile has been replaced with a dependency on
Makefile.in and config.h, which helps avoid some redundant full
recompiles after running ./configure, because the configure script
does not overwrit config.h if its content does not change.
2016-10-19 16:27:20 +10:30
Andrew Bettison
42f62d2b8b Move JNI setInstancePath() into own source file 2016-10-19 16:26:00 +10:30
Andrew Bettison
a3f3de571a Minor fixes to Makefile.in 2016-10-19 10:54:44 +10:30
Andrew Bettison
8325aacc5d Fix broken Batphone build
Recent changes such as the Makefile.in overhaul and the introduction of
feature-driven linking broke the Android build.  This commit fixes the
breakage:
- detects the presence of gettid() in configure.ac and only defines
  gettid() in serval.c if HAVE_GETTID is not defined
- builds libserval.so not libservald.so on Android, to avoid a conflict
  on the module name "servald" in Android.mk
- renames cli_cleanup() to command_cleanup(), defines it in
  commandline.h instead of cli.h, and supplies it in android.c
- supplies the 'keyring' global in android.c
- removes log_stderr.c from the Android build, since it conflicted with
  log.c
2016-10-19 09:52:07 +10:30
Andrew Bettison
6627c868d0 Fix a non-deterministic server test case failure
Very occasionally, when the file logger was creating the symlink from
'serval.log' to the current log file, there was a race with another
process doing exactly the same, causing one of them to log an
symlink-failed ERROR that caused the server/StartTwice test to fail
(when asserting that the "start" command contained no ERROR log
messages).  Now the symlink failure is logged at WARN level, which will
not cause the test to fail.
2016-10-19 09:50:30 +10:30
Andrew Bettison
94c58e8126 Fix a pidfile race in server_write_pid()
During the brief interval between a server creating its pidfile and
locking it, the pidfile could be removed by another process that
detected it as stale.  This caused a non-deterministic failure of the
server/StartTwice test case.

To fix this race, the server now creates and locks a temporary pidfile
which it then hard-links to the real pidfile, guaranteeing that the
pidfile is already locked in the instant that it appears.  This means
that an unlocked pidfile is guaranteed to be stale, not just in the
process of creation, so can be safely unlinked by any other process.
2016-10-19 09:47:52 +10:30
Andrew Bettison
192fefd7f2 Update INSTALL.md to describe built artifacts 2016-10-19 09:47:48 +10:30
Andrew Bettison
71cbe86566 Switch to feature-driven linking
This introduces a new way of linking Serval executables and dynamic
libraries from static libraries like libservald.a -- called
"feature-driven" linking.

The Makefile now links servald and serval-tests from libservald.a,
rather than from an explicit list of object (.o) files.  Thanks to the
section-based method for registering functions such as HTTP handlers,
CLI commands and MDP handlers, these object files had become
"stand-alone" and hence were no longer included in the link because
there was no unresolved reference that required them to be linked in.

The new "feature.h" provides the DECLARE_FEATURE(name) macro that each
stand-alone source file uses to declare the named feature(s) it
provides.  Each executable can call the USE_FEATURE(name) macro in any
of its explicitly-linked source files to cause the corresponding
object(s) to be included in the link, eg, servald_features.c.

The DEFINE_BINDING() macro has been extended so that every individual
MDP binding is given a feature name based on its port number macro, eg,
"mdp_binding_MDP_PORT_ECHO".

Some features have been factored into their own separate source files so
they can be omitted or included in a build independently of each other:
- the MDP bindings for MDP_PORT_DNALOOKUP, MDP_PORT_ECHO,
  MDP_PORT_TRACE, MDP_PORT_KEYMAPREQUEST, MDP_PORT_RHIZOME_xxx,
  MDP_PORT_PROBE, MDP_PORT_STUN, MDP_PORT_STUNREQ
- the CLI "log" and "echo" commands
- the CLI "rhizome direct" command

The JNI source files are only compiled if the <jni.h> header is present,
otherwise they are omitted from libservald.so.
2016-10-19 09:33:01 +10:30
Andrew Bettison
8cb3afa7dc Replace cf_on_config_change() with "config_change" trigger
This is required to support feature-driven linking, in which the exact
list of which functions to call in response to a configuration re-load
is not known until link time.

The "config_change_log" trigger is called before "config_change", so
that the logger can respond to the change before other subsystems.
2016-10-19 09:30:54 +10:30
Andrew Bettison
6dd823a9e8 Rename "features.h" to "lang.h"
In preparation for introducing "feature.h" for feature-driven linking.
2016-10-19 09:30:18 +10:30
Andrew Bettison
937e402794 Improve build-libsodium.sh
Add the --branch option to specify which libsodium branch to checkout
and build.

Invoke libsodium's autogen.sh script if libsodium's 'configure' script
is not present (eg, on development branches).
2016-10-13 17:00:17 +10:30
Andrew Bettison
43e76ec7b5 Change signature of strn_fromprint()
The 'dst' parameter is now (char *) instead of (unsigned char *) because
in general it is used to produce human-readable (ASCII) strings, not
binary data.
2016-10-13 16:23:18 +10:30
Andrew Bettison
c8bf8a7733 Refactor JNI out of CLI and server main loop
The CLI and server main loop now have no conditional JNI code.  All JNI
code has been moved into separate source files, which #include the new
"jni_common.h" instead of <jni.h>.  The "cli.h" header no longer
includes <jni.h>, so the rest of the Serval source code is now
unaffected by JNI definitions.

The 'cf_limbo' global variable is now thread-local, so that each thread
has its own independent copy of the loaded configuration.  The JNI
server entry point now calls cf_init() once.  The new 'cf_initialised'
flag prevents clobbering the config state by redundant calls to
cf_init().

The CLI "stop" command now sends SIGHUP to the specific thread in which
the server is running.  This is achieved by writing the PID and TID
(Linux Thread ID) into the pidfile, separated by a space, on systems
that support the Linux gettid() and tgkill() system calls.  The server's
signal handler has been overhauled, and its logging improved.
2016-10-13 16:23:18 +10:30
Andrew Bettison
41b3e304be Updated some copyright messages and COPYRIGHT.txt 2016-10-13 16:23:18 +10:30
Andrew Bettison
29a771e315 Overhaul Makefile.in
Changed the built libraries and updated INSTALL.md accordingly:
- the 'servaldwrap' executable is now built
- libservald.[a,so] now contains the full daemon executable
- libservalclient.[a,so] contains the client library
- libserval.a is no longer built

Building the 'servaldwrap' executable is a step towards ensuring that
the libservald.so library can be linked and executed, without requiring
an Android build to reveal any failure.

Added the SOURCE_PREFIX variable that allows the make to be invoked from
within any current working directory, not just the serval-dna
repository's root directory.

Fixed the serval_version.o target to invoke the version_string.sh
script with the --repository=DIR option, so that the build will work
even if the current working directory is not within the serval-dna
repository.

Re-ordered and added some comments for clarity, and added some missing
.PHONY declarations.
2016-10-13 16:23:09 +10:30
Andrew Bettison
4b2060554e Rename configure.in to configure.ac 2016-10-13 16:05:58 +10:30
Andrew Bettison
cd40025533 Make all cli_ output functions return void 2016-10-13 16:01:22 +10:30
Andrew Bettison
a15396b793 Add server status test case 2016-10-13 16:01:22 +10:30
Andrew Bettison
fc10a83a1d Improve test framework
The execute() and executeOk() functions now set $TFWEXECUTED instead
of $executed.

The execute() and executeOk() functions now make a hard link from the
--stdout-file=PATH and --stderr-file=PATH files to the default files
of 'stdout' and 'stderr' so that post-fork handling can still cat their
contents into the log file.

The fork() function now sets the variables $TFWFORKSTDOUT_<label>
$TFWFORKSTDERR_<label> $TFWFORKPID_<label>.
2016-10-13 16:01:22 +10:30
Andrew Bettison
a789816916 Fix compile warning - readdir_r() is deprecated 2016-10-13 16:01:22 +10:30
Jeremy Lakeman
30b2c1ea3f Add helper class for formatting multipart mime 2016-10-10 15:55:27 +10:30
Jeremy Lakeman
62a1ca46bc Wait for path establishment in network scan test 2016-09-27 15:51:23 +09:30
Jeremy Lakeman
ced74d0b6b Simplify BK handling using new signing key typedefs 2016-09-27 15:20:12 +09:30
Jeremy Lakeman
88f77b61c4 Errors while unpacking keyring entries should be soft errors
The keyring can have any random data that might pass any number of consistency checks
2016-09-27 10:37:02 +09:30
Jeremy Lakeman
b927af79a8 Introduce new typedef for signing keys to expose their internal structure 2016-09-27 10:28:46 +09:30
Andrew Bettison
d572da2529 Fix Android build with SQLite 3.14.2 2016-09-23 12:57:52 +09:30
Andrew Bettison
e34141a2a5 Upgrade to SQLite 3.14.2
Ignores a variety of warnings when compiling sqlite3.c.

Uses the new sqlite3_trace_v2() function for logging SQL statements, now
that sqlite3_trace() and sqlite3_profile() are deprecated.

Fixes a rhizomeops test failure caused because SQLite 3.12 increased the
default block size from 1024 to 4096, causing the fixed overhead of an
empty Rhizome db to exceed 32KB.  This caused the test to fail because
the first "file add" failed.  Now the test fixture adapts to the fixed
overhead.

Deletes the SQLite 3.10.2 source amalgamation.
2016-09-21 22:47:35 +09:30
Andrew Bettison
8199048191 Import SQLite 3.14.2 source code amalgamation 2016-09-21 18:47:49 +09:30
Andrew Bettison
d9c9d465df Add approximate scaled format functions
Used to produce human-readable values in logs, reports etc.
Eg: 1,073,741,824 -> "1.07g" (SI) and "1.00G" (binary).
2016-09-21 18:47:49 +09:30
Andrew Bettison
cea2221f47 Format scaled integers using strbuf
Replaces uint32_scaled_to_str() with strbuf_append_uint32_scaled().
2016-09-21 18:47:49 +09:30
Andrew Bettison
5dfb7c1b68 Un-inline a function in "rhizome_types.h" 2016-09-21 18:47:49 +09:30
Andrew Bettison
a10207f471 Remove unnecessary #includes from "rhizome.h" 2016-09-21 18:47:49 +09:30
Andrew Bettison
6e65a2399f Add missing #include "str.h" 2016-09-21 18:47:49 +09:30
Andrew Bettison
5a77008aa8 Move URI primitives from "str.h" to "uri.h" 2016-09-21 18:47:49 +09:30
Andrew Bettison
5b3d997896 Move Base64 conversions from "str.h" to "base64.h" 2016-09-21 18:47:49 +09:30
Andrew Bettison
cd766cd480 Move numeric conversions from "str.h" to "numeric_str.h" 2016-09-21 18:47:49 +09:30
Andrew Bettison
0bf7c5ccea Update copyright messages in documentation 2016-09-21 18:31:31 +09:30
Andrew Bettison
7e39698234 Improve libsodium dev documentation 2016-09-21 18:15:34 +09:30
Jeremy Lakeman
adf0a880bc Any identity could be the main one, check for any valid route 2016-09-21 17:27:39 +09:30
Andrew Bettison
298b83f97b Fix a failing keyringrestful test
The recent randomising of keyring slots broke an assumption
about the order of the 'keyring list' output.  Now the test's
assertions do not assume any order.
2016-09-21 12:16:50 +09:30
Jeremy Lakeman
f615a1deca Fix signed / unsigned warning 2016-09-21 09:33:08 +09:30
Jeremy Lakeman
a531c0e960 Use a random walk to find free keyring slots
Always round the file size up to the nearest 16 slots
2016-09-20 16:47:30 +09:30
Jeremy Lakeman
4e50b1716c Test reachable bit flags about ourself 2016-09-20 15:04:28 +09:30
Jeremy Lakeman
275c99bc4e Add cli option for changing an entry pin 2016-09-20 10:00:02 +09:30
Andrew Bettison
2f61c447a9 Add a new rhizomerestful test case: update a bundle to empty payload 2016-09-19 14:30:04 +09:30
Andrew Bettison
9a5ee2eded Update INSTALL.md dates and compiler versions 2016-09-19 13:46:51 +09:30
Andrew Bettison
0657e27dea Fix a failing meshmsrestful test
On OS-X, "sed" is BSD sed(1); must use $SED instead to get GNU sed(1).
2016-09-15 17:17:34 +09:30
Andrew Bettison
fc8fce5595 Improve build-libsodium.sh 2016-09-15 16:55:59 +09:30