bool FetchMessageEntriesCommand::HandleUntagged(Response& response) { if (!response.EqualsAt(1, "FETCH") || !response.IsListAt(2)) return false; MessageEntry entry; ArgumentList& list = response.ListAt(2); for (int32 i = 0; i < list.CountItems(); i += 2) { if (list.EqualsAt(i, "UID") && list.IsNumberAt(i + 1)) entry.uid = list.NumberAt(i + 1); else if (list.EqualsAt(i, "RFC822.SIZE") && list.IsNumberAt(i + 1)) entry.size = list.NumberAt(i + 1); else if (list.EqualsAt(i, "FLAGS") && list.IsListAt(i + 1)) { // Parse flags ArgumentList& flags = list.ListAt(i + 1); entry.flags = ParseFlags(flags); } } if (entry.uid == 0) return false; fEntries.push_back(entry); return true; }
bool FetchCommand::HandleLiteral(Response& response, ArgumentList& arguments, BDataIO& stream, size_t& length) { if (fListener == NULL || !response.EqualsAt(1, "FETCH") || !response.IsListAt(2)) return false; return fListener->FetchData(fFlags, stream, length); }
bool GetQuotaCommand::HandleUntagged(Response& response) { if (!response.IsCommand("QUOTA") || !response.IsListAt(2)) return false; const ArgumentList& arguments = response.ListAt(2); if (!arguments.EqualsAt(0, "STORAGE")) return false; fUsedStorage = (uint64)arguments.NumberAt(1) * 1024; fTotalStorage = (uint64)arguments.NumberAt(2) * 1024; return true; }
bool SelectCommand::HandleUntagged(Response& response) { if (response.EqualsAt(0, "OK") && response.IsListAt(1, '[')) { const ArgumentList& arguments = response.ListAt(1); if (arguments.EqualsAt(0, "UIDVALIDITY") && arguments.IsNumberAt(1)) { fUIDValidity = arguments.NumberAt(1); return true; } else if (arguments.EqualsAt(0, "UIDNEXT") && arguments.IsNumberAt(1)) { fNextUID = arguments.NumberAt(1); return true; } } return false; }
bool LoginCommand::HandleUntagged(Response& response) { if (!response.EqualsAt(0, "OK") || !response.IsListAt(1, '[')) return false; // TODO: we only support capabilities at the moment ArgumentList& list = response.ListAt(1); if (!list.EqualsAt(0, "CAPABILITY")) return false; fCapabilities.MakeEmpty(); while (list.CountItems() > 1) fCapabilities.AddItem(list.RemoveItemAt(1)); TRACE("CAPABILITY: %s\n", fCapabilities.ToString().String()); return true; }
bool FetchCommand::HandleUntagged(Response& response) { if (!response.EqualsAt(1, "FETCH") || !response.IsListAt(2)) return false; ArgumentList& list = response.ListAt(2); uint32 uid = 0; uint32 flags = 0; for (int32 i = 0; i < list.CountItems(); i += 2) { if (list.EqualsAt(i, "UID") && list.IsNumberAt(i + 1)) uid = list.NumberAt(i + 1); else if (list.EqualsAt(i, "FLAGS") && list.IsListAt(i + 1)) { // Parse flags ArgumentList& flagList = list.ListAt(i + 1); flags = ParseFlags(flagList); } } if (fListener != NULL) fListener->FetchedData(fFlags, uid, flags); return true; }