static int _pop3_mailbox_init (mu_mailbox_t mbox, int pops) { struct _pop3_mailbox *mpd; int status = 0; /* Allocate specifics for pop data. */ mpd = mbox->data = calloc (1, sizeof (*mpd)); if (mbox->data == NULL) return ENOMEM; mpd->pop3 = NULL; mpd->mbox = mbox; /* Back pointer. */ mpd->pops = pops; /* Initialize the structure. */ mbox->_destroy = pop_destroy; mbox->_open = pop_open; mbox->_close = pop_close; mbox->_messages_count = pop_messages_count; /* FIXME: There is no way to retrieve the number of recent messages via POP3 protocol, so we consider all messages recent. */ mbox->_messages_recent = pop_messages_count; mbox->_is_updated = pop_is_updated; mbox->_scan = pop_scan; mbox->_message_unseen = pop_message_unseen; mbox->_get_size = pop_get_size; /* Messages. */ mbox->_get_message = pop_get_message; mbox->_expunge = pop_expunge; /* Set our properties. */ { mu_property_t property = NULL; mu_mailbox_get_property (mbox, &property); mu_property_set_value (property, "TYPE", "POP3", 1); } /* Hack! POP does not really have a folder. */ mbox->folder->data = mbox; return status; }
int _nntp_mailbox_init (mu_mailbox_t mbox) { m_nntp_t m_nntp; int status = 0; /* Allocate specifics for nntp data. */ m_nntp = mbox->data = calloc (1, sizeof (*m_nntp)); if (mbox->data == NULL) return ENOMEM; /* Get the back pointer of the concrete folder. */ if (mbox->folder) m_nntp->f_nntp = mbox->folder->data; m_nntp->mailbox = mbox; /* Back pointer. */ /* Retrieve the name of the newsgroup from the URL. */ status = mu_url_aget_path (mbox->url, &m_nntp->name); if (status == MU_ERR_NOENT) { m_nntp->name = strdup ("INBOX"); if (!m_nntp->name) return ENOMEM; } else if (status) return status; else { char *p; p = strchr (m_nntp->name, '/'); if (p) *p = '\0'; } /* Initialize the structure. */ mbox->_destroy = nntp_mailbox_destroy; mbox->_open = nntp_mailbox_open; mbox->_close = nntp_mailbox_close; /* Messages. */ mbox->_get_message = nntp_mailbox_get_message; mbox->_messages_count = nntp_mailbox_messages_count; mbox->_messages_recent = nntp_mailbox_messages_count; mbox->_message_unseen = nntp_mailbox_messages_count; /*mbox->_expunge = nntp_mailbox_expunge;*/ mbox->_scan = nntp_mailbox_scan; /*mbox->_is_updated = nntp_mailbox_is_updated; */ /*mbox->_get_size = nntp_mailbox_get_size; */ /* Set our properties. */ { mu_property_t property = NULL; mu_mailbox_get_property (mbox, &property); mu_property_set_value (property, "TYPE", "NNTP", 1); } return status; }
/* Allocate the mbox_data_t struct(concrete mailbox), but don't do any parsing on the name or even test for existence. However we do strip any leading "mbox:" part of the name, this is suppose to be the protocol/scheme name. */ int _mailbox_mbox_init (mu_mailbox_t mailbox) { int status; mbox_data_t mud; if (mailbox == NULL) return EINVAL; /* Allocate specific mbox data. */ mud = mailbox->data = calloc (1, sizeof (*mud)); if (mailbox->data == NULL) return ENOMEM; /* Back pointer. */ mud->mailbox = mailbox; /* Copy the name: We do not do any further interpretation after the scheme "mbox:" Because for example on distributed system like QnX4 a file name is //390/etc/passwd. So the best approach is to let the OS handle it for example if we receive: "mbox:///var/mail/alain" the mailbox name will be "///var/mail/alain", we let open() do the right thing. So it will let things like this "mbox://390/var/mail/alain" where the "//" _is_ part of the filename, pass correctely. */ status = mu_url_aget_path (mailbox->url, &mud->name); if (status) { free (mud); mailbox->data = NULL; return status; } mud->state = MBOX_NO_STATE; /* Overloading the defaults. */ mailbox->_destroy = mbox_destroy; mailbox->_open = mbox_open; mailbox->_close = mbox_close; /* Overloading of the entire mailbox object methods. */ mailbox->_get_message = mbox_get_message; mailbox->_append_message = mbox_append_message; mailbox->_messages_count = mbox_messages_count; mailbox->_messages_recent = mbox_messages_recent; mailbox->_message_unseen = mbox_message_unseen; mailbox->_expunge = mbox_expunge; mailbox->_sync = mbox_sync; mailbox->_uidvalidity = mbox_uidvalidity; mailbox->_uidnext = mbox_uidnext; mailbox->_quick_get_message = mbox_quick_get_message; mailbox->_scan = mbox_scan; mailbox->_is_updated = mbox_is_updated; mailbox->_get_size = mbox_get_size; /* Set our properties. */ { mu_property_t property = NULL; mu_mailbox_get_property (mailbox, &property); mu_property_set_value (property, "TYPE", "MBOX", 1); } MU_DEBUG1 (mailbox->debug, MU_DEBUG_TRACE1, "mbox_init (%s)\n", mud->name); return 0; /* okdoke */ }