mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
Added nicknames and nickname syncing.
This commit is contained in:
parent
e02620c7be
commit
ad44110fd5
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include "Messenger.h"
|
||||
|
||||
#define MAX_NAME_LENGTH 128
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -32,6 +33,8 @@ typedef struct
|
|||
int friend_request_id; //id of the friend request corresponding to the current friend request to the current friend.
|
||||
uint8_t status;//0 if no friend, 1 if added, 2 if friend request sent, 3 if confirmed friend, 4 if online.
|
||||
uint8_t info[MAX_DATA_SIZE]; //the data that is sent during the friend requests we do
|
||||
uint8_t name[MAX_NAME_LENGTH];
|
||||
uint8_t name_sent;//0 if we didn't send our name to this friend 1 if we have.
|
||||
uint16_t info_size; //length of the info
|
||||
}Friend;
|
||||
|
||||
|
@ -39,6 +42,7 @@ typedef struct
|
|||
|
||||
uint8_t self_public_key[crypto_box_PUBLICKEYBYTES];
|
||||
|
||||
static uint8_t self_name[MAX_NAME_LENGTH];
|
||||
|
||||
#define MAX_NUM_FRIENDS 256
|
||||
|
||||
|
@ -216,6 +220,63 @@ int m_sendmessage(int friendnumber, uint8_t * message, uint32_t length)
|
|||
return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1);
|
||||
}
|
||||
|
||||
//send a name packet to friendnumber
|
||||
static int m_sendname(int friendnumber, uint8_t * name)
|
||||
{
|
||||
uint8_t temp[MAX_NAME_LENGTH + 1];
|
||||
memcpy(temp + 1, name, MAX_NAME_LENGTH);
|
||||
temp[0] = 48;
|
||||
return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, MAX_NAME_LENGTH + 1);
|
||||
}
|
||||
|
||||
//set the name of a friend
|
||||
//return 0 if success
|
||||
//return -1 if failure
|
||||
|
||||
static int setfriendname(int friendnumber, uint8_t * name)
|
||||
{
|
||||
if(friendnumber >= numfriends || friendnumber < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
memcpy(friendlist[friendnumber].name, name, MAX_NAME_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//Set our nickname
|
||||
//name must be a string of maximum MAX_NAME_LENGTH length.
|
||||
//return 0 if success
|
||||
//return -1 if failure
|
||||
int setname(uint8_t * name, uint16_t length)
|
||||
{
|
||||
if(length > MAX_NAME_LENGTH)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
memcpy(self_name, name, length);
|
||||
uint32_t i;
|
||||
for(i = 0; i < numfriends; i++)
|
||||
{
|
||||
friendlist[i].name_sent = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//get name of friendnumber
|
||||
//put it in name
|
||||
//name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH bytes.
|
||||
//return 0 if success
|
||||
//return -1 if failure
|
||||
int getname(int friendnumber, uint8_t * name)
|
||||
{
|
||||
if(friendnumber >= numfriends || friendnumber < 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
memcpy(name, friendlist[friendnumber].name, MAX_NAME_LENGTH);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void (*friend_request)(uint8_t *, uint8_t *, uint16_t);
|
||||
|
||||
|
@ -265,7 +326,7 @@ static void doFriends()
|
|||
friendlist[i].status = 2;
|
||||
}
|
||||
}
|
||||
if(friendlist[i].status == 2 || friendlist[i].status == 3)
|
||||
if(friendlist[i].status == 2 || friendlist[i].status == 3) //friend is not online
|
||||
{
|
||||
check_friendrequest(friendlist[i].friend_request_id);//for now this is used to kill the friend request
|
||||
IP_Port friendip = DHT_getfriendip(friendlist[i].client_id);
|
||||
|
@ -286,12 +347,25 @@ static void doFriends()
|
|||
break;
|
||||
}
|
||||
}
|
||||
while(friendlist[i].status == 4)
|
||||
while(friendlist[i].status == 4) //friend is online
|
||||
{
|
||||
if(friendlist[i].name_sent == 0)
|
||||
{
|
||||
if(m_sendname(i, self_name))
|
||||
{
|
||||
friendlist[i].name_sent = 1;
|
||||
}
|
||||
}
|
||||
len = read_cryptpacket(friendlist[i].crypt_connection_id, temp);
|
||||
if(len > 0)
|
||||
{
|
||||
if(temp[0] == 64)
|
||||
if(temp[0] == 48 && len == MAX_NAME_LENGTH + 1)//Username
|
||||
{
|
||||
memcpy(friendlist[i].name, temp + 1, MAX_NAME_LENGTH);
|
||||
friendlist[i].name[MAX_NAME_LENGTH - 1] = 0;//make sure the NULL terminator is present.
|
||||
}
|
||||
else
|
||||
if(temp[0] == 64)//Chat message
|
||||
{
|
||||
(*friend_message)(i, temp + 1, len - 1);
|
||||
}
|
||||
|
@ -446,7 +520,7 @@ int Messenger_load(uint8_t * data, uint32_t length)
|
|||
uint32_t i;
|
||||
for(i = 0; i < num; i++)
|
||||
{
|
||||
m_addfriend_norequest(temp[i].client_id);
|
||||
setfriendname(m_addfriend_norequest(temp[i].client_id), temp[i].name);
|
||||
}
|
||||
free(temp);
|
||||
return 0;
|
||||
|
|
|
@ -71,6 +71,19 @@ int m_friendstatus(int friendnumber);
|
|||
//return 0 if it was not.
|
||||
int m_sendmessage(int friendnumber, uint8_t * message, uint32_t length);
|
||||
|
||||
//Set our nickname
|
||||
//name must be a string of maximum MAX_NAME_LENGTH length.
|
||||
//return 0 if success
|
||||
//return -1 if failure
|
||||
int setname(uint8_t * name, uint16_t length);
|
||||
|
||||
|
||||
//get name of friendnumber
|
||||
//put it in name
|
||||
//name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH (128) bytes.
|
||||
//return 0 if success
|
||||
//return -1 if failure
|
||||
int getname(int friendnumber, uint8_t * name);
|
||||
|
||||
//set the function that will be executed when a friend request is received.
|
||||
//function format is function(uint8_t * public_key, uint8_t * data, uint16_t length)
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
Protocol for messages, data, video, etc..
|
||||
Protocol for messages, data, etc..
|
||||
|
||||
Streaming audio/video will not use this protocol as they can absorb some data loss.
|
||||
|
||||
The protocol itself will run on top of the encryption which means it should be
|
||||
impossible for someone to know what type of data is being transmitted.(Well they
|
||||
|
@ -12,6 +14,8 @@ Basic packet format:
|
|||
|
||||
data_id represents the type of data.
|
||||
|
||||
All strings must be UTF-8.
|
||||
|
||||
EX: data_id 64 designates a chat message. so the packet would look like: @Hello WorldNULL
|
||||
Where @ is the ASCII character for 64, "Hello World" is the message and NULL is the null string terminator.
|
||||
|
||||
|
@ -19,11 +23,10 @@ Proposed data_ids and what they mean (in decimal)
|
|||
|
||||
ids 0 to 16 are reserved.
|
||||
|
||||
48 Username (Send this packet as soon as you connect to a friend or to each friend everytime you change names.
|
||||
Username is maximum 128 bytes long with the null terminator included)
|
||||
|
||||
|
||||
64 Chat message
|
||||
65 Audio Data(Voip)
|
||||
66 Video?
|
||||
67 File transmission.
|
||||
68
|
||||
69
|
||||
...
|
||||
6? File transmission.
|
||||
|
||||
|
|
|
@ -117,6 +117,8 @@ int main(int argc, char *argv[])
|
|||
printf("%hhX",self_public_key[i]);
|
||||
}
|
||||
|
||||
setname((uint8_t *)"Anon", 5);
|
||||
|
||||
char temp_id[128];
|
||||
printf("\nEnter the client_id of the friend you wish to add (32 bytes HEX format):\n");
|
||||
if(scanf("%s", temp_id) != 1)
|
||||
|
@ -129,6 +131,10 @@ int main(int argc, char *argv[])
|
|||
|
||||
while(1)
|
||||
{
|
||||
uint8_t name[128];
|
||||
getname(num, name);
|
||||
printf("%s\n", name);
|
||||
|
||||
m_sendmessage(num, (uint8_t*)"Test", 5);
|
||||
doMessenger();
|
||||
c_sleep(30);
|
||||
|
|
Loading…
Reference in New Issue
Block a user