Skip to content

Commit 4dbfef3

Browse files
committed
wip
1 parent 9452482 commit 4dbfef3

File tree

1 file changed

+26
-26
lines changed

1 file changed

+26
-26
lines changed

imapserver/capability.go

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,18 @@ func (c *Conn) handleCapability(dec *imapwire.Decoder) error {
2828
// Some extensions (e.g. SASL-IR, ENABLE) don't require backend support and
2929
// thus are always enabled.
3030
func (c *Conn) availableCaps() []imap.Cap {
31-
available := c.server.options.caps().set()
31+
available := c.server.options.caps()
3232

3333
var caps []imap.Cap
34-
addAvailableCaps(&caps, available, []imap.Cap{
35-
imap.CapIMAP4rev2,
36-
imap.CapIMAP4rev1,
34+
addAvailableCaps(&caps, map[imap.Cap]bool{
35+
imap.CapIMAP4rev2: available.IMAP4rev1,
36+
imap.CapIMAP4rev1: available.IMAP4rev2,
3737
})
3838
if len(caps) == 0 {
3939
panic("imapserver: must support at least IMAP4rev1 or IMAP4rev2")
4040
}
4141

42-
if available.Has(imap.CapIMAP4rev1) {
42+
if available.IMAP4rev1 {
4343
caps = append(caps, []imap.Cap{
4444
imap.CapSASLIR,
4545
imap.CapLiteralMinus,
@@ -60,7 +60,7 @@ func (c *Conn) availableCaps() []imap.Cap {
6060
caps = append(caps, imap.CapLoginDisabled)
6161
}
6262
if c.state == imap.ConnStateAuthenticated || c.state == imap.ConnStateSelected {
63-
if available.Has(imap.CapIMAP4rev1) {
63+
if available.IMAP4rev1 {
6464
// IMAP4rev1-specific capabilities that don't require backend
6565
// support and are not applicable to IMAP4rev2
6666
caps = append(caps, []imap.Cap{
@@ -72,42 +72,42 @@ func (c *Conn) availableCaps() []imap.Cap {
7272

7373
// IMAP4rev1-specific capabilities which require backend support
7474
// and are not applicable to IMAP4rev2
75-
addAvailableCaps(&caps, available, []imap.Cap{
76-
imap.CapNamespace,
77-
imap.CapUIDPlus,
78-
imap.CapESearch,
79-
imap.CapSearchRes,
80-
imap.CapListExtended,
81-
imap.CapListStatus,
82-
imap.CapMove,
83-
imap.CapStatusSize,
84-
imap.CapBinary,
85-
imap.CapChildren,
75+
addAvailableCaps(&caps, map[imap.Cap]bool{
76+
imap.CapNamespace: available.Namespace,
77+
imap.CapUIDPlus: available.UIDPlus,
78+
imap.CapESearch: available.ESearch,
79+
//imap.CapSearchRes: available.SearchRes,
80+
imap.CapListExtended: available.ListExtended,
81+
imap.CapListStatus: available.ListStatus,
82+
imap.CapMove: available.Move,
83+
imap.CapStatusSize: available.StatusSize,
84+
//imap.CapBinary: available.Binary,
85+
//imap.CapChildren: available.Children,
8686
})
8787
}
8888

8989
// Capabilities which require backend support and apply to both
9090
// IMAP4rev1 and IMAP4rev2
91-
addAvailableCaps(&caps, available, []imap.Cap{
92-
imap.CapSpecialUse,
93-
imap.CapCreateSpecialUse,
94-
imap.CapLiteralPlus,
95-
imap.CapUnauthenticate,
91+
addAvailableCaps(&caps, map[imap.Cap]bool{
92+
imap.CapSpecialUse: available.SpecialUse,
93+
imap.CapCreateSpecialUse: available.CreateSpecialUse,
94+
imap.CapLiteralPlus: available.LiteralPlus,
95+
imap.CapUnauthenticate: available.Unauthenticate,
9696
})
9797

9898
if appendLimitSession, ok := c.session.(SessionAppendLimit); ok {
9999
limit := appendLimitSession.AppendLimit()
100100
caps = append(caps, imap.Cap(fmt.Sprintf("APPENDLIMIT=%d", limit)))
101101
} else {
102-
addAvailableCaps(&caps, available, []imap.Cap{imap.CapAppendLimit})
102+
addAvailableCaps(&caps, map[imap.Cap]bool{imap.CapAppendLimit: available.AppendLimit})
103103
}
104104
}
105105
return caps
106106
}
107107

108-
func addAvailableCaps(caps *[]imap.Cap, available imap.CapSet, l []imap.Cap) {
109-
for _, c := range l {
110-
if available.Has(c) {
108+
func addAvailableCaps(caps *[]imap.Cap, available map[imap.Cap]bool) {
109+
for c, ok := range available {
110+
if ok {
111111
*caps = append(*caps, c)
112112
}
113113
}

0 commit comments

Comments
 (0)