Make Message received receipts stateless

This commit is contained in:
Gregory Mullen (grayhatter) 2016-08-20 15:25:26 -07:00
parent 3f0c101771
commit a6f2e9539b
No known key found for this signature in database
GPG Key ID: 5A0E3F964ADE299B
5 changed files with 13 additions and 14 deletions

View File

@ -1435,7 +1435,7 @@ namespace friend {
* This event is triggered when the friend receives the message sent with
* ${send.message} with the corresponding message ID.
*/
event read_receipt {
event read_receipt const {
/**
* @param friend_number The friend number of the friend who received the message.
* @param message_id The message ID as returned from ${send.message}

View File

@ -344,7 +344,7 @@ static int friend_received_packet(const Messenger *m, int32_t friendnumber, uint
m->friendlist[friendnumber].friendcon_id), number);
}
static int do_receipts(Messenger *m, int32_t friendnumber)
static int do_receipts(Messenger *m, int32_t friendnumber, void *userdata)
{
if (friend_not_valid(m, friendnumber))
return -1;
@ -357,8 +357,9 @@ static int do_receipts(Messenger *m, int32_t friendnumber)
if (friend_received_packet(m, friendnumber, receipts->packet_num) == -1)
break;
if (m->read_receipt)
(*m->read_receipt)(m, friendnumber, receipts->msg_id, m->read_receipt_userdata);
if (m->read_receipt) {
(*m->read_receipt)(m, friendnumber, receipts->msg_id, userdata);
}
free(receipts);
m->friendlist[friendnumber].receipts_start = temp_r;
@ -796,10 +797,9 @@ void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, uint32_
m->friend_typingchange = function;
}
void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, void *), void *userdata)
void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, void *))
{
m->read_receipt = function;
m->read_receipt_userdata = userdata;
}
void m_callback_connectionstatus(Messenger *m, void (*function)(Messenger *m, uint32_t, unsigned int, void *),
@ -2168,7 +2168,7 @@ static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len, void
return 0;
}
void do_friends(Messenger *m)
static void do_friends(Messenger *m, void *userdata)
{
uint32_t i;
uint64_t temp_time = unix_time();
@ -2217,7 +2217,7 @@ void do_friends(Messenger *m)
}
check_friend_tcp_udp(m, i);
do_receipts(m, i);
do_receipts(m, i, userdata);
do_reqchunk_filecb(m, i);
m->friendlist[i].last_seen_time = (uint64_t) time(NULL);
@ -2311,7 +2311,7 @@ void do_messenger(Messenger *m, void *userdata)
do_net_crypto(m->net_crypto, userdata);
do_onion_client(m->onion_c);
do_friend_connections(m->fr_c);
do_friends(m);
do_friends(m, userdata);
connection_status_cb(m, userdata);
#ifdef TOX_LOGGER

View File

@ -242,7 +242,6 @@ struct Messenger {
void (*friend_userstatuschange)(struct Messenger *m, uint32_t, unsigned int, void *);
void (*friend_typingchange)(struct Messenger *m, uint32_t, _Bool, void *);
void (*read_receipt)(struct Messenger *m, uint32_t, uint32_t, void *);
void *read_receipt_userdata;
void (*friend_connectionstatuschange)(struct Messenger *m, uint32_t, unsigned int, void *);
void *friend_connectionstatuschange_userdata;
void (*friend_connectionstatuschange_internal)(struct Messenger *m, uint32_t, uint8_t, void *);
@ -507,7 +506,7 @@ void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, uint32_
* Since core doesn't track ids for you, receipt may not correspond to any message.
* In that case, you should discard it.
*/
void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, void *), void *userdata);
void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, void *));
/* Set the callback for connection status changes.
* function(uint32_t friendnumber, uint8_t status)

View File

@ -890,10 +890,10 @@ uint32_t tox_friend_send_message(Tox *tox, uint32_t friend_number, TOX_MESSAGE_T
return message_id;
}
void tox_callback_friend_read_receipt(Tox *tox, tox_friend_read_receipt_cb *function, void *user_data)
void tox_callback_friend_read_receipt(Tox *tox, tox_friend_read_receipt_cb *function)
{
Messenger *m = tox;
m_callback_read_receipt(m, function, user_data);
m_callback_read_receipt(m, function);
}
void tox_callback_friend_request(Tox *tox, tox_friend_request_cb *function, void *user_data)

View File

@ -1531,7 +1531,7 @@ typedef void tox_friend_read_receipt_cb(Tox *tox, uint32_t friend_number, uint32
* This event is triggered when the friend receives the message sent with
* tox_friend_send_message with the corresponding message ID.
*/
void tox_callback_friend_read_receipt(Tox *tox, tox_friend_read_receipt_cb *callback, void *user_data);
void tox_callback_friend_read_receipt(Tox *tox, tox_friend_read_receipt_cb *callback);
/*******************************************************************************