From b9455efd8430d3578376400f986e62223f1504b3 Mon Sep 17 00:00:00 2001 From: Jin^eLD Date: Thu, 5 Sep 2013 00:45:36 +0300 Subject: Function for retreiving a list of friend numbers This should allow clients to sync the Tox friend list with their UI/etc. lists. --- toxcore/Messenger.c | 34 ++++++++++++++++++++++++++++++++++ toxcore/Messenger.h | 7 +++++++ toxcore/tox.c | 11 +++++++++++ toxcore/tox.h | 8 ++++++++ 4 files changed, 60 insertions(+) (limited to 'toxcore') diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index f97a3320..90d4e43d 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c @@ -1052,3 +1052,37 @@ int Messenger_load(Messenger *m, uint8_t *data, uint32_t length) return 0; } + +/* Allocate and return a list of valid friend id's. List must be freed by the + * caller. + * + * retun 0 if success. + * return -1 if failure. + */ +int get_friendlist(Messenger *m, int **out_list, uint32_t *out_list_length) +{ + uint32_t i; + + *out_list_length = 0; + + if (m->numfriends == 0) { + *out_list = NULL; + return 0; + } + + *out_list = malloc(m->numfriends * sizeof(int)); + + if (*out_list == NULL) { + return -1; + } + + for (i = 0; i < m->numfriends; i++) { + if (m->friendlist[i].status > 0) { + (*out_list)[i] = i; + (*out_list_length)++; + } + } + + return 0; +} + diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h index fedf2879..649ca894 100644 --- a/toxcore/Messenger.h +++ b/toxcore/Messenger.h @@ -377,5 +377,12 @@ void Messenger_save(Messenger *m, uint8_t *data); /* Load the messenger from data of size length. */ int Messenger_load(Messenger *m, uint8_t *data, uint32_t length); +/* Allocate and return a list of valid friend id's. List must be freed by the + * caller. + * + * retun 0 if success. + * return -1 if failure. + */ +int get_friendlist(Messenger *m, int **out_list, uint32_t *out_list_length); #endif diff --git a/toxcore/tox.c b/toxcore/tox.c index 23ca6572..e55f51ca 100644 --- a/toxcore/tox.c +++ b/toxcore/tox.c @@ -247,6 +247,17 @@ void tox_set_sends_receipts(void *tox, int friendnumber, int yesno) m_set_sends_receipts(m, friendnumber, yesno); } +/* Allocate and return a list of valid friend id's. List must be freed by the + * caller. + * + * retun 0 if success. + * return -1 if failure. + */ +int tox_get_friendlist(void *tox, int **out_list, uint32_t *out_list_length) +{ + Messenger *m = tox; + return get_friendlist(m, out_list, out_list_length); +} /* 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) diff --git a/toxcore/tox.h b/toxcore/tox.h index b17ca36f..bd13b998 100644 --- a/toxcore/tox.h +++ b/toxcore/tox.h @@ -221,6 +221,14 @@ TOX_USERSTATUS tox_get_selfuserstatus(Tox *tox); */ void tox_set_sends_receipts(Tox *tox, int friendnumber, int yesno); +/* Allocate and return a list of valid friend id's. List must be freed by the + * caller. + * + * retun 0 if success. + * return -1 if failure. + */ +int tox_get_friendlist(void *tox, int **out_list, uint32_t *out_list_length); + /* 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) */ -- cgit v1.2.3