mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
added #defines for friend.status as well as for erroring on m_addfriend*
This commit is contained in:
parent
eba7fdb9ba
commit
4b49df896f
|
@ -105,19 +105,19 @@ int m_addfriend(uint8_t *client_id, uint8_t *data, uint16_t length)
|
||||||
if (length >= (MAX_DATA_SIZE - crypto_box_PUBLICKEYBYTES
|
if (length >= (MAX_DATA_SIZE - crypto_box_PUBLICKEYBYTES
|
||||||
- crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES
|
- crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES
|
||||||
+ crypto_box_ZEROBYTES))
|
+ crypto_box_ZEROBYTES))
|
||||||
return -1;
|
return FAERR_TOOLONG;
|
||||||
if (length < 1)
|
if (length < 1)
|
||||||
return -2;
|
return FAERR_NOMESSAGE;
|
||||||
if (memcmp(client_id, self_public_key, crypto_box_PUBLICKEYBYTES) == 0)
|
if (memcmp(client_id, self_public_key, crypto_box_PUBLICKEYBYTES) == 0)
|
||||||
return -3;
|
return FAERR_OWNKEY;
|
||||||
if (getfriend_id(client_id) != -1)
|
if (getfriend_id(client_id) != -1)
|
||||||
return -4;
|
return FAERR_ALREADYSENT;
|
||||||
|
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
for (i = 0; i <= numfriends; ++i) { /*TODO: dynamic memory allocation, this will segfault if there are more than MAX_NUM_FRIENDS*/
|
for (i = 0; i <= numfriends; ++i) { /*TODO: dynamic memory allocation, this will segfault if there are more than MAX_NUM_FRIENDS*/
|
||||||
if(friendlist[i].status == 0) {
|
if(friendlist[i].status == NOFRIEND) {
|
||||||
DHT_addfriend(client_id);
|
DHT_addfriend(client_id);
|
||||||
friendlist[i].status = 1;
|
friendlist[i].status = FRIEND_ADDED;
|
||||||
friendlist[i].crypt_connection_id = -1;
|
friendlist[i].crypt_connection_id = -1;
|
||||||
friendlist[i].friend_request_id = -1;
|
friendlist[i].friend_request_id = -1;
|
||||||
memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE);
|
memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE);
|
||||||
|
@ -130,7 +130,7 @@ int m_addfriend(uint8_t *client_id, uint8_t *data, uint16_t length)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -5;
|
return FAERR_GENERAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int m_addfriend_norequest(uint8_t * client_id)
|
int m_addfriend_norequest(uint8_t * client_id)
|
||||||
|
@ -139,9 +139,9 @@ int m_addfriend_norequest(uint8_t * client_id)
|
||||||
return -1;
|
return -1;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
for (i = 0; i <= numfriends; ++i) {/*TODO: dynamic memory allocation, this will segfault if there are more than MAX_NUM_FRIENDS*/
|
for (i = 0; i <= numfriends; ++i) {/*TODO: dynamic memory allocation, this will segfault if there are more than MAX_NUM_FRIENDS*/
|
||||||
if(friendlist[i].status == 0) {
|
if(friendlist[i].status == NOFRIEND) {
|
||||||
DHT_addfriend(client_id);
|
DHT_addfriend(client_id);
|
||||||
friendlist[i].status = 2;
|
friendlist[i].status = FRIEND_REQUESTED;
|
||||||
friendlist[i].crypt_connection_id = -1;
|
friendlist[i].crypt_connection_id = -1;
|
||||||
friendlist[i].friend_request_id = -1;
|
friendlist[i].friend_request_id = -1;
|
||||||
memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE);
|
memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE);
|
||||||
|
@ -169,7 +169,7 @@ int m_delfriend(int friendnumber)
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
for (i = numfriends; i != 0; --i) {
|
for (i = numfriends; i != 0; --i) {
|
||||||
if (friendlist[i-1].status != 0)
|
if (friendlist[i-1].status != NOFRIEND)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
numfriends = i;
|
numfriends = i;
|
||||||
|
@ -185,7 +185,7 @@ int m_delfriend(int friendnumber)
|
||||||
int m_friendstatus(int friendnumber)
|
int m_friendstatus(int friendnumber)
|
||||||
{
|
{
|
||||||
if (friendnumber < 0 || friendnumber >= numfriends)
|
if (friendnumber < 0 || friendnumber >= numfriends)
|
||||||
return 0;
|
return NOFRIEND;
|
||||||
return friendlist[friendnumber].status;
|
return friendlist[friendnumber].status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ int m_sendmessage(int friendnumber, uint8_t *message, uint32_t length)
|
||||||
{
|
{
|
||||||
if (friendnumber < 0 || friendnumber >= numfriends)
|
if (friendnumber < 0 || friendnumber >= numfriends)
|
||||||
return 0;
|
return 0;
|
||||||
if (length >= MAX_DATA_SIZE || friendlist[friendnumber].status != 4)
|
if (length >= MAX_DATA_SIZE || friendlist[friendnumber].status != FRIEND_ONLINE)
|
||||||
/* this does not mean the maximum message length is MAX_DATA_SIZE - 1, it is actually 17 bytes less. */
|
/* this does not mean the maximum message length is MAX_DATA_SIZE - 1, it is actually 17 bytes less. */
|
||||||
return 0;
|
return 0;
|
||||||
uint8_t temp[MAX_DATA_SIZE];
|
uint8_t temp[MAX_DATA_SIZE];
|
||||||
|
@ -385,15 +385,15 @@ static void doFriends()
|
||||||
int len;
|
int len;
|
||||||
uint8_t temp[MAX_DATA_SIZE];
|
uint8_t temp[MAX_DATA_SIZE];
|
||||||
for (i = 0; i < numfriends; ++i) {
|
for (i = 0; i < numfriends; ++i) {
|
||||||
if (friendlist[i].status == 1) {
|
if (friendlist[i].status == FRIEND_ADDED) {
|
||||||
int fr = send_friendrequest(friendlist[i].client_id, friendlist[i].info, friendlist[i].info_size);
|
int fr = send_friendrequest(friendlist[i].client_id, friendlist[i].info, friendlist[i].info_size);
|
||||||
if (fr == 0) /* TODO: This needs to be fixed so that it sends the friend requests a couple of times in case of packet loss */
|
if (fr == 0) /* TODO: This needs to be fixed so that it sends the friend requests a couple of times in case of packet loss */
|
||||||
friendlist[i].status = 2;
|
friendlist[i].status = FRIEND_REQUESTED;
|
||||||
else if (fr > 0)
|
else if (fr > 0)
|
||||||
friendlist[i].status = 2;
|
friendlist[i].status = FRIEND_REQUESTED;
|
||||||
}
|
}
|
||||||
if (friendlist[i].status == 2 || friendlist[i].status == 3) { /* friend is not online */
|
if (friendlist[i].status == FRIEND_REQUESTED || friendlist[i].status == FRIEND_CONFIRMED) { /* friend is not online */
|
||||||
if (friendlist[i].status == 2) {
|
if (friendlist[i].status == FRIEND_REQUESTED) {
|
||||||
if (friendlist[i].friend_request_id + 10 < unix_time()) { /*I know this is hackish but it should work.*/
|
if (friendlist[i].friend_request_id + 10 < unix_time()) { /*I know this is hackish but it should work.*/
|
||||||
send_friendrequest(friendlist[i].client_id, friendlist[i].info, friendlist[i].info_size);
|
send_friendrequest(friendlist[i].client_id, friendlist[i].info, friendlist[i].info_size);
|
||||||
friendlist[i].friend_request_id = unix_time();
|
friendlist[i].friend_request_id = unix_time();
|
||||||
|
@ -406,7 +406,7 @@ static void doFriends()
|
||||||
friendlist[i].crypt_connection_id = crypto_connect(friendlist[i].client_id, friendip);
|
friendlist[i].crypt_connection_id = crypto_connect(friendlist[i].client_id, friendip);
|
||||||
break;
|
break;
|
||||||
case 3: /* Connection is established */
|
case 3: /* Connection is established */
|
||||||
friendlist[i].status = 4;
|
friendlist[i].status = FRIEND_ONLINE;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
crypto_kill(friendlist[i].crypt_connection_id);
|
crypto_kill(friendlist[i].crypt_connection_id);
|
||||||
|
@ -416,7 +416,7 @@ static void doFriends()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (friendlist[i].status == 4) { /* friend is online */
|
while (friendlist[i].status == FRIEND_ONLINE) { /* friend is online */
|
||||||
if (friendlist[i].name_sent == 0) {
|
if (friendlist[i].name_sent == 0) {
|
||||||
if (m_sendname(i, self_name, self_name_length))
|
if (m_sendname(i, self_name, self_name_length))
|
||||||
friendlist[i].name_sent = 1;
|
friendlist[i].name_sent = 1;
|
||||||
|
@ -456,7 +456,7 @@ static void doFriends()
|
||||||
if (is_cryptoconnected(friendlist[i].crypt_connection_id) == 4) { /* if the connection timed out, kill it */
|
if (is_cryptoconnected(friendlist[i].crypt_connection_id) == 4) { /* if the connection timed out, kill it */
|
||||||
crypto_kill(friendlist[i].crypt_connection_id);
|
crypto_kill(friendlist[i].crypt_connection_id);
|
||||||
friendlist[i].crypt_connection_id = -1;
|
friendlist[i].crypt_connection_id = -1;
|
||||||
friendlist[i].status = 3;
|
friendlist[i].status = FRIEND_CONFIRMED;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -477,7 +477,7 @@ static void doInbound()
|
||||||
friendlist[friend_id].crypt_connection_id =
|
friendlist[friend_id].crypt_connection_id =
|
||||||
accept_crypto_inbound(inconnection, public_key, secret_nonce, session_key);
|
accept_crypto_inbound(inconnection, public_key, secret_nonce, session_key);
|
||||||
|
|
||||||
friendlist[friend_id].status = 3;
|
friendlist[friend_id].status = FRIEND_CONFIRMED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,21 @@ extern "C" {
|
||||||
#define PACKET_ID_USERSTATUS 49
|
#define PACKET_ID_USERSTATUS 49
|
||||||
#define PACKET_ID_MESSAGE 64
|
#define PACKET_ID_MESSAGE 64
|
||||||
|
|
||||||
|
/* status definitions */
|
||||||
|
#define FRIEND_ONLINE 4
|
||||||
|
#define FRIEND_CONFIRMED 3
|
||||||
|
#define FRIEND_REQUESTED 2
|
||||||
|
#define FRIEND_ADDED 1
|
||||||
|
#define NOFRIEND 0
|
||||||
|
|
||||||
|
/* errors for m_addfriend
|
||||||
|
* FAERR - Friend Add Error */
|
||||||
|
#define FAERR_TOOLONG -1
|
||||||
|
#define FAERR_NOMESSAGE -2
|
||||||
|
#define FAERR_OWNKEY -3
|
||||||
|
#define FAERR_ALREADYSENT -4
|
||||||
|
#define FAERR_GENERAL -5
|
||||||
|
|
||||||
/* don't assume MAX_USERSTATUS_LENGTH will stay at 128, it may be increased
|
/* don't assume MAX_USERSTATUS_LENGTH will stay at 128, it may be increased
|
||||||
to an absurdly large number later */
|
to an absurdly large number later */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user