package mireka.filter.misc;
import java.io.IOException;
import mireka.MailData;
import mireka.filter.AbstractFilter;
import mireka.filter.Filter;
import mireka.filter.FilterReply;
import mireka.filter.FilterType;
import mireka.filter.MailTransaction;
import mireka.filter.RecipientContext;
import mireka.smtp.RejectExceptionExt;
import org.subethamail.smtp.TooMuchDataException;
/**
* The MeasureTraffic filter collects statistics information about the incoming
* traffic of a Mireka SMTP server port in an {@link IncomingSmtpSummary}
* object.
*/
public class MeasureTraffic implements FilterType {
private IncomingSmtpSummary incomingSmtpSummary;
@Override
public Filter createInstance(MailTransaction mailTransaction) {
return new FilterImpl(mailTransaction);
}
/**
* @x.category GETSET
*/
public void setIncomingSmtpSummary(IncomingSmtpSummary summary) {
this.incomingSmtpSummary = summary;
}
private class FilterImpl extends AbstractFilter {
public FilterImpl(MailTransaction mailTransaction) {
super(mailTransaction);
}
@Override
public void begin() {
incomingSmtpSummary.mailTransactions.mark();
chain.begin();
}
@Override
public void data(MailData data) throws RejectExceptionExt,
TooMuchDataException, IOException {
incomingSmtpSummary.dataCommands.mark();
chain.data(data);
incomingSmtpSummary.acceptedMessages.mark();
incomingSmtpSummary.messageRecipients.mark(mailTransaction
.getAcceptedRecipientContexts().size());
}
@Override
public FilterReply verifyRecipient(RecipientContext recipientContext)
throws RejectExceptionExt {
incomingSmtpSummary.rcptCommands.mark();
return chain.verifyRecipient(recipientContext);
}
}
}