Changeset 757 in code
- Timestamp:
- Dec 8, 2021, 5:03:40 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/conn.go
r748 r757 218 218 // If the connection is closed before the message is sent, SendMessage silently 219 219 // drops the message. 220 func (c *conn) SendMessage( msg *irc.Message) {220 func (c *conn) SendMessage(ctx context.Context, msg *irc.Message) { 221 221 c.lock.Lock() 222 222 defer c.lock.Unlock() … … 225 225 return 226 226 } 227 c.outgoing <- msg 227 228 select { 229 case c.outgoing <- msg: 230 // Success 231 case <-ctx.Done(): 232 c.logger.Printf("failed to send message: %v", ctx.Err()) 233 } 228 234 } 229 235 -
trunk/downstream.go
r754 r757 552 552 553 553 dc.srv.metrics.downstreamOutMessagesTotal.Inc() 554 dc.conn.SendMessage( msg)554 dc.conn.SendMessage(context.TODO(), msg) 555 555 } 556 556 … … 1667 1667 return 1668 1668 } 1669 uc.SendMessageLabeled( dc.id, &irc.Message{1669 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 1670 1670 Command: "NICK", 1671 1671 Params: []string{nick}, … … 1701 1701 // support setname 1702 1702 if uc := n.conn; uc != nil && uc.caps["setname"] { 1703 uc.SendMessageLabeled( dc.id, &irc.Message{1703 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 1704 1704 Command: "SETNAME", 1705 1705 Params: []string{realname}, … … 1776 1776 params = append(params, key) 1777 1777 } 1778 uc.SendMessageLabeled( dc.id, &irc.Message{1778 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 1779 1779 Command: "JOIN", 1780 1780 Params: params, … … 1836 1836 params = append(params, reason) 1837 1837 } 1838 uc.SendMessageLabeled( dc.id, &irc.Message{1838 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 1839 1839 Command: "PART", 1840 1840 Params: params, … … 1897 1897 params = append(params, reason) 1898 1898 } 1899 uc.SendMessageLabeled( dc.id, &irc.Message{1899 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 1900 1900 Command: "KICK", 1901 1901 Params: params, … … 1916 1916 if modeStr != "" { 1917 1917 if uc := dc.upstream(); uc != nil { 1918 uc.SendMessageLabeled( dc.id, &irc.Message{1918 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 1919 1919 Command: "MODE", 1920 1920 Params: []string{uc.nick, modeStr}, … … 1957 1957 params := []string{upstreamName, modeStr} 1958 1958 params = append(params, msg.Params[2:]...) 1959 uc.SendMessageLabeled( dc.id, &irc.Message{1959 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 1960 1960 Command: "MODE", 1961 1961 Params: params, … … 2006 2006 if len(msg.Params) > 1 { // setting topic 2007 2007 topic := msg.Params[1] 2008 uc.SendMessageLabeled( dc.id, &irc.Message{2008 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 2009 2009 Command: "TOPIC", 2010 2010 Params: []string{upstreamName, topic}, … … 2071 2071 } else { 2072 2072 // NAMES on a channel we have not joined, ask upstream 2073 uc.SendMessageLabeled( dc.id, &irc.Message{2073 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 2074 2074 Command: "NAMES", 2075 2075 Params: []string{upstreamName}, … … 2271 2271 } 2272 2272 2273 uc.SendMessageLabeled( dc.id, &irc.Message{2273 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 2274 2274 Command: "WHOIS", 2275 2275 Params: params, … … 2348 2348 unmarshaledText = dc.unmarshalText(uc, text) 2349 2349 } 2350 uc.SendMessageLabeled( dc.id, &irc.Message{2350 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 2351 2351 Tags: tags, 2352 2352 Command: msg.Command, … … 2399 2399 } 2400 2400 2401 uc.SendMessageLabeled( dc.id, &irc.Message{2401 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 2402 2402 Tags: tags, 2403 2403 Command: "TAGMSG", … … 2431 2431 uc := ucChannel 2432 2432 2433 uc.SendMessageLabeled( dc.id, &irc.Message{2433 uc.SendMessageLabeled(ctx, dc.id, &irc.Message{ 2434 2434 Command: "INVITE", 2435 2435 Params: []string{upstreamUser, upstreamChannel}, … … 2851 2851 } 2852 2852 2853 uc.SendMessageLabeled( dc.id, msg)2853 uc.SendMessageLabeled(ctx, dc.id, msg) 2854 2854 } 2855 2855 return nil -
trunk/service.go
r755 r757 617 617 return fmt.Errorf("failed to parse command %q: %v", params[1], err) 618 618 } 619 uc.SendMessage( m)619 uc.SendMessage(ctx, m) 620 620 621 621 sendServicePRIVMSG(dc, fmt.Sprintf("sent command to %q", net.GetName())) -
trunk/upstream.go
r752 r757 343 343 return 344 344 } 345 uc.SendMessage( uc.pendingCmds[cmd][0].msg)345 uc.SendMessage(context.TODO(), uc.pendingCmds[cmd][0].msg) 346 346 } 347 347 … … 451 451 switch msg.Command { 452 452 case "PING": 453 uc.SendMessage( &irc.Message{453 uc.SendMessage(ctx, &irc.Message{ 454 454 Command: "PONG", 455 455 Params: msg.Params, … … 530 530 } 531 531 532 uc.SendMessage( &irc.Message{532 uc.SendMessage(ctx, &irc.Message{ 533 533 Command: "CAP", 534 534 Params: []string{"END"}, … … 584 584 var challengeStr string 585 585 if err := parseMessageParams(msg, &challengeStr); err != nil { 586 uc.SendMessage( &irc.Message{586 uc.SendMessage(ctx, &irc.Message{ 587 587 Command: "AUTHENTICATE", 588 588 Params: []string{"*"}, … … 596 596 challenge, err = base64.StdEncoding.DecodeString(challengeStr) 597 597 if err != nil { 598 uc.SendMessage( &irc.Message{598 uc.SendMessage(ctx, &irc.Message{ 599 599 Command: "AUTHENTICATE", 600 600 Params: []string{"*"}, … … 613 613 } 614 614 if err != nil { 615 uc.SendMessage( &irc.Message{615 uc.SendMessage(ctx, &irc.Message{ 616 616 Command: "AUTHENTICATE", 617 617 Params: []string{"*"}, … … 626 626 } 627 627 628 uc.SendMessage( &irc.Message{628 uc.SendMessage(ctx, &irc.Message{ 629 629 Command: "AUTHENTICATE", 630 630 Params: []string{respStr}, … … 670 670 671 671 if !uc.registered { 672 uc.SendMessage( &irc.Message{672 uc.SendMessage(ctx, &irc.Message{ 673 673 Command: "CAP", 674 674 Params: []string{"END"}, … … 708 708 709 709 for _, msg := range join(channels, keys) { 710 uc.SendMessage( msg)710 uc.SendMessage(ctx, msg) 711 711 } 712 712 } … … 932 932 uc.updateChannelAutoDetach(ch) 933 933 934 uc.SendMessage( &irc.Message{934 uc.SendMessage(ctx, &irc.Message{ 935 935 Command: "MODE", 936 936 Params: []string{ch}, … … 1532 1532 if found { 1533 1533 uc.logger.Printf("desired nick %q is now available", wantNick) 1534 uc.SendMessage( &irc.Message{1534 uc.SendMessage(ctx, &irc.Message{ 1535 1535 Command: "NICK", 1536 1536 Params: []string{wantNick}, … … 1712 1712 uc.nickCM = uc.network.casemap(uc.nick) 1713 1713 uc.logger.Printf("desired nick is not available, falling back to %q", uc.nick) 1714 uc.SendMessage( &irc.Message{1714 uc.SendMessage(ctx, &irc.Message{ 1715 1715 Command: "NICK", 1716 1716 Params: []string{uc.nick}, … … 1826 1826 } 1827 1827 1828 uc.SendMessage( &irc.Message{1828 uc.SendMessage(context.TODO(), &irc.Message{ 1829 1829 Command: "CAP", 1830 1830 Params: []string{"REQ", strings.Join(requestCaps, " ")}, … … 1883 1883 } 1884 1884 1885 uc.SendMessage( &irc.Message{1885 uc.SendMessage(context.TODO(), &irc.Message{ 1886 1886 Command: "AUTHENTICATE", 1887 1887 Params: []string{auth.Mechanism}, … … 1903 1903 1904 1904 func (uc *upstreamConn) register() { 1905 ctx := context.TODO() 1906 1905 1907 uc.nick = GetNick(&uc.user.User, &uc.network.Network) 1906 1908 uc.nickCM = uc.network.casemap(uc.nick) … … 1908 1910 uc.realname = GetRealname(&uc.user.User, &uc.network.Network) 1909 1911 1910 uc.SendMessage( &irc.Message{1912 uc.SendMessage(ctx, &irc.Message{ 1911 1913 Command: "CAP", 1912 1914 Params: []string{"LS", "302"}, … … 1914 1916 1915 1917 if uc.network.Pass != "" { 1916 uc.SendMessage( &irc.Message{1918 uc.SendMessage(ctx, &irc.Message{ 1917 1919 Command: "PASS", 1918 1920 Params: []string{uc.network.Pass}, … … 1920 1922 } 1921 1923 1922 uc.SendMessage( &irc.Message{1924 uc.SendMessage(ctx, &irc.Message{ 1923 1925 Command: "NICK", 1924 1926 Params: []string{uc.nick}, 1925 1927 }) 1926 uc.SendMessage( &irc.Message{1928 uc.SendMessage(ctx, &irc.Message{ 1927 1929 Command: "USER", 1928 1930 Params: []string{uc.username, "0", "*", uc.realname}, … … 1961 1963 uc.logger.Printf("failed to parse connect command %q: %v", command, err) 1962 1964 } else { 1963 uc.SendMessage( m)1965 uc.SendMessage(context.TODO(), m) 1964 1966 } 1965 1967 } … … 1983 1985 } 1984 1986 1985 func (uc *upstreamConn) SendMessage( msg *irc.Message) {1987 func (uc *upstreamConn) SendMessage(ctx context.Context, msg *irc.Message) { 1986 1988 if !uc.caps["message-tags"] { 1987 1989 msg = msg.Copy() … … 1990 1992 1991 1993 uc.srv.metrics.upstreamOutMessagesTotal.Inc() 1992 uc.conn.SendMessage( msg)1993 } 1994 1995 func (uc *upstreamConn) SendMessageLabeled( downstreamID uint64, msg *irc.Message) {1994 uc.conn.SendMessage(ctx, msg) 1995 } 1996 1997 func (uc *upstreamConn) SendMessageLabeled(ctx context.Context, downstreamID uint64, msg *irc.Message) { 1996 1998 if uc.caps["labeled-response"] { 1997 1999 if msg.Tags == nil { … … 2001 2003 uc.nextLabelID++ 2002 2004 } 2003 uc.SendMessage( msg)2005 uc.SendMessage(ctx, msg) 2004 2006 } 2005 2007 … … 2074 2076 2075 2077 func (uc *upstreamConn) updateAway() { 2078 ctx := context.TODO() 2079 2076 2080 away := true 2077 2081 uc.forEachDownstream(func(*downstreamConn) { … … 2082 2086 } 2083 2087 if away { 2084 uc.SendMessage( &irc.Message{2088 uc.SendMessage(ctx, &irc.Message{ 2085 2089 Command: "AWAY", 2086 2090 Params: []string{"Auto away"}, 2087 2091 }) 2088 2092 } else { 2089 uc.SendMessage( &irc.Message{2093 uc.SendMessage(ctx, &irc.Message{ 2090 2094 Command: "AWAY", 2091 2095 }) … … 2110 2114 return 2111 2115 } 2116 2117 ctx := context.TODO() 2112 2118 2113 2119 add := make(map[string]struct{}) … … 2149 2155 if removeAll && len(addList) == 0 && len(removeList) > 0 { 2150 2156 // Optimization when the last MONITOR-aware downstream disconnects 2151 uc.SendMessage( &irc.Message{2157 uc.SendMessage(ctx, &irc.Message{ 2152 2158 Command: "MONITOR", 2153 2159 Params: []string{"C"}, … … 2157 2163 msgs = append(msgs, generateMonitor("+", addList)...) 2158 2164 for _, msg := range msgs { 2159 uc.SendMessage( msg)2165 uc.SendMessage(ctx, msg) 2160 2166 } 2161 2167 }
Note:
See TracChangeset
for help on using the changeset viewer.