ffi-tox 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ProjectTox-Core/CMakeLists.txt +24 -2
- data/ProjectTox-Core/INSTALL.md +41 -5
- data/ProjectTox-Core/README.md +29 -30
- data/ProjectTox-Core/cmake/FindLIBCONFIG.cmake +15 -0
- data/ProjectTox-Core/cmake/FindNaCl.cmake +17 -0
- data/ProjectTox-Core/cmake/FindSODIUM.cmake +15 -0
- data/ProjectTox-Core/core/CMakeLists.txt +2 -0
- data/ProjectTox-Core/core/Lossless_UDP.c +6 -0
- data/ProjectTox-Core/core/Messenger.c +24 -9
- data/ProjectTox-Core/core/Messenger.h +13 -5
- data/ProjectTox-Core/core/friend_requests.h +1 -1
- data/ProjectTox-Core/core/net_crypto.c +17 -6
- data/ProjectTox-Core/core/network.c +32 -15
- data/ProjectTox-Core/core/network.h +11 -11
- data/ProjectTox-Core/docs/commands.md +25 -0
- data/ProjectTox-Core/docs/start_guide.de.md +40 -0
- data/ProjectTox-Core/docs/start_guide.md +38 -0
- data/ProjectTox-Core/testing/CMakeLists.txt +3 -3
- data/ProjectTox-Core/testing/DHT_cryptosendfiletest.c +2 -2
- data/ProjectTox-Core/testing/DHT_test.c +1 -1
- data/ProjectTox-Core/testing/Lossless_UDP_testclient.c +2 -2
- data/ProjectTox-Core/testing/Lossless_UDP_testserver.c +2 -2
- data/ProjectTox-Core/testing/misc_tools.h +1 -1
- data/ProjectTox-Core/testing/nTox.c +154 -73
- data/ProjectTox-Core/testing/nTox.h +1 -0
- data/ProjectTox-Core/testing/nTox_win32.c +122 -58
- data/ProjectTox-Core/testing/nTox_win32.h +9 -0
- metadata +25 -25
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1ea0d69f0ac06a753a7fb1299542b5f5ebfe935d
|
4
|
+
data.tar.gz: ecbc2f0a1fec17416aa57890fe6be315225d7d18
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 68ae7ba6278cb10d41dbe042f59d10304444b25ef7802c0c19919e3ca63a93c86efb6cb5af63cb979906da9f6cacab43ddf85a434092bd550ed41151dbe7ff01
|
7
|
+
data.tar.gz: 678b27211d2dd376c8ee8d631c2f44b8da2b9039c68fa535e36bfeeb06dab5554cbc286b356183053fc5d6e61031e1a2f67e429c839bce17f14086bca6a28a41
|
@@ -1,11 +1,31 @@
|
|
1
1
|
cmake_minimum_required(VERSION 2.6.0)
|
2
2
|
|
3
|
+
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
4
|
+
|
5
|
+
if(NOT WIN32)
|
6
|
+
option(USE_NACL "Use NaCl library instead of libsodium")
|
7
|
+
endif()
|
8
|
+
|
9
|
+
if(USE_NACL)
|
10
|
+
find_package(NaCl REQUIRED)
|
11
|
+
|
12
|
+
include_directories(${NACL_INCLUDE_DIR})
|
13
|
+
add_definitions(-DVANILLA_NACL)
|
14
|
+
|
15
|
+
set(LINK_CRYPTO_LIBRARY ${NACL_LIBRARIES})
|
16
|
+
endif()
|
17
|
+
|
3
18
|
#MinGW prints more warnings for -Wall than gcc does, thus causing build to fail
|
4
19
|
if(NOT WIN32)
|
5
20
|
if(("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") OR ("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang"))
|
6
21
|
message(STATUS "==== ${CMAKE_C_COMPILER_ID} detected - Adding compiler flags ====")
|
7
22
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror")
|
8
23
|
endif()
|
24
|
+
find_package(SODIUM REQUIRED)
|
25
|
+
endif()
|
26
|
+
|
27
|
+
if(NOT USE_NACL)
|
28
|
+
set(LINK_CRYPTO_LIBRARY ${SODIUM_LIBRARY})
|
9
29
|
endif()
|
10
30
|
|
11
31
|
macro(linkCoreLibraries exe_name)
|
@@ -16,8 +36,10 @@ macro(linkCoreLibraries exe_name)
|
|
16
36
|
${CMAKE_SOURCE_DIR}/sodium/lib/libsodium.a
|
17
37
|
ws2_32)
|
18
38
|
else()
|
39
|
+
include_directories(${SODIUM_INCLUDE_DIR})
|
19
40
|
target_link_libraries(${exe_name} core
|
20
|
-
|
41
|
+
${LINK_CRYPTO_LIBRARY})
|
42
|
+
|
21
43
|
endif()
|
22
44
|
endmacro()
|
23
45
|
|
@@ -25,4 +47,4 @@ cmake_policy(SET CMP0011 NEW)
|
|
25
47
|
|
26
48
|
add_subdirectory(core)
|
27
49
|
add_subdirectory(testing)
|
28
|
-
add_subdirectory(other)
|
50
|
+
add_subdirectory(other)
|
data/ProjectTox-Core/INSTALL.md
CHANGED
@@ -1,12 +1,25 @@
|
|
1
|
+
#Install Instructions
|
2
|
+
|
3
|
+
- [Installation](#installation)
|
4
|
+
- [Linux](#linux)
|
5
|
+
- [OS X](#osx)
|
6
|
+
- [Homebrew](#homebrew)
|
7
|
+
- [Non-Homebrew](#non-homebrew)
|
8
|
+
- [Windows](#windows)
|
9
|
+
- [Usage](#usage)
|
10
|
+
|
11
|
+
<a name="installation" />
|
1
12
|
##Installation
|
2
13
|
|
14
|
+
<a name="linux" />
|
3
15
|
###Linux:
|
4
16
|
|
5
17
|
Build dependencies:
|
6
18
|
|
7
19
|
```bash
|
8
|
-
apt-get install build-essential libtool autotools-dev automake libconfig-dev ncurses-dev cmake
|
20
|
+
apt-get install build-essential libtool autotools-dev automake libconfig-dev ncurses-dev cmake checkinstall
|
9
21
|
```
|
22
|
+
Note that `libconfig-dev` should be >= 1.4.
|
10
23
|
|
11
24
|
You should get and install [libsodium](https://github.com/jedisct1/libsodium):
|
12
25
|
```bash
|
@@ -15,15 +28,18 @@ cd libsodium
|
|
15
28
|
git checkout tags/0.4.2
|
16
29
|
./autogen.sh
|
17
30
|
./configure && make check
|
18
|
-
sudo
|
31
|
+
sudo checkinstall --install --pkgname libsodium --pkgversion 0.4.2 --nodoc
|
19
32
|
sudo ldconfig
|
20
33
|
```
|
21
34
|
|
22
|
-
Then clone this repo and
|
35
|
+
Then clone this repo and generate makefile:
|
23
36
|
```bash
|
37
|
+
git clone git://github.com/irungentoo/ProjectTox-Core.git
|
38
|
+
cd ProjectTox-Core
|
24
39
|
mkdir build && cd build
|
25
40
|
cmake ..
|
26
41
|
```
|
42
|
+
Note that you should call cmake on the root [`CMakeLists.txt`](/CMakeLists.txt) file only.
|
27
43
|
|
28
44
|
Then you can build any of the [`/testing`](/testing) and [`/other`](/other) that are currently supported on your platform by running:
|
29
45
|
```bash
|
@@ -39,9 +55,22 @@ Or you could just build everything that is supported on your platform by running
|
|
39
55
|
make
|
40
56
|
```
|
41
57
|
|
42
|
-
|
58
|
+
<a name="osx" />
|
59
|
+
###OS X:
|
43
60
|
|
44
|
-
|
61
|
+
<a name="homebrew" />
|
62
|
+
####Homebrew:
|
63
|
+
```
|
64
|
+
brew install libtool automake autoconf libconfig libsodium cmake
|
65
|
+
cmake .
|
66
|
+
make
|
67
|
+
sudo make install
|
68
|
+
```
|
69
|
+
|
70
|
+
<a name="non-homebrew" />
|
71
|
+
####Non-homebrew:
|
72
|
+
|
73
|
+
Much the same as Linux, remember to install the latest XCode and the developer tools (Preferences -> Downloads -> Command Line Tools).
|
45
74
|
Users running Mountain Lion and the latest version of XCode (4.6.3) will also need to install libtool, automake and autoconf.
|
46
75
|
They are easy enough to install, grab them from http://www.gnu.org/software/libtool/, http://www.gnu.org/software/autoconf/ and http://www.gnu.org/software/automake/, then follow these steps for each:
|
47
76
|
|
@@ -58,6 +87,7 @@ Another thing you may want to install is the latest gcc, this caused me a few pr
|
|
58
87
|
no longer includes gcc and instead uses LLVM-GCC, a nice install guide can be found at
|
59
88
|
http://caiustheory.com/install-gcc-421-apple-build-56663-with-xcode-42
|
60
89
|
|
90
|
+
<a name="windows" />
|
61
91
|
###Windows:
|
62
92
|
|
63
93
|
You should install:
|
@@ -75,6 +105,7 @@ Navigate in `cmd` to this repo and run:
|
|
75
105
|
mkdir build && cd build
|
76
106
|
cmake -G "MinGW Makefiles" ..
|
77
107
|
```
|
108
|
+
Note that you should call cmake on the root [`CMakeLists.txt`](/CMakeLists.txt) file only.
|
78
109
|
|
79
110
|
Then you can build any of the [`/testing`](/testing) and [`/other`](/other) that are currently supported on your platform by running:
|
80
111
|
```cmd
|
@@ -89,3 +120,8 @@ Or you could just build everything that is supported on your platform by running
|
|
89
120
|
```bash
|
90
121
|
mingw32-make
|
91
122
|
```
|
123
|
+
|
124
|
+
<a name="usage" />
|
125
|
+
## Usage
|
126
|
+
|
127
|
+
- [Start Guide](start_guide.md)
|
data/ProjectTox-Core/README.md
CHANGED
@@ -1,54 +1,53 @@
|
|
1
1
|

|
2
|
-
Project Tox, _also known as Tox_, is a FOSS instant messaging application aimed to replace Skype.<br />
|
2
|
+
Project Tox, _also known as Tox_, is a FOSS (Free and Open Source Software) instant messaging application aimed to replace Skype.<br />
|
3
3
|
|
4
|
-
With the rise of governmental monitoring programs, Tox aims to be an easy to use
|
4
|
+
With the rise of governmental monitoring programs, Tox aims to be an easy to use, all-in-one communication platform (including audio, and videochats in the future) that ensures their users full privacy and secure message delivery.<br /> <br />
|
5
5
|
|
6
6
|
|
7
7
|
|
8
|
-
|
9
|
-
**IRC**: #tox on Freenode, alternatively, you can use the [webchat](http://webchat.freenode.net/?channels=#tox).<br />
|
8
|
+
**IRC**: #tox on freenode, alternatively, you can use the [webchat](http://webchat.freenode.net/?channels=#tox).<br />
|
10
9
|
**Website**: [http://tox.im](http://tox.im)
|
11
10
|
|
12
11
|
**Website translations**: [see stal888's repository](https://github.com/stal888/ProjectTox-Website)<br/>
|
13
12
|
**Qt GUI**: [see nurupo's repository](https://github.com/nurupo/ProjectTox-Qt-GUI)
|
14
13
|
|
14
|
+
**How to build Tox on Linux**: [YouTube video](http://www.youtube.com/watch?v=M4WXE4VKmyg)<br />
|
15
|
+
**How to use Tox on Windows**: [YouTube video](http://www.youtube.com/watch?v=qg_j_sDb6WQ)<br />
|
16
|
+
**For Mac OSX read INSTALL.md**
|
17
|
+
|
18
|
+
### Objectives:
|
15
19
|
|
20
|
+
Keep everything really simple.
|
16
21
|
|
17
22
|
## The Complex Stuff:
|
18
|
-
+ Tox must use UDP simply because
|
19
|
-
+ Every peer is represented as a byte string (the public key of the peer [client
|
23
|
+
+ Tox must use UDP simply because [hole punching](http://en.wikipedia.org/wiki/UDP_hole_punching) with TCP is not as reliable.
|
24
|
+
+ Every peer is represented as a [byte string](https://en.wikipedia.org/wiki/String_(computer_science)) (the public key of the peer [client ID]).
|
20
25
|
+ We're using torrent-style DHT so that peers can find the IP of the other peers when they have their ID.
|
21
26
|
+ Once the client has the IP of that peer, they start initiating a secure connection with each other. (See [Crypto](https://github.com/irungentoo/ProjectTox-Core/wiki/Crypto))
|
22
|
-
+ When both peers are securely
|
23
|
-
+ Current build status: [](https://travis-ci.org/irungentoo/ProjectTox-Core)
|
27
|
+
+ When both peers are securely connected, they can exchange messages, initiate a video chat, send files, etc, all using encrypted communications.
|
28
|
+
+ Current build status: [](https://travis-ci.org/irungentoo/ProjectTox-Core)
|
24
29
|
|
25
30
|
## Roadmap:
|
26
|
-
- [x] Get our DHT working perfectly.(Done, needs large scale testing though
|
27
|
-
- [x] Reliable connection (See
|
31
|
+
- [x] Get our DHT working perfectly. (Done, needs large scale testing though)
|
32
|
+
- [x] Reliable connection (See Lossless UDP protocol) to other peers according to client ID. (Done, see `DHT_sendfiletest.c` for an example)
|
28
33
|
- [x] Encryption. (Done)
|
29
|
-
- [
|
30
|
-
- [
|
31
|
-
- [
|
34
|
+
- [ ] Get a simple text only IM client working perfectly. (This is where we are)
|
35
|
+
- [ ] Streaming media
|
36
|
+
- [ ] ???
|
32
37
|
|
33
38
|
For further information, check our [To-do list](https://github.com/irungentoo/ProjectTox-Core/wiki/TODO)
|
34
39
|
|
35
|
-
|
36
|
-
### Important-stuff:
|
37
|
-
|
38
|
-
Use the same UDP socket for everything
|
39
|
-
|
40
|
-
Keep everything really simple.
|
41
|
-
|
42
|
-
### Details and Documents:
|
43
|
-
|
44
|
-
[DHT Protocol](https://github.com/irungentoo/ProjectTox-Core/wiki/DHT)<br />
|
45
|
-
[Lossless UDP Protocol](https://github.com/irungentoo/ProjectTox-Core/wiki/Lossless-UDP)<br />
|
46
|
-
[Crypto](https://github.com/irungentoo/ProjectTox-Core/wiki/Crypto)<br />
|
47
|
-
[Ideas](https://github.com/irungentoo/ProjectTox-Core/wiki/Ideas)
|
48
|
-
|
49
40
|
### Why are you doing this? There are already a bunch of free skype alternatives.
|
50
|
-
The goal of this project is to create a configuration-free
|
41
|
+
The goal of this project is to create a configuration-free P2P skype
|
51
42
|
replacement. Configuration-free means that the user will simply have to open the program and
|
52
43
|
without any account configuration will be capable of adding people to his
|
53
|
-
friends list and start conversing with them. There are many so
|
54
|
-
configure for the normal user or suffer from being
|
44
|
+
friends list and start conversing with them. There are many so-called skype replacements and all of them are either hard to
|
45
|
+
configure for the normal user or suffer from being way too centralized.
|
46
|
+
|
47
|
+
### Documentation:
|
48
|
+
|
49
|
+
- [Installation](/INSTALL.md)
|
50
|
+
- [DHT Protocol](https://github.com/irungentoo/ProjectTox-Core/wiki/DHT)<br />
|
51
|
+
- [Lossless UDP Protocol](https://github.com/irungentoo/ProjectTox-Core/wiki/Lossless-UDP)<br />
|
52
|
+
- [Crypto](https://github.com/irungentoo/ProjectTox-Core/wiki/Crypto)<br />
|
53
|
+
- [Ideas](https://github.com/irungentoo/ProjectTox-Core/wiki/Ideas)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Find LIBCONFIG
|
2
|
+
#
|
3
|
+
# LIBCONFIG_INCLUDE_DIR
|
4
|
+
# LIBCONFIG_LIBRARY
|
5
|
+
# LIBCONFIG_FOUND
|
6
|
+
#
|
7
|
+
|
8
|
+
FIND_PATH(LIBCONFIG_INCLUDE_DIR NAMES libconfig.h)
|
9
|
+
|
10
|
+
FIND_LIBRARY(LIBCONFIG_LIBRARY NAMES config)
|
11
|
+
|
12
|
+
INCLUDE(FindPackageHandleStandardArgs)
|
13
|
+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LIBCONFIG DEFAULT_MSG LIBCONFIG_LIBRARY LIBCONFIG_INCLUDE_DIR)
|
14
|
+
|
15
|
+
MARK_AS_ADVANCED(LIBCONFIG_INCLUDE_DIR LIBCONFIG_LIBRARY)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
find_path(NACL_INCLUDE_DIR crypto_box.h
|
2
|
+
$ENV{NACL_INCLUDE_DIR} /usr/include/nacl/
|
3
|
+
DOC "Directory which contain NaCl headers")
|
4
|
+
|
5
|
+
find_path(NACL_LIBRARY_DIR libnacl.a
|
6
|
+
$ENV{NACL_LIBRARY_DIR} /usr/lib/nacl
|
7
|
+
DOC "Directory which contain libnacl.a, cpucycles.o, and randombytes.o")
|
8
|
+
|
9
|
+
if(NACL_LIBRARY_DIR)
|
10
|
+
set(NACL_LIBRARIES
|
11
|
+
"${NACL_LIBRARY_DIR}/cpucycles.o"
|
12
|
+
"${NACL_LIBRARY_DIR}/libnacl.a"
|
13
|
+
"${NACL_LIBRARY_DIR}/randombytes.o")
|
14
|
+
endif()
|
15
|
+
|
16
|
+
include(FindPackageHandleStandardArgs)
|
17
|
+
find_package_handle_standard_args(NaCl DEFAULT_MSG NACL_INCLUDE_DIR NACL_LIBRARY_DIR NACL_LIBRARIES)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# Find SODIUM
|
2
|
+
#
|
3
|
+
# SODIUM_INCLUDE_DIR
|
4
|
+
# SODIUM_LIBRARY
|
5
|
+
# SODIUM_FOUND
|
6
|
+
#
|
7
|
+
|
8
|
+
FIND_PATH(SODIUM_INCLUDE_DIR NAMES sodium.h)
|
9
|
+
|
10
|
+
FIND_LIBRARY(SODIUM_LIBRARY NAMES sodium)
|
11
|
+
|
12
|
+
INCLUDE(FindPackageHandleStandardArgs)
|
13
|
+
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SODIUM DEFAULT_MSG SODIUM_LIBRARY SODIUM_INCLUDE_DIR)
|
14
|
+
|
15
|
+
MARK_AS_ADVANCED(SODIUM_INCLUDE_DIR SODIUM_LIBRARY)
|
@@ -308,12 +308,16 @@ IP_Port connection_ip(int connection_id)
|
|
308
308
|
/* returns the number of packets in the queue waiting to be successfully sent. */
|
309
309
|
uint32_t sendqueue(int connection_id)
|
310
310
|
{
|
311
|
+
if (connection_id < 0 || connection_id >= MAX_CONNECTIONS)
|
312
|
+
return 0;
|
311
313
|
return connections[connection_id].sendbuff_packetnum - connections[connection_id].successful_sent;
|
312
314
|
}
|
313
315
|
|
314
316
|
/* returns the number of packets in the queue waiting to be successfully read with read_packet(...) */
|
315
317
|
uint32_t recvqueue(int connection_id)
|
316
318
|
{
|
319
|
+
if (connection_id < 0 || connection_id >= MAX_CONNECTIONS)
|
320
|
+
return 0;
|
317
321
|
return connections[connection_id].recv_packetnum - connections[connection_id].successful_read;
|
318
322
|
}
|
319
323
|
|
@@ -321,6 +325,8 @@ uint32_t recvqueue(int connection_id)
|
|
321
325
|
return -1 if no packet in queue */
|
322
326
|
char id_packet(int connection_id)
|
323
327
|
{
|
328
|
+
if (connection_id < 0 || connection_id >= MAX_CONNECTIONS)
|
329
|
+
return -1;
|
324
330
|
if (recvqueue(connection_id) != 0 && connections[connection_id].status != 0)
|
325
331
|
return connections[connection_id].recvbuffer[connections[connection_id].successful_read % MAX_QUEUE_NUM].data[0];
|
326
332
|
return -1;
|
@@ -99,18 +99,21 @@ int getclient_id(int friend_id, uint8_t *client_id)
|
|
99
99
|
client_id is the client id of the friend
|
100
100
|
data is the data and length is the length
|
101
101
|
returns the friend number if success
|
102
|
-
return -1 if
|
102
|
+
return -1 if key length is wrong.
|
103
|
+
return -2 if user's own key
|
104
|
+
return -3 if already a friend
|
105
|
+
return -4 for other*/
|
103
106
|
int m_addfriend(uint8_t *client_id, uint8_t *data, uint16_t length)
|
104
107
|
{
|
105
108
|
if (length == 0 || length >=
|
106
109
|
(MAX_DATA_SIZE - crypto_box_PUBLICKEYBYTES - crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES + crypto_box_ZEROBYTES))
|
107
110
|
return -1;
|
108
111
|
if (memcmp(client_id, self_public_key, crypto_box_PUBLICKEYBYTES) == 0)
|
109
|
-
return -
|
112
|
+
return -2;
|
110
113
|
if (getfriend_id(client_id) != -1)
|
111
|
-
return -
|
114
|
+
return -3;
|
112
115
|
uint32_t i;
|
113
|
-
for (i = 0; i <= numfriends; ++i) {
|
116
|
+
for (i = 0; i <= numfriends; ++i) { /*TODO: dynamic memory allocation, this will segfault if there are more than MAX_NUM_FRIENDS*/
|
114
117
|
if(friendlist[i].status == 0) {
|
115
118
|
DHT_addfriend(client_id);
|
116
119
|
friendlist[i].status = 1;
|
@@ -126,7 +129,7 @@ int m_addfriend(uint8_t *client_id, uint8_t *data, uint16_t length)
|
|
126
129
|
return i;
|
127
130
|
}
|
128
131
|
}
|
129
|
-
return -
|
132
|
+
return -4;
|
130
133
|
}
|
131
134
|
|
132
135
|
int m_addfriend_norequest(uint8_t * client_id)
|
@@ -134,7 +137,7 @@ int m_addfriend_norequest(uint8_t * client_id)
|
|
134
137
|
if (getfriend_id(client_id) != -1)
|
135
138
|
return -1;
|
136
139
|
uint32_t i;
|
137
|
-
for (i = 0; i <= numfriends; ++i) {
|
140
|
+
for (i = 0; i <= numfriends; ++i) {/*TODO: dynamic memory allocation, this will segfault if there are more than MAX_NUM_FRIENDS*/
|
138
141
|
if(friendlist[i].status == 0) {
|
139
142
|
DHT_addfriend(client_id);
|
140
143
|
friendlist[i].status = 2;
|
@@ -163,11 +166,13 @@ int m_delfriend(int friendnumber)
|
|
163
166
|
free(friendlist[friendnumber].userstatus);
|
164
167
|
memset(&friendlist[friendnumber], 0, sizeof(Friend));
|
165
168
|
uint32_t i;
|
169
|
+
|
166
170
|
for (i = numfriends; i != 0; --i) {
|
167
|
-
if (friendlist[i].status != 0)
|
171
|
+
if (friendlist[i-1].status != 0)
|
168
172
|
break;
|
169
173
|
}
|
170
174
|
numfriends = i;
|
175
|
+
|
171
176
|
return 0;
|
172
177
|
}
|
173
178
|
|
@@ -178,7 +183,7 @@ int m_delfriend(int friendnumber)
|
|
178
183
|
return 0 if there is no friend with that number */
|
179
184
|
int m_friendstatus(int friendnumber)
|
180
185
|
{
|
181
|
-
if (friendnumber < 0 || friendnumber >=
|
186
|
+
if (friendnumber < 0 || friendnumber >= numfriends)
|
182
187
|
return 0;
|
183
188
|
return friendlist[friendnumber].status;
|
184
189
|
}
|
@@ -188,7 +193,7 @@ int m_friendstatus(int friendnumber)
|
|
188
193
|
return 0 if it was not */
|
189
194
|
int m_sendmessage(int friendnumber, uint8_t *message, uint32_t length)
|
190
195
|
{
|
191
|
-
if (friendnumber < 0 || friendnumber >=
|
196
|
+
if (friendnumber < 0 || friendnumber >= numfriends)
|
192
197
|
return 0;
|
193
198
|
if (length >= MAX_DATA_SIZE || friendlist[friendnumber].status != 4)
|
194
199
|
/* this does not mean the maximum message length is MAX_DATA_SIZE - 1, it is actually 17 bytes less. */
|
@@ -240,6 +245,16 @@ int setname(uint8_t * name, uint16_t length)
|
|
240
245
|
return 0;
|
241
246
|
}
|
242
247
|
|
248
|
+
/* get our nickname
|
249
|
+
put it in name
|
250
|
+
name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH bytes.
|
251
|
+
return the length of the name */
|
252
|
+
uint16_t getself_name(uint8_t *name)
|
253
|
+
{
|
254
|
+
memcpy(name, self_name, self_name_length);
|
255
|
+
return self_name_length;
|
256
|
+
}
|
257
|
+
|
243
258
|
/* get name of friendnumber
|
244
259
|
put it in name
|
245
260
|
name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH bytes.
|
@@ -46,11 +46,14 @@ extern "C" {
|
|
46
46
|
to an absurdly large number later */
|
47
47
|
|
48
48
|
/* add a friend
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
set the data that will be sent along with friend request
|
50
|
+
client_id is the client id of the friend
|
51
|
+
data is the data and length is the length
|
52
|
+
returns the friend number if success
|
53
|
+
return -1 if key length is wrong.
|
54
|
+
return -2 if user's own key
|
55
|
+
return -3 if already a friend
|
56
|
+
return -4 for other*/
|
54
57
|
int m_addfriend(uint8_t *client_id, uint8_t *data, uint16_t length);
|
55
58
|
|
56
59
|
|
@@ -92,6 +95,11 @@ int m_sendmessage(int friendnumber, uint8_t *message, uint32_t length);
|
|
92
95
|
return -1 if failure */
|
93
96
|
int setname(uint8_t *name, uint16_t length);
|
94
97
|
|
98
|
+
/* get our nickname
|
99
|
+
put it in name
|
100
|
+
return the length of the name*/
|
101
|
+
uint16_t getself_name(uint8_t *name);
|
102
|
+
|
95
103
|
/* get name of friendnumber
|
96
104
|
put it in name
|
97
105
|
name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH (128) bytes.
|