diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/Messenger.c | 28 | ||||
-rw-r--r-- | core/Messenger.h | 10 |
2 files changed, 38 insertions, 0 deletions
diff --git a/core/Messenger.c b/core/Messenger.c index 90dfe48d..af4fd797 100644 --- a/core/Messenger.c +++ b/core/Messenger.c | |||
@@ -247,6 +247,21 @@ uint32_t m_sendmessage_withid(int friendnumber, uint32_t theid, uint8_t *message | |||
247 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1 + sizeof(theid)); | 247 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1 + sizeof(theid)); |
248 | } | 248 | } |
249 | 249 | ||
250 | /* send an action to an online friend | ||
251 | return 1 if packet was successfully put into the send queue | ||
252 | return 0 if it was not */ | ||
253 | int m_sendaction(int friendnumber, uint8_t *action, uint32_t length) | ||
254 | { | ||
255 | if (friendnumber < 0 || friendnumber >= numfriends) | ||
256 | return 0; | ||
257 | if (length >= MAX_DATA_SIZE || friendlist[friendnumber].status != FRIEND_ONLINE) | ||
258 | return 0; | ||
259 | uint8_t temp[MAX_DATA_SIZE]; | ||
260 | temp[0] = PACKET_ID_ACTION; | ||
261 | memcpy(temp + 1, action, length); | ||
262 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1); | ||
263 | } | ||
264 | |||
250 | /* send a name packet to friendnumber | 265 | /* send a name packet to friendnumber |
251 | length is the length with the NULL terminator*/ | 266 | length is the length with the NULL terminator*/ |
252 | static int m_sendname(int friendnumber, uint8_t * name, uint16_t length) | 267 | static int m_sendname(int friendnumber, uint8_t * name, uint16_t length) |
@@ -447,6 +462,14 @@ void m_callback_friendmessage(void (*function)(int, uint8_t *, uint16_t)) | |||
447 | friend_message_isset = 1; | 462 | friend_message_isset = 1; |
448 | } | 463 | } |
449 | 464 | ||
465 | static void (*friend_action)(int, uint8_t *, uint16_t); | ||
466 | static uint8_t friend_action_isset = 0; | ||
467 | void m_callback_action(void (*function)(int, uint8_t *, uint16_t)) | ||
468 | { | ||
469 | friend_action = function; | ||
470 | friend_action_isset = 1; | ||
471 | } | ||
472 | |||
450 | static void (*friend_namechange)(int, uint8_t *, uint16_t); | 473 | static void (*friend_namechange)(int, uint8_t *, uint16_t); |
451 | static uint8_t friend_namechange_isset = 0; | 474 | static uint8_t friend_namechange_isset = 0; |
452 | void m_callback_namechange(void (*function)(int, uint8_t *, uint16_t)) | 475 | void m_callback_namechange(void (*function)(int, uint8_t *, uint16_t)) |
@@ -606,6 +629,11 @@ static void doFriends(void) | |||
606 | (*friend_message)(i, temp + 5, len - 5); | 629 | (*friend_message)(i, temp + 5, len - 5); |
607 | break; | 630 | break; |
608 | } | 631 | } |
632 | case PACKET_ID_ACTION: { | ||
633 | if (friend_action_isset) | ||
634 | (*friend_action)(i, temp + 1, len - 1); | ||
635 | break; | ||
636 | } | ||
609 | case PACKET_ID_RECEIPT: { | 637 | case PACKET_ID_RECEIPT: { |
610 | uint32_t msgid; | 638 | uint32_t msgid; |
611 | if (len < 1 + sizeof(msgid)) | 639 | if (len < 1 + sizeof(msgid)) |
diff --git a/core/Messenger.h b/core/Messenger.h index 3044122b..55c86682 100644 --- a/core/Messenger.h +++ b/core/Messenger.h | |||
@@ -43,6 +43,7 @@ extern "C" { | |||
43 | #define PACKET_ID_USERSTATUS 50 | 43 | #define PACKET_ID_USERSTATUS 50 |
44 | #define PACKET_ID_RECEIPT 65 | 44 | #define PACKET_ID_RECEIPT 65 |
45 | #define PACKET_ID_MESSAGE 64 | 45 | #define PACKET_ID_MESSAGE 64 |
46 | #define PACKET_ID_ACTION 63 | ||
46 | 47 | ||
47 | /* status definitions */ | 48 | /* status definitions */ |
48 | #define FRIEND_ONLINE 4 | 49 | #define FRIEND_ONLINE 4 |
@@ -122,6 +123,11 @@ int m_friendstatus(int friendnumber); | |||
122 | uint32_t m_sendmessage(int friendnumber, uint8_t *message, uint32_t length); | 123 | uint32_t m_sendmessage(int friendnumber, uint8_t *message, uint32_t length); |
123 | uint32_t m_sendmessage_withid(int friendnumber, uint32_t theid, uint8_t *message, uint32_t length); | 124 | uint32_t m_sendmessage_withid(int friendnumber, uint32_t theid, uint8_t *message, uint32_t length); |
124 | 125 | ||
126 | /* send an action to an online friend | ||
127 | returns 1 if packet was successfully put into the send queue | ||
128 | return 0 if it was not */ | ||
129 | int m_sendaction(int friendnumber, uint8_t *action, uint32_t length); | ||
130 | |||
125 | /* Set our nickname | 131 | /* Set our nickname |
126 | name must be a string of maximum MAX_NAME_LENGTH length. | 132 | name must be a string of maximum MAX_NAME_LENGTH length. |
127 | length must be at least 1 byte | 133 | length must be at least 1 byte |
@@ -178,6 +184,10 @@ void m_callback_friendrequest(void (*function)(uint8_t *, uint8_t *, uint16_t)); | |||
178 | function format is: function(int friendnumber, uint8_t * message, uint32_t length) */ | 184 | function format is: function(int friendnumber, uint8_t * message, uint32_t length) */ |
179 | void m_callback_friendmessage(void (*function)(int, uint8_t *, uint16_t)); | 185 | void m_callback_friendmessage(void (*function)(int, uint8_t *, uint16_t)); |
180 | 186 | ||
187 | /* set the function that will be executed when an action from a friend is received. | ||
188 | function format is: function(int friendnumber, uint8_t * action, uint32_t length) */ | ||
189 | void m_callback_action(void (*function)(int, uint8_t *, uint16_t)); | ||
190 | |||
181 | /* set the callback for name changes | 191 | /* set the callback for name changes |
182 | function(int friendnumber, uint8_t *newname, uint16_t length) | 192 | function(int friendnumber, uint8_t *newname, uint16_t length) |
183 | you are not responsible for freeing newname */ | 193 | you are not responsible for freeing newname */ |