Example #1
0
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;
}
Example #2
0
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);
}
Example #3
0
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;
}
Example #4
0
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;
}
Example #5
0
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;
}
Example #6
0
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;
}