Commit Graph
1768 Commits
Author SHA1 Message Date
iphydf 52dd5575ab Avoid implicit conversion of negative value to uint32_t. 2018-08-13 22:22:09 +00:00
iphydf b77e407b6f Avoid passing -1 as friend connection to new groups.
Somehow it still works because the lower levels can deal with
inconsistent/broken state, but this lets us avoid that broken state in
the first place. If a friend connection doesn't exist, we don't add it to
our group.
2018-08-13 21:56:09 +00:00
iphydf 6d8d80b387 Make conferences_object properly typed.
The void pointer here only adds opportunity to introduce bugs and doesn't
actually make things more layered. It's just the code lying about being
layered while it's actually spaghetti.
2018-08-12 21:10:27 +00:00
zugz (tox) d56ab5aaff add callback for successful connection to a conference 2018-08-12 22:46:06 +02:00
iphydf 5d15b5930d Remove last use of the MIN macro.
We use functions for this instead.
2018-08-12 11:38:23 +00:00
iphydf 503d9f7e22 Add deprecation notice to some UPPER_CASE enums.
The enumerators won't change, but the type name will change in 0.3.0.
Reasoning:
- Type names in toxcore start with an uppercase letter and either have at
  least one lowercase letter in them, or are less than 4 characters long.
- Constants consist of 4 or more uppercase letters or underscores.

By these rules, "DHT" is a type name, but "TOX_USER_STATUS" is a
constant. We provide Tox_User_Status as an alternative for now, and will
switch to that in 0.3.0, removing the UPPER_CASE versions.
2018-08-11 16:28:24 +00:00
iphydf 678720d2fe Split out conference type (text/av) from identifier. 2018-08-11 13:12:49 +00:00
iphydf 463cbcb19a Use the crypto random functions instead of rand().
Presumably the uses of `rand()` were fine because they were not used in
security-sensitive places, but having to think about whether a crappy RNG
is acceptable in each situation requires effort that could better be
spent elsewhere.

Also, this means that once we have a custom deterministic RNG for
testing, that RNG is used everywhere, so all the code is deterministic.

It also allowed us to delete a system-specific function that wasn't used
anywhere except in a call to `srand()`.
2018-08-10 14:53:27 +00:00
zugz (tox) afab28f0ff Fix typo in loop over assocs. 2018-08-09 22:47:21 +00:00
Robin Lindén ffd71e895b Release 0.2.5 2018-08-08 19:38:31 +02:00
endoffile78 cd98ec4c16 Fix error message in m_send_generic_message 2018-08-04 13:12:07 -05:00
iphydf 788fa224a5 Remove unused m_callback_log function.
The logger callback can only be set once at the beginning, because it
requires user data coming from `Tox_Options`.
2018-08-04 11:44:14 +00:00
iphydf 064ffe5875 Make a separate struct Tox containing the Messenger.
This allows Tox to contain additional data on top of Messenger, making
Messenger not necessarily the most top-level object. E.g. groups are
built on Messenger and currently awkwardly void-pointered into it to
pretend there is no cyclic dependency.
2018-08-04 09:29:15 +00:00
iphydf 7f8b29c346 Avoid multiple for-next expressions.
All for-loops in toxcore are of the form

    for (<for-init>; <for-cond>; <for-next>) { <body> }

`for-init` can be a variable declaration (like `int i = 0`), an
assignment (like `i = 0`), or empty.

`for-cond` can be any expression.

`for-next` can be an assignment or a single increment/decrement
expression (like `++i` or `--i`).

No other forms are allowed, so e.g. comma expressions in any of these are
not allowed (so no `for (i = 0, j = n; ...; ++i, --j)`).
2018-08-04 09:04:42 +00:00
zugz aa63c1330c Fix problems with initial connections and name-setting in conferences
* test names in conference_test
* raise error on attempt to invite friend to group before we are connected
* revise handling of temporary invited connections
    We are now careful not to prematurely delete a connection to a peer
    established during the invitation process; namely, before we have sufficient
    other connections and have confirmed that we have an alternative route to the
    peer.
* process out-of-order messages from a peer
* don't reset names when handling a Peer Response
2018-08-02 22:03:18 +01:00
iphydf 1f27fcb5af Add by_id and get_id functions, renaming from *_uid.
`UID` sounds like `User ID`. While it is a Unique ID, the property of an
"identifier" is generally that it identifies a unique thing, so the 'U'
is redundant, and `GUID` as a globally unique id (which is likely also
true for these IDs) has a specific meaning and syntax, so we're not using
that. So, we just say conference `id`.
2018-07-28 16:39:44 +00:00
iphydf f627a26a7b Run Clang global static analysis on Travis.
This uses a single .cc file containing almost all the code in the
repository to perform whole program analysis.
2018-07-22 02:34:30 +00:00
iphydf b6b3cdbf25 Synchronise parameter names in headers with those in the implementation. 2018-07-21 14:46:31 +00:00
iphydf 9a96bb9a5b Reduce nesting by doing more early returns on error.
This almost entirely avoids any else-after-return in toxcore. One case is
left, and that one is more readable this way.

