#pragma once #include "pEpEngine.h" #include #include // all functions are using POSIX struct tm typedef struct tm timestamp; typedef enum _PEP_transports { // auto transport chooses transport per message automatically PEP_trans_auto = 0, // PEP_trans_email, // PEP_trans_whatsapp, PEP_trans__count } PEP_transports; typedef struct _PEP_transport_t PEP_transport_t; typedef struct _identity_list { pEp_identity *ident; struct _identity_list *next; } identity_list; identity_list *new_identity_list(const pEp_identity *ident); identity_list *identity_list_dup(const identity_list *src); void free_identity_list(identity_list *id_list); identity_list *identity_list_add(identity_list *id_list, const pEp_identity *ident); typedef enum _msg_format { format_plain = 0, format_html } msg_format; typedef enum _msg_direction { dir_incoming = 0, dir_outgoing } msg_direction; struct _message_ref_list; typedef struct _message { msg_direction dir; char * id; size_t id_size; char * shortmsg; size_t shortmsg_size; char * longmsg; size_t longmsg_size; char * longmsg_formatted; size_t longmsg_formatted_size; msg_format format; char * rawmsg; size_t rawmsg_size; timestamp sent; timestamp recv; pEp_identity *from; identity_list *to; pEp_identity *recv_by; identity_list *cc; identity_list *bcc; char * refering_id; size_t refering_id_size; struct _message *refering_msg; struct _message_ref_list *refered_by; } message; typedef struct _message_ref_list { message *msg_ref; struct _message_ref_list *next; } message_ref_list; message *new_message( msg_direction dir, const pEp_identity *from, const identity_list *to, const char *shortmsg ); void free_message(message *msg); message_ref_list *new_message_ref_list(message *msg); void free_message_ref_list(message_ref_list *msg_list); message_ref_list *message_ref_list_add(message_ref_list *msg_list, message *msg); typedef PEP_STATUS (*sendto_t)(PEP_SESSION session, const message *msg); typedef PEP_STATUS (*readnext_t)(PEP_SESSION session, message **msg, PEP_transport_t **via); struct _PEP_transport_t { uint8_t id; sendto_t sendto; readnext_t readnext; bool long_message_supported; msg_format native_format; }; typedef uint64_t transports_mask; PEP_STATUS init_transport_system(PEP_SESSION session); void release_transport_system(PEP_SESSION session);