Changeset 458 in code for trunk/upstream.go
- Timestamp:
- Mar 15, 2021, 9:53:46 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/upstream.go
r457 r458 629 629 switch parameter { 630 630 case "CHANMODES": 631 parts := strings.SplitN(value, ",", 5) 632 if len(parts) < 4 { 633 return fmt.Errorf("malformed ISUPPORT CHANMODES value: %v", value) 631 if err := uc.handleChanModes(value); err != nil { 632 return err 634 633 } 635 modes := make(map[byte]channelModeType)636 for i, mt := range []channelModeType{modeTypeA, modeTypeB, modeTypeC, modeTypeD} {637 for j := 0; j < len(parts[i]); j++ {638 mode := parts[i][j]639 modes[mode] = mt640 }641 }642 uc.availableChannelModes = modes643 634 case "CHANTYPES": 644 635 uc.availableChannelTypes = value 645 636 case "PREFIX": 646 if value == "" { 647 uc.availableMemberships = nil 648 } else { 649 if value[0] != '(' { 650 return fmt.Errorf("malformed ISUPPORT PREFIX value: %v", value) 651 } 652 sep := strings.IndexByte(value, ')') 653 if sep < 0 || len(value) != sep*2 { 654 return fmt.Errorf("malformed ISUPPORT PREFIX value: %v", value) 655 } 656 memberships := make([]membership, len(value)/2-1) 657 for i := range memberships { 658 memberships[i] = membership{ 659 Mode: value[i+1], 660 Prefix: value[sep+i+1], 661 } 662 } 663 uc.availableMemberships = memberships 637 if err := uc.handleMemberships(value); err != nil { 638 return err 664 639 } 665 640 case "NETWORK": … … 1456 1431 } 1457 1432 1433 func (uc *upstreamConn) handleChanModes(s string) error { 1434 parts := strings.SplitN(s, ",", 5) 1435 if len(parts) < 4 { 1436 return fmt.Errorf("malformed ISUPPORT CHANMODES value: %v", s) 1437 } 1438 modes := make(map[byte]channelModeType) 1439 for i, mt := range []channelModeType{modeTypeA, modeTypeB, modeTypeC, modeTypeD} { 1440 for j := 0; j < len(parts[i]); j++ { 1441 mode := parts[i][j] 1442 modes[mode] = mt 1443 } 1444 } 1445 uc.availableChannelModes = modes 1446 return nil 1447 } 1448 1449 func (uc *upstreamConn) handleMemberships(s string) error { 1450 if s == "" { 1451 uc.availableMemberships = nil 1452 return nil 1453 } 1454 1455 if s[0] != '(' { 1456 return fmt.Errorf("malformed ISUPPORT PREFIX value: %v", s) 1457 } 1458 sep := strings.IndexByte(s, ')') 1459 if sep < 0 || len(s) != sep*2 { 1460 return fmt.Errorf("malformed ISUPPORT PREFIX value: %v", s) 1461 } 1462 memberships := make([]membership, len(s)/2-1) 1463 for i := range memberships { 1464 memberships[i] = membership{ 1465 Mode: s[i+1], 1466 Prefix: s[sep+i+1], 1467 } 1468 } 1469 uc.availableMemberships = memberships 1470 return nil 1471 } 1472 1458 1473 func (uc *upstreamConn) handleSupportedCaps(capsStr string) { 1459 1474 caps := strings.Fields(capsStr)
Note:
See TracChangeset
for help on using the changeset viewer.