summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.c
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r--toxcore/Messenger.c44
1 files changed, 30 insertions, 14 deletions
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c
index a9d5e6a1..e5298b31 100644
--- a/toxcore/Messenger.c
+++ b/toxcore/Messenger.c
@@ -366,7 +366,8 @@ static int do_receipts(Messenger *m, int32_t friendnumber)
366 while (receipts) { 366 while (receipts) {
367 struct Receipts *temp_r = receipts->next; 367 struct Receipts *temp_r = receipts->next;
368 368
369 if (cryptpacket_received(m->net_crypto, friend_connection_crypt_connection_id(m->fr_c, m->friendlist[friendnumber].friendcon_id), receipts->packet_num) == -1) 369 if (cryptpacket_received(m->net_crypto, friend_connection_crypt_connection_id(m->fr_c,
370 m->friendlist[friendnumber].friendcon_id), receipts->packet_num) == -1)
370 break; 371 break;
371 372
372 if (m->read_receipt) 373 if (m->read_receipt)
@@ -450,15 +451,25 @@ int m_friend_exists(const Messenger *m, int32_t friendnumber)
450 return 1; 451 return 1;
451} 452}
452 453
453 454/* Send a packet_id message.
454static uint32_t send_message_generic(Messenger *m, int32_t friendnumber, const uint8_t *message, uint32_t length, 455 *
455 uint8_t packet_id) 456 * return -1 if friend not valid.
457 * return -2 if too large.
458 * return -3 if friend not online.
459 * return -4 if send failed (because queue is full).
460 * return 0 if success.
461 */
462static int send_message_generic(Messenger *m, int32_t friendnumber, const uint8_t *message, uint32_t length,
463 uint8_t packet_id, uint32_t *message_id)
456{ 464{
457 if (friend_not_valid(m, friendnumber)) 465 if (friend_not_valid(m, friendnumber))
458 return 0; 466 return -1;
459 467
460 if (length >= MAX_CRYPTO_DATA_SIZE || m->friendlist[friendnumber].status != FRIEND_ONLINE) 468 if (length >= MAX_CRYPTO_DATA_SIZE)
461 return 0; 469 return -2;
470
471 if (m->friendlist[friendnumber].status != FRIEND_ONLINE)
472 return -3;
462 473
463 uint8_t packet[length + 1]; 474 uint8_t packet[length + 1];
464 packet[0] = packet_id; 475 packet[0] = packet_id;
@@ -466,10 +477,11 @@ static uint32_t send_message_generic(Messenger *m, int32_t friendnumber, const u
466 if (length != 0) 477 if (length != 0)
467 memcpy(packet + 1, message, length); 478 memcpy(packet + 1, message, length);
468 479
469 int64_t packet_num = write_cryptpacket(m->net_crypto, friend_connection_crypt_connection_id(m->fr_c, m->friendlist[friendnumber].friendcon_id), packet, length + 1, 0); 480 int64_t packet_num = write_cryptpacket(m->net_crypto, friend_connection_crypt_connection_id(m->fr_c,
481 m->friendlist[friendnumber].friendcon_id), packet, length + 1, 0);
470 482
471 if (packet_num == -1) 483 if (packet_num == -1)
472 return 0; 484 return -4;
473 485
474 uint32_t msg_id = ++m->friendlist[friendnumber].message_id; 486 uint32_t msg_id = ++m->friendlist[friendnumber].message_id;
475 487
@@ -478,7 +490,11 @@ static uint32_t send_message_generic(Messenger *m, int32_t friendnumber, const u
478 } 490 }
479 491
480 add_receipt(m, friendnumber, packet_num, msg_id); 492 add_receipt(m, friendnumber, packet_num, msg_id);
481 return msg_id; 493
494 if (message_id)
495 *message_id = msg_id;
496
497 return 0;
482} 498}
483 499
484/* Send a text chat message to an online friend. 500/* Send a text chat message to an online friend.
@@ -486,9 +502,9 @@ static uint32_t send_message_generic(Messenger *m, int32_t friendnumber, const u
486 * return the message id if packet was successfully put into the send queue. 502 * return the message id if packet was successfully put into the send queue.
487 * return 0 if it was not. 503 * return 0 if it was not.
488 */ 504 */
489uint32_t m_sendmessage(Messenger *m, int32_t friendnumber, const uint8_t *message, uint32_t length) 505int m_sendmessage(Messenger *m, int32_t friendnumber, const uint8_t *message, uint32_t length, uint32_t *message_id)
490{ 506{
491 return send_message_generic(m, friendnumber, message, length, PACKET_ID_MESSAGE); 507 return send_message_generic(m, friendnumber, message, length, PACKET_ID_MESSAGE, message_id);
492} 508}
493 509
494/* Send an action to an online friend. 510/* Send an action to an online friend.
@@ -496,9 +512,9 @@ uint32_t m_sendmessage(Messenger *m, int32_t friendnumber, const uint8_t *messag
496 * return the message id if packet was successfully put into the send queue. 512 * return the message id if packet was successfully put into the send queue.
497 * return 0 if it was not. 513 * return 0 if it was not.
498 */ 514 */
499uint32_t m_sendaction(Messenger *m, int32_t friendnumber, const uint8_t *action, uint32_t length) 515int m_sendaction(Messenger *m, int32_t friendnumber, const uint8_t *action, uint32_t length, uint32_t *message_id)
500{ 516{
501 return send_message_generic(m, friendnumber, action, length, PACKET_ID_ACTION); 517 return send_message_generic(m, friendnumber, action, length, PACKET_ID_ACTION, message_id);
502} 518}
503 519
504/* Send a name packet to friendnumber. 520/* Send a name packet to friendnumber.