/* Messenger.h * * An implementation of a simple text chat only messenger on the tox network core. * * NOTE: All the text in the messages must be encoded using UTF-8 Copyright (C) 2013 Tox project All Rights Reserved. This file is part of Tox. Tox is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Tox is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Tox. If not, see . */ #ifndef MESSENGER_H #define MESSENGER_H #include "net_crypto.h" #include "DHT.h" #define MAX_NAME_LENGTH 128 #define MAX_USERSTATUS_LENGTH 128 // don't assume MAX_USERSTATUS_LENGTH will stay at 128, it may be increased // to an absurdly large number later //add a friend //set the data that will be sent along with friend request //client_id is the client id of the friend //data is the data and length is the length //returns the friend number if success //return -1 if failure. int m_addfriend(uint8_t * client_id, uint8_t * data, uint16_t length); //add a friend without sending a friendrequest. //returns the friend number if success //return -1 if failure. int m_addfriend_norequest(uint8_t * client_id); //return the friend id associated to that client id. //return -1 if no such friend int getfriend_id(uint8_t * client_id); //copies the public key associated to that friend id into client_id buffer. //make sure that client_id is of size CLIENT_ID_SIZE. //returns 0 if success //return -1 if failure. int getclient_id(int friend_id, uint8_t * client_id); //remove a friend int m_delfriend(int friendnumber); //return 4 if friend is online //return 3 if friend is confirmed //return 2 if the friend request was sent //return 1 if the friend was added //return 0 if there is no friend with that number. int m_friendstatus(int friendnumber); //send a text chat message to an online friend. //returns 1 if packet was successfully put into the send queue //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 our user status // you are responsible for freeing status after // returns 0 on success, -1 on failure int m_set_userstatus(uint8_t *status, uint16_t length); // return the length of friendnumber's user status, // including null // pass it into malloc int m_get_userstatus_size(int friendnumber); // copy friendnumber's userstatus into buf, truncating if size is over maxlen // get the size you need to allocate from m_get_userstatus_size int m_copy_userstatus(int friendnumber, uint8_t * buf, uint32_t maxlen); //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) void m_callback_friendrequest(void (*function)(uint8_t *, uint8_t *, uint16_t)); //set the function that will be executed when a message from a friend is received. //function format is: function(int friendnumber, uint8_t * message, uint32_t length) void m_callback_friendmessage(void (*function)(int, uint8_t *, uint16_t)); // set the callback for name changes // function(int friendnumber, uint8_t *newname, uint16_t length) // you are not responsible for freeing newname void m_callback_namechange(void (*function)(int, uint8_t *, uint16_t)); // set the callback for user status changes // function(int friendnumber, uint8_t *newstatus, uint16_t length) // you are not responsible for freeing newstatus void m_callback_userstatus(void (*function)(int, uint8_t *, uint16_t)); //run this at startup void initMessenger(); //the main loop that needs to be run at least 200 times per second. void doMessenger(); //SAVING AND LOADING FUNCTIONS: //returns the size of the messenger data (for saving) uint32_t Messenger_size(); //save the messenger in data (must be allocated memory of size Messenger_size()) void Messenger_save(uint8_t * data); //load the messenger from data of size length. int Messenger_load(uint8_t * data, uint32_t length); #endif