Why no else after return: https://llvm.org/docs/CodingStandards.html#don-t-use-else-after-a-return
Why exemptions exist: https://blog.mozilla.org/nnethercote/2009/08/31/no-else-after-return-considered-harmful/
2018-07-21 14:22:41 +00:00
iphydf 253abe5de4 Make resize in list.c return bool instead of 0/1. 2018-07-21 11:44:58 +00:00
Robin Lindén a672b3c56e Release v0.2.4 2018-07-20 22:52:14 +02:00
Jan Malakhovski 246165954c Introduce several TODOs 2018-07-19 19:24:00 +00:00
Jan Malakhovski 669bdf23ee Rename m_handle_custom_lossy_packet -> m_handle_lossy_packet
This function handles all lossy packets, including AV.
2018-07-19 19:24:00 +00:00
Jan Malakhovski e7a5f52c14 Collect PACKET_ID* constants in net_crypto.h, cleanup their uses 2018-07-19 19:24:00 +00:00
iphydf bf79fdbb43 Link -lsocket and -lnsl for socket functions on Solaris.
Also, added some #defines to make symbols visible that are in BSD but not
in UNIX. Solaris needs these, since it's fairly strict with its symbol
visibility in system headers.
2018-07-19 15:05:26 +00:00
zugz 7c05b3a85e replace LOGGER_ERROR with LOGGER_DEBUG on send_data_packet() failure in send_lossless_packet() 2018-07-18 21:17:10 +00:00
iphydf 7f6c681cfa Use enums for group packet types.
Also moved some macros up to the beginning of `group.c`. This change
brings us closer to the PGC PR.
2018-07-18 21:05:42 +00:00
iphydf 392eef7900 Correct the max hostname length constant.
256 bytes including NUL byte is confusing and makes for really annoying
bindings to other languages that don't account for NUL bytes in their
string length. We pass C strings, not byte arrays, for hostnames, so 255
makes more sense here.
2018-07-18 00:32:54 +00:00
iphydf 13aa33a0f8 Set _XOPEN_SOURCE to 700 for FreeBSD. 2018-07-16 01:03:30 +00:00
iphydf 9eacfafff7 Set C++11/C99 flag manually in older cmake on not-msvc.
These flags are needed so the code actually compiles, so can't only be
set on Travis.
2018-07-15 23:01:32 +00:00
iphydf 90a63e8188 Add conference_by_uid and conference_get_uid functions.
These are useful once we have persistent group chats, so clients can
store data associated with this permanent group identifier.
2018-07-13 19:30:02 +00:00
iphydf 3d5fd9c2d0 Limit number of group chats to 65536.
By changing numchats from uint32_t to uint16_t. This is done in PGC. This
PR is making that change in master to reduce the diff in the PGC branch.

Also:
* Inverted groupnumber_not_valid and renamed to is_groupnumber_valid.
* Renamed realloc_groupchats to realloc_conferences and made it return bool.
* Added setup_conference function that currently just zeroes the
  conference structure but later will initialise more values.
* Made some `i` iterator variables local to the for-loop using
  for-init-decl. This is also done in PGC.
2018-07-12 23:58:24 +00:00
iphydf 2377cac94b Use named function types for group callbacks.
Also some other cleanups. This PR means that future PRs, i.e. the PGC PR,
must not break the rules established here.
2018-07-12 21:15:51 +00:00
iphydf beeb9b4335 Style fixes in TCP code; remove MIN and PAIR from util.h.
* Moved PAIR to toxav, where it's used (but really this should die).
* Replace most MIN calls with typed `min_*` calls. Didn't replace the
  ones where the desired semantics are unclear. Moved the MIN macro to
  the one place where it's still used.
* Avoid assignments in `while` loops. Instead, factored out the loop body
  into a separate `bool`-returning function.
* Use named types for callbacks (`_cb` types).
* Avoid assignments in `if` conditions.
* Removed `MAKE_REALLOC` and expanded its two calls. We can't have
  templates in C, and this fake templating is ugly and hard to analyse
  and debug (it expands on a single line).
* Moved epoll system include to the .c file, out of the .h file.
* Avoid assignments in expressions (`a = b = c;`).
* Avoid multiple declarators per struct member declaration.
* Fix naming inconsistencies.
* Replace `net_to_host` macro with function.
2018-07-12 20:21:42 +00:00
iphydf cbda01021c Fix style in DHT.c.
* Removed `ARRAY_SIZE` and use NULL markers for end of array, instead.
  The alternative is + size, but for these arrays, NULL markers made
  sense, since they are arrays of non-null pointers.
* Made `INDEX_OF_PK` a self-contained macro, not dependent upon the
  naming inside its call site. This is a minor change but makes the code
  more local and reviews easier.
