diff options
Diffstat (limited to 'core/Messenger.c')
-rw-r--r-- | core/Messenger.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/core/Messenger.c b/core/Messenger.c index ede8f718..bf87a3e4 100644 --- a/core/Messenger.c +++ b/core/Messenger.c | |||
@@ -245,6 +245,21 @@ uint32_t m_sendmessage_withid(int friendnumber, uint32_t theid, uint8_t *message | |||
245 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1 + sizeof(theid)); | 245 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1 + sizeof(theid)); |
246 | } | 246 | } |
247 | 247 | ||
248 | /* send an action to an online friend | ||
249 | return 1 if packet was successfully put into the send queue | ||
250 | return 0 if it was not */ | ||
251 | int m_sendaction(int friendnumber, uint8_t *action, uint32_t length) | ||
252 | { | ||
253 | if (friendnumber < 0 || friendnumber >= numfriends) | ||
254 | return 0; | ||
255 | if (length >= MAX_DATA_SIZE || friendlist[friendnumber].status != FRIEND_ONLINE) | ||
256 | return 0; | ||
257 | uint8_t temp[MAX_DATA_SIZE]; | ||
258 | temp[0] = PACKET_ID_ACTION; | ||
259 | memcpy(temp + 1, action, length); | ||
260 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1); | ||
261 | } | ||
262 | |||
248 | /* send a name packet to friendnumber | 263 | /* send a name packet to friendnumber |
249 | length is the length with the NULL terminator*/ | 264 | length is the length with the NULL terminator*/ |
250 | static int m_sendname(int friendnumber, uint8_t * name, uint16_t length) | 265 | static int m_sendname(int friendnumber, uint8_t * name, uint16_t length) |
@@ -445,6 +460,14 @@ void m_callback_friendmessage(void (*function)(int, uint8_t *, uint16_t)) | |||
445 | friend_message_isset = 1; | 460 | friend_message_isset = 1; |
446 | } | 461 | } |
447 | 462 | ||
463 | static void (*friend_action)(int, uint8_t *, uint16_t); | ||
464 | static uint8_t friend_action_isset = 0; | ||
465 | void m_callback_action(void (*function)(int, uint8_t *, uint16_t)) | ||
466 | { | ||
467 | friend_action = function; | ||
468 | friend_action_isset = 1; | ||
469 | } | ||
470 | |||
448 | static void (*friend_namechange)(int, uint8_t *, uint16_t); | 471 | static void (*friend_namechange)(int, uint8_t *, uint16_t); |
449 | static uint8_t friend_namechange_isset = 0; | 472 | static uint8_t friend_namechange_isset = 0; |
450 | void m_callback_namechange(void (*function)(int, uint8_t *, uint16_t)) | 473 | void m_callback_namechange(void (*function)(int, uint8_t *, uint16_t)) |
@@ -589,6 +612,11 @@ static void doFriends(void) | |||
589 | (*friend_message)(i, temp + 5, len - 5); | 612 | (*friend_message)(i, temp + 5, len - 5); |
590 | break; | 613 | break; |
591 | } | 614 | } |
615 | case PACKET_ID_ACTION: { | ||
616 | if (friend_action_isset) | ||
617 | (*friend_action)(i, temp + 1, len - 1); | ||
618 | break; | ||
619 | } | ||
592 | case PACKET_ID_RECEIPT: { | 620 | case PACKET_ID_RECEIPT: { |
593 | uint32_t msgid; | 621 | uint32_t msgid; |
594 | if (len < 1 + sizeof(msgid)) | 622 | if (len < 1 + sizeof(msgid)) |