diff options
Diffstat (limited to 'vendor/github.com/sorcix/irc/ctcp/ctcp.go')
-rw-r--r-- | vendor/github.com/sorcix/irc/ctcp/ctcp.go | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/vendor/github.com/sorcix/irc/ctcp/ctcp.go b/vendor/github.com/sorcix/irc/ctcp/ctcp.go deleted file mode 100644 index 7ead788d..00000000 --- a/vendor/github.com/sorcix/irc/ctcp/ctcp.go +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2014 Vic Demuzere -// -// Use of this source code is governed by the MIT license. - -package ctcp - -// Sources: -// http://www.irchelp.org/irchelp/rfc/ctcpspec.html -// http://www.kvirc.net/doc/doc_ctcp_handling.html - -import ( - "fmt" - "runtime" - "strings" - "time" -) - -// Various constants used for formatting CTCP messages. -const ( - delimiter byte = 0x01 // Prefix and suffix for CTCP tagged messages. - space byte = 0x20 // Token separator - - empty = "" // The empty string - - timeFormat = time.RFC1123Z - versionFormat = "Go v%s (" + runtime.GOOS + ", " + runtime.GOARCH + ")" -) - -// Tags extracted from the CTCP spec. -const ( - ACTION = "ACTION" - PING = "PING" - PONG = "PONG" - VERSION = "VERSION" - USERINFO = "USERINFO" - CLIENTINFO = "CLIENTINFO" - FINGER = "FINGER" - SOURCE = "SOURCE" - TIME = "TIME" -) - -// Decode attempts to decode CTCP tagged data inside given message text. -// -// If the message text does not contain tagged data, ok will be false. -// -// <text> ::= <delim> <tag> [<SPACE> <message>] <delim> -// <delim> ::= 0x01 -// -func Decode(text string) (tag, message string, ok bool) { - - // Fast path, return if this text does not contain a CTCP message. - if len(text) < 3 || text[0] != delimiter || text[len(text)-1] != delimiter { - return empty, empty, false - } - - s := strings.IndexByte(text, space) - - if s < 0 { - - // Messages may contain only a tag. - return text[1 : len(text)-1], empty, true - } - - return text[1:s], text[s+1 : len(text)-1], true -} - -// Encode returns the IRC message text for CTCP tagged data. -// -// <text> ::= <delim> <tag> [<SPACE> <message>] <delim> -// <delim> ::= 0x01 -// -func Encode(tag, message string) (text string) { - - switch { - - // We can't build a valid CTCP tagged message without at least a tag. - case len(tag) <= 0: - return empty - - // Tagged data with a message - case len(message) > 0: - return string(delimiter) + tag + string(space) + message + string(delimiter) - - // Tagged data without a message - default: - return string(delimiter) + tag + string(delimiter) - - } -} - -// Action is a shortcut for Encode(ctcp.ACTION, message). -func Action(message string) string { - return Encode(ACTION, message) -} - -// Ping is a shortcut for Encode(ctcp.PING, message). -func Ping(message string) string { - return Encode(PING, message) -} - -// Pong is a shortcut for Encode(ctcp.PONG, message). -func Pong(message string) string { - return Encode(PONG, message) -} - -// Version is a shortcut for Encode(ctcp.VERSION, message). -func Version(message string) string { - return Encode(VERSION, message) -} - -// VersionReply is a shortcut for ENCODE(ctcp.VERSION, go version info). -func VersionReply() string { - return Encode(VERSION, fmt.Sprintf(versionFormat, runtime.Version())) -} - -// UserInfo is a shortcut for Encode(ctcp.USERINFO, message). -func UserInfo(message string) string { - return Encode(USERINFO, message) -} - -// ClientInfo is a shortcut for Encode(ctcp.CLIENTINFO, message). -func ClientInfo(message string) string { - return Encode(CLIENTINFO, message) -} - -// Finger is a shortcut for Encode(ctcp.FINGER, message). -func Finger(message string) string { - return Encode(FINGER, message) -} - -// Source is a shortcut for Encode(ctcp.SOURCE, message). -func Source(message string) string { - return Encode(SOURCE, message) -} - -// Time is a shortcut for Encode(ctcp.TIME, message). -func Time(message string) string { - return Encode(TIME, message) -} - -// TimeReply is a shortcut for Encode(ctcp.TIME, currenttime). -func TimeReply() string { - return Encode(TIME, time.Now().Format(timeFormat)) -} |