diff options
Diffstat (limited to 'toxcore/Messenger.c')
-rw-r--r-- | toxcore/Messenger.c | 44 |
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. | |
454 | static 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 | */ | ||
462 | static 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 | */ |
489 | uint32_t m_sendmessage(Messenger *m, int32_t friendnumber, const uint8_t *message, uint32_t length) | 505 | int 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 | */ |
499 | uint32_t m_sendaction(Messenger *m, int32_t friendnumber, const uint8_t *action, uint32_t length) | 515 | int 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. |