summaryrefslogtreecommitdiff
path: root/toxcore/tox.c
diff options
context:
space:
mode:
authorJfreegman <jfreegman@gmail.com>2016-09-17 17:32:25 -0400
committerJfreegman <jfreegman@gmail.com>2016-09-17 19:11:28 -0400
commit8e43ca834cc0a5b2f904ce2589154c2f17bd12ce (patch)
treee88701e5dfe6a623c7fe7f60ba2ddb304ffadc07 /toxcore/tox.c
parentc0397a0a4614671679d409c428b47549a01fdf7f (diff)
Complete old groupchat conversion to new API
Diffstat (limited to 'toxcore/tox.c')
-rw-r--r--toxcore/tox.c334
1 files changed, 334 insertions, 0 deletions
diff --git a/toxcore/tox.c b/toxcore/tox.c
index b9bab973..fa53f35e 100644
--- a/toxcore/tox.c
+++ b/toxcore/tox.c
@@ -1216,6 +1216,340 @@ void tox_callback_file_recv_chunk(Tox *tox, tox_file_recv_chunk_cb *callback)
1216 callback_file_data(m, callback); 1216 callback_file_data(m, callback);
1217} 1217}
1218 1218
1219void tox_callback_conference_invite(Tox *tox, tox_conference_invite_cb *callback, void *user_data)
1220{
1221 Messenger *m = tox;
1222 g_callback_group_invite(m->group_chat_object, (void (*)(Messenger * m, uint32_t, int, const uint8_t *, size_t,
1223 void *))callback, user_data);
1224}
1225
1226void tox_callback_conference_message(Tox *tox, tox_conference_message_cb *callback, void *user_data)
1227{
1228 Messenger *m = tox;
1229 g_callback_group_message(m->group_chat_object, (void (*)(Messenger * m, uint32_t, uint32_t, int, const uint8_t *,
1230 size_t, void *))callback, user_data);
1231}
1232
1233void tox_callback_conference_title(Tox *tox, tox_conference_title_cb *callback, void *user_data)
1234{
1235 Messenger *m = tox;
1236 g_callback_group_title(m->group_chat_object, callback, user_data);
1237}
1238
1239void tox_callback_conference_namelist_change(Tox *tox, tox_conference_namelist_change_cb *callback, void *user_data)
1240{
1241 Messenger *m = tox;
1242 g_callback_group_namelistchange(m->group_chat_object, (void (*)(struct Messenger *, int, int, uint8_t,
1243 void *))callback, user_data);
1244}
1245
1246uint32_t tox_conference_new(Tox *tox, TOX_ERR_CONFERENCE_NEW *error)
1247{
1248 Messenger *m = tox;
1249 int ret = add_groupchat(m->group_chat_object, GROUPCHAT_TYPE_TEXT);
1250
1251 if (ret == -1) {
1252 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_NEW_INIT);
1253 return UINT32_MAX;
1254 }
1255
1256 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_NEW_OK);
1257 return ret;
1258}
1259
1260bool tox_conference_delete(Tox *tox, uint32_t conference_number, TOX_ERR_CONFERENCE_DELETE *error)
1261{
1262 Messenger *m = tox;
1263 int ret = del_groupchat(m->group_chat_object, conference_number);
1264
1265 if (ret == -1) {
1266 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_DELETE_CONFERENCE_NOT_FOUND);
1267 return false;
1268 }
1269
1270 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_DELETE_OK);
1271 return true;
1272}
1273
1274uint32_t tox_conference_peer_count(const Tox *tox, uint32_t conference_number, TOX_ERR_CONFERENCE_PEER_QUERY *error)
1275{
1276 const Messenger *m = tox;
1277 int ret = group_number_peers(m->group_chat_object, conference_number);
1278
1279 if (ret == -1) {
1280 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1281 return UINT32_MAX;
1282 }
1283
1284 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1285 return ret;
1286}
1287
1288size_t tox_conference_peer_get_name_size(const Tox *tox, uint32_t conference_number, uint32_t peer_number,
1289 TOX_ERR_CONFERENCE_PEER_QUERY *error)
1290{
1291 const Messenger *m = tox;
1292 int ret = group_peername_size(m->group_chat_object, conference_number, peer_number);
1293
1294 switch (ret) {
1295 case -1:
1296 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1297 return -1;
1298
1299 case -2:
1300 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_PEER_NOT_FOUND);
1301 return -1;
1302 }
1303
1304 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1305 return ret;
1306}
1307
1308bool tox_conference_peer_get_name(const Tox *tox, uint32_t conference_number, uint32_t peer_number, uint8_t *name,
1309 TOX_ERR_CONFERENCE_PEER_QUERY *error)
1310{
1311 const Messenger *m = tox;
1312 int ret = group_peername(m->group_chat_object, conference_number, peer_number, name);
1313
1314 switch (ret) {
1315 case -1:
1316 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1317 return false;
1318
1319 case -2:
1320 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_PEER_NOT_FOUND);
1321 return false;
1322 }
1323
1324 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1325 return true;
1326}
1327
1328bool tox_conference_peer_get_public_key(const Tox *tox, uint32_t conference_number, uint32_t peer_number,
1329 uint8_t *public_key, TOX_ERR_CONFERENCE_PEER_QUERY *error)
1330{
1331 const Messenger *m = tox;
1332 int ret = group_peer_pubkey(m->group_chat_object, conference_number, peer_number, public_key);
1333
1334 switch (ret) {
1335 case -1:
1336 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1337 return false;
1338
1339 case -2:
1340 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_PEER_NOT_FOUND);
1341 return false;
1342 }
1343
1344 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1345 return true;
1346}
1347
1348bool tox_conference_peer_number_is_ours(const Tox *tox, uint32_t conference_number, uint32_t peer_number,
1349 TOX_ERR_CONFERENCE_PEER_QUERY *error)
1350{
1351 const Messenger *m = tox;
1352 int ret = group_peernumber_is_ours(m->group_chat_object, conference_number, peer_number);
1353
1354 switch (ret) {
1355 case -1:
1356 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_CONFERENCE_NOT_FOUND);
1357 return false;
1358
1359 case -2:
1360 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_PEER_NOT_FOUND);
1361 return false;
1362
1363 case -3:
1364 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_NO_CONNECTION);
1365 return false;
1366 }
1367
1368 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_PEER_QUERY_OK);
1369 return ret;
1370}
1371
1372bool tox_conference_invite(Tox *tox, uint32_t friend_number, uint32_t conference_number,
1373 TOX_ERR_CONFERENCE_INVITE *error)
1374{
1375 Messenger *m = tox;
1376 int ret = invite_friend(m->group_chat_object, friend_number, conference_number);
1377
1378 switch (ret) {
1379 case -1:
1380 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_INVITE_CONFERENCE_NOT_FOUND);
1381 return false;
1382
1383 case -2:
1384 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_INVITE_FAIL_SEND);
1385 return false;
1386 }
1387
1388 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_INVITE_OK);
1389 return true;
1390}
1391
1392uint32_t tox_conference_join(Tox *tox, uint32_t friend_number, const uint8_t *cookie, size_t length,
1393 TOX_ERR_CONFERENCE_JOIN *error)
1394{
1395 Messenger *m = tox;
1396 int ret = join_groupchat(m->group_chat_object, friend_number, GROUPCHAT_TYPE_TEXT, cookie, length);
1397
1398 switch (ret) {
1399 case -1:
1400 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_JOIN_INVALID_LENGTH);
1401 return UINT32_MAX;
1402
1403 case -2:
1404 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_JOIN_WRONG_TYPE);
1405 return UINT32_MAX;
1406
1407 case -3:
1408 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_JOIN_FRIEND_NOT_FOUND);
1409 return UINT32_MAX;
1410
1411 case -4:
1412 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_JOIN_DUPLICATE);
1413 return UINT32_MAX;
1414
1415 case -5:
1416 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_JOIN_INIT_FAIL);
1417 return UINT32_MAX;
1418
1419 case -6:
1420 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_JOIN_FAIL_SEND);
1421 return UINT32_MAX;
1422 }
1423
1424 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_JOIN_OK);
1425 return ret;
1426}
1427
1428bool tox_conference_send_message(Tox *tox, uint32_t conference_number, TOX_MESSAGE_TYPE type, const uint8_t *message,
1429 size_t length, TOX_ERR_CONFERENCE_SEND_MESSAGE *error)
1430{
1431 Messenger *m = tox;
1432 int ret = 0;
1433
1434 if (type == TOX_MESSAGE_TYPE_NORMAL) {
1435 ret = group_message_send(m->group_chat_object, conference_number, message, length);
1436 } else {
1437 ret = group_action_send(m->group_chat_object, conference_number, message, length);
1438 }
1439
1440 switch (ret) {
1441 case -1:
1442 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_SEND_MESSAGE_CONFERENCE_NOT_FOUND);
1443 return false;
1444
1445 case -2:
1446 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_SEND_MESSAGE_TOO_LONG);
1447 return false;
1448
1449 case -3:
1450 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_SEND_MESSAGE_NO_CONNECTION);
1451 return false;
1452
1453 case -4:
1454 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_SEND_MESSAGE_FAIL_SEND);
1455 return false;
1456 }
1457
1458 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_SEND_MESSAGE_OK);
1459 return true;
1460}
1461
1462size_t tox_conference_get_title_size(const Tox *tox, uint32_t conference_number, TOX_ERR_CONFERENCE_TITLE *error)
1463{
1464 const Messenger *m = tox;
1465 int ret = group_title_get_size(m->group_chat_object, conference_number);
1466
1467 switch (ret) {
1468 case -1:
1469 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_CONFERENCE_NOT_FOUND);
1470 return -1;
1471
1472 case -2:
1473 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_INVALID_LENGTH);
1474 return -1;
1475 }
1476
1477 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_OK);
1478 return ret;
1479}
1480
1481bool tox_conference_get_title(const Tox *tox, uint32_t conference_number, uint8_t *title,
1482 TOX_ERR_CONFERENCE_TITLE *error)
1483{
1484 const Messenger *m = tox;
1485 int ret = group_title_get(m->group_chat_object, conference_number, title);
1486
1487 switch (ret) {
1488 case -1:
1489 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_CONFERENCE_NOT_FOUND);
1490 return false;
1491
1492 case -2:
1493 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_INVALID_LENGTH);
1494 return false;
1495 }
1496
1497 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_OK);
1498 return true;
1499}
1500
1501bool tox_conference_set_title(Tox *tox, uint32_t conference_number, const uint8_t *title, size_t length,
1502 TOX_ERR_CONFERENCE_TITLE *error)
1503{
1504 Messenger *m = tox;
1505 int ret = group_title_send(m->group_chat_object, conference_number, title, length);
1506
1507 switch (ret) {
1508 case -1:
1509 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_CONFERENCE_NOT_FOUND);
1510 return false;
1511
1512 case -2:
1513 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_INVALID_LENGTH);
1514 return false;
1515
1516 case -3:
1517 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_FAIL_SEND);
1518 return false;
1519 }
1520
1521 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_TITLE_OK);
1522 return true;
1523}
1524
1525size_t tox_conference_get_chatlist_size(const Tox *tox)
1526{
1527 const Messenger *m = tox;
1528 return count_chatlist(m->group_chat_object);
1529}
1530
1531void tox_conference_get_chatlist(const Tox *tox, uint32_t *chatlist)
1532{
1533 const Messenger *m = tox;
1534 size_t list_size = tox_conference_get_chatlist_size(tox);
1535 copy_chatlist(m->group_chat_object, chatlist, list_size);
1536}
1537
1538TOX_CONFERENCE_TYPE tox_conference_get_type(const Tox *tox, uint32_t conference_number,
1539 TOX_ERR_CONFERENCE_GET_TYPE *error)
1540{
1541 const Messenger *m = tox;
1542 int ret = group_get_type(m->group_chat_object, conference_number);
1543
1544 if (ret == -1) {
1545 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_GET_TYPE_CONFERENCE_NOT_FOUND);
1546 return -1;
1547 }
1548
1549 SET_ERROR_PARAMETER(error, TOX_ERR_CONFERENCE_GET_TYPE_OK);
1550 return ret;
1551}
1552
1219static void set_custom_packet_error(int ret, TOX_ERR_FRIEND_CUSTOM_PACKET *error) 1553static void set_custom_packet_error(int ret, TOX_ERR_FRIEND_CUSTOM_PACKET *error)
1220{ 1554{
1221 switch (ret) { 1555 switch (ret) {