* No nested structs.
* Use only named function types ending in `_cb` for callbacks.
* Replaced two macros with functions.
* `++i` instead of `i++`.
* struct member names start with lowercase letters.
* It takes a bit of work to support `/**/` comments in preprocessor
  macros, so I've decided not to support these. If a macro is complex
  enough to need comments inside it, it's too complex. `//` comments are
  allowed at the end of macro definitions.
* Callback typedefs must name their parameters.
2018-07-12 09:32:46 +00:00
iphydf 37f8f566d5 Fix style in some header files.
* Enums must by typedef'd.
* Comments at end of `#define` must be `//` comments.
* Typedef structs must not be anonymous.
* `;` at the end of a `#define` is invalid.
* Callback typedefs must list their parameter names.
* No nested structs.
* No inline use of function pointer types. Only typedef'd callback types
  are allowed.
* Enum types are spelled in Camelsnake_Case.
* The argument to `#error` must be a string literal.
2018-07-12 09:19:02 +00:00
iphydf abc17b0f89 Factor out time keeping code into its own module: mono_time.c.
It turns out, `unix_time` is also monotonic, and is used as such, so I've
renamed the new functions to `mono_time_*`.

2018-07-08:
```
00:01 <@irungentoo> the idea used to be that the unix_time() function
  could go backward in time but I think I might have started using it like
  if it could not after I changed it so that it would never go back in time
```
2018-07-09 21:04:50 +00:00
iphydf 4e21c06551 Add a thread-safe version of unix_time and friends.
These are not used in a thread-safe way, but it opens the path towards
per-tox-instance time keeping and removal of some unsafe global state.
2018-07-09 21:03:08 +00:00
iphydf c8697ccc20 Move load_state and its helper functions to their own module. 2018-07-09 20:36:39 +00:00
iphydf 751d0948ab Use named function types for callbacks in net_crypto.
Also:
* compound statements (blocks, e.g. in if/else) must be non-empty.
  Comments don't count.
* `=` is not allowed in subexpressions. We treat it as statement-only.
* `++i` is preferred over `i++` in statements.
* `Type_Names` are camelsnake-case.
2018-07-08 22:32:10 +00:00
iphydf 76e1d05da6 Use named function types for friend_requests callbacks.
Also:
* `#define` must be scoped. If it's used outside a scope, it must be
  defined outside that scope (global `#define` does not need a matching
  `#undef`).
2018-07-08 22:02:52 +00:00
iphydf 465c9380ea Clarify the intent of "file kinds" in the API. 2018-07-08 19:13:23 +00:00
iphydf 2b49f80395 Rename BS_LIST to BS_List to follow the naming conventions.
`BS_LIST` would be a constant. `BS_List` is a type name.
2018-07-08 19:03:52 +00:00
iphydf ebdc43285a Use named types for onion callbacks.
This is now a style rule: you can only use typedef'd function types.

Previous rules now applied in `onion_*.c`:
* `struct`s must have a name (typedef of unnamed struct is not allowed).
* `++i` for increment-stmt, not `i++`, e.g. in loops.
* Only a single declarator per struct member declaration.
* Type_Names vs. variable_names.
2018-07-08 18:23:45 +00:00
iphydf 819fe534ea Use named function types for friend_connection callbacks.
Also:
* No inner structs.
* One declarator per member declaration.
* Function names are snake_case.
* Names ending in `_cb` are function types.
* `++i` is preferred over `i++`.
2018-07-08 18:06:39 +00:00
iphydf 08ff19a63b Call the "peer leaves" callback only once on group delete.
We used to pass the actual peer numbers of peers leaving, but we no
longer know these in the PGC world, so we don't pass them anymore.
2018-07-07 16:02:00 +00:00
iphydf 8739f7fccb Make tox.c unambiguously parseable.
Rules:
1. Constants are uppercase names: THE_CONSTANT.
2. SUE[1] types start with an uppercase letter and have at least one
   lowercase letter in it: The_Type, THE_Type.
3. Function types end in "_cb": tox_friend_connection_cb.
4. Variable and function names are all lowercase: the_function.

This makes it easier for humans reading the code to determine what an
identifier means. I'm not convinced by the enum type name change, but I
don't know a better rule. Currently, a lot of enum types are spelled like
constants, which is confusing.

[1] struct/union/enum
2018-07-05 23:09:28 +00:00
iphydf 1a54be06cd Simplify Travis CI builds.
Have one script per build. This means more duplication between the
scripts, but it's much easier to understand and to run locally.
2018-07-01 08:35:44 +00:00
iphydf 706fad1ce8 Add a test to try and overflow the send queue in net_crypto. 2018-06-29 23:24:20 +00:00
Evgeny Kurnevsky 52f21e3251 Correct check for net_crypto packet index. 2018-06-29 23:02:01 +00:00