std::vector<long> ImapClient::search(const std::string& aHost, const std::string& aUsername, const std::string& aPassword, const std::string& aMailbox, const std::string& aCriteria, bool aUid) { #include "linkage.c" /* IMPORTANT: make sure that the vector of found sequence numbers is empty! */ theFoundSequenceNumbers.clear(); MAILSTREAM* lSource = getMailStream(aHost, aUsername, aPassword, aMailbox, true); checkMailStream(lSource); mail_ping(lSource); /* First, tokenize the criteria so that we can work on it */ std::stringstream lToTokenize(aCriteria); std::string lBuffer; std::vector<std::string> lTokens; SEARCHPGM * lSearchProgram; while(lToTokenize >> lBuffer) { lTokens.push_back(lBuffer); } lSearchProgram = search_criteria(lTokens); mail_search_full(lSource, NIL, lSearchProgram, (aUid ? SE_UID : NIL) | SE_NOPREFETCH); /* clean up, don't leave a mess */ mail_free_searchpgm(&lSearchProgram); return theFoundSequenceNumbers; }
static Variant HHVM_FUNCTION(imap_check, const Resource& imap_stream) { ImapStream *obj = imap_stream.getTyped<ImapStream>(); if (mail_ping(obj->m_stream) == NIL) { return false; } if (obj->m_stream && obj->m_stream->mailbox) { Object ret(SystemLib::AllocStdClassObject()); char date[100]; rfc822_date(date); ret.o_set("Date", String(date, CopyString)); ret.o_set("Driver", String(obj->m_stream->dtb->name, CopyString)); ret.o_set("Mailbox", String(obj->m_stream->mailbox, CopyString)); ret.o_set("Nmsgs", (int64_t)obj->m_stream->nmsgs); ret.o_set("Recent", (int64_t)obj->m_stream->recent); return ret; } return false; }
bool f_imap_ping(const Resource& imap_stream) { ImapStream *obj = imap_stream.getTyped<ImapStream>(); return mail_ping(obj->m_stream); }