1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.handler.codec.smtp;
17
18 import io.netty.buffer.ByteBuf;
19 import io.netty.buffer.ByteBufUtil;
20 import io.netty.util.AsciiString;
21 import io.netty.util.internal.ObjectUtil;
22 import io.netty.util.internal.UnstableApi;
23
24 import java.util.HashMap;
25 import java.util.Map;
26
27
28
29
30 @UnstableApi
31 public final class SmtpCommand {
32 public static final SmtpCommand EHLO = new SmtpCommand(AsciiString.cached("EHLO"));
33 public static final SmtpCommand HELO = new SmtpCommand(AsciiString.cached("HELO"));
34 public static final SmtpCommand AUTH = new SmtpCommand(AsciiString.cached("AUTH"));
35 public static final SmtpCommand MAIL = new SmtpCommand(AsciiString.cached("MAIL"));
36 public static final SmtpCommand RCPT = new SmtpCommand(AsciiString.cached("RCPT"));
37 public static final SmtpCommand DATA = new SmtpCommand(AsciiString.cached("DATA"));
38 public static final SmtpCommand NOOP = new SmtpCommand(AsciiString.cached("NOOP"));
39 public static final SmtpCommand RSET = new SmtpCommand(AsciiString.cached("RSET"));
40 public static final SmtpCommand EXPN = new SmtpCommand(AsciiString.cached("EXPN"));
41 public static final SmtpCommand VRFY = new SmtpCommand(AsciiString.cached("VRFY"));
42 public static final SmtpCommand HELP = new SmtpCommand(AsciiString.cached("HELP"));
43 public static final SmtpCommand QUIT = new SmtpCommand(AsciiString.cached("QUIT"));
44 public static final SmtpCommand EMPTY = new SmtpCommand(AsciiString.cached(""));
45
46 private static final Map<String, SmtpCommand> COMMANDS = new HashMap<String, SmtpCommand>();
47 static {
48 COMMANDS.put(EHLO.name().toString(), EHLO);
49 COMMANDS.put(HELO.name().toString(), HELO);
50 COMMANDS.put(AUTH.name().toString(), AUTH);
51 COMMANDS.put(MAIL.name().toString(), MAIL);
52 COMMANDS.put(RCPT.name().toString(), RCPT);
53 COMMANDS.put(DATA.name().toString(), DATA);
54 COMMANDS.put(NOOP.name().toString(), NOOP);
55 COMMANDS.put(RSET.name().toString(), RSET);
56 COMMANDS.put(EXPN.name().toString(), EXPN);
57 COMMANDS.put(VRFY.name().toString(), VRFY);
58 COMMANDS.put(HELP.name().toString(), HELP);
59 COMMANDS.put(QUIT.name().toString(), QUIT);
60 COMMANDS.put(EMPTY.name().toString(), EMPTY);
61 }
62
63
64
65
66 public static SmtpCommand valueOf(CharSequence commandName) {
67 ObjectUtil.checkNotNull(commandName, "commandName");
68 SmtpCommand command = COMMANDS.get(commandName.toString());
69 return command != null ? command : new SmtpCommand(AsciiString.of(commandName));
70 }
71
72 private final AsciiString name;
73
74 private SmtpCommand(AsciiString name) {
75 SmtpUtils.validateSMTPParameter(name);
76 this.name = name;
77 }
78
79
80
81
82 public AsciiString name() {
83 return name;
84 }
85
86 void encode(ByteBuf buffer) {
87 ByteBufUtil.writeAscii(buffer, name);
88 }
89
90 boolean isContentExpected() {
91 return this.equals(DATA);
92 }
93
94 @Override
95 public int hashCode() {
96 return name.hashCode();
97 }
98
99 @Override
100 public boolean equals(Object obj) {
101 if (obj == this) {
102 return true;
103 }
104 if (!(obj instanceof SmtpCommand)) {
105 return false;
106 }
107 return name.contentEqualsIgnoreCase(((SmtpCommand) obj).name());
108 }
109
110 @Override
111 public String toString() {
112 return "SmtpCommand{name=" + name + '}';
113 }
114 }