summaryrefslogtreecommitdiff
path: root/toxcore/tox.c
diff options
context:
space:
mode:
authorzugz (tox) <mbays+tox@sdf.org>2018-10-31 19:21:00 +0100
committeriphydf <iphydf@users.noreply.github.com>2019-01-05 15:01:29 +0000
commita122ee9e01a1614366350537e1b49299eb355c1d (patch)
tree71dac74aa73f90bce66b8cc9299408e0c4e52c42 /toxcore/tox.c
parentebf3a82de8709270cb46266f1c06a3c1cee0649d (diff)
Expose offline conference peers in API
Diffstat (limited to 'toxcore/tox.c')
-rw-r--r--toxcore/tox.c112
1 files changed, 106 insertions, 6 deletions
diff --git a/toxcore/tox.c b/toxcore/tox.c
index 88a9bd50..d848102e 100644
--- a/toxcore/tox.c
+++ b/toxcore/tox.c
@@ -713,6 +713,7 @@ Tox_Connection tox_self_get_connection_status(const Tox *tox)
713{ 713{
714 const Messenger *m = tox->m; 714 const Messenger *m = tox->m;
715 715
716 // TODO(zugz): this can be const. Similarly throughout the file.
716 unsigned int ret = onion_connection_status(m->onion_c); 717 unsigned int ret = onion_connection_status(m->onion_c);
717 718
718 if (ret == 2) { 719 if (ret == 2) {
@@ -1533,8 +1534,7 @@ uint32_t tox_conference_new(Tox *tox, Tox_Err_Conference_New *error)
1533bool tox_conference_delete(Tox *tox, uint32_t conference_number, Tox_Err_Conference_Delete *error) 1534bool tox_conference_delete(Tox *tox, uint32_t conference_number, Tox_Err_Conference_Delete *error)
1534{ 1535{
1535 Messenger *m = tox->m; 1536 Messenger *m = tox->m;
1536 group_leave(m->conferences_object, conference_number); 1537 int ret = del_groupchat(m->conferences_object, conference_number, true);
1537 int ret = del_groupchat(m->conferences_object, conference_number);
1538 1538
1539 if (ret == -1) { 1539 if (ret == -1) {
1540 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_DELETE_CONFERENCE_NOT_FOUND); 1540 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_DELETE_CONFERENCE_NOT_FOUND);
@@ -1548,7 +1548,7 @@ bool tox_conference_delete(Tox *tox, uint32_t conference_number, Tox_Err_Confere
1548uint32_t tox_conference_peer_count(const Tox *tox, uint32_t conference_number, Tox_Err_Conference_Peer_Query *error) 1548uint32_t tox_conference_peer_count(const Tox *tox, uint32_t conference_number, Tox_Err_Conference_Peer_Query *error)
1549{ 1549{
1550 const Messenger *m = tox->m; 1550 const Messenger *m = tox->m;
1551 int ret = group_number_peers(m->conferences_object, conference_number); 1551 int ret = group_number_peers(m->conferences_object, conference_number, false);
1552 1552
1553 if (ret == -1) { 1553 if (ret == -1) {
1554 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND); 1554 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
@@ -1563,7 +1563,7 @@ size_t tox_conference_peer_get_name_size(const Tox *tox, uint32_t conference_num
1563 Tox_Err_Conference_Peer_Query *error) 1563 Tox_Err_Conference_Peer_Query *error)
1564{ 1564{
1565 const Messenger *m = tox->m; 1565 const Messenger *m = tox->m;
1566 int ret = group_peername_size(m->conferences_object, conference_number, peer_number); 1566 int ret = group_peername_size(m->conferences_object, conference_number, peer_number, false);
1567 1567
1568 switch (ret) { 1568 switch (ret) {
1569 case -1: 1569 case -1:
@@ -1583,7 +1583,7 @@ bool tox_conference_peer_get_name(const Tox *tox, uint32_t conference_number, ui
1583 Tox_Err_Conference_Peer_Query *error) 1583 Tox_Err_Conference_Peer_Query *error)
1584{ 1584{
1585 const Messenger *m = tox->m; 1585 const Messenger *m = tox->m;
1586 int ret = group_peername(m->conferences_object, conference_number, peer_number, name); 1586 int ret = group_peername(m->conferences_object, conference_number, peer_number, name, false);
1587 1587
1588 switch (ret) { 1588 switch (ret) {
1589 case -1: 1589 case -1:
@@ -1603,7 +1603,7 @@ bool tox_conference_peer_get_public_key(const Tox *tox, uint32_t conference_numb
1603 uint8_t *public_key, Tox_Err_Conference_Peer_Query *error) 1603 uint8_t *public_key, Tox_Err_Conference_Peer_Query *error)
1604{ 1604{
1605 const Messenger *m = tox->m; 1605 const Messenger *m = tox->m;
1606 int ret = group_peer_pubkey(m->conferences_object, conference_number, peer_number, public_key); 1606 int ret = group_peer_pubkey(m->conferences_object, conference_number, peer_number, public_key, false);
1607 1607
1608 switch (ret) { 1608 switch (ret) {
1609 case -1: 1609 case -1:
@@ -1643,6 +1643,106 @@ bool tox_conference_peer_number_is_ours(const Tox *tox, uint32_t conference_numb
1643 return ret; 1643 return ret;
1644} 1644}
1645 1645
1646uint32_t tox_conference_offline_peer_count(const Tox *tox, uint32_t conference_number,
1647 Tox_Err_Conference_Peer_Query *error)
1648{
1649 const Messenger *m = tox->m;
1650 int ret = group_number_peers(m->conferences_object, conference_number, true);
1651
1652 if (ret == -1) {
1653 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1654 return UINT32_MAX;
1655 }
1656
1657 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1658 return ret;
1659}
1660
1661size_t tox_conference_offline_peer_get_name_size(const Tox *tox, uint32_t conference_number,
1662 uint32_t offline_peer_number,
1663 Tox_Err_Conference_Peer_Query *error)
1664{
1665 const Messenger *m = tox->m;
1666 int ret = group_peername_size(m->conferences_object, conference_number, offline_peer_number, true);
1667
1668 switch (ret) {
1669 case -1:
1670 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1671 return -1;
1672
1673 case -2:
1674 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_PEER_NOT_FOUND);
1675 return -1;
1676 }
1677
1678 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1679 return ret;
1680}
1681
1682bool tox_conference_offline_peer_get_name(const Tox *tox, uint32_t conference_number, uint32_t offline_peer_number,
1683 uint8_t *name,
1684 Tox_Err_Conference_Peer_Query *error)
1685{
1686 const Messenger *m = tox->m;
1687 int ret = group_peername(m->conferences_object, conference_number, offline_peer_number, name, true);
1688
1689 switch (ret) {
1690 case -1:
1691 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1692 return false;
1693
1694 case -2:
1695 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_PEER_NOT_FOUND);
1696 return false;
1697 }
1698
1699 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1700 return true;
1701}
1702
1703bool tox_conference_offline_peer_get_public_key(const Tox *tox, uint32_t conference_number,
1704 uint32_t offline_peer_number,
1705 uint8_t *public_key, Tox_Err_Conference_Peer_Query *error)
1706{
1707 const Messenger *m = tox->m;
1708 int ret = group_peer_pubkey(m->conferences_object, conference_number, offline_peer_number, public_key, true);
1709
1710 switch (ret) {
1711 case -1:
1712 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1713 return false;
1714
1715 case -2:
1716 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_PEER_NOT_FOUND);
1717 return false;
1718 }
1719
1720 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1721 return true;
1722}
1723
1724uint64_t tox_conference_offline_peer_get_last_active(const Tox *tox, uint32_t conference_number,
1725 uint32_t offline_peer_number,
1726 Tox_Err_Conference_Peer_Query *error)
1727{
1728 const Messenger *m = tox->m;
1729 uint64_t last_active = UINT64_MAX;
1730 int ret = group_frozen_last_active(m->conferences_object, conference_number, offline_peer_number, &last_active);
1731
1732 switch (ret) {
1733 case -1:
1734 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1735 return UINT64_MAX;
1736
1737 case -2:
1738 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_PEER_NOT_FOUND);
1739 return UINT64_MAX;
1740 }
1741
1742 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1743 return last_active;
1744}
1745
1646bool tox_conference_invite(Tox *tox, uint32_t friend_number, uint32_t conference_number, 1746bool tox_conference_invite(Tox *tox, uint32_t friend_number, uint32_t conference_number,
1647 Tox_Err_Conference_Invite *error) 1747 Tox_Err_Conference_Invite *error)
1648{ 1748{