summaryrefslogtreecommitdiff
path: root/toxcore/Messenger.h
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/Messenger.h')
-rw-r--r--toxcore/Messenger.h158
1 files changed, 83 insertions, 75 deletions
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h
index 47025fcc..833e6b2b 100644
--- a/toxcore/Messenger.h
+++ b/toxcore/Messenger.h
@@ -44,10 +44,10 @@
44 44
45#define FRIEND_ADDRESS_SIZE (CRYPTO_PUBLIC_KEY_SIZE + sizeof(uint32_t) + sizeof(uint16_t)) 45#define FRIEND_ADDRESS_SIZE (CRYPTO_PUBLIC_KEY_SIZE + sizeof(uint32_t) + sizeof(uint16_t))
46 46
47enum { 47typedef enum Message_Type {
48 MESSAGE_NORMAL, 48 MESSAGE_NORMAL,
49 MESSAGE_ACTION 49 MESSAGE_ACTION
50}; 50} Message_Type;
51 51
52/* NOTE: Packet ids below 24 must never be used. */ 52/* NOTE: Packet ids below 24 must never be used. */
53#define PACKET_ID_ONLINE 24 53#define PACKET_ID_ONLINE 24
@@ -57,7 +57,7 @@ enum {
57#define PACKET_ID_USERSTATUS 50 57#define PACKET_ID_USERSTATUS 50
58#define PACKET_ID_TYPING 51 58#define PACKET_ID_TYPING 51
59#define PACKET_ID_MESSAGE 64 59#define PACKET_ID_MESSAGE 64
60#define PACKET_ID_ACTION (PACKET_ID_MESSAGE + MESSAGE_ACTION) /* 65 */ 60#define PACKET_ID_ACTION (PACKET_ID_MESSAGE + MESSAGE_ACTION) // 65
61#define PACKET_ID_MSI 69 61#define PACKET_ID_MSI 69
62#define PACKET_ID_FILE_SENDREQUEST 80 62#define PACKET_ID_FILE_SENDREQUEST 80
63#define PACKET_ID_FILE_CONTROL 81 63#define PACKET_ID_FILE_CONTROL 81
@@ -71,9 +71,9 @@ enum {
71/* All packets starting with a byte in this range can be used for anything. */ 71/* All packets starting with a byte in this range can be used for anything. */
72#define PACKET_ID_LOSSLESS_RANGE_START 160 72#define PACKET_ID_LOSSLESS_RANGE_START 160
73#define PACKET_ID_LOSSLESS_RANGE_SIZE 32 73#define PACKET_ID_LOSSLESS_RANGE_SIZE 32
74#define PACKET_LOSSY_AV_RESERVED 8 /* Number of lossy packet types at start of range reserved for A/V. */ 74#define PACKET_LOSSY_AV_RESERVED 8 // Number of lossy packet types at start of range reserved for A/V.
75 75
76typedef struct { 76typedef struct Messenger_Options {
77 bool ipv6enabled; 77 bool ipv6enabled;
78 bool udp_disabled; 78 bool udp_disabled;
79 TCP_Proxy_Info proxy_info; 79 TCP_Proxy_Info proxy_info;
@@ -95,18 +95,18 @@ struct Receipts {
95}; 95};
96 96
97/* Status definitions. */ 97/* Status definitions. */
98enum { 98typedef enum Friend_Status {
99 NOFRIEND, 99 NOFRIEND,
100 FRIEND_ADDED, 100 FRIEND_ADDED,
101 FRIEND_REQUESTED, 101 FRIEND_REQUESTED,
102 FRIEND_CONFIRMED, 102 FRIEND_CONFIRMED,
103 FRIEND_ONLINE, 103 FRIEND_ONLINE,
104}; 104} Friend_Status;
105 105
106/* Errors for m_addfriend 106/* Errors for m_addfriend
107 * FAERR - Friend Add Error 107 * FAERR - Friend Add Error
108 */ 108 */
109enum { 109typedef enum Friend_Add_Error {
110 FAERR_TOOLONG = -1, 110 FAERR_TOOLONG = -1,
111 FAERR_NOMESSAGE = -2, 111 FAERR_NOMESSAGE = -2,
112 FAERR_OWNKEY = -3, 112 FAERR_OWNKEY = -3,
@@ -114,24 +114,24 @@ enum {
114 FAERR_BADCHECKSUM = -6, 114 FAERR_BADCHECKSUM = -6,
115 FAERR_SETNEWNOSPAM = -7, 115 FAERR_SETNEWNOSPAM = -7,
116 FAERR_NOMEM = -8 116 FAERR_NOMEM = -8
117}; 117} Friend_Add_Error;
118 118
119 119
120/* Default start timeout in seconds between friend requests. */ 120/* Default start timeout in seconds between friend requests. */
121#define FRIENDREQUEST_TIMEOUT 5; 121#define FRIENDREQUEST_TIMEOUT 5
122 122
123enum { 123typedef enum Connection_Status {
124 CONNECTION_NONE, 124 CONNECTION_NONE,
125 CONNECTION_TCP, 125 CONNECTION_TCP,
126 CONNECTION_UDP, 126 CONNECTION_UDP,
127 CONNECTION_UNKNOWN 127 CONNECTION_UNKNOWN
128}; 128} Connection_Status;
129 129
130/* USERSTATUS - 130/* USERSTATUS -
131 * Represents userstatuses someone can have. 131 * Represents userstatuses someone can have.
132 */ 132 */
133 133
134typedef enum { 134typedef enum Userstatus {
135 USERSTATUS_NONE, 135 USERSTATUS_NONE,
136 USERSTATUS_AWAY, 136 USERSTATUS_AWAY,
137 USERSTATUS_BUSY, 137 USERSTATUS_BUSY,
@@ -150,57 +150,76 @@ struct File_Transfers {
150 unsigned int slots_allocated; /* number of slots allocated to this transfer. */ 150 unsigned int slots_allocated; /* number of slots allocated to this transfer. */
151 uint8_t id[FILE_ID_LENGTH]; 151 uint8_t id[FILE_ID_LENGTH];
152}; 152};
153enum { 153typedef enum Filestatus {
154 FILESTATUS_NONE, 154 FILESTATUS_NONE,
155 FILESTATUS_NOT_ACCEPTED, 155 FILESTATUS_NOT_ACCEPTED,
156 FILESTATUS_TRANSFERRING, 156 FILESTATUS_TRANSFERRING,
157 //FILESTATUS_BROKEN, 157 // FILESTATUS_BROKEN,
158 FILESTATUS_FINISHED 158 FILESTATUS_FINISHED
159}; 159} Filestatus;
160 160
161enum { 161typedef enum File_Pause {
162 FILE_PAUSE_NOT, 162 FILE_PAUSE_NOT,
163 FILE_PAUSE_US, 163 FILE_PAUSE_US,
164 FILE_PAUSE_OTHER, 164 FILE_PAUSE_OTHER,
165 FILE_PAUSE_BOTH 165 FILE_PAUSE_BOTH
166}; 166} File_Pause;
167 167
168enum { 168typedef enum Filecontrol {
169 FILECONTROL_ACCEPT, 169 FILECONTROL_ACCEPT,
170 FILECONTROL_PAUSE, 170 FILECONTROL_PAUSE,
171 FILECONTROL_KILL, 171 FILECONTROL_KILL,
172 FILECONTROL_SEEK 172 FILECONTROL_SEEK
173}; 173} Filecontrol;
174 174
175enum { 175typedef enum Filekind {
176 FILEKIND_DATA, 176 FILEKIND_DATA,
177 FILEKIND_AVATAR 177 FILEKIND_AVATAR
178}; 178} Filekind;
179 179
180 180
181typedef struct Messenger Messenger; 181typedef struct Messenger Messenger;
182 182
183typedef void m_self_connection_status_cb(Messenger *, unsigned int, void *); 183typedef void m_self_connection_status_cb(Messenger *m, unsigned int connection_status, void *user_data);
184typedef void m_friend_status_cb(Messenger *, uint32_t, unsigned int, void *); 184typedef void m_friend_status_cb(Messenger *m, uint32_t friend_number, unsigned int status, void *user_data);
185typedef void m_friend_connection_status_cb(Messenger *, uint32_t, unsigned int, void *); 185typedef void m_friend_connection_status_cb(Messenger *m, uint32_t friend_number, unsigned int connection_status,
186typedef void m_friend_message_cb(Messenger *, uint32_t, unsigned int, const uint8_t *, size_t, void *); 186 void *user_data);
187typedef void m_file_recv_control_cb(Messenger *, uint32_t, uint32_t, unsigned int, void *); 187typedef void m_friend_message_cb(Messenger *m, uint32_t friend_number, unsigned int message_type,
188typedef void m_friend_request_cb(Messenger *, const uint8_t *, const uint8_t *, size_t, void *); 188 const uint8_t *message, size_t length, void *user_data);
189typedef void m_friend_name_cb(Messenger *m, uint32_t, const uint8_t *, size_t, void *); 189typedef void m_file_recv_control_cb(Messenger *m, uint32_t friend_number, uint32_t file_number, unsigned int control,
190typedef void m_friend_status_message_cb(Messenger *m, uint32_t, const uint8_t *, size_t, void *); 190 void *user_data);
191typedef void m_friend_typing_cb(Messenger *m, uint32_t, bool, void *); 191typedef void m_friend_request_cb(Messenger *m, const uint8_t *public_key, const uint8_t *message, size_t length,
192typedef void m_friend_read_receipt_cb(Messenger *m, uint32_t, uint32_t, void *); 192 void *user_data);
193typedef void m_file_recv_cb(Messenger *m, uint32_t, uint32_t, uint32_t, uint64_t, const uint8_t *, size_t, void *); 193typedef void m_friend_name_cb(Messenger *m, uint32_t friend_number, const uint8_t *name, size_t length,
194typedef void m_file_chunk_request_cb(Messenger *m, uint32_t, uint32_t, uint64_t, size_t, void *); 194 void *user_data);
195typedef void m_file_recv_chunk_cb(Messenger *m, uint32_t, uint32_t, uint64_t, const uint8_t *, size_t, void *); 195typedef void m_friend_status_message_cb(Messenger *m, uint32_t friend_number, const uint8_t *message, size_t length,
196typedef void m_friend_lossy_packet_cb(Messenger *m, uint32_t, const uint8_t *, size_t, void *); 196 void *user_data);
197typedef void m_friend_lossless_packet_cb(Messenger *m, uint32_t, const uint8_t *, size_t, void *); 197typedef void m_friend_typing_cb(Messenger *m, uint32_t friend_number, bool is_typing, void *user_data);
198typedef void m_friend_connectionstatuschange_internal_cb(Messenger *m, uint32_t, uint8_t, void *); 198typedef void m_friend_read_receipt_cb(Messenger *m, uint32_t friend_number, uint32_t message_id, void *user_data);
199typedef void m_conference_invite_cb(Messenger *m, uint32_t, const uint8_t *, uint16_t, void *); 199typedef void m_file_recv_cb(Messenger *m, uint32_t friend_number, uint32_t file_number, uint32_t kind,
200typedef void m_msi_packet_cb(Messenger *m, uint32_t, const uint8_t *, uint16_t, void *); 200 uint64_t file_size, const uint8_t *filename, size_t filename_length, void *user_data);
201typedef void m_file_chunk_request_cb(Messenger *m, uint32_t friend_number, uint32_t file_number, uint64_t position,
202 size_t length, void *user_data);
203typedef void m_file_recv_chunk_cb(Messenger *m, uint32_t friend_number, uint32_t file_number, uint64_t position,
204 const uint8_t *data, size_t length, void *user_data);
205typedef void m_friend_lossy_packet_cb(Messenger *m, uint32_t friend_number, const uint8_t *data, size_t length,
206 void *user_data);
207typedef void m_friend_lossless_packet_cb(Messenger *m, uint32_t friend_number, const uint8_t *data, size_t length,
208 void *user_data);
209typedef void m_friend_connectionstatuschange_internal_cb(Messenger *m, uint32_t friend_number,
210 uint8_t connection_status, void *user_data);
211typedef void m_conference_invite_cb(Messenger *m, uint32_t friend_number, const uint8_t *cookie, uint16_t length,
212 void *user_data);
213typedef void m_msi_packet_cb(Messenger *m, uint32_t friend_number, const uint8_t *data, uint16_t length,
214 void *user_data);
201typedef int m_lossy_rtp_packet_cb(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t len, void *object); 215typedef int m_lossy_rtp_packet_cb(Messenger *m, uint32_t friendnumber, const uint8_t *data, uint16_t len, void *object);
202 216
203typedef struct { 217typedef struct RTP_Packet_Handler {
218 m_lossy_rtp_packet_cb *function;
219 void *object;
220} RTP_Packet_Handler;
221
222typedef struct Friend {
204 uint8_t real_pk[CRYPTO_PUBLIC_KEY_SIZE]; 223 uint8_t real_pk[CRYPTO_PUBLIC_KEY_SIZE];
205 int friendcon_id; 224 int friendcon_id;
206 225
@@ -228,10 +247,7 @@ typedef struct {
228 uint32_t num_sending_files; 247 uint32_t num_sending_files;
229 struct File_Transfers file_receiving[MAX_CONCURRENT_FILE_PIPES]; 248 struct File_Transfers file_receiving[MAX_CONCURRENT_FILE_PIPES];
230 249
231 struct { 250 RTP_Packet_Handler lossy_rtp_packethandlers[PACKET_LOSSY_AV_RESERVED];
232 m_lossy_rtp_packet_cb *function;
233 void *object;
234 } lossy_rtp_packethandlers[PACKET_LOSSY_AV_RESERVED];
235 251
236 struct Receipts *receipts_start; 252 struct Receipts *receipts_start;
237 struct Receipts *receipts_end; 253 struct Receipts *receipts_end;
@@ -494,37 +510,35 @@ void m_callback_log(Messenger *m, logger_cb *function, void *context, void *user
494/* Set the function that will be executed when a friend request is received. 510/* Set the function that will be executed when a friend request is received.
495 * Function format is function(uint8_t * public_key, uint8_t * data, size_t length) 511 * Function format is function(uint8_t * public_key, uint8_t * data, size_t length)
496 */ 512 */
497void m_callback_friendrequest(Messenger *m, void (*function)(Messenger *m, const uint8_t *, const uint8_t *, size_t, 513void m_callback_friendrequest(Messenger *m, m_friend_request_cb *function);
498 void *));
499 514
500/* Set the function that will be executed when a message from a friend is received. 515/* Set the function that will be executed when a message from a friend is received.
501 * Function format is: function(uint32_t friendnumber, unsigned int type, uint8_t * message, uint32_t length) 516 * Function format is: function(uint32_t friendnumber, unsigned int type, uint8_t * message, uint32_t length)
502 */ 517 */
503void m_callback_friendmessage(Messenger *m, void (*function)(Messenger *m, uint32_t, unsigned int, const uint8_t *, 518void m_callback_friendmessage(Messenger *m, m_friend_message_cb *function);
504 size_t, void *));
505 519
506/* Set the callback for name changes. 520/* Set the callback for name changes.
507 * Function(uint32_t friendnumber, uint8_t *newname, size_t length) 521 * Function(uint32_t friendnumber, uint8_t *newname, size_t length)
508 * You are not responsible for freeing newname. 522 * You are not responsible for freeing newname.
509 */ 523 */
510void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, size_t, void *)); 524void m_callback_namechange(Messenger *m, m_friend_name_cb *function);
511 525
512/* Set the callback for status message changes. 526/* Set the callback for status message changes.
513 * Function(uint32_t friendnumber, uint8_t *newstatus, size_t length) 527 * Function(uint32_t friendnumber, uint8_t *newstatus, size_t length)
514 * 528 *
515 * You are not responsible for freeing newstatus 529 * You are not responsible for freeing newstatus
516 */ 530 */
517void m_callback_statusmessage(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, size_t, void *)); 531void m_callback_statusmessage(Messenger *m, m_friend_status_message_cb *function);
518 532
519/* Set the callback for status type changes. 533/* Set the callback for status type changes.
520 * Function(uint32_t friendnumber, Userstatus kind) 534 * Function(uint32_t friendnumber, Userstatus kind)
521 */ 535 */
522void m_callback_userstatus(Messenger *m, void (*function)(Messenger *m, uint32_t, unsigned int, void *)); 536void m_callback_userstatus(Messenger *m, m_friend_status_cb *function);
523 537
524/* Set the callback for typing changes. 538/* Set the callback for typing changes.
525 * Function(uint32_t friendnumber, uint8_t is_typing) 539 * Function(uint32_t friendnumber, uint8_t is_typing)
526 */ 540 */
527void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, uint32_t, bool, void *)); 541void m_callback_typingchange(Messenger *m, m_friend_typing_cb *function);
528 542
529/* Set the callback for read receipts. 543/* Set the callback for read receipts.
530 * Function(uint32_t friendnumber, uint32_t receipt) 544 * Function(uint32_t friendnumber, uint32_t receipt)
@@ -535,7 +549,7 @@ void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, uint32_
535 * Since core doesn't track ids for you, receipt may not correspond to any message. 549 * Since core doesn't track ids for you, receipt may not correspond to any message.
536 * In that case, you should discard it. 550 * In that case, you should discard it.
537 */ 551 */
538void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, void *)); 552void m_callback_read_receipt(Messenger *m, m_friend_read_receipt_cb *function);
539 553
540/* Set the callback for connection status changes. 554/* Set the callback for connection status changes.
541 * function(uint32_t friendnumber, uint8_t status) 555 * function(uint32_t friendnumber, uint8_t status)
@@ -548,17 +562,17 @@ void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, uint32
548 * being previously online" part. 562 * being previously online" part.
549 * It's assumed that when adding friends, their connection status is offline. 563 * It's assumed that when adding friends, their connection status is offline.
550 */ 564 */
551void m_callback_connectionstatus(Messenger *m, void (*function)(Messenger *m, uint32_t, unsigned int, void *)); 565void m_callback_connectionstatus(Messenger *m, m_friend_connection_status_cb *function);
552 566
553/* Same as previous but for internal A/V core usage only */ 567/* Same as previous but for internal A/V core usage only */
554void m_callback_connectionstatus_internal_av(Messenger *m, void (*function)(Messenger *m, uint32_t, uint8_t, void *), 568void m_callback_connectionstatus_internal_av(Messenger *m, m_friend_connectionstatuschange_internal_cb *function,
555 void *userdata); 569 void *userdata);
556 570
557 571
558/* Set the callback for typing changes. 572/* Set the callback for typing changes.
559 * Function(unsigned int connection_status (0 = not connected, 1 = TCP only, 2 = UDP + TCP)) 573 * Function(unsigned int connection_status (0 = not connected, 1 = TCP only, 2 = UDP + TCP))
560 */ 574 */
561void m_callback_core_connection(Messenger *m, void (*function)(Messenger *m, unsigned int, void *)); 575void m_callback_core_connection(Messenger *m, m_self_connection_status_cb *function);
562 576
563/**********CONFERENCES************/ 577/**********CONFERENCES************/
564 578
@@ -566,8 +580,7 @@ void m_callback_core_connection(Messenger *m, void (*function)(Messenger *m, uns
566 * 580 *
567 * Function(Messenger *m, uint32_t friendnumber, uint8_t *data, uint16_t length, void *userdata) 581 * Function(Messenger *m, uint32_t friendnumber, uint8_t *data, uint16_t length, void *userdata)
568 */ 582 */
569void m_callback_conference_invite(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, uint16_t, 583void m_callback_conference_invite(Messenger *m, m_conference_invite_cb *function);
570 void *));
571 584
572/* Send a conference invite packet. 585/* Send a conference invite packet.
573 * 586 *
@@ -583,8 +596,7 @@ int send_conference_invite_packet(const Messenger *m, int32_t friendnumber, cons
583 * 596 *
584 * Function(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint32_t filetype, uint64_t filesize, uint8_t *filename, size_t filename_length, void *userdata) 597 * Function(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint32_t filetype, uint64_t filesize, uint8_t *filename, size_t filename_length, void *userdata)
585 */ 598 */
586void callback_file_sendrequest(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, uint32_t, uint64_t, 599void callback_file_sendrequest(Messenger *m, m_file_recv_cb *function);
587 const uint8_t *, size_t, void *));
588 600
589 601
590/* Set the callback for file control requests. 602/* Set the callback for file control requests.
@@ -592,22 +604,21 @@ void callback_file_sendrequest(Messenger *m, void (*function)(Messenger *m, uin
592 * Function(Tox *tox, uint32_t friendnumber, uint32_t filenumber, unsigned int control_type, void *userdata) 604 * Function(Tox *tox, uint32_t friendnumber, uint32_t filenumber, unsigned int control_type, void *userdata)
593 * 605 *
594 */ 606 */
595void callback_file_control(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, unsigned int, void *)); 607void callback_file_control(Messenger *m, m_file_recv_control_cb *function);
596 608
597/* Set the callback for file data. 609/* Set the callback for file data.
598 * 610 *
599 * Function(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint64_t position, uint8_t *data, size_t length, void *userdata) 611 * Function(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint64_t position, uint8_t *data, size_t length, void *userdata)
600 * 612 *
601 */ 613 */
602void callback_file_data(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, uint64_t, const uint8_t *, 614void callback_file_data(Messenger *m, m_file_recv_chunk_cb *function);
603 size_t, void *));
604 615
605/* Set the callback for file request chunk. 616/* Set the callback for file request chunk.
606 * 617 *
607 * Function(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint64_t position, size_t length, void *userdata) 618 * Function(Tox *tox, uint32_t friendnumber, uint32_t filenumber, uint64_t position, size_t length, void *userdata)
608 * 619 *
609 */ 620 */
610void callback_file_reqchunk(Messenger *m, void (*function)(Messenger *m, uint32_t, uint32_t, uint64_t, size_t, void *)); 621void callback_file_reqchunk(Messenger *m, m_file_chunk_request_cb *function);
611 622
612 623
613/* Copy the file transfer file id to file_id 624/* Copy the file transfer file id to file_id
@@ -686,8 +697,7 @@ uint64_t file_dataremaining(const Messenger *m, int32_t friendnumber, uint8_t fi
686 * 697 *
687 * Function(Messenger *m, uint32_t friendnumber, uint8_t *data, uint16_t length, void *userdata) 698 * Function(Messenger *m, uint32_t friendnumber, uint8_t *data, uint16_t length, void *userdata)
688 */ 699 */
689void m_callback_msi_packet(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, uint16_t, void *), 700void m_callback_msi_packet(Messenger *m, m_msi_packet_cb *function, void *userdata);
690 void *userdata);
691 701
692/* Send an msi packet. 702/* Send an msi packet.
693 * 703 *
@@ -701,16 +711,15 @@ int m_msi_packet(const Messenger *m, int32_t friendnumber, const uint8_t *data,
701 * return -1 on failure. 711 * return -1 on failure.
702 * return 0 on success. 712 * return 0 on success.
703 */ 713 */
704int m_callback_rtp_packet(Messenger *m, int32_t friendnumber, uint8_t byte, int (*packet_handler_callback)(Messenger *m, 714int m_callback_rtp_packet(Messenger *m, int32_t friendnumber, uint8_t byte,
705 uint32_t friendnumber, const uint8_t *data, uint16_t len, void *object), void *object); 715 m_lossy_rtp_packet_cb *packet_handler_callback, void *object);
706 716
707/**********************************************/ 717/**********************************************/
708 718
709/* Set handlers for custom lossy packets. 719/* Set handlers for custom lossy packets.
710 * 720 *
711 */ 721 */
712void custom_lossy_packet_registerhandler(Messenger *m, void (*packet_handler_callback)(Messenger *m, 722void custom_lossy_packet_registerhandler(Messenger *m, m_friend_lossy_packet_cb *packet_handler_callback);
713 uint32_t friendnumber, const uint8_t *data, size_t len, void *object));
714 723
715/* High level function to send custom lossy packets. 724/* High level function to send custom lossy packets.
716 * 725 *
@@ -727,8 +736,7 @@ int m_send_custom_lossy_packet(const Messenger *m, int32_t friendnumber, const u
727/* Set handlers for custom lossless packets. 736/* Set handlers for custom lossless packets.
728 * 737 *
729 */ 738 */
730void custom_lossless_packet_registerhandler(Messenger *m, void (*packet_handler_callback)(Messenger *m, 739void custom_lossless_packet_registerhandler(Messenger *m, m_friend_lossless_packet_cb *packet_handler_callback);
731 uint32_t friendnumber, const uint8_t *data, size_t len, void *object));
732 740
733/* High level function to send custom lossless packets. 741/* High level function to send custom lossless packets.
734 * 742 *
@@ -743,12 +751,12 @@ int send_custom_lossless_packet(const Messenger *m, int32_t friendnumber, const
743 751
744/**********************************************/ 752/**********************************************/
745 753
746enum { 754typedef enum Messenger_Error {
747 MESSENGER_ERROR_NONE, 755 MESSENGER_ERROR_NONE,
748 MESSENGER_ERROR_PORT, 756 MESSENGER_ERROR_PORT,
749 MESSENGER_ERROR_TCP_SERVER, 757 MESSENGER_ERROR_TCP_SERVER,
750 MESSENGER_ERROR_OTHER 758 MESSENGER_ERROR_OTHER
751}; 759} Messenger_Error;
752 760
753/* Run this at startup. 761/* Run this at startup.
754 * return allocated instance of Messenger on success. 762 * return allocated instance of Messenger on success.