/* Create a new parsing context for an entire rfc822 message and return it. CB and CB_VALUE may be given to callback for certain events. NULL is returned on error with errno set appropriately. */ rfc822parse_t rfc822parse_open (rfc822parse_cb_t cb, void *cb_value) { rfc822parse_t msg = calloc (1, sizeof *msg); if (msg) { msg->parts = msg->current_part = new_part (); if (!msg->parts) { free (msg); msg = NULL; } else { msg->callback = cb; msg->callback_value = cb_value; if (do_callback (msg, RFC822PARSE_OPEN)) { release_handle_data (msg); free (msg); msg = NULL; } } } return msg; }
void rfc822_close( RFC822 msg ) { do_callback( msg, RFC822EVT_CLOSE ); release_handle_data( msg ); free(msg); }
void rfc822_cancel( RFC822 msg ) { do_callback( msg, RFC822EVT_CANCEL ); release_handle_data( msg ); free(msg); }
void rfc822parse_close (rfc822parse_t msg) { if (msg) { do_callback (msg, RFC822PARSE_CLOSE); release_handle_data (msg); free (msg); } }
void rfc822parse_cancel (rfc822parse_t msg) { if (msg) { do_callback (msg, RFC822PARSE_CANCEL); release_handle_data (msg); free (msg); } }
RFC822 rfc822_open( int (*cb)( void *, enum rfc822_events, RFC822 ), void *cb_value ) { RFC822 msg = calloc(1, sizeof *msg ); if( msg ) { msg->hdr_lines_head = &msg->hdr_lines; msg->bdy_lines_head = &msg->bdy_lines; msg->callback = cb; msg->callback_value = cb_value; if( do_callback( msg, RFC822EVT_OPEN ) ) { release_handle_data( msg ); free(msg); msg = NULL; } } return msg; }