forked from lug/matterbridge
		
	Compare commits
	
		
			136 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | e99532fb89 | ||
|   | 4aa646f6b0 | ||
|   | 9dcd51fb80 | ||
|   | 6dee988b76 | ||
|   | 5af40db396 | ||
|   | b3553bee7a | ||
|   | ac19c94b9f | ||
|   | 845f7dc331 | ||
|   | 2adeae37e1 | ||
|   | 16eb12b2a0 | ||
|   | 8411f2aa32 | ||
|   | e8acc49cbd | ||
|   | 4bed073c65 | ||
|   | 272735fb26 | ||
|   | b75cf2c189 | ||
|   | 1aaa992250 | ||
|   | 6256c066f1 | ||
|   | 870b89a8f0 | ||
|   | 65ac96913c | ||
|   | 480945cb09 | ||
|   | bfc7130ed8 | ||
|   | a0938d9386 | ||
|   | 2338c69d40 | ||
|   | c714501a0e | ||
|   | a58a3e5000 | ||
|   | ba35212b67 | ||
|   | f3e0358de7 | ||
|   | 8064744d3a | ||
|   | d261949db2 | ||
|   | 877f0fe2e8 | ||
|   | 003d85772c | ||
|   | e7e10131de | ||
|   | 830361e48b | ||
|   | 1b1a9ce250 | ||
|   | 25ac4c708f | ||
|   | c268e90f49 | ||
|   | c17512b7ab | ||
|   | 1b837b3dc7 | ||
|   | 2ece724f75 | ||
|   | 276ac840aa | ||
|   | 1f91461853 | ||
|   | 1f9874102a | ||
|   | 822605c157 | ||
|   | e49266ae43 | ||
|   | 62e9de1a3b | ||
|   | 2ddc4f7ae9 | ||
|   | 2dd402675d | ||
|   | 25b1af1e11 | ||
|   | 75fb2b8156 | ||
|   | 2a403f8b85 | ||
|   | c3d45a9f06 | ||
|   | c07b85b625 | ||
|   | 511f653e6e | ||
|   | 5636eaca6d | ||
|   | 4b839b9958 | ||
|   | 3f79da84d5 | ||
|   | d540638223 | ||
|   | 4ec9b6dd4e | ||
|   | 3bc219167a | ||
|   | 8a55c97b4e | ||
|   | 9e34162a09 | ||
|   | 860a371eeb | ||
|   | 41a46526a1 | ||
|   | 46b798ac1b | ||
|   | 359d0f2910 | ||
|   | ad3cb0386b | ||
|   | 3a183cb218 | ||
|   | 2eecaccd1c | ||
|   | 5f30a98bc1 | ||
|   | b8a2fcbaff | ||
|   | 01496cd080 | ||
|   | 6a968ab82a | ||
|   | c0c4890887 | ||
|   | 171a53592d | ||
|   | 7811c330db | ||
|   | 9bcd131e66 | ||
|   | c791423dd5 | ||
|   | 80bdf38388 | ||
|   | 9d9cb32f4e | ||
|   | 87229bab13 | ||
|   | f065e9e4d5 | ||
|   | 3812693111 | ||
|   | dd3c572256 | ||
|   | c5dfe40326 | ||
|   | ef278301e3 | ||
|   | 2888fd64b0 | ||
|   | 27c0f37e49 | ||
|   | 0774f6a5e7 | ||
|   | 4036d4459b | ||
|   | ee643de5b6 | ||
|   | 8c7549a09e | ||
|   | 7a16146304 | ||
|   | 3d3809a21b | ||
|   | 29465397dd | ||
|   | d300bb1735 | ||
|   | 2e703472f1 | ||
|   | 8fede90b9e | ||
|   | d128f157c4 | ||
|   | 4fcedabfd0 | ||
|   | 246c8e4f74 | ||
|   | 4d2207aba7 | ||
|   | 17b8b86d68 | ||
|   | fdb57230a3 | ||
|   | 7469732bbc | ||
|   | d1dd6c3440 | ||
|   | 02612c0061 | ||
|   | a4db63a773 | ||
|   | 035c2b906a | ||
|   | 6ea8be5749 | ||
|   | 36024d5439 | ||
|   | 8d52c98373 | ||
|   | b4a4eb0057 | ||
|   | b469c8ddbd | ||
|   | eee0036c7f | ||
|   | 89c66b9430 | ||
|   | bd38319d83 | ||
|   | 33dffd5ea8 | ||
|   | 57176dadd4 | ||
|   | dd449a8705 | ||
|   | 587ad9f41d | ||
|   | a16ad8bf3b | ||
|   | 1e0490bd36 | ||
|   | 8afc641f0c | ||
|   | 2e4d58cb92 | ||
|   | 02d7e2db65 | ||
|   | f935c573e9 | ||
|   | 4a25e66c00 | ||
|   | 95f4e3448e | ||
|   | eacb1c1771 | ||
|   | 07fd825349 | ||
|   | be15cc8a36 | ||
|   | 2f68519b3c | ||
|   | efe641f202 | ||
|   | 9bd663046a | ||
|   | 11b07f01ba | ||
|   | 6c2f370e6b | 
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE.md
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,5 @@ | ||||
| If you have a configuration problem, please first try to create a basic configuration following the instructions on [the wiki](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) before filing an issue. | ||||
|  | ||||
| Please answer the following questions.  | ||||
|  | ||||
| ### Which version of matterbridge are you using? | ||||
|   | ||||
							
								
								
									
										34
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| language: go | ||||
| go: | ||||
|     - 1.7.x | ||||
|     - 1.8.x | ||||
|     - tip | ||||
| install: true | ||||
|  | ||||
| matrix: | ||||
|   # It's ok if our code fails on unstable development versions of Go. | ||||
|   allow_failures: | ||||
|     - go: tip | ||||
|   # Don't wait for tip tests to finish. Mark the test run green if the | ||||
|   # tests pass on the stable versions of Go. | ||||
|   fast_finish: true | ||||
|  | ||||
| notifications: | ||||
|       email: false | ||||
|  | ||||
| before_script: | ||||
|   - GO_FILES=$(find . -iname '*.go' | grep -v /vendor/)  # All the .go files, excluding vendor/ | ||||
|   - PKGS=$(go list ./... | grep -v /vendor/)             # All the import paths, excluding vendor/ | ||||
| #  - go get github.com/golang/lint/golint                 # Linter | ||||
|   - go get honnef.co/go/tools/cmd/megacheck              # Badass static analyzer/linter | ||||
|  | ||||
| # Anything in before_script: that returns a nonzero exit code will | ||||
| # flunk the build and immediately stop. It's sorta like having | ||||
| # set -e enabled in bash.  | ||||
| script: | ||||
| script: | ||||
|   - test -z $(gofmt -s -l $GO_FILES)  # Fail if a .go file hasn't been formatted with gofmt | ||||
|   #- go test -v -race $PKGS            # Run all the tests with the race detector enabled | ||||
|   - go vet $PKGS                      # go vet is the official Go static analyzer | ||||
|   - megacheck $PKGS                   # "go vet on steroids" + linter | ||||
|   #- golint -set_exit_status $PKGS     # one last linter | ||||
							
								
								
									
										40
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,8 +1,12 @@ | ||||
| # matterbridge | ||||
| [](https://gitter.im/42wim/matterbridge) [](https://webchat.freenode.net/?channels=matterbridgechat)    | ||||
| Click on one of the badges below to join the chat    | ||||
|  | ||||
| [](https://gitter.im/42wim/matterbridge) [](https://webchat.freenode.net/?channels=matterbridgechat) [](https://discord.gg/AkKPtrQ) [](https://riot.im/app/#/room/#matterbridge:matrix.org) [](https://join.slack.com/matterbridgechat/shared_invite/MjEwODMxNjU1NDMwLTE0OTk2MTU3NTMtMzZkZmRiNDZhOA) | ||||
|  | ||||
|  | ||||
|  | ||||
| Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, Rocket.Chat, Hipchat(via xmpp) and Matrix with REST API. | ||||
| Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, Rocket.Chat, Hipchat(via xmpp), Matrix and Steam. | ||||
| Has a REST API. | ||||
|  | ||||
| # Table of Contents | ||||
|  * [Features](#features) | ||||
| @@ -11,6 +15,7 @@ Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, R | ||||
|    * [Binaries](#binaries) | ||||
|    * [Building](#building) | ||||
|  * [Configuration](#configuration) | ||||
|    * [Howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) | ||||
|    * [Examples](#examples)  | ||||
|  * [Running](#running) | ||||
|    * [Docker](#docker) | ||||
| @@ -19,7 +24,8 @@ Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, R | ||||
|  * [Thanks](#thanks) | ||||
|  | ||||
| # Features | ||||
| * Relays public channel messages between multiple mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, Rocket.Chat, Hipchat (via xmpp) and Matrix. Pick and mix. | ||||
| * Relays public channel messages between multiple mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, Rocket.Chat, Hipchat (via xmpp), Matrix and Steam.  | ||||
|   Pick and mix. | ||||
| * Matterbridge can also work with private groups on your mattermost/slack. | ||||
| * Allow for bridging the same bridges, which means you can eg bridge between multiple mattermosts. | ||||
| * The bridge is now a gateway which has support multiple in and out bridges. (and supports multiple gateways). | ||||
| @@ -27,7 +33,7 @@ Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, R | ||||
|  | ||||
| # Requirements | ||||
| Accounts to one of the supported bridges | ||||
| * [Mattermost](https://github.com/mattermost/platform/) 3.5.x - 3.7.x | ||||
| * [Mattermost](https://github.com/mattermost/platform/) 3.5.x - 3.10.x, 4.0.x | ||||
| * [IRC](http://www.mirc.com/servers.html) | ||||
| * [XMPP](https://jabber.org) | ||||
| * [Gitter](https://gitter.im) | ||||
| @@ -37,11 +43,12 @@ Accounts to one of the supported bridges | ||||
| * [Hipchat](https://www.hipchat.com) | ||||
| * [Rocket.chat](https://rocket.chat) | ||||
| * [Matrix](https://matrix.org) | ||||
| * [Steam](https://store.steampowered.com/) | ||||
|  | ||||
| # Installing | ||||
| ## Binaries | ||||
| Binaries can be found [here] (https://github.com/42wim/matterbridge/releases/) | ||||
| * Latest release [v0.10.1](https://github.com/42wim/matterbridge/releases/latest) | ||||
| * Latest stable release [v0.16.1](https://github.com/42wim/matterbridge/releases/tag/v0.16.1) | ||||
|  | ||||
| ## Building | ||||
| Go 1.6+ is required. Make sure you have [Go](https://golang.org/doc/install) properly installed, including setting up your [GOPATH] (https://golang.org/doc/code.html#GOPATH) | ||||
| @@ -59,10 +66,13 @@ matterbridge | ||||
| ``` | ||||
|  | ||||
| # Configuration | ||||
| * [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample) for documentation and an example. | ||||
| * [matterbridge.toml.simple](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.simple) for a simple example. | ||||
| ## Basic configuration | ||||
| See [howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) for a step by step walkthrough for creating your configuration. | ||||
|  | ||||
| ## Examples | ||||
| ## Advanced configuration | ||||
| * [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample) for documentation and an example. | ||||
|  | ||||
| ## Examples  | ||||
| ### Bridge mattermost (off-topic) - irc (#testing) | ||||
| ``` | ||||
| [irc] | ||||
| @@ -93,10 +103,13 @@ enable=true | ||||
|  | ||||
| ### Bridge slack (#general) - discord (general) | ||||
| ``` | ||||
| [slack] | ||||
| [slack.test] | ||||
| useAPI=true | ||||
| Token="yourslacktoken" | ||||
| PrefixMessagesWithNick=true | ||||
|  | ||||
| [discord] | ||||
| [discord.test] | ||||
| Token="yourdiscordtoken" | ||||
| Server="yourdiscordservername" | ||||
| @@ -118,9 +131,11 @@ RemoteNickFormat="[{PROTOCOL}/{BRIDGE}] <{NICK}> " | ||||
| ``` | ||||
|  | ||||
| # Running | ||||
| 1) Copy the matterbridge.toml.sample to matterbridge.toml in the same directory as the matterbridge binary.   | ||||
| 1) Copy the matterbridge.toml.sample to matterbridge.toml  | ||||
| 2) Edit matterbridge.toml with the settings for your environment.  | ||||
| 3) Now you can run matterbridge.  (```./matterbridge```) | ||||
| 3) Now you can run matterbridge.  (```./matterbridge```)    | ||||
|  | ||||
| (Matterbridge will only look for the config file in your current directory, if it isn't there specify -conf "/path/toyour/matterbridge.toml") | ||||
|  | ||||
| ``` | ||||
| Usage of ./matterbridge: | ||||
| @@ -128,6 +143,8 @@ Usage of ./matterbridge: | ||||
|         config file (default "matterbridge.toml") | ||||
|   -debug | ||||
|         enable debug | ||||
|   -gops | ||||
|         enable gops agent | ||||
|   -version | ||||
|         show version | ||||
| ``` | ||||
| @@ -161,10 +178,11 @@ Matterbridge wouldn't exist without these libraries: | ||||
| * discord - https://github.com/bwmarrin/discordgo | ||||
| * echo - https://github.com/labstack/echo | ||||
| * gitter - https://github.com/sromku/go-gitter | ||||
| * gops - https://github.com/google/gops | ||||
| * irc - https://github.com/thoj/go-ircevent | ||||
| * mattermost - https://github.com/mattermost/platform | ||||
| * matrix - https://github.com/matrix-org/gomatrix | ||||
| * slack - https://github.com/nlopes/slack | ||||
| * steam - https://github.com/Philipp15b/go-steam | ||||
| * telegram - https://github.com/go-telegram-bot-api/telegram-bot-api | ||||
| * xmpp - https://github.com/mattn/go-xmpp | ||||
|  | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import ( | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| 	"github.com/labstack/echo" | ||||
| 	"github.com/labstack/echo/middleware" | ||||
| 	"github.com/zfjagann/golang-ring" | ||||
| 	"net/http" | ||||
| 	"sync" | ||||
| @@ -20,7 +21,9 @@ type Api struct { | ||||
| type ApiMessage struct { | ||||
| 	Text     string `json:"text"` | ||||
| 	Username string `json:"username"` | ||||
| 	UserID   string `json:"userid"` | ||||
| 	Avatar   string `json:"avatar"` | ||||
| 	Gateway  string `json:"gateway"` | ||||
| } | ||||
|  | ||||
| var flog *log.Entry | ||||
| @@ -38,6 +41,11 @@ func New(cfg config.Protocol, account string, c chan config.Message) *Api { | ||||
| 	b.Config = &cfg | ||||
| 	b.Account = account | ||||
| 	b.Remote = c | ||||
| 	if b.Config.Token != "" { | ||||
| 		e.Use(middleware.KeyAuth(func(key string, c echo.Context) (bool, error) { | ||||
| 			return key == b.Config.Token, nil | ||||
| 		})) | ||||
| 	} | ||||
| 	e.GET("/api/messages", b.handleMessages) | ||||
| 	e.POST("/api/message", b.handlePostMessage) | ||||
| 	go func() { | ||||
| @@ -70,12 +78,16 @@ func (b *Api) handlePostMessage(c echo.Context) error { | ||||
| 	if err := c.Bind(message); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	flog.Debugf("Sending message from %s on %s to gateway", message.Username, "api") | ||||
| 	b.Remote <- config.Message{ | ||||
| 		Text:     message.Text, | ||||
| 		Username: message.Username, | ||||
| 		UserID:   message.UserID, | ||||
| 		Channel:  "api", | ||||
| 		Avatar:   message.Avatar, | ||||
| 		Account:  b.Account, | ||||
| 		Gateway:  message.Gateway, | ||||
| 		Protocol: "api", | ||||
| 	} | ||||
| 	return c.JSON(http.StatusOK, message) | ||||
| } | ||||
| @@ -83,9 +95,7 @@ func (b *Api) handlePostMessage(c echo.Context) error { | ||||
| func (b *Api) handleMessages(c echo.Context) error { | ||||
| 	b.Lock() | ||||
| 	defer b.Unlock() | ||||
| 	for _, msg := range b.Messages.Values() { | ||||
| 		c.JSONPretty(http.StatusOK, msg, " ") | ||||
| 	} | ||||
| 	c.JSONPretty(http.StatusOK, b.Messages.Values(), " ") | ||||
| 	b.Messages = ring.Ring{} | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
| @@ -10,6 +10,7 @@ import ( | ||||
| 	"github.com/42wim/matterbridge/bridge/mattermost" | ||||
| 	"github.com/42wim/matterbridge/bridge/rocketchat" | ||||
| 	"github.com/42wim/matterbridge/bridge/slack" | ||||
| 	"github.com/42wim/matterbridge/bridge/steam" | ||||
| 	"github.com/42wim/matterbridge/bridge/telegram" | ||||
| 	"github.com/42wim/matterbridge/bridge/xmpp" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| @@ -27,23 +28,23 @@ type Bridger interface { | ||||
| type Bridge struct { | ||||
| 	Config config.Protocol | ||||
| 	Bridger | ||||
| 	Name        string | ||||
| 	Account     string | ||||
| 	Protocol    string | ||||
| 	ChannelsIn  map[string]config.ChannelOptions | ||||
| 	ChannelsOut map[string]config.ChannelOptions | ||||
| 	Name     string | ||||
| 	Account  string | ||||
| 	Protocol string | ||||
| 	Channels map[string]config.ChannelInfo | ||||
| 	Joined   map[string]bool | ||||
| } | ||||
|  | ||||
| func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Bridge { | ||||
| 	b := new(Bridge) | ||||
| 	b.ChannelsIn = make(map[string]config.ChannelOptions) | ||||
| 	b.ChannelsOut = make(map[string]config.ChannelOptions) | ||||
| 	b.Channels = make(map[string]config.ChannelInfo) | ||||
| 	accInfo := strings.Split(bridge.Account, ".") | ||||
| 	protocol := accInfo[0] | ||||
| 	name := accInfo[1] | ||||
| 	b.Name = name | ||||
| 	b.Protocol = protocol | ||||
| 	b.Account = bridge.Account | ||||
| 	b.Joined = make(map[string]bool) | ||||
|  | ||||
| 	// override config from environment | ||||
| 	config.OverrideCfgFromEnv(cfg, protocol, name) | ||||
| @@ -75,6 +76,9 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid | ||||
| 	case "matrix": | ||||
| 		b.Config = cfg.Matrix[name] | ||||
| 		b.Bridger = bmatrix.New(cfg.Matrix[name], bridge.Account, c) | ||||
| 	case "steam": | ||||
| 		b.Config = cfg.Steam[name] | ||||
| 		b.Bridger = bsteam.New(cfg.Steam[name], bridge.Account, c) | ||||
| 	case "api": | ||||
| 		b.Config = cfg.Api[name] | ||||
| 		b.Bridger = api.New(cfg.Api[name], bridge.Account, c) | ||||
| @@ -83,33 +87,25 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid | ||||
| } | ||||
|  | ||||
| func (b *Bridge) JoinChannels() error { | ||||
| 	exists := make(map[string]bool) | ||||
| 	err := b.joinChannels(b.ChannelsIn, exists) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	err = b.joinChannels(b.ChannelsOut, exists) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	return nil | ||||
| 	err := b.joinChannels(b.Channels, b.Joined) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (b *Bridge) joinChannels(cMap map[string]config.ChannelOptions, exists map[string]bool) error { | ||||
| func (b *Bridge) joinChannels(channels map[string]config.ChannelInfo, exists map[string]bool) error { | ||||
| 	mychannel := "" | ||||
| 	for channel, info := range cMap { | ||||
| 		if !exists[channel] { | ||||
| 			mychannel = channel | ||||
| 			log.Infof("%s: joining %s", b.Account, channel) | ||||
| 			if b.Protocol == "irc" && info.Key != "" { | ||||
| 				log.Debugf("using key %s for channel %s", info.Key, channel) | ||||
| 				mychannel = mychannel + " " + info.Key | ||||
| 	for ID, channel := range channels { | ||||
| 		if !exists[ID] { | ||||
| 			mychannel = channel.Name | ||||
| 			log.Infof("%s: joining %s (%s)", b.Account, channel.Name, ID) | ||||
| 			if b.Protocol == "irc" && channel.Options.Key != "" { | ||||
| 				log.Debugf("using key %s for channel %s", channel.Options.Key, channel.Name) | ||||
| 				mychannel = mychannel + " " + channel.Options.Key | ||||
| 			} | ||||
| 			err := b.JoinChannel(mychannel) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			exists[channel] = true | ||||
| 			exists[ID] = true | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
|   | ||||
| @@ -10,26 +10,43 @@ import ( | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	EVENT_JOIN_LEAVE = "join_leave" | ||||
| 	EVENT_FAILURE    = "failure" | ||||
| 	EVENT_JOIN_LEAVE      = "join_leave" | ||||
| 	EVENT_FAILURE         = "failure" | ||||
| 	EVENT_REJOIN_CHANNELS = "rejoin_channels" | ||||
| ) | ||||
|  | ||||
| type Message struct { | ||||
| 	Text      string | ||||
| 	Channel   string | ||||
| 	Username  string | ||||
| 	Avatar    string | ||||
| 	Account   string | ||||
| 	Event     string | ||||
| 	Protocol  string | ||||
| 	Timestamp time.Time | ||||
| 	Text      string    `json:"text"` | ||||
| 	Channel   string    `json:"channel"` | ||||
| 	Username  string    `json:"username"` | ||||
| 	UserID    string    `json:"userid"` // userid on the bridge | ||||
| 	Avatar    string    `json:"avatar"` | ||||
| 	Account   string    `json:"account"` | ||||
| 	Event     string    `json:"event"` | ||||
| 	Protocol  string    `json:"protocol"` | ||||
| 	Gateway   string    `json:"gateway"` | ||||
| 	Timestamp time.Time `json:"timestamp"` | ||||
| } | ||||
|  | ||||
| type ChannelInfo struct { | ||||
| 	Name        string | ||||
| 	Account     string | ||||
| 	Direction   string | ||||
| 	ID          string | ||||
| 	GID         map[string]bool | ||||
| 	SameChannel map[string]bool | ||||
| 	Options     ChannelOptions | ||||
| } | ||||
|  | ||||
| type Protocol struct { | ||||
| 	BindAddress            string // mattermost, slack | ||||
| 	AuthCode               string // steam | ||||
| 	BindAddress            string // mattermost, slack // DEPRECATED | ||||
| 	Buffer                 int    // api | ||||
| 	EditSuffix             string // mattermost, slack, discord, telegram, gitter | ||||
| 	EditDisable            bool   // mattermost, slack, discord, telegram, gitter | ||||
| 	IconURL                string // mattermost, slack | ||||
| 	IgnoreNicks            string // all protocols | ||||
| 	IgnoreMessages         string // all protocols | ||||
| 	Jid                    string // xmpp | ||||
| 	Login                  string // mattermost, matrix | ||||
| 	Muc                    string // xmpp | ||||
| @@ -39,23 +56,31 @@ type Protocol struct { | ||||
| 	NickServNick           string // IRC | ||||
| 	NickServPassword       string // IRC | ||||
| 	NicksPerRow            int    // mattermost, slack | ||||
| 	NoHomeServerSuffix     bool   // matrix | ||||
| 	NoTLS                  bool   // mattermost | ||||
| 	Password               string // IRC,mattermost,XMPP,matrix | ||||
| 	PrefixMessagesWithNick bool   // mattemost, slack | ||||
| 	Protocol               string //all protocols | ||||
| 	MessageQueue           int    // IRC, size of message queue for flood control | ||||
| 	MessageDelay           int    // IRC, time in millisecond to wait between messages | ||||
| 	MessageLength          int    // IRC, max length of a message allowed | ||||
| 	MessageFormat          string // telegram | ||||
| 	RemoteNickFormat       string // all protocols | ||||
| 	Server                 string // IRC,mattermost,XMPP,discord | ||||
| 	ShowJoinPart           bool   // all protocols | ||||
| 	ShowEmbeds             bool   // discord | ||||
| 	SkipTLSVerify          bool   // IRC, mattermost | ||||
| 	Team                   string // mattermost | ||||
| 	Token                  string // gitter, slack, discord | ||||
| 	URL                    string // mattermost, slack, matrix | ||||
| 	Token                  string // gitter, slack, discord, api | ||||
| 	URL                    string // mattermost, slack // DEPRECATED | ||||
| 	UseAPI                 bool   // mattermost, slack | ||||
| 	UseSASL                bool   // IRC | ||||
| 	UseTLS                 bool   // IRC | ||||
| 	UseFirstName           bool   // telegram | ||||
| 	UseInsecureURL         bool   // telegram | ||||
| 	WebhookBindAddress     string // mattermost, slack | ||||
| 	WebhookURL             string // mattermost, slack | ||||
| 	WebhookUse             string // mattermost, slack, discord | ||||
| } | ||||
|  | ||||
| type ChannelOptions struct { | ||||
| @@ -63,9 +88,10 @@ type ChannelOptions struct { | ||||
| } | ||||
|  | ||||
| type Bridge struct { | ||||
| 	Account string | ||||
| 	Channel string | ||||
| 	Options ChannelOptions | ||||
| 	Account     string | ||||
| 	Channel     string | ||||
| 	Options     ChannelOptions | ||||
| 	SameChannel bool | ||||
| } | ||||
|  | ||||
| type Gateway struct { | ||||
| @@ -89,6 +115,7 @@ type Config struct { | ||||
| 	Mattermost         map[string]Protocol | ||||
| 	Matrix             map[string]Protocol | ||||
| 	Slack              map[string]Protocol | ||||
| 	Steam              map[string]Protocol | ||||
| 	Gitter             map[string]Protocol | ||||
| 	Xmpp               map[string]Protocol | ||||
| 	Discord            map[string]Protocol | ||||
| @@ -104,6 +131,28 @@ func NewConfig(cfgfile string) *Config { | ||||
| 	if _, err := toml.DecodeFile(cfgfile, &cfg); err != nil { | ||||
| 		log.Fatal(err) | ||||
| 	} | ||||
| 	fail := false | ||||
| 	for k, v := range cfg.Mattermost { | ||||
| 		res := Deprecated(v, "mattermost."+k) | ||||
| 		if res { | ||||
| 			fail = res | ||||
| 		} | ||||
| 	} | ||||
| 	for k, v := range cfg.Slack { | ||||
| 		res := Deprecated(v, "slack."+k) | ||||
| 		if res { | ||||
| 			fail = res | ||||
| 		} | ||||
| 	} | ||||
| 	for k, v := range cfg.Rocketchat { | ||||
| 		res := Deprecated(v, "rocketchat."+k) | ||||
| 		if res { | ||||
| 			fail = res | ||||
| 		} | ||||
| 	} | ||||
| 	if fail { | ||||
| 		log.Fatalf("Fix your config. Please see changelog for more information") | ||||
| 	} | ||||
| 	return &cfg | ||||
| } | ||||
|  | ||||
| @@ -154,3 +203,17 @@ func GetIconURL(msg *Message, cfg *Protocol) string { | ||||
| 	iconURL = strings.Replace(iconURL, "{PROTOCOL}", protocol, -1) | ||||
| 	return iconURL | ||||
| } | ||||
|  | ||||
| func Deprecated(cfg Protocol, account string) bool { | ||||
| 	if cfg.BindAddress != "" { | ||||
| 		log.Printf("ERROR: %s BindAddress is deprecated, you need to change it to WebhookBindAddress.", account) | ||||
| 	} else if cfg.URL != "" { | ||||
| 		log.Printf("ERROR: %s URL is deprecated, you need to change it to WebhookURL.", account) | ||||
| 	} else if cfg.UseAPI { | ||||
| 		log.Printf("ERROR: %s UseAPI is deprecated, it's enabled by default, please remove it from your config file.", account) | ||||
| 	} else { | ||||
| 		return false | ||||
| 	} | ||||
| 	return true | ||||
| 	//log.Fatalf("ERROR: Fix your config: %s", account) | ||||
| } | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import ( | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| 	"github.com/bwmarrin/discordgo" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| ) | ||||
| @@ -18,6 +19,8 @@ type bdiscord struct { | ||||
| 	UseChannelID  bool | ||||
| 	userMemberMap map[string]*discordgo.Member | ||||
| 	guildID       string | ||||
| 	webhookID     string | ||||
| 	webhookToken  string | ||||
| 	sync.RWMutex | ||||
| } | ||||
|  | ||||
| @@ -34,12 +37,23 @@ func New(cfg config.Protocol, account string, c chan config.Message) *bdiscord { | ||||
| 	b.Remote = c | ||||
| 	b.Account = account | ||||
| 	b.userMemberMap = make(map[string]*discordgo.Member) | ||||
| 	if b.Config.WebhookURL != "" { | ||||
| 		flog.Debug("Configuring Discord Incoming Webhook") | ||||
| 		webhookURLSplit := strings.Split(b.Config.WebhookURL, "/") | ||||
| 		b.webhookToken = webhookURLSplit[len(webhookURLSplit)-1] | ||||
| 		b.webhookID = webhookURLSplit[len(webhookURLSplit)-2] | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *bdiscord) Connect() error { | ||||
| 	var err error | ||||
| 	flog.Info("Connecting") | ||||
| 	if b.Config.WebhookURL == "" { | ||||
| 		flog.Info("Connecting using token") | ||||
| 	} else { | ||||
| 		flog.Info("Connecting using webhookurl (for posting) and token") | ||||
| 	} | ||||
| 	if !strings.HasPrefix(b.Config.Token, "Bot ") { | ||||
| 		b.Config.Token = "Bot " + b.Config.Token | ||||
| 	} | ||||
| @@ -51,6 +65,7 @@ func (b *bdiscord) Connect() error { | ||||
| 	flog.Info("Connection succeeded") | ||||
| 	b.c.AddHandler(b.messageCreate) | ||||
| 	b.c.AddHandler(b.memberUpdate) | ||||
| 	b.c.AddHandler(b.messageUpdate) | ||||
| 	err = b.c.Open() | ||||
| 	if err != nil { | ||||
| 		flog.Debugf("%#v", err) | ||||
| @@ -99,34 +114,84 @@ func (b *bdiscord) Send(msg config.Message) error { | ||||
| 		flog.Errorf("Could not find channelID for %v", msg.Channel) | ||||
| 		return nil | ||||
| 	} | ||||
| 	b.c.ChannelMessageSend(channelID, msg.Username+msg.Text) | ||||
| 	if b.Config.WebhookURL == "" { | ||||
| 		flog.Debugf("Broadcasting using token (API)") | ||||
| 		b.c.ChannelMessageSend(channelID, msg.Username+msg.Text) | ||||
| 	} else { | ||||
| 		flog.Debugf("Broadcasting using Webhook") | ||||
| 		b.c.WebhookExecute( | ||||
| 			b.webhookID, | ||||
| 			b.webhookToken, | ||||
| 			true, | ||||
| 			&discordgo.WebhookParams{ | ||||
| 				Content:   msg.Text, | ||||
| 				Username:  msg.Username, | ||||
| 				AvatarURL: msg.Avatar, | ||||
| 			}) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (b *bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdate) { | ||||
| 	if b.Config.EditDisable { | ||||
| 		return | ||||
| 	} | ||||
| 	// only when message is actually edited | ||||
| 	if m.Message.EditedTimestamp != "" { | ||||
| 		flog.Debugf("Sending edit message") | ||||
| 		m.Content = m.Content + b.Config.EditSuffix | ||||
| 		b.messageCreate(s, (*discordgo.MessageCreate)(m)) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (b *bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) { | ||||
| 	// not relay our own messages | ||||
| 	if m.Author.Username == b.Nick { | ||||
| 		return | ||||
| 	} | ||||
| 	// if using webhooks, do not relay if it's ours | ||||
| 	if b.Config.WebhookURL != "" && m.Author.Bot && m.Author.ID == b.webhookID { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if len(m.Attachments) > 0 { | ||||
| 		for _, attach := range m.Attachments { | ||||
| 			m.Content = m.Content + "\n" + attach.URL | ||||
| 		} | ||||
| 	} | ||||
| 	if m.Content == "" { | ||||
| 		return | ||||
|  | ||||
| 	var text string | ||||
| 	if m.Content != "" { | ||||
| 		flog.Debugf("Receiving message %#v", m.Message) | ||||
| 		if len(m.MentionRoles) > 0 { | ||||
| 			m.Message.Content = b.replaceRoleMentions(m.Message.Content) | ||||
| 		} | ||||
| 		m.Message.Content = b.stripCustomoji(m.Message.Content) | ||||
| 		m.Message.Content = b.replaceChannelMentions(m.Message.Content) | ||||
| 		text = m.ContentWithMentionsReplaced() | ||||
| 	} | ||||
| 	flog.Debugf("Sending message from %s on %s to gateway", m.Author.Username, b.Account) | ||||
|  | ||||
| 	channelName := b.getChannelName(m.ChannelID) | ||||
| 	if b.UseChannelID { | ||||
| 		channelName = "ID:" + m.ChannelID | ||||
| 	} | ||||
| 	username := b.getNick(m.Author) | ||||
| 	if len(m.MentionRoles) > 0 { | ||||
| 		m.Message.Content = b.replaceRoleMentions(m.Message.Content) | ||||
|  | ||||
| 	if b.Config.ShowEmbeds && m.Message.Embeds != nil { | ||||
| 		for _, embed := range m.Message.Embeds { | ||||
| 			text = text + "embed: " + embed.Title + " - " + embed.Description + " - " + embed.URL + "\n" | ||||
| 		} | ||||
| 	} | ||||
| 	b.Remote <- config.Message{Username: username, Text: m.ContentWithMentionsReplaced(), Channel: channelName, | ||||
| 		Account: b.Account, Avatar: "https://cdn.discordapp.com/avatars/" + m.Author.ID + "/" + m.Author.Avatar + ".jpg"} | ||||
|  | ||||
| 	// no empty messages | ||||
| 	if text == "" { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	flog.Debugf("Sending message from %s on %s to gateway", m.Author.Username, b.Account) | ||||
| 	b.Remote <- config.Message{Username: username, Text: text, Channel: channelName, | ||||
| 		Account: b.Account, Avatar: "https://cdn.discordapp.com/avatars/" + m.Author.ID + "/" + m.Author.Avatar + ".jpg", | ||||
| 		UserID: m.Author.ID} | ||||
| } | ||||
|  | ||||
| func (b *bdiscord) memberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUpdate) { | ||||
| @@ -143,18 +208,21 @@ func (b *bdiscord) getNick(user *discordgo.User) string { | ||||
| 	b.Lock() | ||||
| 	defer b.Unlock() | ||||
| 	if _, ok := b.userMemberMap[user.ID]; ok { | ||||
| 		if b.userMemberMap[user.ID].Nick != "" { | ||||
| 			// only return if nick is set | ||||
| 			return b.userMemberMap[user.ID].Nick | ||||
| 		if b.userMemberMap[user.ID] != nil { | ||||
| 			if b.userMemberMap[user.ID].Nick != "" { | ||||
| 				// only return if nick is set | ||||
| 				return b.userMemberMap[user.ID].Nick | ||||
| 			} | ||||
| 			// otherwise return username | ||||
| 			return user.Username | ||||
| 		} | ||||
| 		// otherwise return username | ||||
| 		return user.Username | ||||
| 	} | ||||
| 	// if we didn't find nick, search for it | ||||
| 	b.userMemberMap[user.ID], err = b.c.GuildMember(b.guildID, user.ID) | ||||
| 	member, err := b.c.GuildMember(b.guildID, user.ID) | ||||
| 	if err != nil { | ||||
| 		return user.Username | ||||
| 	} | ||||
| 	b.userMemberMap[user.ID] = member | ||||
| 	// only return if nick is set | ||||
| 	if b.userMemberMap[user.ID].Nick != "" { | ||||
| 		return b.userMemberMap[user.ID].Nick | ||||
| @@ -195,3 +263,28 @@ func (b *bdiscord) replaceRoleMentions(text string) string { | ||||
| 	} | ||||
| 	return text | ||||
| } | ||||
|  | ||||
| func (b *bdiscord) replaceChannelMentions(text string) string { | ||||
| 	var err error | ||||
| 	re := regexp.MustCompile("<#[0-9]+>") | ||||
| 	text = re.ReplaceAllStringFunc(text, func(m string) string { | ||||
| 		channel := b.getChannelName(m[2 : len(m)-1]) | ||||
| 		// if at first don't succeed, try again | ||||
| 		if channel == "" { | ||||
| 			b.Channels, err = b.c.GuildChannels(b.guildID) | ||||
| 			if err != nil { | ||||
| 				return "#unknownchannel" | ||||
| 			} | ||||
| 			channel = b.getChannelName(m[2 : len(m)-1]) | ||||
| 			return "#" + channel | ||||
| 		} | ||||
| 		return "#" + channel | ||||
| 	}) | ||||
| 	return text | ||||
| } | ||||
|  | ||||
| func (b *bdiscord) stripCustomoji(text string) string { | ||||
| 	// <:doge:302803592035958784> | ||||
| 	re := regexp.MustCompile("<(:.*?:)[0-9]+>") | ||||
| 	return re.ReplaceAllString(text, `$1`) | ||||
| } | ||||
|   | ||||
| @@ -82,7 +82,7 @@ func (b *Bgitter) JoinChannel(channel string) error { | ||||
| 				if !strings.HasSuffix(ev.Message.Text, "") { | ||||
| 					flog.Debugf("Sending message from %s on %s to gateway", ev.Message.From.Username, b.Account) | ||||
| 					b.Remote <- config.Message{Username: ev.Message.From.Username, Text: ev.Message.Text, Channel: room, | ||||
| 						Account: b.Account, Avatar: b.getAvatar(ev.Message.From.Username)} | ||||
| 						Account: b.Account, Avatar: b.getAvatar(ev.Message.From.Username), UserID: ev.Message.From.ID} | ||||
| 				} | ||||
| 			case *gitter.GitterConnectionClosed: | ||||
| 				flog.Errorf("connection with gitter closed for room %s", room) | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import ( | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| /* | ||||
| func tableformatter(nicks []string, nicksPerRow int, continued bool) string { | ||||
| 	result := "|IRC users" | ||||
| 	if continued { | ||||
| @@ -29,6 +30,7 @@ func tableformatter(nicks []string, nicksPerRow int, continued bool) string { | ||||
| 	} | ||||
| 	return result | ||||
| } | ||||
| */ | ||||
|  | ||||
| func plainformatter(nicks []string, nicksPerRow int) string { | ||||
| 	return strings.Join(nicks, ", ") + " currently on IRC" | ||||
|   | ||||
| @@ -5,8 +5,13 @@ import ( | ||||
| 	"fmt" | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| 	"github.com/paulrosania/go-charset/charset" | ||||
| 	_ "github.com/paulrosania/go-charset/data" | ||||
| 	"github.com/saintfish/chardet" | ||||
| 	ircm "github.com/sorcix/irc" | ||||
| 	"github.com/thoj/go-ircevent" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"regexp" | ||||
| 	"sort" | ||||
| 	"strconv" | ||||
| @@ -15,14 +20,15 @@ import ( | ||||
| ) | ||||
|  | ||||
| type Birc struct { | ||||
| 	i         *irc.Connection | ||||
| 	Nick      string | ||||
| 	names     map[string][]string | ||||
| 	Config    *config.Protocol | ||||
| 	Remote    chan config.Message | ||||
| 	connected chan struct{} | ||||
| 	Local     chan config.Message // local queue for flood control | ||||
| 	Account   string | ||||
| 	i               *irc.Connection | ||||
| 	Nick            string | ||||
| 	names           map[string][]string | ||||
| 	Config          *config.Protocol | ||||
| 	Remote          chan config.Message | ||||
| 	connected       chan struct{} | ||||
| 	Local           chan config.Message // local queue for flood control | ||||
| 	Account         string | ||||
| 	FirstConnection bool | ||||
| } | ||||
|  | ||||
| var flog *log.Entry | ||||
| @@ -46,6 +52,10 @@ func New(cfg config.Protocol, account string, c chan config.Message) *Birc { | ||||
| 	if b.Config.MessageQueue == 0 { | ||||
| 		b.Config.MessageQueue = 30 | ||||
| 	} | ||||
| 	if b.Config.MessageLength == 0 { | ||||
| 		b.Config.MessageLength = 400 | ||||
| 	} | ||||
| 	b.FirstConnection = true | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| @@ -71,6 +81,8 @@ func (b *Birc) Connect() error { | ||||
| 	i.SASLLogin = b.Config.NickServNick | ||||
| 	i.SASLPassword = b.Config.NickServPassword | ||||
| 	i.TLSConfig = &tls.Config{InsecureSkipVerify: b.Config.SkipTLSVerify} | ||||
| 	i.KeepAlive = time.Minute | ||||
| 	i.PingFreq = time.Minute | ||||
| 	if b.Config.Password != "" { | ||||
| 		i.Password = b.Config.Password | ||||
| 	} | ||||
| @@ -87,12 +99,20 @@ func (b *Birc) Connect() error { | ||||
| 		return fmt.Errorf("connection timed out") | ||||
| 	} | ||||
| 	i.Debug = false | ||||
| 	// clear on reconnects | ||||
| 	i.ClearCallback(ircm.RPL_WELCOME) | ||||
| 	i.AddCallback(ircm.RPL_WELCOME, func(event *irc.Event) { | ||||
| 		b.Remote <- config.Message{Username: "system", Text: "rejoin", Channel: "", Account: b.Account, Event: config.EVENT_REJOIN_CHANNELS} | ||||
| 		// set our correct nick on reconnect if necessary | ||||
| 		b.Nick = event.Nick | ||||
| 	}) | ||||
| 	go i.Loop() | ||||
| 	go b.doSend() | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (b *Birc) Disconnect() error { | ||||
| 	b.i.Disconnect() | ||||
| 	//b.i.Disconnect() | ||||
| 	close(b.Local) | ||||
| 	return nil | ||||
| } | ||||
| @@ -109,9 +129,11 @@ func (b *Birc) Send(msg config.Message) error { | ||||
| 	} | ||||
| 	if strings.HasPrefix(msg.Text, "!") { | ||||
| 		b.Command(&msg) | ||||
| 		return nil | ||||
| 	} | ||||
| 	for _, text := range strings.Split(msg.Text, "\n") { | ||||
| 		if len(text) > b.Config.MessageLength { | ||||
| 			text = text[:b.Config.MessageLength] + " <message clipped>" | ||||
| 		} | ||||
| 		if len(b.Local) < b.Config.MessageQueue { | ||||
| 			if len(b.Local) == b.Config.MessageQueue-1 { | ||||
| 				text = text + " <message clipped>" | ||||
| @@ -126,9 +148,9 @@ func (b *Birc) Send(msg config.Message) error { | ||||
|  | ||||
| func (b *Birc) doSend() { | ||||
| 	rate := time.Millisecond * time.Duration(b.Config.MessageDelay) | ||||
| 	throttle := time.Tick(rate) | ||||
| 	throttle := time.NewTicker(rate) | ||||
| 	for msg := range b.Local { | ||||
| 		<-throttle | ||||
| 		<-throttle.C | ||||
| 		b.i.Privmsg(msg.Channel, msg.Username+msg.Text) | ||||
| 	} | ||||
| } | ||||
| @@ -167,14 +189,19 @@ func (b *Birc) handleNewConnection(event *irc.Event) { | ||||
| 	i.AddCallback("JOIN", b.handleJoinPart) | ||||
| 	i.AddCallback("PART", b.handleJoinPart) | ||||
| 	i.AddCallback("QUIT", b.handleJoinPart) | ||||
| 	i.AddCallback("KICK", b.handleJoinPart) | ||||
| 	i.AddCallback("*", b.handleOther) | ||||
| 	// we are now fully connected | ||||
| 	b.connected <- struct{}{} | ||||
| } | ||||
|  | ||||
| func (b *Birc) handleJoinPart(event *irc.Event) { | ||||
| 	flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account) | ||||
| 	channel := event.Arguments[0] | ||||
| 	if event.Code == "KICK" { | ||||
| 		flog.Infof("Got kicked from %s by %s", channel, event.Nick) | ||||
| 		b.Remote <- config.Message{Username: "system", Text: "rejoin", Channel: channel, Account: b.Account, Event: config.EVENT_REJOIN_CHANNELS} | ||||
| 		return | ||||
| 	} | ||||
| 	if event.Code == "QUIT" { | ||||
| 		if event.Nick == b.Nick && strings.Contains(event.Raw, "Ping timeout") { | ||||
| 			flog.Infof("%s reconnecting ..", b.Account) | ||||
| @@ -182,7 +209,11 @@ func (b *Birc) handleJoinPart(event *irc.Event) { | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 	b.Remote <- config.Message{Username: "system", Text: event.Nick + " " + strings.ToLower(event.Code) + "s", Channel: channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE} | ||||
| 	if event.Nick != b.Nick { | ||||
| 		flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account) | ||||
| 		b.Remote <- config.Message{Username: "system", Text: event.Nick + " " + strings.ToLower(event.Code) + "s", Channel: channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE} | ||||
| 		return | ||||
| 	} | ||||
| 	flog.Debugf("handle %#v", event) | ||||
| } | ||||
|  | ||||
| @@ -203,6 +234,11 @@ func (b *Birc) handleOther(event *irc.Event) { | ||||
| } | ||||
|  | ||||
| func (b *Birc) handlePrivMsg(event *irc.Event) { | ||||
| 	b.Nick = b.i.GetNick() | ||||
| 	// freenode doesn't send 001 as first reply | ||||
| 	if event.Code == "NOTICE" { | ||||
| 		return | ||||
| 	} | ||||
| 	// don't forward queries to the bot | ||||
| 	if event.Arguments[0] == b.Nick { | ||||
| 		return | ||||
| @@ -220,8 +256,30 @@ func (b *Birc) handlePrivMsg(event *irc.Event) { | ||||
| 	// strip IRC colors | ||||
| 	re := regexp.MustCompile(`[[:cntrl:]](\d+,|)\d+`) | ||||
| 	msg = re.ReplaceAllString(msg, "") | ||||
|  | ||||
| 	// detect what were sending so that we convert it to utf-8 | ||||
| 	detector := chardet.NewTextDetector() | ||||
| 	result, err := detector.DetectBest([]byte(msg)) | ||||
| 	if err != nil { | ||||
| 		flog.Infof("detection failed for msg: %#v", msg) | ||||
| 		return | ||||
| 	} | ||||
| 	flog.Debugf("detected %s confidence %#v", result.Charset, result.Confidence) | ||||
| 	var r io.Reader | ||||
| 	r, err = charset.NewReader(result.Charset, strings.NewReader(msg)) | ||||
| 	// if we're not sure, just pick ISO-8859-1 | ||||
| 	if result.Confidence < 80 { | ||||
| 		r, err = charset.NewReader("ISO-8859-1", strings.NewReader(msg)) | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		flog.Errorf("charset to utf-8 conversion failed: %s", err) | ||||
| 		return | ||||
| 	} | ||||
| 	output, _ := ioutil.ReadAll(r) | ||||
| 	msg = string(output) | ||||
|  | ||||
| 	flog.Debugf("Sending message from %s on %s to gateway", event.Arguments[0], b.Account) | ||||
| 	b.Remote <- config.Message{Username: event.Nick, Text: msg, Channel: event.Arguments[0], Account: b.Account} | ||||
| 	b.Remote <- config.Message{Username: event.Nick, Text: msg, Channel: event.Arguments[0], Account: b.Account, UserID: event.User + "@" + event.Host} | ||||
| } | ||||
|  | ||||
| func (b *Birc) handleTopicWhoTime(event *irc.Event) { | ||||
|   | ||||
| @@ -1,10 +1,12 @@ | ||||
| package bmatrix | ||||
|  | ||||
| import ( | ||||
| 	"regexp" | ||||
| 	"sync" | ||||
|  | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| 	matrix "github.com/matrix-org/gomatrix" | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| type Bmatrix struct { | ||||
| @@ -101,8 +103,13 @@ func (b *Bmatrix) handlematrix() error { | ||||
| 				flog.Debugf("Unknown room %s", ev.RoomID) | ||||
| 				return | ||||
| 			} | ||||
| 			username := ev.Sender[1:] | ||||
| 			if b.Config.NoHomeServerSuffix { | ||||
| 				re := regexp.MustCompile("(.*?):.*") | ||||
| 				username = re.ReplaceAllString(username, `$1`) | ||||
| 			} | ||||
| 			flog.Debugf("Sending message from %s on %s to gateway", ev.Sender, b.Account) | ||||
| 			b.Remote <- config.Message{Username: ev.Sender, Text: ev.Content["body"].(string), Channel: channel, Account: b.Account} | ||||
| 			b.Remote <- config.Message{Username: username, Text: ev.Content["body"].(string), Channel: channel, Account: b.Account, UserID: ev.Sender} | ||||
| 		} | ||||
| 		flog.Debugf("Received: %#v", ev) | ||||
| 	}) | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| package bmattermost | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	"github.com/42wim/matterbridge/matterclient" | ||||
| 	"github.com/42wim/matterbridge/matterhook" | ||||
| @@ -12,15 +13,15 @@ type MMhook struct { | ||||
| } | ||||
|  | ||||
| type MMapi struct { | ||||
| 	mc            *matterclient.MMClient | ||||
| 	mmMap         map[string]string | ||||
| 	mmIgnoreNicks []string | ||||
| 	mc    *matterclient.MMClient | ||||
| 	mmMap map[string]string | ||||
| } | ||||
|  | ||||
| type MMMessage struct { | ||||
| 	Text     string | ||||
| 	Channel  string | ||||
| 	Username string | ||||
| 	UserID   string | ||||
| } | ||||
|  | ||||
| type Bmattermost struct { | ||||
| @@ -28,7 +29,6 @@ type Bmattermost struct { | ||||
| 	MMapi | ||||
| 	Config  *config.Protocol | ||||
| 	Remote  chan config.Message | ||||
| 	name    string | ||||
| 	TeamId  string | ||||
| 	Account string | ||||
| } | ||||
| @@ -54,26 +54,49 @@ func (b *Bmattermost) Command(cmd string) string { | ||||
| } | ||||
|  | ||||
| func (b *Bmattermost) Connect() error { | ||||
| 	if !b.Config.UseAPI { | ||||
| 		flog.Info("Connecting webhooks") | ||||
| 		b.mh = matterhook.New(b.Config.URL, | ||||
| 	if b.Config.WebhookBindAddress != "" { | ||||
| 		if b.Config.WebhookURL != "" { | ||||
| 			flog.Info("Connecting using webhookurl (sending) and webhookbindaddress (receiving)") | ||||
| 		} else if b.Config.Login != "" { | ||||
| 			flog.Info("Connecting using login/password (sending)") | ||||
| 			err := b.apiLogin() | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} else { | ||||
| 			flog.Info("Connecting using webhookbindaddress (receiving)") | ||||
| 			b.mh = matterhook.New(b.Config.WebhookURL, | ||||
| 				matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||
| 					BindAddress: b.Config.WebhookBindAddress}) | ||||
| 		} | ||||
| 		go b.handleMatter() | ||||
| 		return nil | ||||
| 	} | ||||
| 	if b.Config.WebhookURL != "" { | ||||
| 		flog.Info("Connecting using webhookurl (sending)") | ||||
| 		b.mh = matterhook.New(b.Config.WebhookURL, | ||||
| 			matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||
| 				BindAddress: b.Config.BindAddress}) | ||||
| 	} else { | ||||
| 		b.mc = matterclient.New(b.Config.Login, b.Config.Password, | ||||
| 			b.Config.Team, b.Config.Server) | ||||
| 		b.mc.SkipTLSVerify = b.Config.SkipTLSVerify | ||||
| 		b.mc.NoTLS = b.Config.NoTLS | ||||
| 		flog.Infof("Connecting %s (team: %s) on %s", b.Config.Login, b.Config.Team, b.Config.Server) | ||||
| 		err := b.mc.Login() | ||||
| 				DisableServer: true}) | ||||
| 		if b.Config.Login != "" { | ||||
| 			flog.Info("Connecting using login/password (receiving)") | ||||
| 			err := b.apiLogin() | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			go b.handleMatter() | ||||
| 		} | ||||
| 		return nil | ||||
| 	} else if b.Config.Login != "" { | ||||
| 		flog.Info("Connecting using login/password (sending and receiving)") | ||||
| 		err := b.apiLogin() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		flog.Info("Connection succeeded") | ||||
| 		b.TeamId = b.mc.GetTeamId() | ||||
| 		go b.mc.WsReceiver() | ||||
| 		go b.handleMatter() | ||||
| 	} | ||||
| 	if b.Config.WebhookBindAddress == "" && b.Config.WebhookURL == "" && b.Config.Login == "" { | ||||
| 		return errors.New("No connection method found. See that you have WebhookBindAddress, WebhookURL or Login/Password/Server/Team configured.") | ||||
| 	} | ||||
| 	go b.handleMatter() | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| @@ -83,7 +106,7 @@ func (b *Bmattermost) Disconnect() error { | ||||
|  | ||||
| func (b *Bmattermost) JoinChannel(channel string) error { | ||||
| 	// we can only join channels using the API | ||||
| 	if b.Config.UseAPI { | ||||
| 	if b.Config.WebhookURL == "" && b.Config.WebhookBindAddress == "" { | ||||
| 		return b.mc.JoinChannel(b.mc.GetChannelId(channel, "")) | ||||
| 	} | ||||
| 	return nil | ||||
| @@ -96,15 +119,11 @@ func (b *Bmattermost) Send(msg config.Message) error { | ||||
| 	channel := msg.Channel | ||||
|  | ||||
| 	if b.Config.PrefixMessagesWithNick { | ||||
| 		/*if IsMarkup(message) { | ||||
| 			message = nick + "\n\n" + message | ||||
| 		} else { | ||||
| 		*/ | ||||
| 		message = nick + " " + message | ||||
| 		//} | ||||
| 		message = nick + message | ||||
| 	} | ||||
| 	if !b.Config.UseAPI { | ||||
| 	if b.Config.WebhookURL != "" { | ||||
| 		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} | ||||
| 		matterMessage.IconURL = msg.Avatar | ||||
| 		matterMessage.Channel = channel | ||||
| 		matterMessage.UserName = nick | ||||
| 		matterMessage.Type = "" | ||||
| @@ -121,31 +140,48 @@ func (b *Bmattermost) Send(msg config.Message) error { | ||||
| } | ||||
|  | ||||
| func (b *Bmattermost) handleMatter() { | ||||
| 	flog.Debugf("Choosing API based Mattermost connection: %t", b.Config.UseAPI) | ||||
| 	mchan := make(chan *MMMessage) | ||||
| 	if b.Config.UseAPI { | ||||
| 		go b.handleMatterClient(mchan) | ||||
| 	} else { | ||||
| 	if b.Config.WebhookBindAddress != "" { | ||||
| 		flog.Debugf("Choosing webhooks based receiving") | ||||
| 		go b.handleMatterHook(mchan) | ||||
| 	} else { | ||||
| 		flog.Debugf("Choosing login/password based receiving") | ||||
| 		go b.handleMatterClient(mchan) | ||||
| 	} | ||||
| 	for message := range mchan { | ||||
| 		flog.Debugf("Sending message from %s on %s to gateway", message.Username, b.Account) | ||||
| 		b.Remote <- config.Message{Text: message.Text, Username: message.Username, Channel: message.Channel, Account: b.Account} | ||||
| 		b.Remote <- config.Message{Text: message.Text, Username: message.Username, Channel: message.Channel, Account: b.Account, UserID: message.UserID} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) { | ||||
| 	for message := range b.mc.MessageChan { | ||||
| 		flog.Debugf("%#v", message.Raw.Data) | ||||
| 		if message.Type == "system_join_leave" || | ||||
| 			message.Type == "system_join_channel" || | ||||
| 			message.Type == "system_leave_channel" { | ||||
| 			flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account) | ||||
| 			b.Remote <- config.Message{Username: "system", Text: message.Text, Channel: message.Channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE} | ||||
| 			continue | ||||
| 		} | ||||
| 		if (message.Raw.Event == "post_edited") && b.Config.EditDisable { | ||||
| 			continue | ||||
| 		} | ||||
| 		// do not post our own messages back to irc | ||||
| 		// only listen to message from our team | ||||
| 		if message.Raw.Event == "posted" && b.mc.User.Username != message.Username && message.Raw.Data["team_id"].(string) == b.TeamId { | ||||
| 		if (message.Raw.Event == "posted" || message.Raw.Event == "post_edited") && | ||||
| 			b.mc.User.Username != message.Username && message.Raw.Data["team_id"].(string) == b.TeamId { | ||||
| 			flog.Debugf("Receiving from matterclient %#v", message) | ||||
| 			m := &MMMessage{} | ||||
| 			m.UserID = message.UserID | ||||
| 			m.Username = message.Username | ||||
| 			m.Channel = message.Channel | ||||
| 			m.Text = message.Text | ||||
| 			if message.Raw.Event == "post_edited" && !b.Config.EditDisable { | ||||
| 				m.Text = message.Text + b.Config.EditSuffix | ||||
| 			} | ||||
| 			if len(message.Post.FileIds) > 0 { | ||||
| 				for _, link := range b.mc.GetPublicLinks(message.Post.FileIds) { | ||||
| 				for _, link := range b.mc.GetFileLinks(message.Post.FileIds) { | ||||
| 					m.Text = m.Text + "\n" + link | ||||
| 				} | ||||
| 			} | ||||
| @@ -159,9 +195,27 @@ func (b *Bmattermost) handleMatterHook(mchan chan *MMMessage) { | ||||
| 		message := b.mh.Receive() | ||||
| 		flog.Debugf("Receiving from matterhook %#v", message) | ||||
| 		m := &MMMessage{} | ||||
| 		m.UserID = message.UserID | ||||
| 		m.Username = message.UserName | ||||
| 		m.Text = message.Text | ||||
| 		m.Channel = message.ChannelName | ||||
| 		mchan <- m | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (b *Bmattermost) apiLogin() error { | ||||
| 	b.mc = matterclient.New(b.Config.Login, b.Config.Password, | ||||
| 		b.Config.Team, b.Config.Server) | ||||
| 	b.mc.SkipTLSVerify = b.Config.SkipTLSVerify | ||||
| 	b.mc.NoTLS = b.Config.NoTLS | ||||
| 	flog.Infof("Connecting %s (team: %s) on %s", b.Config.Login, b.Config.Team, b.Config.Server) | ||||
| 	err := b.mc.Login() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	flog.Info("Connection succeeded") | ||||
| 	b.TeamId = b.mc.GetTeamId() | ||||
| 	go b.mc.WsReceiver() | ||||
| 	go b.mc.StatusLoop() | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
| @@ -16,7 +16,6 @@ type Brocketchat struct { | ||||
| 	MMhook | ||||
| 	Config  *config.Protocol | ||||
| 	Remote  chan config.Message | ||||
| 	name    string | ||||
| 	Account string | ||||
| } | ||||
|  | ||||
| @@ -41,10 +40,10 @@ func (b *Brocketchat) Command(cmd string) string { | ||||
|  | ||||
| func (b *Brocketchat) Connect() error { | ||||
| 	flog.Info("Connecting webhooks") | ||||
| 	b.mh = matterhook.New(b.Config.URL, | ||||
| 	b.mh = matterhook.New(b.Config.WebhookURL, | ||||
| 		matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||
| 			DisableServer: true}) | ||||
| 	b.rh = rockethook.New(b.Config.URL, rockethook.Config{BindAddress: b.Config.BindAddress}) | ||||
| 	b.rh = rockethook.New(b.Config.WebhookURL, rockethook.Config{BindAddress: b.Config.WebhookBindAddress}) | ||||
| 	go b.handleRocketHook() | ||||
| 	return nil | ||||
| } | ||||
| @@ -82,6 +81,6 @@ func (b *Brocketchat) handleRocketHook() { | ||||
| 			continue | ||||
| 		} | ||||
| 		flog.Debugf("Sending message from %s on %s to gateway", message.UserName, b.Account) | ||||
| 		b.Remote <- config.Message{Text: message.Text, Username: message.UserName, Channel: message.ChannelName, Account: b.Account} | ||||
| 		b.Remote <- config.Message{Text: message.Text, Username: message.UserName, Channel: message.ChannelName, Account: b.Account, UserID: message.UserID} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,11 +1,13 @@ | ||||
| package bslack | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	"github.com/42wim/matterbridge/matterhook" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| 	"github.com/nlopes/slack" | ||||
| 	"html" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| @@ -15,6 +17,7 @@ type MMMessage struct { | ||||
| 	Text     string | ||||
| 	Channel  string | ||||
| 	Username string | ||||
| 	UserID   string | ||||
| 	Raw      *slack.MessageEvent | ||||
| } | ||||
|  | ||||
| @@ -51,17 +54,52 @@ func (b *Bslack) Command(cmd string) string { | ||||
| } | ||||
|  | ||||
| func (b *Bslack) Connect() error { | ||||
| 	flog.Info("Connecting") | ||||
| 	if !b.Config.UseAPI { | ||||
| 		b.mh = matterhook.New(b.Config.URL, | ||||
| 			matterhook.Config{BindAddress: b.Config.BindAddress}) | ||||
| 	} else { | ||||
| 	if b.Config.WebhookBindAddress != "" { | ||||
| 		if b.Config.WebhookURL != "" { | ||||
| 			flog.Info("Connecting using webhookurl (sending) and webhookbindaddress (receiving)") | ||||
| 			b.mh = matterhook.New(b.Config.WebhookURL, | ||||
| 				matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||
| 					BindAddress: b.Config.WebhookBindAddress}) | ||||
| 		} else if b.Config.Token != "" { | ||||
| 			flog.Info("Connecting using token (sending)") | ||||
| 			b.sc = slack.New(b.Config.Token) | ||||
| 			b.rtm = b.sc.NewRTM() | ||||
| 			go b.rtm.ManageConnection() | ||||
| 			flog.Info("Connecting using webhookbindaddress (receiving)") | ||||
| 			b.mh = matterhook.New(b.Config.WebhookURL, | ||||
| 				matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||
| 					BindAddress: b.Config.WebhookBindAddress}) | ||||
| 		} else { | ||||
| 			flog.Info("Connecting using webhookbindaddress (receiving)") | ||||
| 			b.mh = matterhook.New(b.Config.WebhookURL, | ||||
| 				matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||
| 					BindAddress: b.Config.WebhookBindAddress}) | ||||
| 		} | ||||
| 		go b.handleSlack() | ||||
| 		return nil | ||||
| 	} | ||||
| 	if b.Config.WebhookURL != "" { | ||||
| 		flog.Info("Connecting using webhookurl (sending)") | ||||
| 		b.mh = matterhook.New(b.Config.WebhookURL, | ||||
| 			matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||
| 				DisableServer: true}) | ||||
| 		if b.Config.Token != "" { | ||||
| 			flog.Info("Connecting using token (receiving)") | ||||
| 			b.sc = slack.New(b.Config.Token) | ||||
| 			b.rtm = b.sc.NewRTM() | ||||
| 			go b.rtm.ManageConnection() | ||||
| 			go b.handleSlack() | ||||
| 		} | ||||
| 	} else if b.Config.Token != "" { | ||||
| 		flog.Info("Connecting using token (sending and receiving)") | ||||
| 		b.sc = slack.New(b.Config.Token) | ||||
| 		b.rtm = b.sc.NewRTM() | ||||
| 		go b.rtm.ManageConnection() | ||||
| 		go b.handleSlack() | ||||
| 	} | ||||
| 	if b.Config.WebhookBindAddress == "" && b.Config.WebhookURL == "" && b.Config.Token == "" { | ||||
| 		return errors.New("No connection method found. See that you have WebhookBindAddress, WebhookURL or Token configured.") | ||||
| 	} | ||||
| 	flog.Info("Connection succeeded") | ||||
| 	go b.handleSlack() | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| @@ -72,10 +110,16 @@ func (b *Bslack) Disconnect() error { | ||||
|  | ||||
| func (b *Bslack) JoinChannel(channel string) error { | ||||
| 	// we can only join channels using the API | ||||
| 	if b.Config.UseAPI { | ||||
| 	if b.Config.WebhookURL == "" && b.Config.WebhookBindAddress == "" { | ||||
| 		if strings.HasPrefix(b.Config.Token, "xoxb") { | ||||
| 			// TODO check if bot has already joined channel | ||||
| 			return nil | ||||
| 		} | ||||
| 		_, err := b.sc.JoinChannel(channel) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 			if err.Error() != "name_taken" { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| @@ -83,16 +127,13 @@ func (b *Bslack) JoinChannel(channel string) error { | ||||
|  | ||||
| func (b *Bslack) Send(msg config.Message) error { | ||||
| 	flog.Debugf("Receiving %#v", msg) | ||||
| 	if msg.Account == b.Account { | ||||
| 		return nil | ||||
| 	} | ||||
| 	nick := msg.Username | ||||
| 	message := msg.Text | ||||
| 	channel := msg.Channel | ||||
| 	if b.Config.PrefixMessagesWithNick { | ||||
| 		message = nick + " " + message | ||||
| 	} | ||||
| 	if !b.Config.UseAPI { | ||||
| 	if b.Config.WebhookURL != "" { | ||||
| 		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} | ||||
| 		matterMessage.Channel = channel | ||||
| 		matterMessage.UserName = nick | ||||
| @@ -110,7 +151,7 @@ func (b *Bslack) Send(msg config.Message) error { | ||||
| 		return err | ||||
| 	} | ||||
| 	np := slack.NewPostMessageParameters() | ||||
| 	if b.Config.PrefixMessagesWithNick == true { | ||||
| 	if b.Config.PrefixMessagesWithNick { | ||||
| 		np.AsUser = true | ||||
| 	} | ||||
| 	np.Username = nick | ||||
| @@ -165,24 +206,27 @@ func (b *Bslack) getChannelByID(ID string) (*slack.Channel, error) { | ||||
| } | ||||
|  | ||||
| func (b *Bslack) handleSlack() { | ||||
| 	flog.Debugf("Choosing API based slack connection: %t", b.Config.UseAPI) | ||||
| 	mchan := make(chan *MMMessage) | ||||
| 	if b.Config.UseAPI { | ||||
| 		go b.handleSlackClient(mchan) | ||||
| 	} else { | ||||
| 	if b.Config.WebhookBindAddress != "" { | ||||
| 		flog.Debugf("Choosing webhooks based receiving") | ||||
| 		go b.handleMatterHook(mchan) | ||||
| 	} else { | ||||
| 		flog.Debugf("Choosing token based receiving") | ||||
| 		go b.handleSlackClient(mchan) | ||||
| 	} | ||||
| 	time.Sleep(time.Second) | ||||
| 	flog.Debug("Start listening for Slack messages") | ||||
| 	for message := range mchan { | ||||
| 		// do not send messages from ourself | ||||
| 		if b.Config.UseAPI && message.Username == b.si.User.Name { | ||||
| 		if b.Config.WebhookURL == "" && b.Config.WebhookBindAddress == "" && message.Username == b.si.User.Name { | ||||
| 			continue | ||||
| 		} | ||||
| 		texts := strings.Split(message.Text, "\n") | ||||
| 		for _, text := range texts { | ||||
| 			text = b.replaceURL(text) | ||||
| 			text = html.UnescapeString(text) | ||||
| 			flog.Debugf("Sending message from %s on %s to gateway", message.Username, b.Account) | ||||
| 			b.Remote <- config.Message{Text: text, Username: message.Username, Channel: message.Channel, Account: b.Account, Avatar: b.getAvatar(message.Username)} | ||||
| 			b.Remote <- config.Message{Text: text, Username: message.Username, Channel: message.Channel, Account: b.Account, Avatar: b.getAvatar(message.Username), UserID: message.UserID} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -195,6 +239,11 @@ func (b *Bslack) handleSlackClient(mchan chan *MMMessage) { | ||||
| 			// ignore first message | ||||
| 			if count > 0 { | ||||
| 				flog.Debugf("Receiving from slackclient %#v", ev) | ||||
| 				if !b.Config.EditDisable && ev.SubMessage != nil { | ||||
| 					flog.Debugf("SubMessage %#v", ev.SubMessage) | ||||
| 					ev.User = ev.SubMessage.User | ||||
| 					ev.Text = ev.SubMessage.Text + b.Config.EditSuffix | ||||
| 				} | ||||
| 				// use our own func because rtm.GetChannelInfo doesn't work for private channels | ||||
| 				channel, err := b.getChannelByID(ev.Channel) | ||||
| 				if err != nil { | ||||
| @@ -205,11 +254,21 @@ func (b *Bslack) handleSlackClient(mchan chan *MMMessage) { | ||||
| 					continue | ||||
| 				} | ||||
| 				m := &MMMessage{} | ||||
| 				m.UserID = user.ID | ||||
| 				m.Username = user.Name | ||||
| 				m.Channel = channel.Name | ||||
| 				m.Text = ev.Text | ||||
| 				m.Raw = ev | ||||
| 				m.Text = b.replaceMention(m.Text) | ||||
| 				if ev.BotID != "" && user.Name == "" { | ||||
| 					bot, err := b.rtm.GetBotInfo(ev.BotID) | ||||
| 					if err != nil { | ||||
| 						continue | ||||
| 					} | ||||
| 					if bot.Name != "" { | ||||
| 						m.Username = bot.Name | ||||
| 					} | ||||
| 				} | ||||
| 				mchan <- m | ||||
| 			} | ||||
| 			count++ | ||||
| @@ -269,3 +328,11 @@ func (b *Bslack) replaceMention(text string) string { | ||||
| 	} | ||||
| 	return text | ||||
| } | ||||
|  | ||||
| func (b *Bslack) replaceURL(text string) string { | ||||
| 	results := regexp.MustCompile(`<(.*?)\|.*?>`).FindAllStringSubmatch(text, -1) | ||||
| 	for _, r := range results { | ||||
| 		text = strings.Replace(text, r[0], r[1], -1) | ||||
| 	} | ||||
| 	return text | ||||
| } | ||||
|   | ||||
							
								
								
									
										160
									
								
								bridge/steam/steam.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								bridge/steam/steam.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,160 @@ | ||||
| package bsteam | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	"github.com/Philipp15b/go-steam" | ||||
| 	"github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	"github.com/Philipp15b/go-steam/steamid" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| 	//"io/ioutil" | ||||
| 	"strconv" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| type Bsteam struct { | ||||
| 	c         *steam.Client | ||||
| 	connected chan struct{} | ||||
| 	Config    *config.Protocol | ||||
| 	Remote    chan config.Message | ||||
| 	Account   string | ||||
| 	userMap   map[steamid.SteamId]string | ||||
| 	sync.RWMutex | ||||
| } | ||||
|  | ||||
| var flog *log.Entry | ||||
| var protocol = "steam" | ||||
|  | ||||
| func init() { | ||||
| 	flog = log.WithFields(log.Fields{"module": protocol}) | ||||
| } | ||||
|  | ||||
| func New(cfg config.Protocol, account string, c chan config.Message) *Bsteam { | ||||
| 	b := &Bsteam{} | ||||
| 	b.Config = &cfg | ||||
| 	b.Remote = c | ||||
| 	b.Account = account | ||||
| 	b.userMap = make(map[steamid.SteamId]string) | ||||
| 	b.connected = make(chan struct{}) | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| func (b *Bsteam) Connect() error { | ||||
| 	flog.Info("Connecting") | ||||
| 	b.c = steam.NewClient() | ||||
| 	go b.handleEvents() | ||||
| 	go b.c.Connect() | ||||
| 	select { | ||||
| 	case <-b.connected: | ||||
| 		flog.Info("Connection succeeded") | ||||
| 	case <-time.After(time.Second * 30): | ||||
| 		return fmt.Errorf("connection timed out") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (b *Bsteam) Disconnect() error { | ||||
| 	b.c.Disconnect() | ||||
| 	return nil | ||||
|  | ||||
| } | ||||
|  | ||||
| func (b *Bsteam) JoinChannel(channel string) error { | ||||
| 	id, err := steamid.NewId(channel) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	b.c.Social.JoinChat(id) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (b *Bsteam) Send(msg config.Message) error { | ||||
| 	id, err := steamid.NewId(msg.Channel) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	b.c.Social.SendMessage(id, steamlang.EChatEntryType_ChatMsg, msg.Username+msg.Text) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (b *Bsteam) getNick(id steamid.SteamId) string { | ||||
| 	b.RLock() | ||||
| 	defer b.RUnlock() | ||||
| 	if name, ok := b.userMap[id]; ok { | ||||
| 		return name | ||||
| 	} | ||||
| 	return "unknown" | ||||
| } | ||||
|  | ||||
| func (b *Bsteam) handleEvents() { | ||||
| 	myLoginInfo := new(steam.LogOnDetails) | ||||
| 	myLoginInfo.Username = b.Config.Login | ||||
| 	myLoginInfo.Password = b.Config.Password | ||||
| 	myLoginInfo.AuthCode = b.Config.AuthCode | ||||
| 	// Attempt to read existing auth hash to avoid steam guard. | ||||
| 	// Maybe works | ||||
| 	//myLoginInfo.SentryFileHash, _ = ioutil.ReadFile("sentry") | ||||
| 	for event := range b.c.Events() { | ||||
| 		//flog.Info(event) | ||||
| 		switch e := event.(type) { | ||||
| 		case *steam.ChatMsgEvent: | ||||
| 			flog.Debugf("Receiving ChatMsgEvent: %#v", e) | ||||
| 			flog.Debugf("Sending message from %s on %s to gateway", b.getNick(e.ChatterId), b.Account) | ||||
| 			// for some reason we have to remove 0x18000000000000 | ||||
| 			channel := int64(e.ChatRoomId) - 0x18000000000000 | ||||
| 			msg := config.Message{Username: b.getNick(e.ChatterId), Text: e.Message, Channel: strconv.FormatInt(channel, 10), Account: b.Account, UserID: strconv.FormatInt(int64(e.ChatterId), 10)} | ||||
| 			b.Remote <- msg | ||||
| 		case *steam.PersonaStateEvent: | ||||
| 			flog.Debugf("PersonaStateEvent: %#v\n", e) | ||||
| 			b.Lock() | ||||
| 			b.userMap[e.FriendId] = e.Name | ||||
| 			b.Unlock() | ||||
| 		case *steam.ConnectedEvent: | ||||
| 			b.c.Auth.LogOn(myLoginInfo) | ||||
| 		case *steam.MachineAuthUpdateEvent: | ||||
| 			/* | ||||
| 				flog.Info("authupdate", e) | ||||
| 				flog.Info("hash", e.Hash) | ||||
| 				ioutil.WriteFile("sentry", e.Hash, 0666) | ||||
| 			*/ | ||||
| 		case *steam.LogOnFailedEvent: | ||||
| 			flog.Info("Logon failed", e) | ||||
| 			switch e.Result { | ||||
| 			case steamlang.EResult_AccountLogonDeniedNeedTwoFactorCode: | ||||
| 				{ | ||||
| 					flog.Info("Steam guard isn't letting me in! Enter 2FA code:") | ||||
| 					var code string | ||||
| 					fmt.Scanf("%s", &code) | ||||
| 					myLoginInfo.TwoFactorCode = code | ||||
| 				} | ||||
| 			case steamlang.EResult_AccountLogonDenied: | ||||
| 				{ | ||||
| 					flog.Info("Steam guard isn't letting me in! Enter auth code:") | ||||
| 					var code string | ||||
| 					fmt.Scanf("%s", &code) | ||||
| 					myLoginInfo.AuthCode = code | ||||
| 				} | ||||
| 			default: | ||||
| 				log.Errorf("LogOnFailedEvent: %#v ", e.Result) | ||||
| 				// TODO: Handle EResult_InvalidLoginAuthCode | ||||
| 				return | ||||
| 			} | ||||
| 		case *steam.LoggedOnEvent: | ||||
| 			flog.Debugf("LoggedOnEvent: %#v", e) | ||||
| 			b.connected <- struct{}{} | ||||
| 			flog.Debugf("setting online") | ||||
| 			b.c.Social.SetPersonaState(steamlang.EPersonaState_Online) | ||||
| 		case *steam.DisconnectedEvent: | ||||
| 			flog.Info("Disconnected") | ||||
| 			flog.Info("Attempting to reconnect...") | ||||
| 			b.c.Connect() | ||||
| 		case steam.FatalErrorEvent: | ||||
| 			flog.Error(e) | ||||
| 		case error: | ||||
| 			flog.Error(e) | ||||
| 		default: | ||||
| 			flog.Debugf("unknown event %#v", e) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -76,38 +76,69 @@ func (b *Btelegram) Send(msg config.Message) error { | ||||
| } | ||||
|  | ||||
| func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) { | ||||
| 	username := "" | ||||
| 	text := "" | ||||
| 	channel := "" | ||||
| 	for update := range updates { | ||||
| 		var message *tgbotapi.Message | ||||
| 		username := "" | ||||
| 		channel := "" | ||||
| 		text := "" | ||||
| 		// handle channels | ||||
| 		if update.ChannelPost != nil { | ||||
| 			if update.ChannelPost.From != nil { | ||||
| 				username = update.ChannelPost.From.FirstName | ||||
| 				if username == "" { | ||||
| 					username = update.ChannelPost.From.UserName | ||||
| 				} | ||||
| 			} | ||||
| 			text = update.ChannelPost.Text | ||||
| 			channel = strconv.FormatInt(update.ChannelPost.Chat.ID, 10) | ||||
| 			message = update.ChannelPost | ||||
| 		} | ||||
| 		if update.EditedChannelPost != nil && !b.Config.EditDisable { | ||||
| 			message = update.EditedChannelPost | ||||
| 			message.Text = message.Text + b.Config.EditSuffix | ||||
| 		} | ||||
| 		// handle groups | ||||
| 		if update.Message != nil { | ||||
| 			if update.Message.From != nil { | ||||
| 				username = update.Message.From.FirstName | ||||
| 			message = update.Message | ||||
| 		} | ||||
| 		if update.EditedMessage != nil && !b.Config.EditDisable { | ||||
| 			message = update.EditedMessage | ||||
| 			message.Text = message.Text + b.Config.EditSuffix | ||||
| 		} | ||||
| 		if message.From != nil { | ||||
| 			if b.Config.UseFirstName { | ||||
| 				username = message.From.FirstName | ||||
| 			} | ||||
| 			if username == "" { | ||||
| 				username = message.From.UserName | ||||
| 				if username == "" { | ||||
| 					username = update.Message.From.UserName | ||||
| 					username = message.From.FirstName | ||||
| 				} | ||||
| 			} | ||||
| 			text = update.Message.Text | ||||
| 			channel = strconv.FormatInt(update.Message.Chat.ID, 10) | ||||
| 			text = message.Text | ||||
| 			channel = strconv.FormatInt(message.Chat.ID, 10) | ||||
| 		} | ||||
|  | ||||
| 		if username == "" { | ||||
| 			username = "unknown" | ||||
| 		} | ||||
| 		if message.Sticker != nil && b.Config.UseInsecureURL { | ||||
| 			text = text + " " + b.getFileDirectURL(message.Sticker.FileID) | ||||
| 		} | ||||
| 		if message.Video != nil && b.Config.UseInsecureURL { | ||||
| 			text = text + " " + b.getFileDirectURL(message.Video.FileID) | ||||
| 		} | ||||
| 		if message.Photo != nil && b.Config.UseInsecureURL { | ||||
| 			photos := *message.Photo | ||||
| 			// last photo is the biggest | ||||
| 			text = text + " " + b.getFileDirectURL(photos[len(photos)-1].FileID) | ||||
| 		} | ||||
| 		if message.Document != nil && b.Config.UseInsecureURL { | ||||
| 			text = text + " " + message.Document.FileName + " : " + b.getFileDirectURL(message.Document.FileID) | ||||
| 		} | ||||
| 		if text != "" { | ||||
| 			flog.Debugf("Sending message from %s on %s to gateway", username, b.Account) | ||||
| 			b.Remote <- config.Message{Username: username, Text: text, Channel: channel, Account: b.Account} | ||||
| 			b.Remote <- config.Message{Username: username, Text: text, Channel: channel, Account: b.Account, UserID: strconv.Itoa(message.From.ID)} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (b *Btelegram) getFileDirectURL(id string) string { | ||||
| 	res, err := b.c.GetFileDirectURL(id) | ||||
| 	if err != nil { | ||||
| 		return "" | ||||
| 	} | ||||
| 	return res | ||||
| } | ||||
|   | ||||
| @@ -119,7 +119,7 @@ func (b *Bxmpp) handleXmpp() error { | ||||
| 			var channel, nick string | ||||
| 			if v.Type == "groupchat" { | ||||
| 				s := strings.Split(v.Remote, "@") | ||||
| 				if len(s) == 2 { | ||||
| 				if len(s) >= 2 { | ||||
| 					channel = s[0] | ||||
| 				} | ||||
| 				s = strings.Split(s[1], "/") | ||||
| @@ -128,7 +128,7 @@ func (b *Bxmpp) handleXmpp() error { | ||||
| 				} | ||||
| 				if nick != b.Config.Nick && v.Stamp == nodelay && v.Text != "" { | ||||
| 					flog.Debugf("Sending message from %s on %s to gateway", nick, b.Account) | ||||
| 					b.Remote <- config.Message{Username: nick, Text: v.Text, Channel: channel, Account: b.Account} | ||||
| 					b.Remote <- config.Message{Username: nick, Text: v.Text, Channel: channel, Account: b.Account, UserID: v.Remote} | ||||
| 				} | ||||
| 			} | ||||
| 		case xmpp.Presence: | ||||
|   | ||||
							
								
								
									
										192
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										192
									
								
								changelog.md
									
									
									
									
									
								
							| @@ -1,3 +1,195 @@ | ||||
| # v0.16.1 | ||||
| ## New features | ||||
| * slack: also relay messages of other bots #213 | ||||
| * mattermost: show also links if public links have not been enabled. | ||||
|  | ||||
| ## Bugfix | ||||
| * mattermost, slack: fix connecting logic #216 | ||||
|  | ||||
| # v0.16.0 | ||||
| ## Breaking Changes | ||||
| * URL,UseAPI,BindAddress is deprecated. Your config has to be updated. | ||||
|   * URL => WebhookURL | ||||
|   * BindAddress => WebhookBindAddress | ||||
|   * UseAPI => removed  | ||||
|   This change allows you to specify a WebhookURL and a token (slack,discord), so that | ||||
|   messages will be sent with the webhook, but received via the token (API) | ||||
|   If you have not specified WebhookURL and WebhookBindAddress the API (login or token)  | ||||
|   will be used automatically. (no need for UseAPI) | ||||
|  | ||||
| ## New features | ||||
| * mattermost: add support for mattermost 4.0 | ||||
| * steam: New protocol support added (http://store.steampowered.com/) | ||||
| * discord: Support for embedded messages (sent by other bots) | ||||
|   Shows title, description and URL of embedded messages (sent by other bots) | ||||
|   To enable add ```ShowEmbeds=true``` to your discord config  | ||||
| * discord: ```WebhookURL``` posting support added (thanks @saury07) #204 | ||||
|   Discord API does not allow to change the name of the user posting, but webhooks does. | ||||
|  | ||||
| ## Changes | ||||
| * general: all :emoji: will be converted to unicode, providing consistent emojis across all bridges | ||||
| * telegram: Add ```UseInsecureURL``` option for telegram (default false) | ||||
|   WARNING! If enabled this will relay GIF/stickers/documents and other attachments as URLs | ||||
|   Those URLs will contain your bot-token. This may not be what you want. | ||||
|   For now there is no secure way to relay GIF/stickers/documents without seeing your token. | ||||
|  | ||||
| ## Bugfix | ||||
| * irc: detect charset and try to convert it to utf-8 before sending it to other bridges. #209 #210 | ||||
| * slack: Remove label from URLs (slack). #205 | ||||
| * slack: Relay <>& correctly to other bridges #215 | ||||
| * steam: Fix channel id bug in steam (channels are off by 0x18000000000000) | ||||
| * general: various improvements | ||||
| * general: samechannelgateway now relays messages correct again #207 | ||||
|  | ||||
|  | ||||
| # v0.16.0-rc2 | ||||
| ## Breaking Changes | ||||
| * URL,UseAPI,BindAddress is deprecated. Your config has to be updated. | ||||
|   * URL => WebhookURL | ||||
|   * BindAddress => WebhookBindAddress | ||||
|   * UseAPI => removed  | ||||
|   This change allows you to specify a WebhookURL and a token (slack,discord), so that | ||||
|   messages will be sent with the webhook, but received via the token (API) | ||||
|   If you have not specified WebhookURL and WebhookBindAddress the API (login or token)  | ||||
|   will be used automatically. (no need for UseAPI) | ||||
|  | ||||
| ## Bugfix since rc1 | ||||
| * steam: Fix channel id bug in steam (channels are off by 0x18000000000000) | ||||
| * telegram: Add UseInsecureURL option for telegram (default false) | ||||
|   WARNING! If enabled this will relay GIF/stickers/documents and other attachments as URLs | ||||
|   Those URLs will contain your bot-token. This may not be what you want. | ||||
|   For now there is no secure way to relay GIF/stickers/documents without seeing your token. | ||||
| * irc: detect charset and try to convert it to utf-8 before sending it to other bridges. #209 #210 | ||||
| * general: various improvements | ||||
|  | ||||
|  | ||||
| # v0.16.0-rc1 | ||||
| ## Breaking Changes | ||||
| * URL,UseAPI,BindAddress is deprecated. Your config has to be updated. | ||||
|   * URL => WebhookURL | ||||
|   * BindAddress => WebhookBindAddress | ||||
|   * UseAPI => removed  | ||||
|   This change allows you to specify a WebhookURL and a token (slack,discord), so that | ||||
|   messages will be sent with the webhook, but received via the token (API) | ||||
|   If you have not specified WebhookURL and WebhookBindAddress the API (login or token)  | ||||
|   will be used automatically. (no need for UseAPI) | ||||
|  | ||||
| ## New features | ||||
| * steam: New protocol support added (http://store.steampowered.com/) | ||||
| * discord: WebhookURL posting support added (thanks @saury07) #204 | ||||
|   Discord API does not allow to change the name of the user posting, but webhooks does. | ||||
|  | ||||
| ## Bugfix | ||||
| * general: samechannelgateway now relays messages correct again #207 | ||||
| * slack: Remove label from URLs (slack). #205 | ||||
|  | ||||
| # v0.15.0 | ||||
| ## New features | ||||
| * general: add option IgnoreMessages for all protocols (see mattebridge.toml.sample) | ||||
|   Messages matching these regexp will be ignored and not sent to other bridges | ||||
|   e.g. IgnoreMessages="^~~ badword" | ||||
| * telegram: add support for sticker/video/photo/document #184 | ||||
|  | ||||
| ## Changes | ||||
| * api: add userid to each message #200 | ||||
|  | ||||
| ## Bugfix | ||||
| * discord: fix crash in memberupdate #198 | ||||
| * mattermost: Fix incorrect behaviour of EditDisable (mattermost). Fixes #197  | ||||
| * irc: Do not relay join/part of ourselves (irc). Closes #190  | ||||
| * irc: make reconnections more robust. #153 | ||||
| * gitter: update library, fixes possible crash | ||||
|  | ||||
| # v0.14.0 | ||||
| ## New features | ||||
| * api: add token authentication | ||||
| * mattermost: add support for mattermost 3.10.0 | ||||
|  | ||||
| ## Changes | ||||
| * api: gateway name is added in JSON messages | ||||
| * api: lowercase JSON keys | ||||
| * api: channel name isn't needed in config #195 | ||||
|  | ||||
| ## Bugfix | ||||
| * discord: Add hashtag to channelname (when translating from id) (discord) | ||||
| * mattermost: Fix a panic. #186 | ||||
| * mattermost: use teamid cache if possible. Fixes a panic | ||||
| * api: post valid json. #185 | ||||
| * api: allow reuse of api in different gateways. #189 | ||||
| * general: Fix utf-8 issues for {NOPINGNICK}. #193 | ||||
|  | ||||
| # v0.13.0 | ||||
| ## New features | ||||
| * irc: Limit message length. ```MessageLength=400``` | ||||
|   Maximum length of message sent to irc server. If it exceeds <message clipped> will be add to the message. | ||||
| * irc: Add NOPINGNICK option.  | ||||
|   The string "{NOPINGNICK}" (case sensitive) will be replaced by the actual nick / username, but with a ZWSP inside the nick, so the irc user with the same nick won't get pinged.    | ||||
|   See https://github.com/42wim/matterbridge/issues/175 for more information | ||||
|  | ||||
| ## Bugfix | ||||
| * slack: Fix sending to different channels on same account (slack). Closes #177 | ||||
| * telegram: Fix incorrect usernames being sent. Closes #181 | ||||
|  | ||||
|  | ||||
| # v0.12.1 | ||||
| ## New features | ||||
| * telegram: Add UseFirstName option (telegram). Closes #144 | ||||
| * matrix: Add NoHomeServerSuffix. Option to disable homeserver on username (matrix). Closes #160. | ||||
|  | ||||
| ## Bugfix | ||||
| * xmpp: Add Compatibility for Cisco Jabber (xmpp) (#166) | ||||
| * irc: Fix JoinChannel argument to use IRC channel key (#172) | ||||
| * discord: Fix possible crash on nil (discord) | ||||
| * discord: Replace long ids in channel metions (discord). Fixes #174 | ||||
|  | ||||
| # v0.12.0 | ||||
| ## Changes | ||||
| * general: edited messages are now being sent by default on discord/mattermost/telegram/slack. See "New Features" | ||||
|  | ||||
| ## New features | ||||
| * general: add support for edited messages.  | ||||
|   Add new keyword EditDisable (false/true), default false. Which means by default edited messages will be sent to other bridges. | ||||
|   Add new keyword EditSuffix , default "". You can change this eg to "(edited)", this will be appended to every edit message. | ||||
| * mattermost: support mattermost v3.9.x | ||||
| * general: Add support for HTTP{S}_PROXY env variables (#162) | ||||
| * discord: Strip custom emoji metadata (discord). Closes #148 | ||||
|  | ||||
| ## Bugfix | ||||
| * slack: Ignore error on private channel join (slack) Fixes #150  | ||||
| * mattermost: fix crash on reconnects when server is down. Closes #163 | ||||
| * irc: Relay messages starting with ! (irc). Closes #164 | ||||
|  | ||||
| # v0.11.0 | ||||
| ## New features | ||||
| * general: reusing the same account on multiple gateways now also reuses the connection. | ||||
|   This is particuarly useful for irc. See #87 | ||||
| * general: the Name is now REQUIRED and needs to be UNIQUE for each gateway configuration | ||||
| * telegram:  Support edited messages (telegram). See #141 | ||||
| * mattermost: Add support for showing/hiding join/leave messages from mattermost. Closes #147 | ||||
| * mattermost: Reconnect on session removal/timeout (mattermost) | ||||
| * mattermost: Support mattermost v3.8.x | ||||
| * irc:  Rejoin channel when kicked (irc). | ||||
|  | ||||
| ## Bugfix | ||||
| * mattermost: Remove space after nick (mattermost). Closes #142 | ||||
| * mattermost: Modify iconurl correctly (mattermost). | ||||
| * irc: Fix join/leave regression (irc) | ||||
|  | ||||
| # v0.10.3 | ||||
| ## Bugfix | ||||
| * slack: Allow bot tokens for now without warning (slack). Closes #140 (fixes user_is_bot message on channel join) | ||||
|  | ||||
| # v0.10.2 | ||||
| ## New features | ||||
| * general: gops agent added. Allows for more debugging. See #134 | ||||
| * general: toml inline table support added for config file | ||||
|  | ||||
| ## Bugfix | ||||
| * all: vendored libs updated | ||||
|  | ||||
| ## Changes | ||||
| * general: add more informative messages on startup | ||||
|  | ||||
| # v0.10.1 | ||||
| ## Bugfix | ||||
| * gitter: Fix sending messages on new channel join. | ||||
|   | ||||
| @@ -5,7 +5,9 @@ import ( | ||||
| 	"github.com/42wim/matterbridge/bridge" | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| 	"reflect" | ||||
| 	"github.com/peterhellberg/emojilib" | ||||
| 	//	"github.com/davecgh/go-spew/spew" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| 	"time" | ||||
| ) | ||||
| @@ -14,21 +16,21 @@ type Gateway struct { | ||||
| 	*config.Config | ||||
| 	MyConfig        *config.Gateway | ||||
| 	Bridges         map[string]*bridge.Bridge | ||||
| 	ChannelsOut     map[string][]string | ||||
| 	ChannelsIn      map[string][]string | ||||
| 	Channels        map[string]*config.ChannelInfo | ||||
| 	ChannelOptions  map[string]config.ChannelOptions | ||||
| 	Names           map[string]bool | ||||
| 	Name            string | ||||
| 	Message         chan config.Message | ||||
| 	DestChannelFunc func(msg *config.Message, dest string) []string | ||||
| 	DestChannelFunc func(msg *config.Message, dest bridge.Bridge) []config.ChannelInfo | ||||
| } | ||||
|  | ||||
| func New(cfg *config.Config, gateway *config.Gateway) *Gateway { | ||||
| func New(cfg *config.Config) *Gateway { | ||||
| 	gw := &Gateway{} | ||||
| 	gw.Name = gateway.Name | ||||
| 	gw.Config = cfg | ||||
| 	gw.MyConfig = gateway | ||||
| 	gw.Channels = make(map[string]*config.ChannelInfo) | ||||
| 	gw.Message = make(chan config.Message) | ||||
| 	gw.Bridges = make(map[string]*bridge.Bridge) | ||||
| 	gw.Names = make(map[string]bool) | ||||
| 	gw.DestChannelFunc = gw.getDestChannel | ||||
| 	return gw | ||||
| } | ||||
| @@ -36,13 +38,17 @@ func New(cfg *config.Config, gateway *config.Gateway) *Gateway { | ||||
| func (gw *Gateway) AddBridge(cfg *config.Bridge) error { | ||||
| 	for _, br := range gw.Bridges { | ||||
| 		if br.Account == cfg.Account { | ||||
| 			gw.mapChannelsToBridge(br) | ||||
| 			err := br.JoinChannels() | ||||
| 			if err != nil { | ||||
| 				return fmt.Errorf("Bridge %s failed to join channel: %v", br.Account, err) | ||||
| 			} | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
| 	log.Infof("Starting bridge: %s ", cfg.Account) | ||||
| 	br := bridge.New(gw.Config, cfg, gw.Message) | ||||
| 	gw.mapChannelsToBridge(br, gw.ChannelsOut) | ||||
| 	gw.mapChannelsToBridge(br, gw.ChannelsIn) | ||||
| 	gw.mapChannelsToBridge(br) | ||||
| 	gw.Bridges[cfg.Account] = br | ||||
| 	err := br.Connect() | ||||
| 	if err != nil { | ||||
| @@ -55,17 +61,17 @@ func (gw *Gateway) AddBridge(cfg *config.Bridge) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) mapChannelsToBridge(br *bridge.Bridge, cMap map[string][]string) { | ||||
| 	for _, channel := range cMap[br.Account] { | ||||
| 		if _, ok := gw.ChannelOptions[br.Account+channel]; ok { | ||||
| 			br.ChannelsOut[channel] = gw.ChannelOptions[br.Account+channel] | ||||
| 		} else { | ||||
| 			br.ChannelsOut[channel] = config.ChannelOptions{} | ||||
| 		} | ||||
| func (gw *Gateway) AddConfig(cfg *config.Gateway) error { | ||||
| 	if gw.Names[cfg.Name] { | ||||
| 		return fmt.Errorf("Gateway with name %s already exists", cfg.Name) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) Start() error { | ||||
| 	if cfg.Name == "" { | ||||
| 		return fmt.Errorf("%s", "Gateway without name found") | ||||
| 	} | ||||
| 	log.Infof("Starting gateway: %s", cfg.Name) | ||||
| 	gw.Names[cfg.Name] = true | ||||
| 	gw.Name = cfg.Name | ||||
| 	gw.MyConfig = cfg | ||||
| 	gw.mapChannels() | ||||
| 	for _, br := range append(gw.MyConfig.In, append(gw.MyConfig.InOut, gw.MyConfig.Out...)...) { | ||||
| 		err := gw.AddBridge(&br) | ||||
| @@ -73,27 +79,46 @@ func (gw *Gateway) Start() error { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) mapChannelsToBridge(br *bridge.Bridge) { | ||||
| 	for ID, channel := range gw.Channels { | ||||
| 		if br.Account == channel.Account { | ||||
| 			br.Channels[ID] = *channel | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) Start() error { | ||||
| 	go gw.handleReceive() | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) handleReceive() { | ||||
| 	for { | ||||
| 		select { | ||||
| 		case msg := <-gw.Message: | ||||
| 			if msg.Event == config.EVENT_FAILURE { | ||||
| 				for _, br := range gw.Bridges { | ||||
| 					if msg.Account == br.Account { | ||||
| 						go gw.reconnectBridge(br) | ||||
| 					} | ||||
| 	for msg := range gw.Message { | ||||
| 		if msg.Event == config.EVENT_FAILURE { | ||||
| 			for _, br := range gw.Bridges { | ||||
| 				if msg.Account == br.Account { | ||||
| 					go gw.reconnectBridge(br) | ||||
| 				} | ||||
| 			} | ||||
| 			if !gw.ignoreMessage(&msg) { | ||||
| 				msg.Timestamp = time.Now() | ||||
| 				for _, br := range gw.Bridges { | ||||
| 					gw.handleMessage(msg, br) | ||||
| 		} | ||||
| 		if msg.Event == config.EVENT_REJOIN_CHANNELS { | ||||
| 			for _, br := range gw.Bridges { | ||||
| 				if msg.Account == br.Account { | ||||
| 					br.Joined = make(map[string]bool) | ||||
| 					br.JoinChannels() | ||||
| 				} | ||||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
| 		if !gw.ignoreMessage(&msg) { | ||||
| 			msg.Timestamp = time.Now() | ||||
| 			gw.modifyMessage(&msg) | ||||
| 			for _, br := range gw.Bridges { | ||||
| 				gw.handleMessage(msg, br) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -109,45 +134,69 @@ RECONNECT: | ||||
| 		time.Sleep(time.Second * 60) | ||||
| 		goto RECONNECT | ||||
| 	} | ||||
| 	br.Joined = make(map[string]bool) | ||||
| 	br.JoinChannels() | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) mapChannels() error { | ||||
| 	options := make(map[string]config.ChannelOptions) | ||||
| 	m := make(map[string][]string) | ||||
| 	for _, br := range gw.MyConfig.Out { | ||||
| 		m[br.Account] = append(m[br.Account], br.Channel) | ||||
| 		options[br.Account+br.Channel] = br.Options | ||||
| 	for _, br := range append(gw.MyConfig.Out, gw.MyConfig.InOut...) { | ||||
| 		if isApi(br.Account) { | ||||
| 			br.Channel = "api" | ||||
| 		} | ||||
| 		ID := br.Channel + br.Account | ||||
| 		_, ok := gw.Channels[ID] | ||||
| 		if !ok { | ||||
| 			channel := &config.ChannelInfo{Name: br.Channel, Direction: "out", ID: ID, Options: br.Options, Account: br.Account, | ||||
| 				GID: make(map[string]bool), SameChannel: make(map[string]bool)} | ||||
| 			channel.GID[gw.Name] = true | ||||
| 			channel.SameChannel[gw.Name] = br.SameChannel | ||||
| 			gw.Channels[channel.ID] = channel | ||||
| 		} | ||||
| 		gw.Channels[ID].GID[gw.Name] = true | ||||
| 		gw.Channels[ID].SameChannel[gw.Name] = br.SameChannel | ||||
| 	} | ||||
| 	gw.ChannelsOut = m | ||||
| 	m = nil | ||||
| 	m = make(map[string][]string) | ||||
| 	for _, br := range gw.MyConfig.In { | ||||
| 		m[br.Account] = append(m[br.Account], br.Channel) | ||||
| 		options[br.Account+br.Channel] = br.Options | ||||
|  | ||||
| 	for _, br := range append(gw.MyConfig.In, gw.MyConfig.InOut...) { | ||||
| 		if isApi(br.Account) { | ||||
| 			br.Channel = "api" | ||||
| 		} | ||||
| 		ID := br.Channel + br.Account | ||||
| 		_, ok := gw.Channels[ID] | ||||
| 		if !ok { | ||||
| 			channel := &config.ChannelInfo{Name: br.Channel, Direction: "in", ID: ID, Options: br.Options, Account: br.Account, | ||||
| 				GID: make(map[string]bool), SameChannel: make(map[string]bool)} | ||||
| 			channel.GID[gw.Name] = true | ||||
| 			channel.SameChannel[gw.Name] = br.SameChannel | ||||
| 			gw.Channels[channel.ID] = channel | ||||
| 		} | ||||
| 		gw.Channels[ID].GID[gw.Name] = true | ||||
| 		gw.Channels[ID].SameChannel[gw.Name] = br.SameChannel | ||||
| 	} | ||||
| 	gw.ChannelsIn = m | ||||
| 	for _, br := range gw.MyConfig.InOut { | ||||
| 		gw.ChannelsIn[br.Account] = append(gw.ChannelsIn[br.Account], br.Channel) | ||||
| 		gw.ChannelsOut[br.Account] = append(gw.ChannelsOut[br.Account], br.Channel) | ||||
| 		options[br.Account+br.Channel] = br.Options | ||||
| 	} | ||||
| 	gw.ChannelOptions = options | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) getDestChannel(msg *config.Message, dest string) []string { | ||||
| 	channels := gw.ChannelsIn[msg.Account] | ||||
| 	// broadcast to every out channel (irc QUIT) | ||||
| 	if msg.Event == config.EVENT_JOIN_LEAVE && msg.Channel == "" { | ||||
| 		return gw.ChannelsOut[dest] | ||||
| 	} | ||||
| 	for _, channel := range channels { | ||||
| 		if channel == msg.Channel { | ||||
| 			return gw.ChannelsOut[dest] | ||||
| func (gw *Gateway) getDestChannel(msg *config.Message, dest bridge.Bridge) []config.ChannelInfo { | ||||
| 	var channels []config.ChannelInfo | ||||
| 	for _, channel := range gw.Channels { | ||||
| 		if _, ok := gw.Channels[getChannelID(*msg)]; !ok { | ||||
| 			continue | ||||
| 		} | ||||
| 		// add gateway to message | ||||
| 		gw.validGatewayDest(msg, channel) | ||||
|  | ||||
| 		// do samechannelgateway logic | ||||
| 		if channel.SameChannel[msg.Gateway] { | ||||
| 			if msg.Channel == channel.Name && msg.Account != dest.Account { | ||||
| 				channels = append(channels, *channel) | ||||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		if channel.Direction == "out" && channel.Account == dest.Account && gw.validGatewayDest(msg, channel) { | ||||
| 			channels = append(channels, *channel) | ||||
| 		} | ||||
| 	} | ||||
| 	return []string{} | ||||
| 	return channels | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) { | ||||
| @@ -155,19 +204,21 @@ func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) { | ||||
| 	if msg.Event == config.EVENT_JOIN_LEAVE && !gw.Bridges[dest.Account].Config.ShowJoinPart { | ||||
| 		return | ||||
| 	} | ||||
| 	// broadcast to every out channel (irc QUIT) | ||||
| 	if msg.Channel == "" && msg.Event != config.EVENT_JOIN_LEAVE { | ||||
| 		log.Debug("empty channel") | ||||
| 		return | ||||
| 	} | ||||
| 	originchannel := msg.Channel | ||||
| 	channels := gw.DestChannelFunc(&msg, dest.Account) | ||||
| 	for _, channel := range channels { | ||||
| 		// do not send the message to the bridge we come from if also the channel is the same | ||||
| 		if msg.Account == dest.Account && channel == originchannel { | ||||
| 	origmsg := msg | ||||
| 	for _, channel := range gw.DestChannelFunc(&msg, *dest) { | ||||
| 		// do not send to ourself | ||||
| 		if channel.ID == getChannelID(origmsg) { | ||||
| 			continue | ||||
| 		} | ||||
| 		msg.Channel = channel | ||||
| 		if msg.Channel == "" { | ||||
| 			log.Debug("empty channel") | ||||
| 			return | ||||
| 		} | ||||
| 		log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, originchannel, dest.Account, channel) | ||||
| 		log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, originchannel, dest.Account, channel.Name) | ||||
| 		msg.Channel = channel.Name | ||||
| 		gw.modifyAvatar(&msg, dest) | ||||
| 		gw.modifyUsername(&msg, dest) | ||||
| 		// for api we need originchannel as channel | ||||
| 		if dest.Protocol == "api" { | ||||
| @@ -191,22 +242,21 @@ func (gw *Gateway) ignoreMessage(msg *config.Message) bool { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) modifyMessage(msg *config.Message, dest *bridge.Bridge) { | ||||
| 	val := reflect.ValueOf(gw.Config).Elem() | ||||
| 	for i := 0; i < val.NumField(); i++ { | ||||
| 		typeField := val.Type().Field(i) | ||||
| 		// look for the protocol map (both lowercase) | ||||
| 		if strings.ToLower(typeField.Name) == dest.Protocol { | ||||
| 			// get the Protocol struct from the map | ||||
| 			protoCfg := val.Field(i).MapIndex(reflect.ValueOf(dest.Name)) | ||||
| 			//config.SetNickFormat(msg, protoCfg.Interface().(config.Protocol)) | ||||
| 			val.Field(i).SetMapIndex(reflect.ValueOf(dest.Name), protoCfg) | ||||
| 			break | ||||
| 	// TODO do not compile regexps everytime | ||||
| 	for _, entry := range strings.Fields(gw.Bridges[msg.Account].Config.IgnoreMessages) { | ||||
| 		if entry != "" { | ||||
| 			re, err := regexp.Compile(entry) | ||||
| 			if err != nil { | ||||
| 				log.Errorf("incorrect regexp %s for %s", entry, msg.Account) | ||||
| 				continue | ||||
| 			} | ||||
| 			if re.MatchString(msg.Text) { | ||||
| 				log.Debugf("matching %s. ignoring %s from %s", entry, msg.Text, msg.Account) | ||||
| 				return true | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) { | ||||
| @@ -216,8 +266,76 @@ func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) { | ||||
| 	if nick == "" { | ||||
| 		nick = dest.Config.RemoteNickFormat | ||||
| 	} | ||||
| 	if len(msg.Username) > 0 { | ||||
| 		// fix utf-8 issue #193 | ||||
| 		i := 0 | ||||
| 		for index := range msg.Username { | ||||
| 			if i == 1 { | ||||
| 				i = index | ||||
| 				break | ||||
| 			} | ||||
| 			i++ | ||||
| 		} | ||||
| 		nick = strings.Replace(nick, "{NOPINGNICK}", msg.Username[:i]+""+msg.Username[i:], -1) | ||||
| 	} | ||||
| 	nick = strings.Replace(nick, "{NICK}", msg.Username, -1) | ||||
| 	nick = strings.Replace(nick, "{BRIDGE}", br.Name, -1) | ||||
| 	nick = strings.Replace(nick, "{PROTOCOL}", br.Protocol, -1) | ||||
| 	msg.Username = nick | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) modifyAvatar(msg *config.Message, dest *bridge.Bridge) { | ||||
| 	iconurl := gw.Config.General.IconURL | ||||
| 	if iconurl == "" { | ||||
| 		iconurl = dest.Config.IconURL | ||||
| 	} | ||||
| 	iconurl = strings.Replace(iconurl, "{NICK}", msg.Username, -1) | ||||
| 	if msg.Avatar == "" { | ||||
| 		msg.Avatar = iconurl | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) modifyMessage(msg *config.Message) { | ||||
| 	// replace :emoji: to unicode | ||||
| 	msg.Text = emojilib.Replace(msg.Text) | ||||
| } | ||||
|  | ||||
| func getChannelID(msg config.Message) string { | ||||
| 	return msg.Channel + msg.Account | ||||
| } | ||||
|  | ||||
| func (gw *Gateway) validGatewayDest(msg *config.Message, channel *config.ChannelInfo) bool { | ||||
| 	GIDmap := gw.Channels[getChannelID(*msg)].GID | ||||
|  | ||||
| 	// gateway is specified in message (probably from api) | ||||
| 	if msg.Gateway != "" { | ||||
| 		return channel.GID[msg.Gateway] | ||||
| 	} | ||||
|  | ||||
| 	// check if we are running a samechannelgateway. | ||||
| 	// if it is and the channel name matches it's ok, otherwise we shouldn't use this channel. | ||||
| 	for k := range GIDmap { | ||||
| 		if channel.SameChannel[k] { | ||||
| 			if msg.Channel == channel.Name { | ||||
| 				// add the gateway to our message | ||||
| 				msg.Gateway = k | ||||
| 				return true | ||||
| 			} else { | ||||
| 				return false | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	// check if we are in the correct gateway | ||||
| 	for k := range GIDmap { | ||||
| 		if channel.GID[k] { | ||||
| 			// add the gateway to our message | ||||
| 			msg.Gateway = k | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func isApi(account string) bool { | ||||
| 	return strings.HasPrefix(account, "api.") | ||||
| } | ||||
|   | ||||
| @@ -2,48 +2,27 @@ package samechannelgateway | ||||
|  | ||||
| import ( | ||||
| 	"github.com/42wim/matterbridge/bridge/config" | ||||
| 	"github.com/42wim/matterbridge/gateway" | ||||
| ) | ||||
|  | ||||
| type SameChannelGateway struct { | ||||
| 	*config.Config | ||||
| 	MyConfig *config.SameChannelGateway | ||||
| 	Channels []string | ||||
| 	Name     string | ||||
| } | ||||
|  | ||||
| func New(cfg *config.Config, gatewayCfg *config.SameChannelGateway) *SameChannelGateway { | ||||
| 	return &SameChannelGateway{ | ||||
| 		MyConfig: gatewayCfg, | ||||
| 		Channels: gatewayCfg.Channels, | ||||
| 		Name:     gatewayCfg.Name, | ||||
| 		Config:   cfg} | ||||
| func New(cfg *config.Config) *SameChannelGateway { | ||||
| 	return &SameChannelGateway{Config: cfg} | ||||
| } | ||||
|  | ||||
| func (sgw *SameChannelGateway) Start() error { | ||||
| 	gw := gateway.New(sgw.Config, &config.Gateway{Name: sgw.Name}) | ||||
| 	gw.DestChannelFunc = sgw.getDestChannel | ||||
| 	for _, account := range sgw.MyConfig.Accounts { | ||||
| 		for _, channel := range sgw.Channels { | ||||
| 			br := config.Bridge{Account: account, Channel: channel} | ||||
| 			gw.MyConfig.InOut = append(gw.MyConfig.InOut, br) | ||||
| func (sgw *SameChannelGateway) GetConfig() []config.Gateway { | ||||
| 	var gwconfigs []config.Gateway | ||||
| 	cfg := sgw.Config | ||||
| 	for _, gw := range cfg.SameChannelGateway { | ||||
| 		gwconfig := config.Gateway{Name: gw.Name, Enable: gw.Enable} | ||||
| 		for _, account := range gw.Accounts { | ||||
| 			for _, channel := range gw.Channels { | ||||
| 				gwconfig.InOut = append(gwconfig.InOut, config.Bridge{Account: account, Channel: channel, SameChannel: true}) | ||||
| 			} | ||||
| 		} | ||||
| 		gwconfigs = append(gwconfigs, gwconfig) | ||||
| 	} | ||||
| 	return gw.Start() | ||||
| } | ||||
|  | ||||
| func (sgw *SameChannelGateway) validChannel(channel string) bool { | ||||
| 	for _, c := range sgw.Channels { | ||||
| 		if c == channel { | ||||
| 			return true | ||||
| 		} | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (sgw *SameChannelGateway) getDestChannel(msg *config.Message, dest string) []string { | ||||
| 	if sgw.validChannel(msg.Channel) { | ||||
| 		return []string{msg.Channel} | ||||
| 	} | ||||
| 	return []string{} | ||||
| 	return gwconfigs | ||||
| } | ||||
|   | ||||
| @@ -99,10 +99,9 @@ func (c *Client) ServeHTTP(w http.ResponseWriter, r *http.Request) { | ||||
|  | ||||
| // Receive returns an incoming message from mattermost outgoing webhooks URL. | ||||
| func (c *Client) Receive() Message { | ||||
| 	for { | ||||
| 		select { | ||||
| 		case msg := <-c.In: | ||||
| 			return msg | ||||
| 		} | ||||
| 	var msg Message | ||||
| 	for msg = range c.In { | ||||
| 		return msg | ||||
| 	} | ||||
| 	return msg | ||||
| } | ||||
|   | ||||
| @@ -7,10 +7,12 @@ import ( | ||||
| 	"github.com/42wim/matterbridge/gateway" | ||||
| 	"github.com/42wim/matterbridge/gateway/samechannel" | ||||
| 	log "github.com/Sirupsen/logrus" | ||||
| 	"github.com/google/gops/agent" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	version = "0.10.1" | ||||
| 	version = "0.16.1" | ||||
| 	githash string | ||||
| ) | ||||
|  | ||||
| @@ -22,40 +24,42 @@ func main() { | ||||
| 	flagConfig := flag.String("conf", "matterbridge.toml", "config file") | ||||
| 	flagDebug := flag.Bool("debug", false, "enable debug") | ||||
| 	flagVersion := flag.Bool("version", false, "show version") | ||||
| 	flagGops := flag.Bool("gops", false, "enable gops agent") | ||||
| 	flag.Parse() | ||||
| 	if *flagGops { | ||||
| 		agent.Listen(&agent.Options{}) | ||||
| 		defer agent.Close() | ||||
| 	} | ||||
| 	if *flagVersion { | ||||
| 		fmt.Printf("version: %s %s\n", version, githash) | ||||
| 		return | ||||
| 	} | ||||
| 	flag.Parse() | ||||
| 	if *flagDebug { | ||||
| 		log.Info("Enabling debug") | ||||
| 		log.SetLevel(log.DebugLevel) | ||||
| 	} | ||||
| 	log.Printf("Running version %s %s", version, githash) | ||||
| 	if strings.Contains(version, "-dev") { | ||||
| 		log.Println("WARNING: THIS IS A DEVELOPMENT VERSION. Things may break.") | ||||
| 	} | ||||
| 	cfg := config.NewConfig(*flagConfig) | ||||
| 	for _, gw := range cfg.SameChannelGateway { | ||||
| 		if !gw.Enable { | ||||
| 			continue | ||||
| 		} | ||||
| 		log.Printf("Starting samechannel gateway %#v", gw.Name) | ||||
| 		g := samechannelgateway.New(cfg, &gw) | ||||
| 		err := g.Start() | ||||
| 		if err != nil { | ||||
| 			log.Fatalf("Starting gateway failed %#v", err) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	for _, gw := range cfg.Gateway { | ||||
| 	g := gateway.New(cfg) | ||||
| 	sgw := samechannelgateway.New(cfg) | ||||
| 	gwconfigs := sgw.GetConfig() | ||||
| 	for _, gw := range append(gwconfigs, cfg.Gateway...) { | ||||
| 		if !gw.Enable { | ||||
| 			continue | ||||
| 		} | ||||
| 		log.Printf("Starting gateway %#v", gw.Name) | ||||
| 		g := gateway.New(cfg, &gw) | ||||
| 		err := g.Start() | ||||
| 		err := g.AddConfig(&gw) | ||||
| 		if err != nil { | ||||
| 			log.Fatalf("Starting gateway failed %#v", err) | ||||
| 			log.Fatalf("Starting gateway failed: %s", err) | ||||
| 		} | ||||
| 	} | ||||
| 	err := g.Start() | ||||
| 	if err != nil { | ||||
| 		log.Fatalf("Starting gateway failed: %s", err) | ||||
| 	} | ||||
| 	log.Printf("Gateway(s) started succesfully. Now relaying messages") | ||||
| 	select {} | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| #This is configuration for matterbridge. | ||||
| #WARNING: as this file contains credentials, be sure to set correct file permissions | ||||
| ################################################################### | ||||
| #IRC section | ||||
| ################################################################### | ||||
| @@ -48,23 +49,36 @@ MessageDelay=1300 | ||||
|  | ||||
| #Maximum amount of messages to hold in queue. If queue is full  | ||||
| #messages will be dropped.  | ||||
| #<clipped> will be add to the message that fills the queue. | ||||
| #<message clipped> will be add to the message that fills the queue. | ||||
| #OPTIONAL (default 30) | ||||
| MessageQueue=30 | ||||
|  | ||||
| #Maximum length of message sent to irc server. If it exceeds | ||||
| #<message clipped> will be add to the message. | ||||
| #OPTIONAL (default 400) | ||||
| MessageLength=400 | ||||
|  | ||||
| #Nicks you want to ignore.  | ||||
| #Messages from those users will not be sent to other bridges. | ||||
| #OPTIONAL | ||||
| IgnoreNicks="ircspammer1 ircspammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| #The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge | ||||
| #The string "{NOPINGNICK}" (case sensitive) will be replaced by the actual nick / username, but with a ZWSP inside the nick, so the irc user with the same nick won't get pinged. See https://github.com/42wim/matterbridge/issues/175 for more information | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -107,6 +121,12 @@ SkipTLSVerify=true | ||||
| #OPTIONAL | ||||
| IgnoreNicks="ircspammer1 ircspammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -114,7 +134,8 @@ IgnoreNicks="ircspammer1 ircspammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -150,6 +171,12 @@ Nick="yourlogin" | ||||
| #OPTIONAL | ||||
| IgnoreNicks="spammer1 spammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -157,7 +184,8 @@ IgnoreNicks="spammer1 spammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}/{BRIDGE}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -171,43 +199,17 @@ ShowJoinPart=false | ||||
| #REQUIRED | ||||
|  | ||||
| [mattermost.work] | ||||
| #### Settings for webhook matterbridge. | ||||
| #### These settings will not be used when useAPI is enabled | ||||
|  | ||||
| #Url is your incoming webhook url as specified in mattermost.  | ||||
| #See account settings - integrations - incoming webhooks on mattermost. | ||||
| #REQUIRED (unless useAPI=true) | ||||
| URL="https://yourdomain/hooks/yourhookkey" | ||||
|  | ||||
| #Address to listen on for outgoing webhook requests from mattermost. | ||||
| #See account settings - integrations - outgoing webhooks on mattermost. | ||||
| #This setting will not be used when using -plus switch which doesn't use  | ||||
| #webhooks | ||||
| #REQUIRED (unless useAPI=true) | ||||
| BindAddress="0.0.0.0:9999" | ||||
|  | ||||
| #Icon that will be showed in mattermost.  | ||||
| #OPTIONAL | ||||
| IconURL="http://youricon.png" | ||||
|  | ||||
| #### Settings for matterbridge -plus | ||||
| #### Thse settings will only be used when using the -plus switch. | ||||
|  | ||||
| #### Settings for using matterbridge API | ||||
| #OPTIONAL | ||||
| useAPI=false | ||||
|  | ||||
| #The mattermost hostname.  | ||||
| #REQUIRED (when useAPI=true) | ||||
| Server="yourmattermostserver.domain" | ||||
| #The mattermost hostname. (do not prefix it with http or https) | ||||
| #REQUIRED (when not using webhooks) | ||||
| Server="yourmattermostserver.domain"  | ||||
|  | ||||
| #Your team on mattermost.  | ||||
| #REQUIRED (when useAPI=true) | ||||
| #REQUIRED (when not using webhooks) | ||||
| Team="yourteam" | ||||
|  | ||||
| #login/pass of your bot.  | ||||
| #Use a dedicated user for this and not your own!  | ||||
| #REQUIRED (when useAPI=true) | ||||
| #REQUIRED (when not using webhooks) | ||||
| Login="yourlogin" | ||||
| Password="yourpass" | ||||
|  | ||||
| @@ -215,7 +217,30 @@ Password="yourpass" | ||||
| #OPTIONAL (default false) | ||||
| NoTLS=false | ||||
|  | ||||
| #### Shared settings for matterbridge and -plus | ||||
| #### Settings for webhook matterbridge. | ||||
| #NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE DEDICATED BOT USER WHEN POSSIBLE! | ||||
| #You don't need to configure this, if you have configured the settings  | ||||
| #above. | ||||
|  | ||||
| #Url is your incoming webhook url as specified in mattermost.  | ||||
| #See account settings - integrations - incoming webhooks on mattermost. | ||||
| #If specified, messages will be sent to mattermost using this URL | ||||
| #OPTIONAL | ||||
| WebhookURL="https://yourdomain/hooks/yourhookkey" | ||||
|  | ||||
| #Address to listen on for outgoing webhook requests from mattermost. | ||||
| #See account settings - integrations - outgoing webhooks on mattermost. | ||||
| #If specified, messages will be received from mattermost on this ip:port | ||||
| #(this will only work if WebhookURL above is also configured) | ||||
| #OPTIONAL  | ||||
| WebhookBindAddress="0.0.0.0:9999" | ||||
|  | ||||
| #Icon that will be showed in mattermost.  | ||||
| #This only works when WebhookURL is configured | ||||
| #OPTIONAL | ||||
| IconURL="http://youricon.png" | ||||
|  | ||||
| #### End settings for webhook matterbridge. | ||||
|  | ||||
| #Enable to not verify the certificate on your mattermost server.  | ||||
| #e.g. when using selfsigned certificates | ||||
| @@ -238,11 +263,25 @@ NicksPerRow=4 | ||||
| #OPTIONAL (default false) | ||||
| PrefixMessagesWithNick=false | ||||
|  | ||||
| #Disable sending of edits to other bridges | ||||
| #OPTIONAL (default false) | ||||
| EditDisable=false | ||||
|  | ||||
| #Message to be appended to every edited message | ||||
| #OPTIONAL (default empty) | ||||
| EditSuffix=" (edited)" | ||||
|  | ||||
| #Nicks you want to ignore.  | ||||
| #Messages from those users will not be sent to other bridges. | ||||
| #OPTIONAL | ||||
| IgnoreNicks="ircspammer1 ircspammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -250,7 +289,8 @@ IgnoreNicks="ircspammer1 ircspammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -275,6 +315,12 @@ Token="Yourtokenhere" | ||||
| #OPTIONAL | ||||
| IgnoreNicks="ircspammer1 ircspammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -282,7 +328,8 @@ IgnoreNicks="ircspammer1 ircspammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -295,15 +342,20 @@ ShowJoinPart=false | ||||
| #In this example we use [slack.hobby] | ||||
| #REQUIRED | ||||
| [slack.hobby] | ||||
| #### Settings for webhook matterbridge. | ||||
| #### These settings will not be used when useAPI is enabled | ||||
| #Token to connect with the Slack API | ||||
| #You'll have to use a test/api-token using a dedicated user and not a bot token. | ||||
| #See https://github.com/42wim/matterbridge/issues/75 for more info. | ||||
| #Use https://api.slack.com/custom-integrations/legacy-tokens | ||||
| #REQUIRED (when not using webhooks) | ||||
| Token="yourslacktoken" | ||||
|  | ||||
| #### Settings for webhook matterbridge. | ||||
| #NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API | ||||
| #AND DEDICATED BOT USER WHEN POSSIBLE! | ||||
| #Url is your incoming webhook url as specified in slack | ||||
| #See account settings - integrations - incoming webhooks on slack | ||||
| #REQUIRED (unless useAPI=true) | ||||
| URL="https://hooks.slack.com/services/yourhook" | ||||
| #OPTIONAL | ||||
| WebhookURL="https://hooks.slack.com/services/yourhook" | ||||
|  | ||||
| #NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API | ||||
| #AND DEDICATED BOT USER WHEN POSSIBLE! | ||||
| @@ -311,20 +363,8 @@ URL="https://hooks.slack.com/services/yourhook" | ||||
| #See account settings - integrations - outgoing webhooks on slack | ||||
| #This setting will not be used when useAPI is eanbled | ||||
| #webhooks | ||||
| #REQUIRED (unless useAPI=true) | ||||
| BindAddress="0.0.0.0:9999" | ||||
|  | ||||
| #### Settings for using slack API (RECOMMENDED) | ||||
| #OPTIONAL | ||||
| useAPI=false | ||||
|  | ||||
| #Token to connect with the Slack API | ||||
| #You'll have to use a test/api-token using a dedicated user and not a bot token. | ||||
| #See https://github.com/42wim/matterbridge/issues/75 for more info. | ||||
| #REQUIRED (when useAPI=true) | ||||
| Token="yourslacktoken" | ||||
|  | ||||
| #### Shared settings for webhooks and API | ||||
| WebhookBindAddress="0.0.0.0:9999" | ||||
|  | ||||
| #Icon that will be showed in slack | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| @@ -341,6 +381,14 @@ NickFormatter="plain" | ||||
| #OPTIONAL (default 4) | ||||
| NicksPerRow=4 | ||||
|  | ||||
| #Disable sending of edits to other bridges | ||||
| #OPTIONAL (default false) | ||||
| EditDisable=true | ||||
|  | ||||
| #Message to be appended to every edited message | ||||
| #OPTIONAL (default empty) | ||||
| EditSuffix=" (edited)" | ||||
|  | ||||
| #Whether to prefix messages from other bridges to mattermost with RemoteNickFormat | ||||
| #Useful if username overrides for incoming webhooks isn't enabled on the  | ||||
| #slack server. If you set PrefixMessagesWithNick to true, each message  | ||||
| @@ -354,6 +402,12 @@ PrefixMessagesWithNick=false | ||||
| #OPTIONAL | ||||
| IgnoreNicks="ircspammer1 ircspammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -361,7 +415,8 @@ IgnoreNicks="ircspammer1 ircspammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -384,11 +439,33 @@ Token="Yourtokenhere" | ||||
| #REQUIRED | ||||
| Server="yourservername" | ||||
|  | ||||
| #Shows title, description and URL of embedded messages (sent by other bots) | ||||
| #OPTIONAL (default false) | ||||
| ShowEmbeds=false | ||||
|  | ||||
| #Specify WebhookURL. If given, will relay messages using the Webhook, which gives a better look to messages. | ||||
| #OPTIONAL (default empty) | ||||
| WebhookURL="Yourwebhooktokenhere" | ||||
|  | ||||
| #Disable sending of edits to other bridges | ||||
| #OPTIONAL (default false) | ||||
| EditDisable=false | ||||
|  | ||||
| #Message to be appended to every edited message | ||||
| #OPTIONAL (default empty) | ||||
| EditSuffix=" (edited)" | ||||
|  | ||||
| #Nicks you want to ignore.  | ||||
| #Messages from those users will not be sent to other bridges. | ||||
| #OPTIONAL | ||||
| IgnoreNicks="ircspammer1 ircspammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -396,7 +473,8 @@ IgnoreNicks="ircspammer1 ircspammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -419,11 +497,37 @@ Token="Yourtokenhere" | ||||
| #See https://core.telegram.org/bots/api#html-style | ||||
| MessageFormat="" | ||||
|  | ||||
| #If enabled use the "First Name" as username. If this is empty use the Username | ||||
| #If disabled use the "Username" as username. If this is empty use the First Name  | ||||
| #If all names are empty, username will be "unknown" | ||||
| #OPTIONAL (default false) | ||||
| UseFirstName=false | ||||
|  | ||||
| #WARNING! If enabled this will relay GIF/stickers/documents and other attachments as URLs | ||||
| #Those URLs will contain your bot-token. This may not be what you want. | ||||
| #For now there is no secure way to relay GIF/stickers/documents without seeing your token. | ||||
| #OPTIONAL (default false) | ||||
| UseInsecureURL=false | ||||
|  | ||||
| #Disable sending of edits to other bridges | ||||
| #OPTIONAL (default false) | ||||
| EditDisable=false | ||||
|  | ||||
| #Message to be appended to every edited message | ||||
| #OPTIONAL (default empty) | ||||
| EditSuffix=" (edited)" | ||||
|  | ||||
| #Nicks you want to ignore.  | ||||
| #Messages from those users will not be sent to other bridges. | ||||
| #OPTIONAL | ||||
| IgnoreNicks="spammer1 spammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -431,7 +535,8 @@ IgnoreNicks="spammer1 spammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -449,12 +554,12 @@ ShowJoinPart=false | ||||
| #Read #https://rocket.chat/docs/administrator-guides/integrations/#how-to-create-a-new-incoming-webhook | ||||
| #See administration - integrations - new integration - incoming webhook | ||||
| #REQUIRED | ||||
| URL="https://yourdomain/hooks/yourhookkey" | ||||
| WebhookURL="https://yourdomain/hooks/yourhookkey" | ||||
|  | ||||
| #Address to listen on for outgoing webhook requests from rocketchat. | ||||
| #See administration - integrations - new integration - outgoing webhook | ||||
| #REQUIRED  | ||||
| BindAddress="0.0.0.0:9999" | ||||
| WebhookBindAddress="0.0.0.0:9999" | ||||
|  | ||||
| #Your nick/username as specified in your incoming webhook "Post as" setting | ||||
| #REQUIRED | ||||
| @@ -481,6 +586,12 @@ PrefixMessagesWithNick=false | ||||
| #OPTIONAL | ||||
| IgnoreNicks="ircspammer1 ircspammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -488,7 +599,8 @@ IgnoreNicks="ircspammer1 ircspammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -512,6 +624,11 @@ Server="https://matrix.org" | ||||
| Login="yourlogin" | ||||
| Password="yourpass" | ||||
|  | ||||
| #Whether to send the homeserver suffix. eg ":matrix.org" in @username:matrix.org | ||||
| #to other bridges, or only send "username".(true only sends username) | ||||
| #OPTIONAL (default false) | ||||
| NoHomeServerSuffix=false | ||||
|  | ||||
| #Whether to prefix messages from other bridges to matrix with the sender's nick.  | ||||
| #Useful if username overrides for incoming webhooks isn't enabled on the  | ||||
| #matrix server. If you set PrefixMessagesWithNick to true, each message  | ||||
| @@ -524,6 +641,12 @@ PrefixMessagesWithNick=false | ||||
| #OPTIONAL | ||||
| IgnoreNicks="spammer1 spammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -531,7 +654,57 @@ IgnoreNicks="spammer1 spammer2" | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges (only from irc-bridge at the moment) | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| ################################################################### | ||||
| #steam section | ||||
| ################################################################### | ||||
| [steam] | ||||
| #You can configure multiple servers "[steam.name]" or "[steam.name2]" | ||||
| #In this example we use [steam.gamechat] | ||||
| #REQUIRED | ||||
|  | ||||
| [steam.gamechat] | ||||
| #login/pass of your bot.  | ||||
| #Use a dedicated user for this and not your own account!  | ||||
| #REQUIRED  | ||||
| Login="yourlogin" | ||||
| Password="yourpass" | ||||
|  | ||||
| #steamguard mail authcode (not the 2FA code) | ||||
| #OPTIONAL  | ||||
| Authcode="ABCE12" | ||||
|  | ||||
| #Whether to prefix messages from other bridges to matrix with the sender's nick.  | ||||
| #Useful if username overrides for incoming webhooks isn't enabled on the  | ||||
| #matrix server. If you set PrefixMessagesWithNick to true, each message  | ||||
| #from bridge to matrix will by default be prefixed by the RemoteNickFormat setting. i | ||||
| #OPTIONAL (default false) | ||||
| PrefixMessagesWithNick=false | ||||
|  | ||||
| #Nicks you want to ignore.  | ||||
| #Messages from those users will not be sent to other bridges. | ||||
| #OPTIONAL | ||||
| IgnoreNicks="spammer1 spammer2" | ||||
|  | ||||
| #Messages you want to ignore.  | ||||
| #Messages matching these regexp will be ignored and not sent to other bridges | ||||
| #See https://regex-golang.appspot.com/assets/html/index.html for more regex info | ||||
| #OPTIONAL (example below ignores messages starting with ~~ or messages containing badword | ||||
| IgnoreMessages="^~~ badword" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| #The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
|  | ||||
| #Enable to show users joins/parts from other bridges  | ||||
| #Only works hiding/show messages from irc and mattermost bridge for now | ||||
| #OPTIONAL (default false) | ||||
| ShowJoinPart=false | ||||
|  | ||||
| @@ -552,6 +725,11 @@ BindAddress="127.0.0.1:4242" | ||||
| #Amount of messages to keep in memory | ||||
| Buffer=1000 | ||||
|  | ||||
| #Bearer token used for authentication | ||||
| #curl -H "Authorization: Bearer token" http://localhost:4242/api/messages | ||||
| #OPTIONAL (no authorization if token is empty) | ||||
| Token="mytoken" | ||||
|  | ||||
| #RemoteNickFormat defines how remote users appear on this bridge  | ||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||
| #The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||
| @@ -559,6 +737,8 @@ Buffer=1000 | ||||
| #OPTIONAL (default empty) | ||||
| RemoteNickFormat="{NICK}" | ||||
|  | ||||
|  | ||||
|  | ||||
| ################################################################### | ||||
| #General configuration | ||||
| ################################################################### | ||||
| @@ -586,7 +766,7 @@ RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||
| # | ||||
|  | ||||
| [[gateway]] | ||||
| #OPTIONAL (not used for now) | ||||
| #REQUIRED and UNIQUE | ||||
| name="gateway1" | ||||
| #Enable enables this gateway | ||||
| ##OPTIONAL (default false) | ||||
| @@ -602,7 +782,7 @@ enable=true | ||||
|     #channel to connect on that account | ||||
|     #How to specify them for the different bridges: | ||||
|     # | ||||
|     #irc        - #channel (# is required) | ||||
|     #irc        - #channel (# is required) (this needs to be lowercase!) | ||||
|     #mattermost - channel (the channel name as seen in the URL, not the displayname) | ||||
|     #gitter     - username/room  | ||||
|     #xmpp       - channel | ||||
| @@ -613,8 +793,12 @@ enable=true | ||||
|     #telegram   - chatid (a large negative number, eg -123456789) | ||||
|     #             see (https://www.linkedin.com/pulse/telegram-bots-beginners-marco-frau) | ||||
|     #hipchat    - id_channel (see https://www.hipchat.com/account/xmpp for the correct channel) | ||||
|     #rocketchat - #channel (# is required) | ||||
|     #matrix     - #channel:server (eg #yourchannel:matrix.org) | ||||
|     #rocketchat - #channel (# is required (also needed for private channels!) | ||||
|     #matrix     - #channel:server (eg #yourchannel:matrix.org)  | ||||
|     #           - encrypted rooms are not supported in matrix | ||||
|     #steam      - chatid (a large number).  | ||||
|     #             The number in the URL when you click "enter chat room" in the browser | ||||
|     #                   | ||||
|     #REQUIRED | ||||
|     channel="#testing" | ||||
|  | ||||
| @@ -650,7 +834,9 @@ enable=true | ||||
|     #account="api.local" | ||||
|     #channel="api" | ||||
|     #To send data to the api: | ||||
|     #curl -XPOST -H 'Content-Type: application/json'  -d '{"text":"test","username":"randomuser"}' http://localhost:4242/api/message | ||||
|     #curl -XPOST -H 'Content-Type: application/json'  -d '{"text":"test","username":"randomuser","gateway":"gateway1"}' http://localhost:4242/api/message | ||||
|     #To read from the api: | ||||
|     #curl http://localhost:4242/api/messages | ||||
|  | ||||
| #If you want to do a 1:1 mapping between protocols where the channelnames are the same | ||||
| #e.g. slack and mattermost you can use the samechannelgateway configuration | ||||
| @@ -658,6 +844,7 @@ enable=true | ||||
| #channel testing on slack and vice versa. (and for the channel testing2 and testing3) | ||||
|  | ||||
| [[samechannelgateway]] | ||||
|    name="samechannel1" | ||||
|    enable = false | ||||
|    accounts = [ "mattermost.work","slack.hobby" ] | ||||
|    channels = [ "testing","testing2","testing3"] | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| #WARNING: as this file contains credentials, be sure to set correct file permissions | ||||
| [irc] | ||||
|     [irc.freenode] | ||||
|     Server="irc.freenode.net:6667" | ||||
| @@ -6,7 +7,8 @@ | ||||
| [mattermost] | ||||
|     [mattermost.work] | ||||
|     useAPI=true | ||||
|     Server="yourmattermostserver.domain" | ||||
|     #do not prefix it wit http:// or https:// | ||||
|     Server="yourmattermostserver.domain"  | ||||
|     Team="yourteam" | ||||
|     Login="yourlogin" | ||||
|     Password="yourpass" | ||||
| @@ -15,18 +17,19 @@ | ||||
| [[gateway]] | ||||
| name="gateway1" | ||||
| enable=true | ||||
|     [[gateway.in]] | ||||
|     [[gateway.inout]] | ||||
|     account="irc.freenode" | ||||
|     channel="#testing" | ||||
|  | ||||
|     [[gateway.out]] | ||||
|     account="irc.freenode" | ||||
|     channel="#testing" | ||||
|  | ||||
|     [[gateway.in]] | ||||
|     [[gateway.inout]] | ||||
|     account="mattermost.work" | ||||
|     channel="off-topic" | ||||
|      | ||||
|     [[gateway.out]] | ||||
|     account="mattermost.work" | ||||
|     channel="off-topic" | ||||
| #simpler config possible since v0.10.2 | ||||
| #[[gateway]] | ||||
| #name="gateway2" | ||||
| #enable=true | ||||
| #inout = [ | ||||
| #    { account="irc.freenode", channel="#testing", options={key="channelkey"}}, | ||||
| #    { account="mattermost.work", channel="off-topic" }, | ||||
| #] | ||||
|   | ||||
| @@ -4,9 +4,11 @@ import ( | ||||
| 	"crypto/tls" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| 	"net/http/cookiejar" | ||||
| 	"net/url" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| @@ -34,6 +36,8 @@ type Message struct { | ||||
| 	Channel  string | ||||
| 	Username string | ||||
| 	Text     string | ||||
| 	Type     string | ||||
| 	UserID   string | ||||
| } | ||||
|  | ||||
| type Team struct { | ||||
| @@ -47,19 +51,21 @@ type Team struct { | ||||
| type MMClient struct { | ||||
| 	sync.RWMutex | ||||
| 	*Credentials | ||||
| 	Team        *Team | ||||
| 	OtherTeams  []*Team | ||||
| 	Client      *model.Client | ||||
| 	User        *model.User | ||||
| 	Users       map[string]*model.User | ||||
| 	MessageChan chan *Message | ||||
| 	log         *log.Entry | ||||
| 	WsClient    *websocket.Conn | ||||
| 	WsQuit      bool | ||||
| 	WsAway      bool | ||||
| 	WsConnected bool | ||||
| 	WsSequence  int64 | ||||
| 	WsPingChan  chan *model.WebSocketResponse | ||||
| 	Team          *Team | ||||
| 	OtherTeams    []*Team | ||||
| 	Client        *model.Client | ||||
| 	User          *model.User | ||||
| 	Users         map[string]*model.User | ||||
| 	MessageChan   chan *Message | ||||
| 	log           *log.Entry | ||||
| 	WsClient      *websocket.Conn | ||||
| 	WsQuit        bool | ||||
| 	WsAway        bool | ||||
| 	WsConnected   bool | ||||
| 	WsSequence    int64 | ||||
| 	WsPingChan    chan *model.WebSocketResponse | ||||
| 	ServerVersion string | ||||
| 	OnWsConnect   func() | ||||
| } | ||||
|  | ||||
| func New(login, pass, team, server string) *MMClient { | ||||
| @@ -82,7 +88,7 @@ func (m *MMClient) SetLogLevel(level string) { | ||||
| func (m *MMClient) Login() error { | ||||
| 	// check if this is a first connect or a reconnection | ||||
| 	firstConnection := true | ||||
| 	if m.WsConnected == true { | ||||
| 	if m.WsConnected { | ||||
| 		firstConnection = false | ||||
| 	} | ||||
| 	m.WsConnected = false | ||||
| @@ -95,15 +101,32 @@ func (m *MMClient) Login() error { | ||||
| 		Jitter: true, | ||||
| 	} | ||||
| 	uriScheme := "https://" | ||||
| 	wsScheme := "wss://" | ||||
| 	if m.NoTLS { | ||||
| 		uriScheme = "http://" | ||||
| 		wsScheme = "ws://" | ||||
| 	} | ||||
| 	// login to mattermost | ||||
| 	m.Client = model.NewClient(uriScheme + m.Credentials.Server) | ||||
| 	m.Client.HttpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}} | ||||
| 	m.Client.HttpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}, Proxy: http.ProxyFromEnvironment} | ||||
| 	m.Client.HttpClient.Timeout = time.Second * 10 | ||||
|  | ||||
| 	for { | ||||
| 		d := b.Duration() | ||||
| 		// bogus call to get the serverversion | ||||
| 		m.Client.GetClientProperties() | ||||
| 		if firstConnection && !supportedVersion(m.Client.ServerVersion) { | ||||
| 			return fmt.Errorf("unsupported mattermost version: %s", m.Client.ServerVersion) | ||||
| 		} | ||||
| 		m.ServerVersion = m.Client.ServerVersion | ||||
| 		if m.ServerVersion == "" { | ||||
| 			m.log.Debugf("Server not up yet, reconnecting in %s", d) | ||||
| 			time.Sleep(d) | ||||
| 		} else { | ||||
| 			m.log.Infof("Found version %s", m.ServerVersion) | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
| 	b.Reset() | ||||
|  | ||||
| 	var myinfo *model.Result | ||||
| 	var appErr *model.AppError | ||||
| 	var logmsg = "trying login" | ||||
| @@ -126,7 +149,7 @@ func (m *MMClient) Login() error { | ||||
| 				return errors.New("invalid " + model.SESSION_COOKIE_TOKEN) | ||||
| 			} | ||||
| 		} else { | ||||
| 			myinfo, appErr = m.Client.Login(m.Credentials.Login, m.Credentials.Pass) | ||||
| 			_, appErr = m.Client.Login(m.Credentials.Login, m.Credentials.Pass) | ||||
| 		} | ||||
| 		if appErr != nil { | ||||
| 			d := b.Duration() | ||||
| @@ -158,14 +181,33 @@ func (m *MMClient) Login() error { | ||||
| 	// set our team id as default route | ||||
| 	m.Client.SetTeamId(m.Team.Id) | ||||
|  | ||||
| 	m.wsConnect() | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *MMClient) wsConnect() { | ||||
| 	b := &backoff.Backoff{ | ||||
| 		Min:    time.Second, | ||||
| 		Max:    5 * time.Minute, | ||||
| 		Jitter: true, | ||||
| 	} | ||||
|  | ||||
| 	m.WsConnected = false | ||||
| 	wsScheme := "wss://" | ||||
| 	if m.NoTLS { | ||||
| 		wsScheme = "ws://" | ||||
| 	} | ||||
|  | ||||
| 	// setup websocket connection | ||||
| 	wsurl := wsScheme + m.Credentials.Server + model.API_URL_SUFFIX + "/users/websocket" | ||||
| 	wsurl := wsScheme + m.Credentials.Server + model.API_URL_SUFFIX_V3 + "/users/websocket" | ||||
| 	header := http.Header{} | ||||
| 	header.Set(model.HEADER_AUTH, "BEARER "+m.Client.AuthToken) | ||||
|  | ||||
| 	m.log.Debug("WsClient: making connection") | ||||
| 	m.log.Debugf("WsClient: making connection: %s", wsurl) | ||||
| 	for { | ||||
| 		wsDialer := &websocket.Dialer{Proxy: http.ProxyFromEnvironment, TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}} | ||||
| 		var err error | ||||
| 		m.WsClient, _, err = wsDialer.Dial(wsurl, header) | ||||
| 		if err != nil { | ||||
| 			d := b.Duration() | ||||
| @@ -175,14 +217,12 @@ func (m *MMClient) Login() error { | ||||
| 		} | ||||
| 		break | ||||
| 	} | ||||
| 	b.Reset() | ||||
|  | ||||
| 	m.log.Debug("WsClient: connected") | ||||
| 	m.WsSequence = 1 | ||||
| 	m.WsPingChan = make(chan *model.WebSocketResponse) | ||||
| 	// only start to parse WS messages when login is completely done | ||||
| 	m.WsConnected = true | ||||
|  | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *MMClient) Logout() error { | ||||
| @@ -190,6 +230,10 @@ func (m *MMClient) Logout() error { | ||||
| 	m.WsQuit = true | ||||
| 	m.WsClient.Close() | ||||
| 	m.WsClient.UnderlyingConn().Close() | ||||
| 	if strings.Contains(m.Credentials.Pass, model.SESSION_COOKIE_TOKEN) { | ||||
| 		m.log.Debug("Not invalidating session in logout, credential is a token") | ||||
| 		return nil | ||||
| 	} | ||||
| 	_, err := m.Client.Logout() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| @@ -215,12 +259,12 @@ func (m *MMClient) WsReceiver() { | ||||
| 		if _, rawMsg, err = m.WsClient.ReadMessage(); err != nil { | ||||
| 			m.log.Error("error:", err) | ||||
| 			// reconnect | ||||
| 			m.Login() | ||||
| 			m.wsConnect() | ||||
| 		} | ||||
|  | ||||
| 		var event model.WebSocketEvent | ||||
| 		if err := json.Unmarshal(rawMsg, &event); err == nil && event.IsValid() { | ||||
| 			m.log.Debugf("WsReceiver: %#v", event) | ||||
| 			m.log.Debugf("WsReceiver event: %#v", event) | ||||
| 			msg := &Message{Raw: &event, Team: m.Credentials.Team} | ||||
| 			m.parseMessage(msg) | ||||
| 			m.MessageChan <- msg | ||||
| @@ -229,7 +273,7 @@ func (m *MMClient) WsReceiver() { | ||||
|  | ||||
| 		var response model.WebSocketResponse | ||||
| 		if err := json.Unmarshal(rawMsg, &response); err == nil && response.IsValid() { | ||||
| 			m.log.Debugf("WsReceiver: %#v", response) | ||||
| 			m.log.Debugf("WsReceiver response: %#v", response) | ||||
| 			m.parseResponse(response) | ||||
| 			continue | ||||
| 		} | ||||
| @@ -238,7 +282,7 @@ func (m *MMClient) WsReceiver() { | ||||
|  | ||||
| func (m *MMClient) parseMessage(rmsg *Message) { | ||||
| 	switch rmsg.Raw.Event { | ||||
| 	case model.WEBSOCKET_EVENT_POSTED: | ||||
| 	case model.WEBSOCKET_EVENT_POSTED, model.WEBSOCKET_EVENT_POST_EDITED: | ||||
| 		m.parseActionPost(rmsg) | ||||
| 		/* | ||||
| 			case model.ACTION_USER_REMOVED: | ||||
| @@ -262,18 +306,29 @@ func (m *MMClient) parseActionPost(rmsg *Message) { | ||||
| 	data := model.PostFromJson(strings.NewReader(rmsg.Raw.Data["post"].(string))) | ||||
| 	// we don't have the user, refresh the userlist | ||||
| 	if m.GetUser(data.UserId) == nil { | ||||
| 		m.UpdateUsers() | ||||
| 		m.log.Infof("User %s is not known, ignoring message %s", data) | ||||
| 		return | ||||
| 	} | ||||
| 	rmsg.Username = m.GetUser(data.UserId).Username | ||||
| 	rmsg.Username = m.GetUserName(data.UserId) | ||||
| 	rmsg.Channel = m.GetChannelName(data.ChannelId) | ||||
| 	rmsg.Team = m.GetTeamName(rmsg.Raw.Data["team_id"].(string)) | ||||
| 	rmsg.UserID = data.UserId | ||||
| 	rmsg.Type = data.Type | ||||
| 	teamid, _ := rmsg.Raw.Data["team_id"].(string) | ||||
| 	// edit messsages have no team_id for some reason | ||||
| 	if teamid == "" { | ||||
| 		// we can find the team_id from the channelid | ||||
| 		teamid = m.GetChannelTeamId(data.ChannelId) | ||||
| 		rmsg.Raw.Data["team_id"] = teamid | ||||
| 	} | ||||
| 	if teamid != "" { | ||||
| 		rmsg.Team = m.GetTeamName(teamid) | ||||
| 	} | ||||
| 	// direct message | ||||
| 	if rmsg.Raw.Data["channel_type"] == "D" { | ||||
| 		rmsg.Channel = m.GetUser(data.UserId).Username | ||||
| 	} | ||||
| 	rmsg.Text = data.Message | ||||
| 	rmsg.Post = data | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (m *MMClient) UpdateUsers() error { | ||||
| @@ -292,7 +347,12 @@ func (m *MMClient) UpdateChannels() error { | ||||
| 	if err != nil { | ||||
| 		return errors.New(err.DetailedError) | ||||
| 	} | ||||
| 	mmchannels2, err := m.Client.GetMoreChannels("") | ||||
| 	var mmchannels2 *model.Result | ||||
| 	if m.mmVersion() >= 3.08 { | ||||
| 		mmchannels2, err = m.Client.GetMoreChannelsPage(0, 5000) | ||||
| 	} else { | ||||
| 		mmchannels2, err = m.Client.GetMoreChannels("") | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return errors.New(err.DetailedError) | ||||
| 	} | ||||
| @@ -307,9 +367,21 @@ func (m *MMClient) GetChannelName(channelId string) string { | ||||
| 	m.RLock() | ||||
| 	defer m.RUnlock() | ||||
| 	for _, t := range m.OtherTeams { | ||||
| 		for _, channel := range append(*t.Channels, *t.MoreChannels...) { | ||||
| 			if channel.Id == channelId { | ||||
| 				return channel.Name | ||||
| 		if t == nil { | ||||
| 			continue | ||||
| 		} | ||||
| 		if t.Channels != nil { | ||||
| 			for _, channel := range *t.Channels { | ||||
| 				if channel.Id == channelId { | ||||
| 					return channel.Name | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		if t.MoreChannels != nil { | ||||
| 			for _, channel := range *t.MoreChannels { | ||||
| 				if channel.Id == channelId { | ||||
| 					return channel.Name | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @@ -334,6 +406,19 @@ func (m *MMClient) GetChannelId(name string, teamId string) string { | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *MMClient) GetChannelTeamId(id string) string { | ||||
| 	m.RLock() | ||||
| 	defer m.RUnlock() | ||||
| 	for _, t := range append(m.OtherTeams, m.Team) { | ||||
| 		for _, channel := range append(*t.Channels, *t.MoreChannels...) { | ||||
| 			if channel.Id == id { | ||||
| 				return channel.TeamId | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *MMClient) GetChannelHeader(channelId string) string { | ||||
| 	m.RLock() | ||||
| 	defer m.RUnlock() | ||||
| @@ -414,6 +499,25 @@ func (m *MMClient) GetPublicLinks(filenames []string) []string { | ||||
| 	return output | ||||
| } | ||||
|  | ||||
| func (m *MMClient) GetFileLinks(filenames []string) []string { | ||||
| 	uriScheme := "https://" | ||||
| 	if m.NoTLS { | ||||
| 		uriScheme = "http://" | ||||
| 	} | ||||
|  | ||||
| 	var output []string | ||||
| 	for _, f := range filenames { | ||||
| 		res, err := m.Client.GetPublicLink(f) | ||||
| 		if err != nil { | ||||
| 			// public links is probably disabled, create the link ourselves | ||||
| 			output = append(output, uriScheme+m.Credentials.Server+model.API_URL_SUFFIX_V3+"/files/"+f+"/get") | ||||
| 			continue | ||||
| 		} | ||||
| 		output = append(output, res) | ||||
| 	} | ||||
| 	return output | ||||
| } | ||||
|  | ||||
| func (m *MMClient) UpdateChannelHeader(channelId string, header string) { | ||||
| 	data := make(map[string]string) | ||||
| 	data["channel_id"] = channelId | ||||
| @@ -427,6 +531,14 @@ func (m *MMClient) UpdateChannelHeader(channelId string, header string) { | ||||
|  | ||||
| func (m *MMClient) UpdateLastViewed(channelId string) { | ||||
| 	m.log.Debugf("posting lastview %#v", channelId) | ||||
| 	if m.mmVersion() >= 3.08 { | ||||
| 		view := model.ChannelView{ChannelId: channelId} | ||||
| 		res, _ := m.Client.ViewChannel(view) | ||||
| 		if !res { | ||||
| 			m.log.Errorf("ChannelView update for %s failed", channelId) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 	_, err := m.Client.UpdateLastViewedAt(channelId, true) | ||||
| 	if err != nil { | ||||
| 		m.log.Error(err) | ||||
| @@ -434,17 +546,15 @@ func (m *MMClient) UpdateLastViewed(channelId string) { | ||||
| } | ||||
|  | ||||
| func (m *MMClient) UsernamesInChannel(channelId string) []string { | ||||
| 	res, err := m.Client.GetMyChannelMembers() | ||||
| 	res, err := m.Client.GetProfilesInChannel(channelId, 0, 50000, "") | ||||
| 	if err != nil { | ||||
| 		m.log.Errorf("UsernamesInChannel(%s) failed: %s", channelId, err) | ||||
| 		return []string{} | ||||
| 	} | ||||
| 	members := res.Data.(*model.ChannelMembers) | ||||
| 	members := res.Data.(map[string]*model.User) | ||||
| 	result := []string{} | ||||
| 	for _, channel := range *members { | ||||
| 		if channel.ChannelId == channelId { | ||||
| 			result = append(result, m.GetUser(channel.UserId).Username) | ||||
| 		} | ||||
| 	for _, member := range members { | ||||
| 		result = append(result, member.Nickname) | ||||
| 	} | ||||
| 	return result | ||||
| } | ||||
| @@ -536,7 +646,9 @@ func (m *MMClient) GetTeamFromChannel(channelId string) string { | ||||
| 	var channels []*model.Channel | ||||
| 	for _, t := range m.OtherTeams { | ||||
| 		channels = append(channels, *t.Channels...) | ||||
| 		channels = append(channels, *t.MoreChannels...) | ||||
| 		if t.MoreChannels != nil { | ||||
| 			channels = append(channels, *t.MoreChannels...) | ||||
| 		} | ||||
| 		for _, c := range channels { | ||||
| 			if c.Id == channelId { | ||||
| 				return t.Id | ||||
| @@ -568,13 +680,30 @@ func (m *MMClient) GetUsers() map[string]*model.User { | ||||
| } | ||||
|  | ||||
| func (m *MMClient) GetUser(userId string) *model.User { | ||||
| 	m.RLock() | ||||
| 	defer m.RUnlock() | ||||
| 	m.Lock() | ||||
| 	defer m.Unlock() | ||||
| 	_, ok := m.Users[userId] | ||||
| 	if !ok { | ||||
| 		res, err := m.Client.GetProfilesByIds([]string{userId}) | ||||
| 		if err != nil { | ||||
| 			return nil | ||||
| 		} | ||||
| 		u := res.Data.(map[string]*model.User)[userId] | ||||
| 		m.Users[userId] = u | ||||
| 	} | ||||
| 	return m.Users[userId] | ||||
| } | ||||
|  | ||||
| func (m *MMClient) GetUserName(userId string) string { | ||||
| 	user := m.GetUser(userId) | ||||
| 	if user != nil { | ||||
| 		return user.Username | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *MMClient) GetStatus(userId string) string { | ||||
| 	res, err := m.Client.GetStatuses() | ||||
| 	res, err := m.Client.GetStatusesByIds([]string{userId}) | ||||
| 	if err != nil { | ||||
| 		return "" | ||||
| 	} | ||||
| @@ -614,6 +743,12 @@ func (m *MMClient) GetTeamId() string { | ||||
| } | ||||
|  | ||||
| func (m *MMClient) StatusLoop() { | ||||
| 	retries := 0 | ||||
| 	backoff := time.Second * 60 | ||||
| 	if m.OnWsConnect != nil { | ||||
| 		m.OnWsConnect() | ||||
| 	} | ||||
| 	m.log.Debug("StatusLoop:", m.OnWsConnect) | ||||
| 	for { | ||||
| 		if m.WsQuit { | ||||
| 			return | ||||
| @@ -624,13 +759,23 @@ func (m *MMClient) StatusLoop() { | ||||
| 			select { | ||||
| 			case <-m.WsPingChan: | ||||
| 				m.log.Debug("WS PONG received") | ||||
| 				backoff = time.Second * 60 | ||||
| 			case <-time.After(time.Second * 5): | ||||
| 				m.Logout() | ||||
| 				m.WsQuit = false | ||||
| 				m.Login() | ||||
| 				if retries > 3 { | ||||
| 					m.Logout() | ||||
| 					m.WsQuit = false | ||||
| 					m.Login() | ||||
| 					if m.OnWsConnect != nil { | ||||
| 						m.OnWsConnect() | ||||
| 					} | ||||
| 					go m.WsReceiver() | ||||
| 				} else { | ||||
| 					retries++ | ||||
| 					backoff = time.Second * 5 | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		time.Sleep(time.Second * 60) | ||||
| 		time.Sleep(backoff) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -659,7 +804,11 @@ func (m *MMClient) initUser() error { | ||||
| 			return errors.New(err.DetailedError) | ||||
| 		} | ||||
| 		t.Channels = mmchannels.Data.(*model.ChannelList) | ||||
| 		mmchannels, err = m.Client.GetMoreChannels("") | ||||
| 		if m.mmVersion() >= 3.08 { | ||||
| 			mmchannels, err = m.Client.GetMoreChannelsPage(0, 5000) | ||||
| 		} else { | ||||
| 			mmchannels, err = m.Client.GetMoreChannels("") | ||||
| 		} | ||||
| 		if err != nil { | ||||
| 			return errors.New(err.DetailedError) | ||||
| 		} | ||||
| @@ -687,3 +836,24 @@ func (m *MMClient) sendWSRequest(action string, data map[string]interface{}) err | ||||
| 	m.WsClient.WriteJSON(req) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *MMClient) mmVersion() float64 { | ||||
| 	v, _ := strconv.ParseFloat(string(m.ServerVersion[0:2])+"0"+string(m.ServerVersion[2]), 64) | ||||
| 	if string(m.ServerVersion[4]) == "." { | ||||
| 		v, _ = strconv.ParseFloat(m.ServerVersion[0:4], 64) | ||||
| 	} | ||||
| 	return v | ||||
| } | ||||
|  | ||||
| func supportedVersion(version string) bool { | ||||
| 	if strings.HasPrefix(version, "3.5.0") || | ||||
| 		strings.HasPrefix(version, "3.6.0") || | ||||
| 		strings.HasPrefix(version, "3.7.0") || | ||||
| 		strings.HasPrefix(version, "3.8.0") || | ||||
| 		strings.HasPrefix(version, "3.9.0") || | ||||
| 		strings.HasPrefix(version, "3.10.0") || | ||||
| 		strings.HasPrefix(version, "4.0") { | ||||
| 		return true | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|   | ||||
| @@ -134,12 +134,11 @@ func (c *Client) ServeHTTP(w http.ResponseWriter, r *http.Request) { | ||||
|  | ||||
| // Receive returns an incoming message from mattermost outgoing webhooks URL. | ||||
| func (c *Client) Receive() IMessage { | ||||
| 	for { | ||||
| 		select { | ||||
| 		case msg := <-c.In: | ||||
| 			return msg | ||||
| 		} | ||||
| 	var msg IMessage | ||||
| 	for msg := range c.In { | ||||
| 		return msg | ||||
| 	} | ||||
| 	return msg | ||||
| } | ||||
|  | ||||
| // Send sends a msg to mattermost incoming webhooks URL. | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/BurntSushi/toml/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/BurntSushi/toml/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -4,7 +4,7 @@ files via reflection. There is also support for delaying decoding with | ||||
| the Primitive type, and querying the set of keys in a TOML document with the | ||||
| MetaData type. | ||||
|  | ||||
| The specification implemented: https://github.com/mojombo/toml | ||||
| The specification implemented: https://github.com/toml-lang/toml | ||||
|  | ||||
| The sub-command github.com/BurntSushi/toml/cmd/tomlv can be used to verify | ||||
| whether a file is a valid TOML document. It can also be used to print the | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/BurntSushi/toml/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/BurntSushi/toml/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -241,7 +241,7 @@ func (enc *Encoder) eArrayOfTables(key Key, rv reflect.Value) { | ||||
| func (enc *Encoder) eTable(key Key, rv reflect.Value) { | ||||
| 	panicIfInvalidKey(key) | ||||
| 	if len(key) == 1 { | ||||
| 		// Output an extra new line between top-level tables. | ||||
| 		// Output an extra newline between top-level tables. | ||||
| 		// (The newline isn't written if nothing else has been written though.) | ||||
| 		enc.newline() | ||||
| 	} | ||||
|   | ||||
							
								
								
									
										259
									
								
								vendor/github.com/BurntSushi/toml/lex.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										259
									
								
								vendor/github.com/BurntSushi/toml/lex.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -30,24 +30,28 @@ const ( | ||||
| 	itemArrayTableEnd | ||||
| 	itemKeyStart | ||||
| 	itemCommentStart | ||||
| 	itemInlineTableStart | ||||
| 	itemInlineTableEnd | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	eof             = 0 | ||||
| 	tableStart      = '[' | ||||
| 	tableEnd        = ']' | ||||
| 	arrayTableStart = '[' | ||||
| 	arrayTableEnd   = ']' | ||||
| 	tableSep        = '.' | ||||
| 	keySep          = '=' | ||||
| 	arrayStart      = '[' | ||||
| 	arrayEnd        = ']' | ||||
| 	arrayValTerm    = ',' | ||||
| 	commentStart    = '#' | ||||
| 	stringStart     = '"' | ||||
| 	stringEnd       = '"' | ||||
| 	rawStringStart  = '\'' | ||||
| 	rawStringEnd    = '\'' | ||||
| 	eof              = 0 | ||||
| 	comma            = ',' | ||||
| 	tableStart       = '[' | ||||
| 	tableEnd         = ']' | ||||
| 	arrayTableStart  = '[' | ||||
| 	arrayTableEnd    = ']' | ||||
| 	tableSep         = '.' | ||||
| 	keySep           = '=' | ||||
| 	arrayStart       = '[' | ||||
| 	arrayEnd         = ']' | ||||
| 	commentStart     = '#' | ||||
| 	stringStart      = '"' | ||||
| 	stringEnd        = '"' | ||||
| 	rawStringStart   = '\'' | ||||
| 	rawStringEnd     = '\'' | ||||
| 	inlineTableStart = '{' | ||||
| 	inlineTableEnd   = '}' | ||||
| ) | ||||
|  | ||||
| type stateFn func(lx *lexer) stateFn | ||||
| @@ -56,11 +60,18 @@ type lexer struct { | ||||
| 	input string | ||||
| 	start int | ||||
| 	pos   int | ||||
| 	width int | ||||
| 	line  int | ||||
| 	state stateFn | ||||
| 	items chan item | ||||
|  | ||||
| 	// Allow for backing up up to three runes. | ||||
| 	// This is necessary because TOML contains 3-rune tokens (""" and '''). | ||||
| 	prevWidths [3]int | ||||
| 	nprev      int // how many of prevWidths are in use | ||||
| 	// If we emit an eof, we can still back up, but it is not OK to call | ||||
| 	// next again. | ||||
| 	atEOF bool | ||||
|  | ||||
| 	// A stack of state functions used to maintain context. | ||||
| 	// The idea is to reuse parts of the state machine in various places. | ||||
| 	// For example, values can appear at the top level or within arbitrarily | ||||
| @@ -88,7 +99,7 @@ func (lx *lexer) nextItem() item { | ||||
|  | ||||
| func lex(input string) *lexer { | ||||
| 	lx := &lexer{ | ||||
| 		input: input + "\n", | ||||
| 		input: input, | ||||
| 		state: lexTop, | ||||
| 		line:  1, | ||||
| 		items: make(chan item, 10), | ||||
| @@ -103,7 +114,7 @@ func (lx *lexer) push(state stateFn) { | ||||
|  | ||||
| func (lx *lexer) pop() stateFn { | ||||
| 	if len(lx.stack) == 0 { | ||||
| 		return lx.errorf("BUG in lexer: no states to pop.") | ||||
| 		return lx.errorf("BUG in lexer: no states to pop") | ||||
| 	} | ||||
| 	last := lx.stack[len(lx.stack)-1] | ||||
| 	lx.stack = lx.stack[0 : len(lx.stack)-1] | ||||
| @@ -125,16 +136,25 @@ func (lx *lexer) emitTrim(typ itemType) { | ||||
| } | ||||
|  | ||||
| func (lx *lexer) next() (r rune) { | ||||
| 	if lx.atEOF { | ||||
| 		panic("next called after EOF") | ||||
| 	} | ||||
| 	if lx.pos >= len(lx.input) { | ||||
| 		lx.width = 0 | ||||
| 		lx.atEOF = true | ||||
| 		return eof | ||||
| 	} | ||||
|  | ||||
| 	if lx.input[lx.pos] == '\n' { | ||||
| 		lx.line++ | ||||
| 	} | ||||
| 	r, lx.width = utf8.DecodeRuneInString(lx.input[lx.pos:]) | ||||
| 	lx.pos += lx.width | ||||
| 	lx.prevWidths[2] = lx.prevWidths[1] | ||||
| 	lx.prevWidths[1] = lx.prevWidths[0] | ||||
| 	if lx.nprev < 3 { | ||||
| 		lx.nprev++ | ||||
| 	} | ||||
| 	r, w := utf8.DecodeRuneInString(lx.input[lx.pos:]) | ||||
| 	lx.prevWidths[0] = w | ||||
| 	lx.pos += w | ||||
| 	return r | ||||
| } | ||||
|  | ||||
| @@ -143,9 +163,20 @@ func (lx *lexer) ignore() { | ||||
| 	lx.start = lx.pos | ||||
| } | ||||
|  | ||||
| // backup steps back one rune. Can be called only once per call of next. | ||||
| // backup steps back one rune. Can be called only twice between calls to next. | ||||
| func (lx *lexer) backup() { | ||||
| 	lx.pos -= lx.width | ||||
| 	if lx.atEOF { | ||||
| 		lx.atEOF = false | ||||
| 		return | ||||
| 	} | ||||
| 	if lx.nprev < 1 { | ||||
| 		panic("backed up too far") | ||||
| 	} | ||||
| 	w := lx.prevWidths[0] | ||||
| 	lx.prevWidths[0] = lx.prevWidths[1] | ||||
| 	lx.prevWidths[1] = lx.prevWidths[2] | ||||
| 	lx.nprev-- | ||||
| 	lx.pos -= w | ||||
| 	if lx.pos < len(lx.input) && lx.input[lx.pos] == '\n' { | ||||
| 		lx.line-- | ||||
| 	} | ||||
| @@ -182,7 +213,7 @@ func (lx *lexer) skip(pred func(rune) bool) { | ||||
|  | ||||
| // errorf stops all lexing by emitting an error and returning `nil`. | ||||
| // Note that any value that is a character is escaped if it's a special | ||||
| // character (new lines, tabs, etc.). | ||||
| // character (newlines, tabs, etc.). | ||||
| func (lx *lexer) errorf(format string, values ...interface{}) stateFn { | ||||
| 	lx.items <- item{ | ||||
| 		itemError, | ||||
| @@ -198,7 +229,6 @@ func lexTop(lx *lexer) stateFn { | ||||
| 	if isWhitespace(r) || isNL(r) { | ||||
| 		return lexSkip(lx, lexTop) | ||||
| 	} | ||||
|  | ||||
| 	switch r { | ||||
| 	case commentStart: | ||||
| 		lx.push(lexTop) | ||||
| @@ -207,7 +237,7 @@ func lexTop(lx *lexer) stateFn { | ||||
| 		return lexTableStart | ||||
| 	case eof: | ||||
| 		if lx.pos > lx.start { | ||||
| 			return lx.errorf("Unexpected EOF.") | ||||
| 			return lx.errorf("unexpected EOF") | ||||
| 		} | ||||
| 		lx.emit(itemEOF) | ||||
| 		return nil | ||||
| @@ -222,12 +252,12 @@ func lexTop(lx *lexer) stateFn { | ||||
|  | ||||
| // lexTopEnd is entered whenever a top-level item has been consumed. (A value | ||||
| // or a table.) It must see only whitespace, and will turn back to lexTop | ||||
| // upon a new line. If it sees EOF, it will quit the lexer successfully. | ||||
| // upon a newline. If it sees EOF, it will quit the lexer successfully. | ||||
| func lexTopEnd(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| 	case r == commentStart: | ||||
| 		// a comment will read to a new line for us. | ||||
| 		// a comment will read to a newline for us. | ||||
| 		lx.push(lexTop) | ||||
| 		return lexCommentStart | ||||
| 	case isWhitespace(r): | ||||
| @@ -236,11 +266,11 @@ func lexTopEnd(lx *lexer) stateFn { | ||||
| 		lx.ignore() | ||||
| 		return lexTop | ||||
| 	case r == eof: | ||||
| 		lx.ignore() | ||||
| 		return lexTop | ||||
| 		lx.emit(itemEOF) | ||||
| 		return nil | ||||
| 	} | ||||
| 	return lx.errorf("Expected a top-level item to end with a new line, "+ | ||||
| 		"comment or EOF, but got %q instead.", r) | ||||
| 	return lx.errorf("expected a top-level item to end with a newline, "+ | ||||
| 		"comment, or EOF, but got %q instead", r) | ||||
| } | ||||
|  | ||||
| // lexTable lexes the beginning of a table. Namely, it makes sure that | ||||
| @@ -267,8 +297,8 @@ func lexTableEnd(lx *lexer) stateFn { | ||||
|  | ||||
| func lexArrayTableEnd(lx *lexer) stateFn { | ||||
| 	if r := lx.next(); r != arrayTableEnd { | ||||
| 		return lx.errorf("Expected end of table array name delimiter %q, "+ | ||||
| 			"but got %q instead.", arrayTableEnd, r) | ||||
| 		return lx.errorf("expected end of table array name delimiter %q, "+ | ||||
| 			"but got %q instead", arrayTableEnd, r) | ||||
| 	} | ||||
| 	lx.emit(itemArrayTableEnd) | ||||
| 	return lexTopEnd | ||||
| @@ -278,11 +308,11 @@ func lexTableNameStart(lx *lexer) stateFn { | ||||
| 	lx.skip(isWhitespace) | ||||
| 	switch r := lx.peek(); { | ||||
| 	case r == tableEnd || r == eof: | ||||
| 		return lx.errorf("Unexpected end of table name. (Table names cannot " + | ||||
| 			"be empty.)") | ||||
| 		return lx.errorf("unexpected end of table name " + | ||||
| 			"(table names cannot be empty)") | ||||
| 	case r == tableSep: | ||||
| 		return lx.errorf("Unexpected table separator. (Table names cannot " + | ||||
| 			"be empty.)") | ||||
| 		return lx.errorf("unexpected table separator " + | ||||
| 			"(table names cannot be empty)") | ||||
| 	case r == stringStart || r == rawStringStart: | ||||
| 		lx.ignore() | ||||
| 		lx.push(lexTableNameEnd) | ||||
| @@ -317,8 +347,8 @@ func lexTableNameEnd(lx *lexer) stateFn { | ||||
| 	case r == tableEnd: | ||||
| 		return lx.pop() | ||||
| 	default: | ||||
| 		return lx.errorf("Expected '.' or ']' to end table name, but got %q "+ | ||||
| 			"instead.", r) | ||||
| 		return lx.errorf("expected '.' or ']' to end table name, "+ | ||||
| 			"but got %q instead", r) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -328,7 +358,7 @@ func lexKeyStart(lx *lexer) stateFn { | ||||
| 	r := lx.peek() | ||||
| 	switch { | ||||
| 	case r == keySep: | ||||
| 		return lx.errorf("Unexpected key separator %q.", keySep) | ||||
| 		return lx.errorf("unexpected key separator %q", keySep) | ||||
| 	case isWhitespace(r) || isNL(r): | ||||
| 		lx.next() | ||||
| 		return lexSkip(lx, lexKeyStart) | ||||
| @@ -359,7 +389,7 @@ func lexBareKey(lx *lexer) stateFn { | ||||
| 		lx.emit(itemText) | ||||
| 		return lexKeyEnd | ||||
| 	default: | ||||
| 		return lx.errorf("Bare keys cannot contain %q.", r) | ||||
| 		return lx.errorf("bare keys cannot contain %q", r) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| @@ -372,7 +402,7 @@ func lexKeyEnd(lx *lexer) stateFn { | ||||
| 	case isWhitespace(r): | ||||
| 		return lexSkip(lx, lexKeyEnd) | ||||
| 	default: | ||||
| 		return lx.errorf("Expected key separator %q, but got %q instead.", | ||||
| 		return lx.errorf("expected key separator %q, but got %q instead", | ||||
| 			keySep, r) | ||||
| 	} | ||||
| } | ||||
| @@ -381,9 +411,8 @@ func lexKeyEnd(lx *lexer) stateFn { | ||||
| // lexValue will ignore whitespace. | ||||
| // After a value is lexed, the last state on the next is popped and returned. | ||||
| func lexValue(lx *lexer) stateFn { | ||||
| 	// We allow whitespace to precede a value, but NOT new lines. | ||||
| 	// In array syntax, the array states are responsible for ignoring new | ||||
| 	// lines. | ||||
| 	// We allow whitespace to precede a value, but NOT newlines. | ||||
| 	// In array syntax, the array states are responsible for ignoring newlines. | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| 	case isWhitespace(r): | ||||
| @@ -397,6 +426,10 @@ func lexValue(lx *lexer) stateFn { | ||||
| 		lx.ignore() | ||||
| 		lx.emit(itemArray) | ||||
| 		return lexArrayValue | ||||
| 	case inlineTableStart: | ||||
| 		lx.ignore() | ||||
| 		lx.emit(itemInlineTableStart) | ||||
| 		return lexInlineTableValue | ||||
| 	case stringStart: | ||||
| 		if lx.accept(stringStart) { | ||||
| 			if lx.accept(stringStart) { | ||||
| @@ -420,7 +453,7 @@ func lexValue(lx *lexer) stateFn { | ||||
| 	case '+', '-': | ||||
| 		return lexNumberStart | ||||
| 	case '.': // special error case, be kind to users | ||||
| 		return lx.errorf("Floats must start with a digit, not '.'.") | ||||
| 		return lx.errorf("floats must start with a digit, not '.'") | ||||
| 	} | ||||
| 	if unicode.IsLetter(r) { | ||||
| 		// Be permissive here; lexBool will give a nice error if the | ||||
| @@ -430,11 +463,11 @@ func lexValue(lx *lexer) stateFn { | ||||
| 		lx.backup() | ||||
| 		return lexBool | ||||
| 	} | ||||
| 	return lx.errorf("Expected value but found %q instead.", r) | ||||
| 	return lx.errorf("expected value but found %q instead", r) | ||||
| } | ||||
|  | ||||
| // lexArrayValue consumes one value in an array. It assumes that '[' or ',' | ||||
| // have already been consumed. All whitespace and new lines are ignored. | ||||
| // have already been consumed. All whitespace and newlines are ignored. | ||||
| func lexArrayValue(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| @@ -443,10 +476,11 @@ func lexArrayValue(lx *lexer) stateFn { | ||||
| 	case r == commentStart: | ||||
| 		lx.push(lexArrayValue) | ||||
| 		return lexCommentStart | ||||
| 	case r == arrayValTerm: | ||||
| 		return lx.errorf("Unexpected array value terminator %q.", | ||||
| 			arrayValTerm) | ||||
| 	case r == comma: | ||||
| 		return lx.errorf("unexpected comma") | ||||
| 	case r == arrayEnd: | ||||
| 		// NOTE(caleb): The spec isn't clear about whether you can have | ||||
| 		// a trailing comma or not, so we'll allow it. | ||||
| 		return lexArrayEnd | ||||
| 	} | ||||
|  | ||||
| @@ -455,8 +489,9 @@ func lexArrayValue(lx *lexer) stateFn { | ||||
| 	return lexValue | ||||
| } | ||||
|  | ||||
| // lexArrayValueEnd consumes the cruft between values of an array. Namely, | ||||
| // it ignores whitespace and expects either a ',' or a ']'. | ||||
| // lexArrayValueEnd consumes everything between the end of an array value and | ||||
| // the next value (or the end of the array): it ignores whitespace and newlines | ||||
| // and expects either a ',' or a ']'. | ||||
| func lexArrayValueEnd(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| @@ -465,31 +500,88 @@ func lexArrayValueEnd(lx *lexer) stateFn { | ||||
| 	case r == commentStart: | ||||
| 		lx.push(lexArrayValueEnd) | ||||
| 		return lexCommentStart | ||||
| 	case r == arrayValTerm: | ||||
| 	case r == comma: | ||||
| 		lx.ignore() | ||||
| 		return lexArrayValue // move on to the next value | ||||
| 	case r == arrayEnd: | ||||
| 		return lexArrayEnd | ||||
| 	} | ||||
| 	return lx.errorf("Expected an array value terminator %q or an array "+ | ||||
| 		"terminator %q, but got %q instead.", arrayValTerm, arrayEnd, r) | ||||
| 	return lx.errorf( | ||||
| 		"expected a comma or array terminator %q, but got %q instead", | ||||
| 		arrayEnd, r, | ||||
| 	) | ||||
| } | ||||
|  | ||||
| // lexArrayEnd finishes the lexing of an array. It assumes that a ']' has | ||||
| // just been consumed. | ||||
| // lexArrayEnd finishes the lexing of an array. | ||||
| // It assumes that a ']' has just been consumed. | ||||
| func lexArrayEnd(lx *lexer) stateFn { | ||||
| 	lx.ignore() | ||||
| 	lx.emit(itemArrayEnd) | ||||
| 	return lx.pop() | ||||
| } | ||||
|  | ||||
| // lexInlineTableValue consumes one key/value pair in an inline table. | ||||
| // It assumes that '{' or ',' have already been consumed. Whitespace is ignored. | ||||
| func lexInlineTableValue(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| 	case isWhitespace(r): | ||||
| 		return lexSkip(lx, lexInlineTableValue) | ||||
| 	case isNL(r): | ||||
| 		return lx.errorf("newlines not allowed within inline tables") | ||||
| 	case r == commentStart: | ||||
| 		lx.push(lexInlineTableValue) | ||||
| 		return lexCommentStart | ||||
| 	case r == comma: | ||||
| 		return lx.errorf("unexpected comma") | ||||
| 	case r == inlineTableEnd: | ||||
| 		return lexInlineTableEnd | ||||
| 	} | ||||
| 	lx.backup() | ||||
| 	lx.push(lexInlineTableValueEnd) | ||||
| 	return lexKeyStart | ||||
| } | ||||
|  | ||||
| // lexInlineTableValueEnd consumes everything between the end of an inline table | ||||
| // key/value pair and the next pair (or the end of the table): | ||||
| // it ignores whitespace and expects either a ',' or a '}'. | ||||
| func lexInlineTableValueEnd(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| 	case isWhitespace(r): | ||||
| 		return lexSkip(lx, lexInlineTableValueEnd) | ||||
| 	case isNL(r): | ||||
| 		return lx.errorf("newlines not allowed within inline tables") | ||||
| 	case r == commentStart: | ||||
| 		lx.push(lexInlineTableValueEnd) | ||||
| 		return lexCommentStart | ||||
| 	case r == comma: | ||||
| 		lx.ignore() | ||||
| 		return lexInlineTableValue | ||||
| 	case r == inlineTableEnd: | ||||
| 		return lexInlineTableEnd | ||||
| 	} | ||||
| 	return lx.errorf("expected a comma or an inline table terminator %q, "+ | ||||
| 		"but got %q instead", inlineTableEnd, r) | ||||
| } | ||||
|  | ||||
| // lexInlineTableEnd finishes the lexing of an inline table. | ||||
| // It assumes that a '}' has just been consumed. | ||||
| func lexInlineTableEnd(lx *lexer) stateFn { | ||||
| 	lx.ignore() | ||||
| 	lx.emit(itemInlineTableEnd) | ||||
| 	return lx.pop() | ||||
| } | ||||
|  | ||||
| // lexString consumes the inner contents of a string. It assumes that the | ||||
| // beginning '"' has already been consumed and ignored. | ||||
| func lexString(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| 	case r == eof: | ||||
| 		return lx.errorf("unexpected EOF") | ||||
| 	case isNL(r): | ||||
| 		return lx.errorf("Strings cannot contain new lines.") | ||||
| 		return lx.errorf("strings cannot contain newlines") | ||||
| 	case r == '\\': | ||||
| 		lx.push(lexString) | ||||
| 		return lexStringEscape | ||||
| @@ -506,11 +598,12 @@ func lexString(lx *lexer) stateFn { | ||||
| // lexMultilineString consumes the inner contents of a string. It assumes that | ||||
| // the beginning '"""' has already been consumed and ignored. | ||||
| func lexMultilineString(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| 	case r == '\\': | ||||
| 	switch lx.next() { | ||||
| 	case eof: | ||||
| 		return lx.errorf("unexpected EOF") | ||||
| 	case '\\': | ||||
| 		return lexMultilineStringEscape | ||||
| 	case r == stringEnd: | ||||
| 	case stringEnd: | ||||
| 		if lx.accept(stringEnd) { | ||||
| 			if lx.accept(stringEnd) { | ||||
| 				lx.backup() | ||||
| @@ -534,8 +627,10 @@ func lexMultilineString(lx *lexer) stateFn { | ||||
| func lexRawString(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| 	case r == eof: | ||||
| 		return lx.errorf("unexpected EOF") | ||||
| 	case isNL(r): | ||||
| 		return lx.errorf("Strings cannot contain new lines.") | ||||
| 		return lx.errorf("strings cannot contain newlines") | ||||
| 	case r == rawStringEnd: | ||||
| 		lx.backup() | ||||
| 		lx.emit(itemRawString) | ||||
| @@ -547,12 +642,13 @@ func lexRawString(lx *lexer) stateFn { | ||||
| } | ||||
|  | ||||
| // lexMultilineRawString consumes a raw string. Nothing can be escaped in such | ||||
| // a string. It assumes that the beginning "'" has already been consumed and | ||||
| // a string. It assumes that the beginning "'''" has already been consumed and | ||||
| // ignored. | ||||
| func lexMultilineRawString(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	switch { | ||||
| 	case r == rawStringEnd: | ||||
| 	switch lx.next() { | ||||
| 	case eof: | ||||
| 		return lx.errorf("unexpected EOF") | ||||
| 	case rawStringEnd: | ||||
| 		if lx.accept(rawStringEnd) { | ||||
| 			if lx.accept(rawStringEnd) { | ||||
| 				lx.backup() | ||||
| @@ -605,10 +701,9 @@ func lexStringEscape(lx *lexer) stateFn { | ||||
| 	case 'U': | ||||
| 		return lexLongUnicodeEscape | ||||
| 	} | ||||
| 	return lx.errorf("Invalid escape character %q. Only the following "+ | ||||
| 	return lx.errorf("invalid escape character %q; only the following "+ | ||||
| 		"escape characters are allowed: "+ | ||||
| 		"\\b, \\t, \\n, \\f, \\r, \\\", \\/, \\\\, "+ | ||||
| 		"\\uXXXX and \\UXXXXXXXX.", r) | ||||
| 		`\b, \t, \n, \f, \r, \", \\, \uXXXX, and \UXXXXXXXX`, r) | ||||
| } | ||||
|  | ||||
| func lexShortUnicodeEscape(lx *lexer) stateFn { | ||||
| @@ -616,8 +711,8 @@ func lexShortUnicodeEscape(lx *lexer) stateFn { | ||||
| 	for i := 0; i < 4; i++ { | ||||
| 		r = lx.next() | ||||
| 		if !isHexadecimal(r) { | ||||
| 			return lx.errorf("Expected four hexadecimal digits after '\\u', "+ | ||||
| 				"but got '%s' instead.", lx.current()) | ||||
| 			return lx.errorf(`expected four hexadecimal digits after '\u', `+ | ||||
| 				"but got %q instead", lx.current()) | ||||
| 		} | ||||
| 	} | ||||
| 	return lx.pop() | ||||
| @@ -628,8 +723,8 @@ func lexLongUnicodeEscape(lx *lexer) stateFn { | ||||
| 	for i := 0; i < 8; i++ { | ||||
| 		r = lx.next() | ||||
| 		if !isHexadecimal(r) { | ||||
| 			return lx.errorf("Expected eight hexadecimal digits after '\\U', "+ | ||||
| 				"but got '%s' instead.", lx.current()) | ||||
| 			return lx.errorf(`expected eight hexadecimal digits after '\U', `+ | ||||
| 				"but got %q instead", lx.current()) | ||||
| 		} | ||||
| 	} | ||||
| 	return lx.pop() | ||||
| @@ -647,9 +742,9 @@ func lexNumberOrDateStart(lx *lexer) stateFn { | ||||
| 	case 'e', 'E': | ||||
| 		return lexFloat | ||||
| 	case '.': | ||||
| 		return lx.errorf("Floats must start with a digit, not '.'.") | ||||
| 		return lx.errorf("floats must start with a digit, not '.'") | ||||
| 	} | ||||
| 	return lx.errorf("Expected a digit but got %q.", r) | ||||
| 	return lx.errorf("expected a digit but got %q", r) | ||||
| } | ||||
|  | ||||
| // lexNumberOrDate consumes either an integer, float or datetime. | ||||
| @@ -697,9 +792,9 @@ func lexNumberStart(lx *lexer) stateFn { | ||||
| 	r := lx.next() | ||||
| 	if !isDigit(r) { | ||||
| 		if r == '.' { | ||||
| 			return lx.errorf("Floats must start with a digit, not '.'.") | ||||
| 			return lx.errorf("floats must start with a digit, not '.'") | ||||
| 		} | ||||
| 		return lx.errorf("Expected a digit but got %q.", r) | ||||
| 		return lx.errorf("expected a digit but got %q", r) | ||||
| 	} | ||||
| 	return lexNumber | ||||
| } | ||||
| @@ -757,7 +852,7 @@ func lexBool(lx *lexer) stateFn { | ||||
| 		lx.emit(itemBool) | ||||
| 		return lx.pop() | ||||
| 	} | ||||
| 	return lx.errorf("Expected value but found %q instead.", s) | ||||
| 	return lx.errorf("expected value but found %q instead", s) | ||||
| } | ||||
|  | ||||
| // lexCommentStart begins the lexing of a comment. It will emit | ||||
| @@ -769,7 +864,7 @@ func lexCommentStart(lx *lexer) stateFn { | ||||
| } | ||||
|  | ||||
| // lexComment lexes an entire comment. It assumes that '#' has been consumed. | ||||
| // It will consume *up to* the first new line character, and pass control | ||||
| // It will consume *up to* the first newline character, and pass control | ||||
| // back to the last state on the stack. | ||||
| func lexComment(lx *lexer) stateFn { | ||||
| 	r := lx.peek() | ||||
|   | ||||
							
								
								
									
										35
									
								
								vendor/github.com/BurntSushi/toml/parse.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/BurntSushi/toml/parse.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -269,6 +269,41 @@ func (p *parser) value(it item) (interface{}, tomlType) { | ||||
| 			types = append(types, typ) | ||||
| 		} | ||||
| 		return array, p.typeOfArray(types) | ||||
| 	case itemInlineTableStart: | ||||
| 		var ( | ||||
| 			hash         = make(map[string]interface{}) | ||||
| 			outerContext = p.context | ||||
| 			outerKey     = p.currentKey | ||||
| 		) | ||||
|  | ||||
| 		p.context = append(p.context, p.currentKey) | ||||
| 		p.currentKey = "" | ||||
| 		for it := p.next(); it.typ != itemInlineTableEnd; it = p.next() { | ||||
| 			if it.typ != itemKeyStart { | ||||
| 				p.bug("Expected key start but instead found %q, around line %d", | ||||
| 					it.val, p.approxLine) | ||||
| 			} | ||||
| 			if it.typ == itemCommentStart { | ||||
| 				p.expect(itemText) | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 			// retrieve key | ||||
| 			k := p.next() | ||||
| 			p.approxLine = k.line | ||||
| 			kname := p.keyString(k) | ||||
|  | ||||
| 			// retrieve value | ||||
| 			p.currentKey = kname | ||||
| 			val, typ := p.value(p.next()) | ||||
| 			// make sure we keep metadata up to date | ||||
| 			p.setType(kname, typ) | ||||
| 			p.ordered = append(p.ordered, p.context.add(p.currentKey)) | ||||
| 			hash[kname] = val | ||||
| 		} | ||||
| 		p.context = outerContext | ||||
| 		p.currentKey = outerKey | ||||
| 		return hash, tomlHash | ||||
| 	} | ||||
| 	p.bug("Unexpected value type: %s", it.typ) | ||||
| 	panic("unreachable") | ||||
|   | ||||
							
								
								
									
										26
									
								
								vendor/github.com/Philipp15b/go-steam/LICENSE.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/Philipp15b/go-steam/LICENSE.txt
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| Copyright (c) 2014 The go-steam Authors. All rights reserved. | ||||
|  | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions are | ||||
| met: | ||||
|  | ||||
|    * Redistributions of source code must retain the above copyright | ||||
| notice, this list of conditions and the following disclaimer. | ||||
|    * Redistributions in binary form must reproduce the above | ||||
| copyright notice, this list of conditions and the following disclaimer | ||||
| in the documentation and/or other materials provided with the | ||||
| distribution. | ||||
|    * The names of its contributors may not be used to endorse or promote | ||||
| products derived from this software without specific prior written permission. | ||||
|  | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||||
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||||
| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||||
| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||||
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||||
| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
							
								
								
									
										178
									
								
								vendor/github.com/Philipp15b/go-steam/auth.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								vendor/github.com/Philipp15b/go-steam/auth.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,178 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"crypto/sha1" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/protobuf" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"sync/atomic" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| type Auth struct { | ||||
| 	client  *Client | ||||
| 	details *LogOnDetails | ||||
| } | ||||
|  | ||||
| type SentryHash []byte | ||||
|  | ||||
| type LogOnDetails struct { | ||||
| 	Username       string | ||||
| 	Password       string | ||||
| 	AuthCode       string | ||||
| 	TwoFactorCode  string | ||||
| 	SentryFileHash SentryHash | ||||
| } | ||||
|  | ||||
| // Log on with the given details. You must always specify username and | ||||
| // password. For the first login, don't set an authcode or a hash and you'll receive an error | ||||
| // and Steam will send you an authcode. Then you have to login again, this time with the authcode. | ||||
| // Shortly after logging in, you'll receive a MachineAuthUpdateEvent with a hash which allows | ||||
| // you to login without using an authcode in the future. | ||||
| // | ||||
| // If you don't use Steam Guard, username and password are enough. | ||||
| func (a *Auth) LogOn(details *LogOnDetails) { | ||||
| 	if len(details.Username) == 0 || len(details.Password) == 0 { | ||||
| 		panic("Username and password must be set!") | ||||
| 	} | ||||
|  | ||||
| 	logon := new(CMsgClientLogon) | ||||
| 	logon.AccountName = &details.Username | ||||
| 	logon.Password = &details.Password | ||||
| 	if details.AuthCode != "" { | ||||
| 		logon.AuthCode = proto.String(details.AuthCode) | ||||
| 	} | ||||
| 	if details.TwoFactorCode != "" { | ||||
| 		logon.TwoFactorCode = proto.String(details.TwoFactorCode) | ||||
| 	} | ||||
| 	logon.ClientLanguage = proto.String("english") | ||||
| 	logon.ProtocolVersion = proto.Uint32(MsgClientLogon_CurrentProtocol) | ||||
| 	logon.ShaSentryfile = details.SentryFileHash | ||||
|  | ||||
| 	atomic.StoreUint64(&a.client.steamId, uint64(NewIdAdv(0, 1, int32(EUniverse_Public), int32(EAccountType_Individual)))) | ||||
|  | ||||
| 	a.client.Write(NewClientMsgProtobuf(EMsg_ClientLogon, logon)) | ||||
| } | ||||
|  | ||||
| func (a *Auth) HandlePacket(packet *Packet) { | ||||
| 	switch packet.EMsg { | ||||
| 	case EMsg_ClientLogOnResponse: | ||||
| 		a.handleLogOnResponse(packet) | ||||
| 	case EMsg_ClientNewLoginKey: | ||||
| 		a.handleLoginKey(packet) | ||||
| 	case EMsg_ClientSessionToken: | ||||
| 	case EMsg_ClientLoggedOff: | ||||
| 		a.handleLoggedOff(packet) | ||||
| 	case EMsg_ClientUpdateMachineAuth: | ||||
| 		a.handleUpdateMachineAuth(packet) | ||||
| 	case EMsg_ClientAccountInfo: | ||||
| 		a.handleAccountInfo(packet) | ||||
| 	case EMsg_ClientWalletInfoUpdate: | ||||
| 	case EMsg_ClientRequestWebAPIAuthenticateUserNonceResponse: | ||||
| 	case EMsg_ClientMarketingMessageUpdate: | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (a *Auth) handleLogOnResponse(packet *Packet) { | ||||
| 	if !packet.IsProto { | ||||
| 		a.client.Fatalf("Got non-proto logon response!") | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	body := new(CMsgClientLogonResponse) | ||||
| 	msg := packet.ReadProtoMsg(body) | ||||
|  | ||||
| 	result := EResult(body.GetEresult()) | ||||
| 	if result == EResult_OK { | ||||
| 		atomic.StoreInt32(&a.client.sessionId, msg.Header.Proto.GetClientSessionid()) | ||||
| 		atomic.StoreUint64(&a.client.steamId, msg.Header.Proto.GetSteamid()) | ||||
| 		a.client.Web.webLoginKey = *body.WebapiAuthenticateUserNonce | ||||
|  | ||||
| 		go a.client.heartbeatLoop(time.Duration(body.GetOutOfGameHeartbeatSeconds())) | ||||
|  | ||||
| 		a.client.Emit(&LoggedOnEvent{ | ||||
| 			Result:                    EResult(body.GetEresult()), | ||||
| 			ExtendedResult:            EResult(body.GetEresultExtended()), | ||||
| 			OutOfGameSecsPerHeartbeat: body.GetOutOfGameHeartbeatSeconds(), | ||||
| 			InGameSecsPerHeartbeat:    body.GetInGameHeartbeatSeconds(), | ||||
| 			PublicIp:                  body.GetPublicIp(), | ||||
| 			ServerTime:                body.GetRtime32ServerTime(), | ||||
| 			AccountFlags:              EAccountFlags(body.GetAccountFlags()), | ||||
| 			ClientSteamId:             SteamId(body.GetClientSuppliedSteamid()), | ||||
| 			EmailDomain:               body.GetEmailDomain(), | ||||
| 			CellId:                    body.GetCellId(), | ||||
| 			CellIdPingThreshold:       body.GetCellIdPingThreshold(), | ||||
| 			Steam2Ticket:              body.GetSteam2Ticket(), | ||||
| 			UsePics:                   body.GetUsePics(), | ||||
| 			WebApiUserNonce:           body.GetWebapiAuthenticateUserNonce(), | ||||
| 			IpCountryCode:             body.GetIpCountryCode(), | ||||
| 			VanityUrl:                 body.GetVanityUrl(), | ||||
| 			NumLoginFailuresToMigrate: body.GetCountLoginfailuresToMigrate(), | ||||
| 			NumDisconnectsToMigrate:   body.GetCountDisconnectsToMigrate(), | ||||
| 		}) | ||||
| 	} else if result == EResult_Fail || result == EResult_ServiceUnavailable || result == EResult_TryAnotherCM { | ||||
| 		// some error on Steam's side, we'll get an EOF later | ||||
| 	} else { | ||||
| 		a.client.Emit(&LogOnFailedEvent{ | ||||
| 			Result: EResult(body.GetEresult()), | ||||
| 		}) | ||||
| 		a.client.Disconnect() | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (a *Auth) handleLoginKey(packet *Packet) { | ||||
| 	body := new(CMsgClientNewLoginKey) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	a.client.Write(NewClientMsgProtobuf(EMsg_ClientNewLoginKeyAccepted, &CMsgClientNewLoginKeyAccepted{ | ||||
| 		UniqueId: proto.Uint32(body.GetUniqueId()), | ||||
| 	})) | ||||
| 	a.client.Emit(&LoginKeyEvent{ | ||||
| 		UniqueId: body.GetUniqueId(), | ||||
| 		LoginKey: body.GetLoginKey(), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (a *Auth) handleLoggedOff(packet *Packet) { | ||||
| 	result := EResult_Invalid | ||||
| 	if packet.IsProto { | ||||
| 		body := new(CMsgClientLoggedOff) | ||||
| 		packet.ReadProtoMsg(body) | ||||
| 		result = EResult(body.GetEresult()) | ||||
| 	} else { | ||||
| 		body := new(MsgClientLoggedOff) | ||||
| 		packet.ReadClientMsg(body) | ||||
| 		result = body.Result | ||||
| 	} | ||||
| 	a.client.Emit(&LoggedOffEvent{Result: result}) | ||||
| } | ||||
|  | ||||
| func (a *Auth) handleUpdateMachineAuth(packet *Packet) { | ||||
| 	body := new(CMsgClientUpdateMachineAuth) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	hash := sha1.New() | ||||
| 	hash.Write(packet.Data) | ||||
| 	sha := hash.Sum(nil) | ||||
|  | ||||
| 	msg := NewClientMsgProtobuf(EMsg_ClientUpdateMachineAuthResponse, &CMsgClientUpdateMachineAuthResponse{ | ||||
| 		ShaFile: sha, | ||||
| 	}) | ||||
| 	msg.SetTargetJobId(packet.SourceJobId) | ||||
| 	a.client.Write(msg) | ||||
|  | ||||
| 	a.client.Emit(&MachineAuthUpdateEvent{sha}) | ||||
| } | ||||
|  | ||||
| func (a *Auth) handleAccountInfo(packet *Packet) { | ||||
| 	body := new(CMsgClientAccountInfo) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	a.client.Emit(&AccountInfoEvent{ | ||||
| 		PersonaName:          body.GetPersonaName(), | ||||
| 		Country:              body.GetIpCountry(), | ||||
| 		CountAuthedComputers: body.GetCountAuthedComputers(), | ||||
| 		AccountFlags:         EAccountFlags(body.GetAccountFlags()), | ||||
| 		FacebookId:           body.GetFacebookId(), | ||||
| 		FacebookName:         body.GetFacebookName(), | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										53
									
								
								vendor/github.com/Philipp15b/go-steam/auth_events.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/github.com/Philipp15b/go-steam/auth_events.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| ) | ||||
|  | ||||
| type LoggedOnEvent struct { | ||||
| 	Result                    EResult | ||||
| 	ExtendedResult            EResult | ||||
| 	OutOfGameSecsPerHeartbeat int32 | ||||
| 	InGameSecsPerHeartbeat    int32 | ||||
| 	PublicIp                  uint32 | ||||
| 	ServerTime                uint32 | ||||
| 	AccountFlags              EAccountFlags | ||||
| 	ClientSteamId             SteamId `json:",string"` | ||||
| 	EmailDomain               string | ||||
| 	CellId                    uint32 | ||||
| 	CellIdPingThreshold       uint32 | ||||
| 	Steam2Ticket              []byte | ||||
| 	UsePics                   bool | ||||
| 	WebApiUserNonce           string | ||||
| 	IpCountryCode             string | ||||
| 	VanityUrl                 string | ||||
| 	NumLoginFailuresToMigrate int32 | ||||
| 	NumDisconnectsToMigrate   int32 | ||||
| } | ||||
|  | ||||
| type LogOnFailedEvent struct { | ||||
| 	Result EResult | ||||
| } | ||||
|  | ||||
| type LoginKeyEvent struct { | ||||
| 	UniqueId uint32 | ||||
| 	LoginKey string | ||||
| } | ||||
|  | ||||
| type LoggedOffEvent struct { | ||||
| 	Result EResult | ||||
| } | ||||
|  | ||||
| type MachineAuthUpdateEvent struct { | ||||
| 	Hash []byte | ||||
| } | ||||
|  | ||||
| type AccountInfoEvent struct { | ||||
| 	PersonaName          string | ||||
| 	Country              string | ||||
| 	CountAuthedComputers int32 | ||||
| 	AccountFlags         EAccountFlags | ||||
| 	FacebookId           uint64 `json:",string"` | ||||
| 	FacebookName         string | ||||
| } | ||||
							
								
								
									
										383
									
								
								vendor/github.com/Philipp15b/go-steam/client.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										383
									
								
								vendor/github.com/Philipp15b/go-steam/client.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,383 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"compress/gzip" | ||||
| 	"crypto/rand" | ||||
| 	"encoding/binary" | ||||
| 	"fmt" | ||||
| 	"hash/crc32" | ||||
| 	"io/ioutil" | ||||
| 	"net" | ||||
| 	"sync" | ||||
| 	"sync/atomic" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/Philipp15b/go-steam/cryptoutil" | ||||
| 	"github.com/Philipp15b/go-steam/netutil" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/protobuf" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| ) | ||||
|  | ||||
| // Represents a client to the Steam network. | ||||
| // Always poll events from the channel returned by Events() or receiving messages will stop. | ||||
| // All access, unless otherwise noted, should be threadsafe. | ||||
| // | ||||
| // When a FatalErrorEvent is emitted, the connection is automatically closed. The same client can be used to reconnect. | ||||
| // Other errors don't have any effect. | ||||
| type Client struct { | ||||
| 	// these need to be 64 bit aligned for sync/atomic on 32bit | ||||
| 	sessionId    int32 | ||||
| 	_            uint32 | ||||
| 	steamId      uint64 | ||||
| 	currentJobId uint64 | ||||
|  | ||||
| 	Auth          *Auth | ||||
| 	Social        *Social | ||||
| 	Web           *Web | ||||
| 	Notifications *Notifications | ||||
| 	Trading       *Trading | ||||
| 	GC            *GameCoordinator | ||||
|  | ||||
| 	events        chan interface{} | ||||
| 	handlers      []PacketHandler | ||||
| 	handlersMutex sync.RWMutex | ||||
|  | ||||
| 	tempSessionKey []byte | ||||
|  | ||||
| 	ConnectionTimeout time.Duration | ||||
|  | ||||
| 	mutex     sync.RWMutex // guarding conn and writeChan | ||||
| 	conn      connection | ||||
| 	writeChan chan IMsg | ||||
| 	writeBuf  *bytes.Buffer | ||||
| 	heartbeat *time.Ticker | ||||
| } | ||||
|  | ||||
| type PacketHandler interface { | ||||
| 	HandlePacket(*Packet) | ||||
| } | ||||
|  | ||||
| func NewClient() *Client { | ||||
| 	client := &Client{ | ||||
| 		events:   make(chan interface{}, 3), | ||||
| 		writeBuf: new(bytes.Buffer), | ||||
| 	} | ||||
| 	client.Auth = &Auth{client: client} | ||||
| 	client.RegisterPacketHandler(client.Auth) | ||||
| 	client.Social = newSocial(client) | ||||
| 	client.RegisterPacketHandler(client.Social) | ||||
| 	client.Web = &Web{client: client} | ||||
| 	client.RegisterPacketHandler(client.Web) | ||||
| 	client.Notifications = newNotifications(client) | ||||
| 	client.RegisterPacketHandler(client.Notifications) | ||||
| 	client.Trading = &Trading{client: client} | ||||
| 	client.RegisterPacketHandler(client.Trading) | ||||
| 	client.GC = newGC(client) | ||||
| 	client.RegisterPacketHandler(client.GC) | ||||
| 	return client | ||||
| } | ||||
|  | ||||
| // Get the event channel. By convention all events are pointers, except for errors. | ||||
| // It is never closed. | ||||
| func (c *Client) Events() <-chan interface{} { | ||||
| 	return c.events | ||||
| } | ||||
|  | ||||
| func (c *Client) Emit(event interface{}) { | ||||
| 	c.events <- event | ||||
| } | ||||
|  | ||||
| // Emits a FatalErrorEvent formatted with fmt.Errorf and disconnects. | ||||
| func (c *Client) Fatalf(format string, a ...interface{}) { | ||||
| 	c.Emit(FatalErrorEvent(fmt.Errorf(format, a...))) | ||||
| 	c.Disconnect() | ||||
| } | ||||
|  | ||||
| // Emits an error formatted with fmt.Errorf. | ||||
| func (c *Client) Errorf(format string, a ...interface{}) { | ||||
| 	c.Emit(fmt.Errorf(format, a...)) | ||||
| } | ||||
|  | ||||
| // Registers a PacketHandler that receives all incoming packets. | ||||
| func (c *Client) RegisterPacketHandler(handler PacketHandler) { | ||||
| 	c.handlersMutex.Lock() | ||||
| 	defer c.handlersMutex.Unlock() | ||||
| 	c.handlers = append(c.handlers, handler) | ||||
| } | ||||
|  | ||||
| func (c *Client) GetNextJobId() JobId { | ||||
| 	return JobId(atomic.AddUint64(&c.currentJobId, 1)) | ||||
| } | ||||
|  | ||||
| func (c *Client) SteamId() SteamId { | ||||
| 	return SteamId(atomic.LoadUint64(&c.steamId)) | ||||
| } | ||||
|  | ||||
| func (c *Client) SessionId() int32 { | ||||
| 	return atomic.LoadInt32(&c.sessionId) | ||||
| } | ||||
|  | ||||
| func (c *Client) Connected() bool { | ||||
| 	c.mutex.RLock() | ||||
| 	defer c.mutex.RUnlock() | ||||
| 	return c.conn != nil | ||||
| } | ||||
|  | ||||
| // Connects to a random Steam server and returns its address. | ||||
| // If this client is already connected, it is disconnected first. | ||||
| // This method tries to use an address from the Steam Directory and falls | ||||
| // back to the built-in server list if the Steam Directory can't be reached. | ||||
| // If you want to connect to a specific server, use `ConnectTo`. | ||||
| func (c *Client) Connect() *netutil.PortAddr { | ||||
| 	var server *netutil.PortAddr | ||||
| 	if steamDirectoryCache.IsInitialized() { | ||||
| 		server = steamDirectoryCache.GetRandomCM() | ||||
| 	} else { | ||||
| 		server = GetRandomCM() | ||||
| 	} | ||||
| 	c.ConnectTo(server) | ||||
| 	return server | ||||
| } | ||||
|  | ||||
| // Connects to a specific server. | ||||
| // You may want to use one of the `GetRandom*CM()` functions in this package. | ||||
| // If this client is already connected, it is disconnected first. | ||||
| func (c *Client) ConnectTo(addr *netutil.PortAddr) { | ||||
| 	c.ConnectToBind(addr, nil) | ||||
| } | ||||
|  | ||||
| // Connects to a specific server, and binds to a specified local IP | ||||
| // If this client is already connected, it is disconnected first. | ||||
| func (c *Client) ConnectToBind(addr *netutil.PortAddr, local *net.TCPAddr) { | ||||
| 	c.Disconnect() | ||||
|  | ||||
| 	conn, err := dialTCP(local, addr.ToTCPAddr()) | ||||
| 	if err != nil { | ||||
| 		c.Fatalf("Connect failed: %v", err) | ||||
| 		return | ||||
| 	} | ||||
| 	c.conn = conn | ||||
| 	c.writeChan = make(chan IMsg, 5) | ||||
|  | ||||
| 	go c.readLoop() | ||||
| 	go c.writeLoop() | ||||
| } | ||||
|  | ||||
| func (c *Client) Disconnect() { | ||||
| 	c.mutex.Lock() | ||||
| 	defer c.mutex.Unlock() | ||||
|  | ||||
| 	if c.conn == nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	c.conn.Close() | ||||
| 	c.conn = nil | ||||
| 	if c.heartbeat != nil { | ||||
| 		c.heartbeat.Stop() | ||||
| 	} | ||||
| 	close(c.writeChan) | ||||
| 	c.Emit(&DisconnectedEvent{}) | ||||
|  | ||||
| } | ||||
|  | ||||
| // Adds a message to the send queue. Modifications to the given message after | ||||
| // writing are not allowed (possible race conditions). | ||||
| // | ||||
| // Writes to this client when not connected are ignored. | ||||
| func (c *Client) Write(msg IMsg) { | ||||
| 	if cm, ok := msg.(IClientMsg); ok { | ||||
| 		cm.SetSessionId(c.SessionId()) | ||||
| 		cm.SetSteamId(c.SteamId()) | ||||
| 	} | ||||
| 	c.mutex.RLock() | ||||
| 	defer c.mutex.RUnlock() | ||||
| 	if c.conn == nil { | ||||
| 		return | ||||
| 	} | ||||
| 	c.writeChan <- msg | ||||
| } | ||||
|  | ||||
| func (c *Client) readLoop() { | ||||
| 	for { | ||||
| 		// This *should* be atomic on most platforms, but the Go spec doesn't guarantee it | ||||
| 		c.mutex.RLock() | ||||
| 		conn := c.conn | ||||
| 		c.mutex.RUnlock() | ||||
| 		if conn == nil { | ||||
| 			return | ||||
| 		} | ||||
| 		packet, err := conn.Read() | ||||
|  | ||||
| 		if err != nil { | ||||
| 			c.Fatalf("Error reading from the connection: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		c.handlePacket(packet) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (c *Client) writeLoop() { | ||||
| 	for { | ||||
| 		c.mutex.RLock() | ||||
| 		conn := c.conn | ||||
| 		c.mutex.RUnlock() | ||||
| 		if conn == nil { | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		msg, ok := <-c.writeChan | ||||
| 		if !ok { | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		err := msg.Serialize(c.writeBuf) | ||||
| 		if err != nil { | ||||
| 			c.writeBuf.Reset() | ||||
| 			c.Fatalf("Error serializing message %v: %v", msg, err) | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		err = conn.Write(c.writeBuf.Bytes()) | ||||
|  | ||||
| 		c.writeBuf.Reset() | ||||
|  | ||||
| 		if err != nil { | ||||
| 			c.Fatalf("Error writing message %v: %v", msg, err) | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (c *Client) heartbeatLoop(seconds time.Duration) { | ||||
| 	if c.heartbeat != nil { | ||||
| 		c.heartbeat.Stop() | ||||
| 	} | ||||
| 	c.heartbeat = time.NewTicker(seconds * time.Second) | ||||
| 	for { | ||||
| 		_, ok := <-c.heartbeat.C | ||||
| 		if !ok { | ||||
| 			break | ||||
| 		} | ||||
| 		c.Write(NewClientMsgProtobuf(EMsg_ClientHeartBeat, new(CMsgClientHeartBeat))) | ||||
| 	} | ||||
| 	c.heartbeat = nil | ||||
| } | ||||
|  | ||||
| func (c *Client) handlePacket(packet *Packet) { | ||||
| 	switch packet.EMsg { | ||||
| 	case EMsg_ChannelEncryptRequest: | ||||
| 		c.handleChannelEncryptRequest(packet) | ||||
| 	case EMsg_ChannelEncryptResult: | ||||
| 		c.handleChannelEncryptResult(packet) | ||||
| 	case EMsg_Multi: | ||||
| 		c.handleMulti(packet) | ||||
| 	case EMsg_ClientCMList: | ||||
| 		c.handleClientCMList(packet) | ||||
| 	} | ||||
|  | ||||
| 	c.handlersMutex.RLock() | ||||
| 	defer c.handlersMutex.RUnlock() | ||||
| 	for _, handler := range c.handlers { | ||||
| 		handler.HandlePacket(packet) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (c *Client) handleChannelEncryptRequest(packet *Packet) { | ||||
| 	body := NewMsgChannelEncryptRequest() | ||||
| 	packet.ReadMsg(body) | ||||
|  | ||||
| 	if body.Universe != EUniverse_Public { | ||||
| 		c.Fatalf("Invalid univserse %v!", body.Universe) | ||||
| 	} | ||||
|  | ||||
| 	c.tempSessionKey = make([]byte, 32) | ||||
| 	rand.Read(c.tempSessionKey) | ||||
| 	encryptedKey := cryptoutil.RSAEncrypt(GetPublicKey(EUniverse_Public), c.tempSessionKey) | ||||
|  | ||||
| 	payload := new(bytes.Buffer) | ||||
| 	payload.Write(encryptedKey) | ||||
| 	binary.Write(payload, binary.LittleEndian, crc32.ChecksumIEEE(encryptedKey)) | ||||
| 	payload.WriteByte(0) | ||||
| 	payload.WriteByte(0) | ||||
| 	payload.WriteByte(0) | ||||
| 	payload.WriteByte(0) | ||||
|  | ||||
| 	c.Write(NewMsg(NewMsgChannelEncryptResponse(), payload.Bytes())) | ||||
| } | ||||
|  | ||||
| func (c *Client) handleChannelEncryptResult(packet *Packet) { | ||||
| 	body := NewMsgChannelEncryptResult() | ||||
| 	packet.ReadMsg(body) | ||||
|  | ||||
| 	if body.Result != EResult_OK { | ||||
| 		c.Fatalf("Encryption failed: %v", body.Result) | ||||
| 		return | ||||
| 	} | ||||
| 	c.conn.SetEncryptionKey(c.tempSessionKey) | ||||
| 	c.tempSessionKey = nil | ||||
|  | ||||
| 	c.Emit(&ConnectedEvent{}) | ||||
| } | ||||
|  | ||||
| func (c *Client) handleMulti(packet *Packet) { | ||||
| 	body := new(CMsgMulti) | ||||
| 	packet.ReadProtoMsg(body) | ||||
|  | ||||
| 	payload := body.GetMessageBody() | ||||
|  | ||||
| 	if body.GetSizeUnzipped() > 0 { | ||||
| 		r, err := gzip.NewReader(bytes.NewReader(payload)) | ||||
| 		if err != nil { | ||||
| 			c.Errorf("handleMulti: Error while decompressing: %v", err) | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		payload, err = ioutil.ReadAll(r) | ||||
| 		if err != nil { | ||||
| 			c.Errorf("handleMulti: Error while decompressing: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	pr := bytes.NewReader(payload) | ||||
| 	for pr.Len() > 0 { | ||||
| 		var length uint32 | ||||
| 		binary.Read(pr, binary.LittleEndian, &length) | ||||
| 		packetData := make([]byte, length) | ||||
| 		pr.Read(packetData) | ||||
| 		p, err := NewPacket(packetData) | ||||
| 		if err != nil { | ||||
| 			c.Errorf("Error reading packet in Multi msg %v: %v", packet, err) | ||||
| 			continue | ||||
| 		} | ||||
| 		c.handlePacket(p) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (c *Client) handleClientCMList(packet *Packet) { | ||||
| 	body := new(CMsgClientCMList) | ||||
| 	packet.ReadProtoMsg(body) | ||||
|  | ||||
| 	l := make([]*netutil.PortAddr, 0) | ||||
| 	for i, ip := range body.GetCmAddresses() { | ||||
| 		l = append(l, &netutil.PortAddr{ | ||||
| 			readIp(ip), | ||||
| 			uint16(body.GetCmPorts()[i]), | ||||
| 		}) | ||||
| 	} | ||||
|  | ||||
| 	c.Emit(&ClientCMListEvent{l}) | ||||
| } | ||||
|  | ||||
| func readIp(ip uint32) net.IP { | ||||
| 	r := make(net.IP, 4) | ||||
| 	r[3] = byte(ip) | ||||
| 	r[2] = byte(ip >> 8) | ||||
| 	r[1] = byte(ip >> 16) | ||||
| 	r[0] = byte(ip >> 24) | ||||
| 	return r | ||||
| } | ||||
							
								
								
									
										20
									
								
								vendor/github.com/Philipp15b/go-steam/client_events.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								vendor/github.com/Philipp15b/go-steam/client_events.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"github.com/Philipp15b/go-steam/netutil" | ||||
| ) | ||||
|  | ||||
| // When this event is emitted by the Client, the connection is automatically closed. | ||||
| // This may be caused by a network error, for example. | ||||
| type FatalErrorEvent error | ||||
|  | ||||
| type ConnectedEvent struct{} | ||||
|  | ||||
| type DisconnectedEvent struct{} | ||||
|  | ||||
| // A list of connection manager addresses to connect to in the future. | ||||
| // You should always save them and then select one of these | ||||
| // instead of the builtin ones for the next connection. | ||||
| type ClientCMListEvent struct { | ||||
| 	Addresses []*netutil.PortAddr | ||||
| } | ||||
							
								
								
									
										35
									
								
								vendor/github.com/Philipp15b/go-steam/community/community.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/Philipp15b/go-steam/community/community.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| package community | ||||
|  | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"net/http/cookiejar" | ||||
| 	"net/url" | ||||
| ) | ||||
|  | ||||
| const cookiePath = "https://steamcommunity.com/" | ||||
|  | ||||
| func SetCookies(client *http.Client, sessionId, steamLogin, steamLoginSecure string) { | ||||
| 	if client.Jar == nil { | ||||
| 		client.Jar, _ = cookiejar.New(new(cookiejar.Options)) | ||||
| 	} | ||||
| 	base, err := url.Parse(cookiePath) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	client.Jar.SetCookies(base, []*http.Cookie{ | ||||
| 		// It seems that, for some reason, Steam tries to URL-decode the cookie. | ||||
| 		&http.Cookie{ | ||||
| 			Name:  "sessionid", | ||||
| 			Value: url.QueryEscape(sessionId), | ||||
| 		}, | ||||
| 		// steamLogin is already URL-encoded. | ||||
| 		&http.Cookie{ | ||||
| 			Name:  "steamLogin", | ||||
| 			Value: steamLogin, | ||||
| 		}, | ||||
| 		&http.Cookie{ | ||||
| 			Name:  "steamLoginSecure", | ||||
| 			Value: steamLoginSecure, | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										127
									
								
								vendor/github.com/Philipp15b/go-steam/connection.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								vendor/github.com/Philipp15b/go-steam/connection.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,127 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"crypto/aes" | ||||
| 	"crypto/cipher" | ||||
| 	"encoding/binary" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"net" | ||||
| 	"sync" | ||||
|  | ||||
| 	"github.com/Philipp15b/go-steam/cryptoutil" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol" | ||||
| ) | ||||
|  | ||||
| type connection interface { | ||||
| 	Read() (*Packet, error) | ||||
| 	Write([]byte) error | ||||
| 	Close() error | ||||
| 	SetEncryptionKey([]byte) | ||||
| 	IsEncrypted() bool | ||||
| } | ||||
|  | ||||
| const tcpConnectionMagic uint32 = 0x31305456 // "VT01" | ||||
|  | ||||
| type tcpConnection struct { | ||||
| 	conn        *net.TCPConn | ||||
| 	ciph        cipher.Block | ||||
| 	cipherMutex sync.RWMutex | ||||
| } | ||||
|  | ||||
| func dialTCP(laddr, raddr *net.TCPAddr) (*tcpConnection, error) { | ||||
| 	conn, err := net.DialTCP("tcp", laddr, raddr) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return &tcpConnection{ | ||||
| 		conn: conn, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| func (c *tcpConnection) Read() (*Packet, error) { | ||||
| 	// All packets begin with a packet length | ||||
| 	var packetLen uint32 | ||||
| 	err := binary.Read(c.conn, binary.LittleEndian, &packetLen) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// A magic value follows for validation | ||||
| 	var packetMagic uint32 | ||||
| 	err = binary.Read(c.conn, binary.LittleEndian, &packetMagic) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if packetMagic != tcpConnectionMagic { | ||||
| 		return nil, fmt.Errorf("Invalid connection magic! Expected %d, got %d!", tcpConnectionMagic, packetMagic) | ||||
| 	} | ||||
|  | ||||
| 	buf := make([]byte, packetLen, packetLen) | ||||
| 	_, err = io.ReadFull(c.conn, buf) | ||||
| 	if err == io.ErrUnexpectedEOF { | ||||
| 		return nil, io.EOF | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	// Packets after ChannelEncryptResult are encrypted | ||||
| 	c.cipherMutex.RLock() | ||||
| 	if c.ciph != nil { | ||||
| 		buf = cryptoutil.SymmetricDecrypt(c.ciph, buf) | ||||
| 	} | ||||
| 	c.cipherMutex.RUnlock() | ||||
|  | ||||
| 	return NewPacket(buf) | ||||
| } | ||||
|  | ||||
| // Writes a message. This may only be used by one goroutine at a time. | ||||
| func (c *tcpConnection) Write(message []byte) error { | ||||
| 	c.cipherMutex.RLock() | ||||
| 	if c.ciph != nil { | ||||
| 		message = cryptoutil.SymmetricEncrypt(c.ciph, message) | ||||
| 	} | ||||
| 	c.cipherMutex.RUnlock() | ||||
|  | ||||
| 	err := binary.Write(c.conn, binary.LittleEndian, uint32(len(message))) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	err = binary.Write(c.conn, binary.LittleEndian, tcpConnectionMagic) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	_, err = c.conn.Write(message) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (c *tcpConnection) Close() error { | ||||
| 	return c.conn.Close() | ||||
| } | ||||
|  | ||||
| func (c *tcpConnection) SetEncryptionKey(key []byte) { | ||||
| 	c.cipherMutex.Lock() | ||||
| 	defer c.cipherMutex.Unlock() | ||||
| 	if key == nil { | ||||
| 		c.ciph = nil | ||||
| 		return | ||||
| 	} | ||||
| 	if len(key) != 32 { | ||||
| 		panic("Connection AES key is not 32 bytes long!") | ||||
| 	} | ||||
|  | ||||
| 	var err error | ||||
| 	c.ciph, err = aes.NewCipher(key) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (c *tcpConnection) IsEncrypted() bool { | ||||
| 	c.cipherMutex.RLock() | ||||
| 	defer c.cipherMutex.RUnlock() | ||||
| 	return c.ciph != nil | ||||
| } | ||||
							
								
								
									
										38
									
								
								vendor/github.com/Philipp15b/go-steam/cryptoutil/cryptoutil.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								vendor/github.com/Philipp15b/go-steam/cryptoutil/cryptoutil.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| package cryptoutil | ||||
|  | ||||
| import ( | ||||
| 	"crypto/aes" | ||||
| 	"crypto/cipher" | ||||
| 	"crypto/rand" | ||||
| ) | ||||
|  | ||||
| // Performs an encryption using AES/CBC/PKCS7 | ||||
| // with a random IV prepended using AES/ECB/None. | ||||
| func SymmetricEncrypt(ciph cipher.Block, src []byte) []byte { | ||||
| 	// get a random IV and ECB encrypt it | ||||
| 	iv := make([]byte, aes.BlockSize, aes.BlockSize) | ||||
| 	_, err := rand.Read(iv) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	encryptedIv := make([]byte, aes.BlockSize, aes.BlockSize) | ||||
| 	newECBEncrypter(ciph).CryptBlocks(encryptedIv, iv) | ||||
|  | ||||
| 	// pad it, copy the IV to the first 16 bytes and encrypt the rest with CBC | ||||
| 	encrypted := padPKCS7WithIV(src) | ||||
| 	copy(encrypted, encryptedIv) | ||||
| 	cipher.NewCBCEncrypter(ciph, iv).CryptBlocks(encrypted[aes.BlockSize:], encrypted[aes.BlockSize:]) | ||||
| 	return encrypted | ||||
| } | ||||
|  | ||||
| // Decrypts data from the reader using AES/CBC/PKCS7 with an IV | ||||
| // prepended using AES/ECB/None. The src slice may not be used anymore. | ||||
| func SymmetricDecrypt(ciph cipher.Block, src []byte) []byte { | ||||
| 	iv := src[:aes.BlockSize] | ||||
| 	newECBDecrypter(ciph).CryptBlocks(iv, iv) | ||||
|  | ||||
| 	data := src[aes.BlockSize:] | ||||
| 	cipher.NewCBCDecrypter(ciph, iv).CryptBlocks(data, data) | ||||
|  | ||||
| 	return unpadPKCS7(data) | ||||
| } | ||||
							
								
								
									
										68
									
								
								vendor/github.com/Philipp15b/go-steam/cryptoutil/ecb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								vendor/github.com/Philipp15b/go-steam/cryptoutil/ecb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| package cryptoutil | ||||
|  | ||||
| import ( | ||||
| 	"crypto/cipher" | ||||
| ) | ||||
|  | ||||
| // From this code review: https://codereview.appspot.com/7860047/ | ||||
| // by fasmat for the Go crypto/cipher package | ||||
|  | ||||
| type ecb struct { | ||||
| 	b         cipher.Block | ||||
| 	blockSize int | ||||
| } | ||||
|  | ||||
| func newECB(b cipher.Block) *ecb { | ||||
| 	return &ecb{ | ||||
| 		b:         b, | ||||
| 		blockSize: b.BlockSize(), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type ecbEncrypter ecb | ||||
|  | ||||
| // NewECBEncrypter returns a BlockMode which encrypts in electronic code book | ||||
| // mode, using the given Block. | ||||
| func newECBEncrypter(b cipher.Block) cipher.BlockMode { | ||||
| 	return (*ecbEncrypter)(newECB(b)) | ||||
| } | ||||
|  | ||||
| func (x *ecbEncrypter) BlockSize() int { return x.blockSize } | ||||
|  | ||||
| func (x *ecbEncrypter) CryptBlocks(dst, src []byte) { | ||||
| 	if len(src)%x.blockSize != 0 { | ||||
| 		panic("cryptoutil/ecb: input not full blocks") | ||||
| 	} | ||||
| 	if len(dst) < len(src) { | ||||
| 		panic("cryptoutil/ecb: output smaller than input") | ||||
| 	} | ||||
| 	for len(src) > 0 { | ||||
| 		x.b.Encrypt(dst, src[:x.blockSize]) | ||||
| 		src = src[x.blockSize:] | ||||
| 		dst = dst[x.blockSize:] | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type ecbDecrypter ecb | ||||
|  | ||||
| // newECBDecrypter returns a BlockMode which decrypts in electronic code book | ||||
| // mode, using the given Block. | ||||
| func newECBDecrypter(b cipher.Block) cipher.BlockMode { | ||||
| 	return (*ecbDecrypter)(newECB(b)) | ||||
| } | ||||
|  | ||||
| func (x *ecbDecrypter) BlockSize() int { return x.blockSize } | ||||
|  | ||||
| func (x *ecbDecrypter) CryptBlocks(dst, src []byte) { | ||||
| 	if len(src)%x.blockSize != 0 { | ||||
| 		panic("cryptoutil/ecb: input not full blocks") | ||||
| 	} | ||||
| 	if len(dst) < len(src) { | ||||
| 		panic("cryptoutil/ecb: output smaller than input") | ||||
| 	} | ||||
| 	for len(src) > 0 { | ||||
| 		x.b.Decrypt(dst, src[:x.blockSize]) | ||||
| 		src = src[x.blockSize:] | ||||
| 		dst = dst[x.blockSize:] | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										25
									
								
								vendor/github.com/Philipp15b/go-steam/cryptoutil/pkcs7.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/Philipp15b/go-steam/cryptoutil/pkcs7.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| package cryptoutil | ||||
|  | ||||
| import ( | ||||
| 	"crypto/aes" | ||||
| ) | ||||
|  | ||||
| // Returns a new byte array padded with PKCS7 and prepended | ||||
| // with empty space of the AES block size (16 bytes) for the IV. | ||||
| func padPKCS7WithIV(src []byte) []byte { | ||||
| 	missing := aes.BlockSize - (len(src) % aes.BlockSize) | ||||
| 	newSize := len(src) + aes.BlockSize + missing | ||||
| 	dest := make([]byte, newSize, newSize) | ||||
| 	copy(dest[aes.BlockSize:], src) | ||||
|  | ||||
| 	padding := byte(missing) | ||||
| 	for i := newSize - missing; i < newSize; i++ { | ||||
| 		dest[i] = padding | ||||
| 	} | ||||
| 	return dest | ||||
| } | ||||
|  | ||||
| func unpadPKCS7(src []byte) []byte { | ||||
| 	padLen := src[len(src)-1] | ||||
| 	return src[:len(src)-int(padLen)] | ||||
| } | ||||
							
								
								
									
										31
									
								
								vendor/github.com/Philipp15b/go-steam/cryptoutil/rsa.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/github.com/Philipp15b/go-steam/cryptoutil/rsa.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| package cryptoutil | ||||
|  | ||||
| import ( | ||||
| 	"crypto/rand" | ||||
| 	"crypto/rsa" | ||||
| 	"crypto/sha1" | ||||
| 	"crypto/x509" | ||||
| 	"errors" | ||||
| ) | ||||
|  | ||||
| // Parses a DER encoded RSA public key | ||||
| func ParseASN1RSAPublicKey(derBytes []byte) (*rsa.PublicKey, error) { | ||||
| 	key, err := x509.ParsePKIXPublicKey(derBytes) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	pubKey, ok := key.(*rsa.PublicKey) | ||||
| 	if !ok { | ||||
| 		return nil, errors.New("not an RSA public key") | ||||
| 	} | ||||
| 	return pubKey, nil | ||||
| } | ||||
|  | ||||
| // Encrypts a message with the given public key using RSA-OAEP and the sha1 hash function. | ||||
| func RSAEncrypt(pub *rsa.PublicKey, msg []byte) []byte { | ||||
| 	b, err := rsa.EncryptOAEP(sha1.New(), rand.Reader, pub, msg, nil) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return b | ||||
| } | ||||
							
								
								
									
										53
									
								
								vendor/github.com/Philipp15b/go-steam/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								vendor/github.com/Philipp15b/go-steam/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| /* | ||||
| This package allows you to automate actions on Valve's Steam network. It is a Go port of SteamKit. | ||||
|  | ||||
| To login, you'll have to create a new Client first. Then connect to the Steam network | ||||
| and wait for a ConnectedCallback. Then you may call the Login method in the Auth module | ||||
| with your login information. This is covered in more detail in the method's documentation. After you've | ||||
| received the LoggedOnEvent, you should set your persona state to online to receive friend lists etc. | ||||
|  | ||||
| Example code | ||||
|  | ||||
| You can also find a running example in the `gsbot` package. | ||||
|  | ||||
| 	package main | ||||
|  | ||||
| 	import ( | ||||
| 		"io/ioutil" | ||||
| 		"log" | ||||
|  | ||||
| 		"github.com/Philipp15b/go-steam" | ||||
| 		"github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	) | ||||
|  | ||||
| 	func main() { | ||||
| 		myLoginInfo := new(steam.LogOnDetails) | ||||
| 		myLoginInfo.Username = "Your username" | ||||
| 		myLoginInfo.Password = "Your password" | ||||
|  | ||||
| 		client := steam.NewClient() | ||||
| 		client.Connect() | ||||
| 		for event := range client.Events() { | ||||
| 			switch e := event.(type) { | ||||
| 			case *steam.ConnectedEvent: | ||||
| 				client.Auth.LogOn(myLoginInfo) | ||||
| 			case *steam.MachineAuthUpdateEvent: | ||||
| 				ioutil.WriteFile("sentry", e.Hash, 0666) | ||||
| 			case *steam.LoggedOnEvent: | ||||
| 				client.Social.SetPersonaState(steamlang.EPersonaState_Online) | ||||
| 			case steam.FatalErrorEvent: | ||||
| 				log.Print(e) | ||||
| 			case error: | ||||
| 				log.Print(e) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|  | ||||
| Events | ||||
|  | ||||
| go-steam emits events that can be read via Client.Events(). Although the channel has the type interface{}, | ||||
| only types from this package ending with "Event" and errors will be emitted. | ||||
|  | ||||
| */ | ||||
| package steam | ||||
							
								
								
									
										3651
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3651
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										18413
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_client.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18413
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_client.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6123
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_client_fantasy.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6123
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_client_fantasy.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10997
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_common.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10997
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/dota_common.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										4441
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/econ.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4441
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/econ.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1825
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/gcsdk.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1825
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/gcsdk.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										579
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/system.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										579
									
								
								vendor/github.com/Philipp15b/go-steam/dota/protocol/protobuf/system.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,579 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: gcsystemmsgs.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package protobuf | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| // This is a compile-time assertion to ensure that this generated file | ||||
| // is compatible with the proto package protobuf is being compiled against. | ||||
| const _ = proto.ProtoPackageIsVersion1 | ||||
|  | ||||
| type EGCSystemMsg int32 | ||||
|  | ||||
| const ( | ||||
| 	EGCSystemMsg_k_EGCMsgInvalid                           EGCSystemMsg = 0 | ||||
| 	EGCSystemMsg_k_EGCMsgMulti                             EGCSystemMsg = 1 | ||||
| 	EGCSystemMsg_k_EGCMsgGenericReply                      EGCSystemMsg = 10 | ||||
| 	EGCSystemMsg_k_EGCMsgSystemBase                        EGCSystemMsg = 50 | ||||
| 	EGCSystemMsg_k_EGCMsgAchievementAwarded                EGCSystemMsg = 51 | ||||
| 	EGCSystemMsg_k_EGCMsgConCommand                        EGCSystemMsg = 52 | ||||
| 	EGCSystemMsg_k_EGCMsgStartPlaying                      EGCSystemMsg = 53 | ||||
| 	EGCSystemMsg_k_EGCMsgStopPlaying                       EGCSystemMsg = 54 | ||||
| 	EGCSystemMsg_k_EGCMsgStartGameserver                   EGCSystemMsg = 55 | ||||
| 	EGCSystemMsg_k_EGCMsgStopGameserver                    EGCSystemMsg = 56 | ||||
| 	EGCSystemMsg_k_EGCMsgWGRequest                         EGCSystemMsg = 57 | ||||
| 	EGCSystemMsg_k_EGCMsgWGResponse                        EGCSystemMsg = 58 | ||||
| 	EGCSystemMsg_k_EGCMsgGetUserGameStatsSchema            EGCSystemMsg = 59 | ||||
| 	EGCSystemMsg_k_EGCMsgGetUserGameStatsSchemaResponse    EGCSystemMsg = 60 | ||||
| 	EGCSystemMsg_k_EGCMsgGetUserStatsDEPRECATED            EGCSystemMsg = 61 | ||||
| 	EGCSystemMsg_k_EGCMsgGetUserStatsResponse              EGCSystemMsg = 62 | ||||
| 	EGCSystemMsg_k_EGCMsgAppInfoUpdated                    EGCSystemMsg = 63 | ||||
| 	EGCSystemMsg_k_EGCMsgValidateSession                   EGCSystemMsg = 64 | ||||
| 	EGCSystemMsg_k_EGCMsgValidateSessionResponse           EGCSystemMsg = 65 | ||||
| 	EGCSystemMsg_k_EGCMsgLookupAccountFromInput            EGCSystemMsg = 66 | ||||
| 	EGCSystemMsg_k_EGCMsgSendHTTPRequest                   EGCSystemMsg = 67 | ||||
| 	EGCSystemMsg_k_EGCMsgSendHTTPRequestResponse           EGCSystemMsg = 68 | ||||
| 	EGCSystemMsg_k_EGCMsgPreTestSetup                      EGCSystemMsg = 69 | ||||
| 	EGCSystemMsg_k_EGCMsgRecordSupportAction               EGCSystemMsg = 70 | ||||
| 	EGCSystemMsg_k_EGCMsgGetAccountDetails_DEPRECATED      EGCSystemMsg = 71 | ||||
| 	EGCSystemMsg_k_EGCMsgReceiveInterAppMessage            EGCSystemMsg = 73 | ||||
| 	EGCSystemMsg_k_EGCMsgFindAccounts                      EGCSystemMsg = 74 | ||||
| 	EGCSystemMsg_k_EGCMsgPostAlert                         EGCSystemMsg = 75 | ||||
| 	EGCSystemMsg_k_EGCMsgGetLicenses                       EGCSystemMsg = 76 | ||||
| 	EGCSystemMsg_k_EGCMsgGetUserStats                      EGCSystemMsg = 77 | ||||
| 	EGCSystemMsg_k_EGCMsgGetCommands                       EGCSystemMsg = 78 | ||||
| 	EGCSystemMsg_k_EGCMsgGetCommandsResponse               EGCSystemMsg = 79 | ||||
| 	EGCSystemMsg_k_EGCMsgAddFreeLicense                    EGCSystemMsg = 80 | ||||
| 	EGCSystemMsg_k_EGCMsgAddFreeLicenseResponse            EGCSystemMsg = 81 | ||||
| 	EGCSystemMsg_k_EGCMsgGetIPLocation                     EGCSystemMsg = 82 | ||||
| 	EGCSystemMsg_k_EGCMsgGetIPLocationResponse             EGCSystemMsg = 83 | ||||
| 	EGCSystemMsg_k_EGCMsgSystemStatsSchema                 EGCSystemMsg = 84 | ||||
| 	EGCSystemMsg_k_EGCMsgGetSystemStats                    EGCSystemMsg = 85 | ||||
| 	EGCSystemMsg_k_EGCMsgGetSystemStatsResponse            EGCSystemMsg = 86 | ||||
| 	EGCSystemMsg_k_EGCMsgSendEmail                         EGCSystemMsg = 87 | ||||
| 	EGCSystemMsg_k_EGCMsgSendEmailResponse                 EGCSystemMsg = 88 | ||||
| 	EGCSystemMsg_k_EGCMsgGetEmailTemplate                  EGCSystemMsg = 89 | ||||
| 	EGCSystemMsg_k_EGCMsgGetEmailTemplateResponse          EGCSystemMsg = 90 | ||||
| 	EGCSystemMsg_k_EGCMsgGrantGuestPass                    EGCSystemMsg = 91 | ||||
| 	EGCSystemMsg_k_EGCMsgGrantGuestPassResponse            EGCSystemMsg = 92 | ||||
| 	EGCSystemMsg_k_EGCMsgGetAccountDetails                 EGCSystemMsg = 93 | ||||
| 	EGCSystemMsg_k_EGCMsgGetAccountDetailsResponse         EGCSystemMsg = 94 | ||||
| 	EGCSystemMsg_k_EGCMsgGetPersonaNames                   EGCSystemMsg = 95 | ||||
| 	EGCSystemMsg_k_EGCMsgGetPersonaNamesResponse           EGCSystemMsg = 96 | ||||
| 	EGCSystemMsg_k_EGCMsgMultiplexMsg                      EGCSystemMsg = 97 | ||||
| 	EGCSystemMsg_k_EGCMsgWebAPIRegisterInterfaces          EGCSystemMsg = 101 | ||||
| 	EGCSystemMsg_k_EGCMsgWebAPIJobRequest                  EGCSystemMsg = 102 | ||||
| 	EGCSystemMsg_k_EGCMsgWebAPIJobRequestHttpResponse      EGCSystemMsg = 104 | ||||
| 	EGCSystemMsg_k_EGCMsgWebAPIJobRequestForwardResponse   EGCSystemMsg = 105 | ||||
| 	EGCSystemMsg_k_EGCMsgMemCachedGet                      EGCSystemMsg = 200 | ||||
| 	EGCSystemMsg_k_EGCMsgMemCachedGetResponse              EGCSystemMsg = 201 | ||||
| 	EGCSystemMsg_k_EGCMsgMemCachedSet                      EGCSystemMsg = 202 | ||||
| 	EGCSystemMsg_k_EGCMsgMemCachedDelete                   EGCSystemMsg = 203 | ||||
| 	EGCSystemMsg_k_EGCMsgMemCachedStats                    EGCSystemMsg = 204 | ||||
| 	EGCSystemMsg_k_EGCMsgMemCachedStatsResponse            EGCSystemMsg = 205 | ||||
| 	EGCSystemMsg_k_EGCMsgSQLStats                          EGCSystemMsg = 210 | ||||
| 	EGCSystemMsg_k_EGCMsgSQLStatsResponse                  EGCSystemMsg = 211 | ||||
| 	EGCSystemMsg_k_EGCMsgMasterSetDirectory                EGCSystemMsg = 220 | ||||
| 	EGCSystemMsg_k_EGCMsgMasterSetDirectoryResponse        EGCSystemMsg = 221 | ||||
| 	EGCSystemMsg_k_EGCMsgMasterSetWebAPIRouting            EGCSystemMsg = 222 | ||||
| 	EGCSystemMsg_k_EGCMsgMasterSetWebAPIRoutingResponse    EGCSystemMsg = 223 | ||||
| 	EGCSystemMsg_k_EGCMsgMasterSetClientMsgRouting         EGCSystemMsg = 224 | ||||
| 	EGCSystemMsg_k_EGCMsgMasterSetClientMsgRoutingResponse EGCSystemMsg = 225 | ||||
| 	EGCSystemMsg_k_EGCMsgSetOptions                        EGCSystemMsg = 226 | ||||
| 	EGCSystemMsg_k_EGCMsgSetOptionsResponse                EGCSystemMsg = 227 | ||||
| 	EGCSystemMsg_k_EGCMsgSystemBase2                       EGCSystemMsg = 500 | ||||
| 	EGCSystemMsg_k_EGCMsgGetPurchaseTrustStatus            EGCSystemMsg = 501 | ||||
| 	EGCSystemMsg_k_EGCMsgGetPurchaseTrustStatusResponse    EGCSystemMsg = 502 | ||||
| 	EGCSystemMsg_k_EGCMsgUpdateSession                     EGCSystemMsg = 503 | ||||
| 	EGCSystemMsg_k_EGCMsgGCAccountVacStatusChange          EGCSystemMsg = 504 | ||||
| 	EGCSystemMsg_k_EGCMsgCheckFriendship                   EGCSystemMsg = 505 | ||||
| 	EGCSystemMsg_k_EGCMsgCheckFriendshipResponse           EGCSystemMsg = 506 | ||||
| 	EGCSystemMsg_k_EGCMsgGetPartnerAccountLink             EGCSystemMsg = 507 | ||||
| 	EGCSystemMsg_k_EGCMsgGetPartnerAccountLinkResponse     EGCSystemMsg = 508 | ||||
| 	EGCSystemMsg_k_EGCMsgVSReportedSuspiciousActivity      EGCSystemMsg = 509 | ||||
| 	EGCSystemMsg_k_EGCMsgDPPartnerMicroTxns                EGCSystemMsg = 512 | ||||
| 	EGCSystemMsg_k_EGCMsgDPPartnerMicroTxnsResponse        EGCSystemMsg = 513 | ||||
| 	EGCSystemMsg_k_EGCMsgGetIPASN                          EGCSystemMsg = 514 | ||||
| 	EGCSystemMsg_k_EGCMsgGetIPASNResponse                  EGCSystemMsg = 515 | ||||
| 	EGCSystemMsg_k_EGCMsgGetAppFriendsList                 EGCSystemMsg = 516 | ||||
| 	EGCSystemMsg_k_EGCMsgGetAppFriendsListResponse         EGCSystemMsg = 517 | ||||
| ) | ||||
|  | ||||
| var EGCSystemMsg_name = map[int32]string{ | ||||
| 	0:   "k_EGCMsgInvalid", | ||||
| 	1:   "k_EGCMsgMulti", | ||||
| 	10:  "k_EGCMsgGenericReply", | ||||
| 	50:  "k_EGCMsgSystemBase", | ||||
| 	51:  "k_EGCMsgAchievementAwarded", | ||||
| 	52:  "k_EGCMsgConCommand", | ||||
| 	53:  "k_EGCMsgStartPlaying", | ||||
| 	54:  "k_EGCMsgStopPlaying", | ||||
| 	55:  "k_EGCMsgStartGameserver", | ||||
| 	56:  "k_EGCMsgStopGameserver", | ||||
| 	57:  "k_EGCMsgWGRequest", | ||||
| 	58:  "k_EGCMsgWGResponse", | ||||
| 	59:  "k_EGCMsgGetUserGameStatsSchema", | ||||
| 	60:  "k_EGCMsgGetUserGameStatsSchemaResponse", | ||||
| 	61:  "k_EGCMsgGetUserStatsDEPRECATED", | ||||
| 	62:  "k_EGCMsgGetUserStatsResponse", | ||||
| 	63:  "k_EGCMsgAppInfoUpdated", | ||||
| 	64:  "k_EGCMsgValidateSession", | ||||
| 	65:  "k_EGCMsgValidateSessionResponse", | ||||
| 	66:  "k_EGCMsgLookupAccountFromInput", | ||||
| 	67:  "k_EGCMsgSendHTTPRequest", | ||||
| 	68:  "k_EGCMsgSendHTTPRequestResponse", | ||||
| 	69:  "k_EGCMsgPreTestSetup", | ||||
| 	70:  "k_EGCMsgRecordSupportAction", | ||||
| 	71:  "k_EGCMsgGetAccountDetails_DEPRECATED", | ||||
| 	73:  "k_EGCMsgReceiveInterAppMessage", | ||||
| 	74:  "k_EGCMsgFindAccounts", | ||||
| 	75:  "k_EGCMsgPostAlert", | ||||
| 	76:  "k_EGCMsgGetLicenses", | ||||
| 	77:  "k_EGCMsgGetUserStats", | ||||
| 	78:  "k_EGCMsgGetCommands", | ||||
| 	79:  "k_EGCMsgGetCommandsResponse", | ||||
| 	80:  "k_EGCMsgAddFreeLicense", | ||||
| 	81:  "k_EGCMsgAddFreeLicenseResponse", | ||||
| 	82:  "k_EGCMsgGetIPLocation", | ||||
| 	83:  "k_EGCMsgGetIPLocationResponse", | ||||
| 	84:  "k_EGCMsgSystemStatsSchema", | ||||
| 	85:  "k_EGCMsgGetSystemStats", | ||||
| 	86:  "k_EGCMsgGetSystemStatsResponse", | ||||
| 	87:  "k_EGCMsgSendEmail", | ||||
| 	88:  "k_EGCMsgSendEmailResponse", | ||||
| 	89:  "k_EGCMsgGetEmailTemplate", | ||||
| 	90:  "k_EGCMsgGetEmailTemplateResponse", | ||||
| 	91:  "k_EGCMsgGrantGuestPass", | ||||
| 	92:  "k_EGCMsgGrantGuestPassResponse", | ||||
| 	93:  "k_EGCMsgGetAccountDetails", | ||||
| 	94:  "k_EGCMsgGetAccountDetailsResponse", | ||||
| 	95:  "k_EGCMsgGetPersonaNames", | ||||
| 	96:  "k_EGCMsgGetPersonaNamesResponse", | ||||
| 	97:  "k_EGCMsgMultiplexMsg", | ||||
| 	101: "k_EGCMsgWebAPIRegisterInterfaces", | ||||
| 	102: "k_EGCMsgWebAPIJobRequest", | ||||
| 	104: "k_EGCMsgWebAPIJobRequestHttpResponse", | ||||
| 	105: "k_EGCMsgWebAPIJobRequestForwardResponse", | ||||
| 	200: "k_EGCMsgMemCachedGet", | ||||
| 	201: "k_EGCMsgMemCachedGetResponse", | ||||
| 	202: "k_EGCMsgMemCachedSet", | ||||
| 	203: "k_EGCMsgMemCachedDelete", | ||||
| 	204: "k_EGCMsgMemCachedStats", | ||||
| 	205: "k_EGCMsgMemCachedStatsResponse", | ||||
| 	210: "k_EGCMsgSQLStats", | ||||
| 	211: "k_EGCMsgSQLStatsResponse", | ||||
| 	220: "k_EGCMsgMasterSetDirectory", | ||||
| 	221: "k_EGCMsgMasterSetDirectoryResponse", | ||||
| 	222: "k_EGCMsgMasterSetWebAPIRouting", | ||||
| 	223: "k_EGCMsgMasterSetWebAPIRoutingResponse", | ||||
| 	224: "k_EGCMsgMasterSetClientMsgRouting", | ||||
| 	225: "k_EGCMsgMasterSetClientMsgRoutingResponse", | ||||
| 	226: "k_EGCMsgSetOptions", | ||||
| 	227: "k_EGCMsgSetOptionsResponse", | ||||
| 	500: "k_EGCMsgSystemBase2", | ||||
| 	501: "k_EGCMsgGetPurchaseTrustStatus", | ||||
| 	502: "k_EGCMsgGetPurchaseTrustStatusResponse", | ||||
| 	503: "k_EGCMsgUpdateSession", | ||||
| 	504: "k_EGCMsgGCAccountVacStatusChange", | ||||
| 	505: "k_EGCMsgCheckFriendship", | ||||
| 	506: "k_EGCMsgCheckFriendshipResponse", | ||||
| 	507: "k_EGCMsgGetPartnerAccountLink", | ||||
| 	508: "k_EGCMsgGetPartnerAccountLinkResponse", | ||||
| 	509: "k_EGCMsgVSReportedSuspiciousActivity", | ||||
| 	512: "k_EGCMsgDPPartnerMicroTxns", | ||||
| 	513: "k_EGCMsgDPPartnerMicroTxnsResponse", | ||||
| 	514: "k_EGCMsgGetIPASN", | ||||
| 	515: "k_EGCMsgGetIPASNResponse", | ||||
| 	516: "k_EGCMsgGetAppFriendsList", | ||||
| 	517: "k_EGCMsgGetAppFriendsListResponse", | ||||
| } | ||||
| var EGCSystemMsg_value = map[string]int32{ | ||||
| 	"k_EGCMsgInvalid":                           0, | ||||
| 	"k_EGCMsgMulti":                             1, | ||||
| 	"k_EGCMsgGenericReply":                      10, | ||||
| 	"k_EGCMsgSystemBase":                        50, | ||||
| 	"k_EGCMsgAchievementAwarded":                51, | ||||
| 	"k_EGCMsgConCommand":                        52, | ||||
| 	"k_EGCMsgStartPlaying":                      53, | ||||
| 	"k_EGCMsgStopPlaying":                       54, | ||||
| 	"k_EGCMsgStartGameserver":                   55, | ||||
| 	"k_EGCMsgStopGameserver":                    56, | ||||
| 	"k_EGCMsgWGRequest":                         57, | ||||
| 	"k_EGCMsgWGResponse":                        58, | ||||
| 	"k_EGCMsgGetUserGameStatsSchema":            59, | ||||
| 	"k_EGCMsgGetUserGameStatsSchemaResponse":    60, | ||||
| 	"k_EGCMsgGetUserStatsDEPRECATED":            61, | ||||
| 	"k_EGCMsgGetUserStatsResponse":              62, | ||||
| 	"k_EGCMsgAppInfoUpdated":                    63, | ||||
| 	"k_EGCMsgValidateSession":                   64, | ||||
| 	"k_EGCMsgValidateSessionResponse":           65, | ||||
| 	"k_EGCMsgLookupAccountFromInput":            66, | ||||
| 	"k_EGCMsgSendHTTPRequest":                   67, | ||||
| 	"k_EGCMsgSendHTTPRequestResponse":           68, | ||||
| 	"k_EGCMsgPreTestSetup":                      69, | ||||
| 	"k_EGCMsgRecordSupportAction":               70, | ||||
| 	"k_EGCMsgGetAccountDetails_DEPRECATED":      71, | ||||
| 	"k_EGCMsgReceiveInterAppMessage":            73, | ||||
| 	"k_EGCMsgFindAccounts":                      74, | ||||
| 	"k_EGCMsgPostAlert":                         75, | ||||
| 	"k_EGCMsgGetLicenses":                       76, | ||||
| 	"k_EGCMsgGetUserStats":                      77, | ||||
| 	"k_EGCMsgGetCommands":                       78, | ||||
| 	"k_EGCMsgGetCommandsResponse":               79, | ||||
| 	"k_EGCMsgAddFreeLicense":                    80, | ||||
| 	"k_EGCMsgAddFreeLicenseResponse":            81, | ||||
| 	"k_EGCMsgGetIPLocation":                     82, | ||||
| 	"k_EGCMsgGetIPLocationResponse":             83, | ||||
| 	"k_EGCMsgSystemStatsSchema":                 84, | ||||
| 	"k_EGCMsgGetSystemStats":                    85, | ||||
| 	"k_EGCMsgGetSystemStatsResponse":            86, | ||||
| 	"k_EGCMsgSendEmail":                         87, | ||||
| 	"k_EGCMsgSendEmailResponse":                 88, | ||||
| 	"k_EGCMsgGetEmailTemplate":                  89, | ||||
| 	"k_EGCMsgGetEmailTemplateResponse":          90, | ||||
| 	"k_EGCMsgGrantGuestPass":                    91, | ||||
| 	"k_EGCMsgGrantGuestPassResponse":            92, | ||||
| 	"k_EGCMsgGetAccountDetails":                 93, | ||||
| 	"k_EGCMsgGetAccountDetailsResponse":         94, | ||||
| 	"k_EGCMsgGetPersonaNames":                   95, | ||||
| 	"k_EGCMsgGetPersonaNamesResponse":           96, | ||||
| 	"k_EGCMsgMultiplexMsg":                      97, | ||||
| 	"k_EGCMsgWebAPIRegisterInterfaces":          101, | ||||
| 	"k_EGCMsgWebAPIJobRequest":                  102, | ||||
| 	"k_EGCMsgWebAPIJobRequestHttpResponse":      104, | ||||
| 	"k_EGCMsgWebAPIJobRequestForwardResponse":   105, | ||||
| 	"k_EGCMsgMemCachedGet":                      200, | ||||
| 	"k_EGCMsgMemCachedGetResponse":              201, | ||||
| 	"k_EGCMsgMemCachedSet":                      202, | ||||
| 	"k_EGCMsgMemCachedDelete":                   203, | ||||
| 	"k_EGCMsgMemCachedStats":                    204, | ||||
| 	"k_EGCMsgMemCachedStatsResponse":            205, | ||||
| 	"k_EGCMsgSQLStats":                          210, | ||||
| 	"k_EGCMsgSQLStatsResponse":                  211, | ||||
| 	"k_EGCMsgMasterSetDirectory":                220, | ||||
| 	"k_EGCMsgMasterSetDirectoryResponse":        221, | ||||
| 	"k_EGCMsgMasterSetWebAPIRouting":            222, | ||||
| 	"k_EGCMsgMasterSetWebAPIRoutingResponse":    223, | ||||
| 	"k_EGCMsgMasterSetClientMsgRouting":         224, | ||||
| 	"k_EGCMsgMasterSetClientMsgRoutingResponse": 225, | ||||
| 	"k_EGCMsgSetOptions":                        226, | ||||
| 	"k_EGCMsgSetOptionsResponse":                227, | ||||
| 	"k_EGCMsgSystemBase2":                       500, | ||||
| 	"k_EGCMsgGetPurchaseTrustStatus":            501, | ||||
| 	"k_EGCMsgGetPurchaseTrustStatusResponse":    502, | ||||
| 	"k_EGCMsgUpdateSession":                     503, | ||||
| 	"k_EGCMsgGCAccountVacStatusChange":          504, | ||||
| 	"k_EGCMsgCheckFriendship":                   505, | ||||
| 	"k_EGCMsgCheckFriendshipResponse":           506, | ||||
| 	"k_EGCMsgGetPartnerAccountLink":             507, | ||||
| 	"k_EGCMsgGetPartnerAccountLinkResponse":     508, | ||||
| 	"k_EGCMsgVSReportedSuspiciousActivity":      509, | ||||
| 	"k_EGCMsgDPPartnerMicroTxns":                512, | ||||
| 	"k_EGCMsgDPPartnerMicroTxnsResponse":        513, | ||||
| 	"k_EGCMsgGetIPASN":                          514, | ||||
| 	"k_EGCMsgGetIPASNResponse":                  515, | ||||
| 	"k_EGCMsgGetAppFriendsList":                 516, | ||||
| 	"k_EGCMsgGetAppFriendsListResponse":         517, | ||||
| } | ||||
|  | ||||
| func (x EGCSystemMsg) Enum() *EGCSystemMsg { | ||||
| 	p := new(EGCSystemMsg) | ||||
| 	*p = x | ||||
| 	return p | ||||
| } | ||||
| func (x EGCSystemMsg) String() string { | ||||
| 	return proto.EnumName(EGCSystemMsg_name, int32(x)) | ||||
| } | ||||
| func (x *EGCSystemMsg) UnmarshalJSON(data []byte) error { | ||||
| 	value, err := proto.UnmarshalJSONEnum(EGCSystemMsg_value, data, "EGCSystemMsg") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*x = EGCSystemMsg(value) | ||||
| 	return nil | ||||
| } | ||||
| func (EGCSystemMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{0} } | ||||
|  | ||||
| type ESOMsg int32 | ||||
|  | ||||
| const ( | ||||
| 	ESOMsg_k_ESOMsg_Create                   ESOMsg = 21 | ||||
| 	ESOMsg_k_ESOMsg_Update                   ESOMsg = 22 | ||||
| 	ESOMsg_k_ESOMsg_Destroy                  ESOMsg = 23 | ||||
| 	ESOMsg_k_ESOMsg_CacheSubscribed          ESOMsg = 24 | ||||
| 	ESOMsg_k_ESOMsg_CacheUnsubscribed        ESOMsg = 25 | ||||
| 	ESOMsg_k_ESOMsg_UpdateMultiple           ESOMsg = 26 | ||||
| 	ESOMsg_k_ESOMsg_CacheSubscriptionRefresh ESOMsg = 28 | ||||
| 	ESOMsg_k_ESOMsg_CacheSubscribedUpToDate  ESOMsg = 29 | ||||
| ) | ||||
|  | ||||
| var ESOMsg_name = map[int32]string{ | ||||
| 	21: "k_ESOMsg_Create", | ||||
| 	22: "k_ESOMsg_Update", | ||||
| 	23: "k_ESOMsg_Destroy", | ||||
| 	24: "k_ESOMsg_CacheSubscribed", | ||||
| 	25: "k_ESOMsg_CacheUnsubscribed", | ||||
| 	26: "k_ESOMsg_UpdateMultiple", | ||||
| 	28: "k_ESOMsg_CacheSubscriptionRefresh", | ||||
| 	29: "k_ESOMsg_CacheSubscribedUpToDate", | ||||
| } | ||||
| var ESOMsg_value = map[string]int32{ | ||||
| 	"k_ESOMsg_Create":                   21, | ||||
| 	"k_ESOMsg_Update":                   22, | ||||
| 	"k_ESOMsg_Destroy":                  23, | ||||
| 	"k_ESOMsg_CacheSubscribed":          24, | ||||
| 	"k_ESOMsg_CacheUnsubscribed":        25, | ||||
| 	"k_ESOMsg_UpdateMultiple":           26, | ||||
| 	"k_ESOMsg_CacheSubscriptionRefresh": 28, | ||||
| 	"k_ESOMsg_CacheSubscribedUpToDate":  29, | ||||
| } | ||||
|  | ||||
| func (x ESOMsg) Enum() *ESOMsg { | ||||
| 	p := new(ESOMsg) | ||||
| 	*p = x | ||||
| 	return p | ||||
| } | ||||
| func (x ESOMsg) String() string { | ||||
| 	return proto.EnumName(ESOMsg_name, int32(x)) | ||||
| } | ||||
| func (x *ESOMsg) UnmarshalJSON(data []byte) error { | ||||
| 	value, err := proto.UnmarshalJSONEnum(ESOMsg_value, data, "ESOMsg") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*x = ESOMsg(value) | ||||
| 	return nil | ||||
| } | ||||
| func (ESOMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{1} } | ||||
|  | ||||
| type EGCBaseClientMsg int32 | ||||
|  | ||||
| const ( | ||||
| 	EGCBaseClientMsg_k_EMsgGCPingRequest            EGCBaseClientMsg = 3001 | ||||
| 	EGCBaseClientMsg_k_EMsgGCPingResponse           EGCBaseClientMsg = 3002 | ||||
| 	EGCBaseClientMsg_k_EMsgGCClientWelcome          EGCBaseClientMsg = 4004 | ||||
| 	EGCBaseClientMsg_k_EMsgGCServerWelcome          EGCBaseClientMsg = 4005 | ||||
| 	EGCBaseClientMsg_k_EMsgGCClientHello            EGCBaseClientMsg = 4006 | ||||
| 	EGCBaseClientMsg_k_EMsgGCServerHello            EGCBaseClientMsg = 4007 | ||||
| 	EGCBaseClientMsg_k_EMsgGCClientConnectionStatus EGCBaseClientMsg = 4009 | ||||
| 	EGCBaseClientMsg_k_EMsgGCServerConnectionStatus EGCBaseClientMsg = 4010 | ||||
| ) | ||||
|  | ||||
| var EGCBaseClientMsg_name = map[int32]string{ | ||||
| 	3001: "k_EMsgGCPingRequest", | ||||
| 	3002: "k_EMsgGCPingResponse", | ||||
| 	4004: "k_EMsgGCClientWelcome", | ||||
| 	4005: "k_EMsgGCServerWelcome", | ||||
| 	4006: "k_EMsgGCClientHello", | ||||
| 	4007: "k_EMsgGCServerHello", | ||||
| 	4009: "k_EMsgGCClientConnectionStatus", | ||||
| 	4010: "k_EMsgGCServerConnectionStatus", | ||||
| } | ||||
| var EGCBaseClientMsg_value = map[string]int32{ | ||||
| 	"k_EMsgGCPingRequest":            3001, | ||||
| 	"k_EMsgGCPingResponse":           3002, | ||||
| 	"k_EMsgGCClientWelcome":          4004, | ||||
| 	"k_EMsgGCServerWelcome":          4005, | ||||
| 	"k_EMsgGCClientHello":            4006, | ||||
| 	"k_EMsgGCServerHello":            4007, | ||||
| 	"k_EMsgGCClientConnectionStatus": 4009, | ||||
| 	"k_EMsgGCServerConnectionStatus": 4010, | ||||
| } | ||||
|  | ||||
| func (x EGCBaseClientMsg) Enum() *EGCBaseClientMsg { | ||||
| 	p := new(EGCBaseClientMsg) | ||||
| 	*p = x | ||||
| 	return p | ||||
| } | ||||
| func (x EGCBaseClientMsg) String() string { | ||||
| 	return proto.EnumName(EGCBaseClientMsg_name, int32(x)) | ||||
| } | ||||
| func (x *EGCBaseClientMsg) UnmarshalJSON(data []byte) error { | ||||
| 	value, err := proto.UnmarshalJSONEnum(EGCBaseClientMsg_value, data, "EGCBaseClientMsg") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*x = EGCBaseClientMsg(value) | ||||
| 	return nil | ||||
| } | ||||
| func (EGCBaseClientMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{2} } | ||||
|  | ||||
| type EGCToGCMsg int32 | ||||
|  | ||||
| const ( | ||||
| 	EGCToGCMsg_k_EGCToGCMsgMasterAck                   EGCToGCMsg = 150 | ||||
| 	EGCToGCMsg_k_EGCToGCMsgMasterAckResponse           EGCToGCMsg = 151 | ||||
| 	EGCToGCMsg_k_EGCToGCMsgRouted                      EGCToGCMsg = 152 | ||||
| 	EGCToGCMsg_k_EGCToGCMsgRoutedReply                 EGCToGCMsg = 153 | ||||
| 	EGCToGCMsg_k_EMsgGCUpdateSubGCSessionInfo          EGCToGCMsg = 154 | ||||
| 	EGCToGCMsg_k_EMsgGCRequestSubGCSessionInfo         EGCToGCMsg = 155 | ||||
| 	EGCToGCMsg_k_EMsgGCRequestSubGCSessionInfoResponse EGCToGCMsg = 156 | ||||
| 	EGCToGCMsg_k_EGCToGCMsgMasterStartupComplete       EGCToGCMsg = 157 | ||||
| 	EGCToGCMsg_k_EMsgGCToGCSOCacheSubscribe            EGCToGCMsg = 158 | ||||
| 	EGCToGCMsg_k_EMsgGCToGCSOCacheUnsubscribe          EGCToGCMsg = 159 | ||||
| 	EGCToGCMsg_k_EMsgGCToGCLoadSessionSOCache          EGCToGCMsg = 160 | ||||
| 	EGCToGCMsg_k_EMsgGCToGCLoadSessionSOCacheResponse  EGCToGCMsg = 161 | ||||
| 	EGCToGCMsg_k_EMsgGCToGCUpdateSessionStats          EGCToGCMsg = 162 | ||||
| ) | ||||
|  | ||||
| var EGCToGCMsg_name = map[int32]string{ | ||||
| 	150: "k_EGCToGCMsgMasterAck", | ||||
| 	151: "k_EGCToGCMsgMasterAckResponse", | ||||
| 	152: "k_EGCToGCMsgRouted", | ||||
| 	153: "k_EGCToGCMsgRoutedReply", | ||||
| 	154: "k_EMsgGCUpdateSubGCSessionInfo", | ||||
| 	155: "k_EMsgGCRequestSubGCSessionInfo", | ||||
| 	156: "k_EMsgGCRequestSubGCSessionInfoResponse", | ||||
| 	157: "k_EGCToGCMsgMasterStartupComplete", | ||||
| 	158: "k_EMsgGCToGCSOCacheSubscribe", | ||||
| 	159: "k_EMsgGCToGCSOCacheUnsubscribe", | ||||
| 	160: "k_EMsgGCToGCLoadSessionSOCache", | ||||
| 	161: "k_EMsgGCToGCLoadSessionSOCacheResponse", | ||||
| 	162: "k_EMsgGCToGCUpdateSessionStats", | ||||
| } | ||||
| var EGCToGCMsg_value = map[string]int32{ | ||||
| 	"k_EGCToGCMsgMasterAck":                   150, | ||||
| 	"k_EGCToGCMsgMasterAckResponse":           151, | ||||
| 	"k_EGCToGCMsgRouted":                      152, | ||||
| 	"k_EGCToGCMsgRoutedReply":                 153, | ||||
| 	"k_EMsgGCUpdateSubGCSessionInfo":          154, | ||||
| 	"k_EMsgGCRequestSubGCSessionInfo":         155, | ||||
| 	"k_EMsgGCRequestSubGCSessionInfoResponse": 156, | ||||
| 	"k_EGCToGCMsgMasterStartupComplete":       157, | ||||
| 	"k_EMsgGCToGCSOCacheSubscribe":            158, | ||||
| 	"k_EMsgGCToGCSOCacheUnsubscribe":          159, | ||||
| 	"k_EMsgGCToGCLoadSessionSOCache":          160, | ||||
| 	"k_EMsgGCToGCLoadSessionSOCacheResponse":  161, | ||||
| 	"k_EMsgGCToGCUpdateSessionStats":          162, | ||||
| } | ||||
|  | ||||
| func (x EGCToGCMsg) Enum() *EGCToGCMsg { | ||||
| 	p := new(EGCToGCMsg) | ||||
| 	*p = x | ||||
| 	return p | ||||
| } | ||||
| func (x EGCToGCMsg) String() string { | ||||
| 	return proto.EnumName(EGCToGCMsg_name, int32(x)) | ||||
| } | ||||
| func (x *EGCToGCMsg) UnmarshalJSON(data []byte) error { | ||||
| 	value, err := proto.UnmarshalJSONEnum(EGCToGCMsg_value, data, "EGCToGCMsg") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*x = EGCToGCMsg(value) | ||||
| 	return nil | ||||
| } | ||||
| func (EGCToGCMsg) EnumDescriptor() ([]byte, []int) { return system_fileDescriptor0, []int{3} } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterEnum("EGCSystemMsg", EGCSystemMsg_name, EGCSystemMsg_value) | ||||
| 	proto.RegisterEnum("ESOMsg", ESOMsg_name, ESOMsg_value) | ||||
| 	proto.RegisterEnum("EGCBaseClientMsg", EGCBaseClientMsg_name, EGCBaseClientMsg_value) | ||||
| 	proto.RegisterEnum("EGCToGCMsg", EGCToGCMsg_name, EGCToGCMsg_value) | ||||
| } | ||||
|  | ||||
| var system_fileDescriptor0 = []byte{ | ||||
| 	// 1475 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x57, 0x59, 0x73, 0x1b, 0xc5, | ||||
| 	0x13, 0xcf, 0x96, 0xfc, 0xff, 0x3f, 0x4c, 0x41, 0xd1, 0x99, 0xc4, 0x47, 0x12, 0x27, 0x4a, 0x42, | ||||
| 	0x0e, 0x62, 0xa8, 0x3c, 0x84, 0xfb, 0x46, 0x91, 0x64, 0x5b, 0x41, 0x8e, 0x15, 0x4b, 0xb6, 0xb9, | ||||
| 	0xcd, 0x7a, 0x35, 0xb6, 0xb6, 0x2c, 0xed, 0x2c, 0x33, 0xbb, 0x26, 0x7e, 0x0b, 0xd7, 0x57, 0xe0, | ||||
| 	0xbe, 0x8b, 0xa3, 0xe0, 0x1b, 0xc0, 0x27, 0xe0, 0x7c, 0x81, 0x57, 0xee, 0x7c, 0x01, 0x1e, 0xb8, | ||||
| 	0x21, 0x55, 0xf4, 0xee, 0xce, 0xce, 0xce, 0x4a, 0xb2, 0x79, 0x93, 0xe6, 0xd7, 0xdd, 0xd3, 0xdd, | ||||
| 	0xd3, 0xfd, 0xeb, 0x5e, 0x42, 0xd7, 0x1d, 0xb9, 0x25, 0x03, 0xd6, 0xeb, 0xc9, 0x75, 0x79, 0xda, | ||||
| 	0x17, 0x3c, 0xe0, 0x53, 0x97, 0x47, 0xc9, 0x55, 0xd5, 0x99, 0x72, 0x33, 0x3e, 0x9f, 0x93, 0xeb, | ||||
| 	0x74, 0x0f, 0xb9, 0x66, 0x63, 0x05, 0x4f, 0xf0, 0x77, 0xcd, 0xdb, 0xb4, 0xbb, 0x6e, 0x1b, 0x76, | ||||
| 	0xd1, 0xdd, 0xe4, 0xea, 0xf4, 0x70, 0x2e, 0xec, 0x06, 0x2e, 0x58, 0x74, 0x82, 0xec, 0x4d, 0x8f, | ||||
| 	0x66, 0x98, 0xc7, 0x84, 0xeb, 0x2c, 0x30, 0xbf, 0xbb, 0x05, 0x84, 0x8e, 0x11, 0x9a, 0x22, 0x89, | ||||
| 	0xd9, 0xb3, 0xb6, 0x64, 0x70, 0x86, 0x1e, 0x22, 0xfb, 0xd3, 0xf3, 0x92, 0xd3, 0x71, 0xd9, 0x26, | ||||
| 	0xeb, 0x31, 0x2f, 0x28, 0x3d, 0x69, 0x8b, 0x36, 0x6b, 0xc3, 0x8d, 0xa6, 0x5e, 0x99, 0x7b, 0x65, | ||||
| 	0xde, 0xeb, 0xd9, 0x5e, 0x1b, 0x6e, 0x32, 0x6f, 0x6a, 0x06, 0xb6, 0x08, 0x1a, 0x5d, 0x7b, 0xcb, | ||||
| 	0xf5, 0xd6, 0xe1, 0x66, 0x3a, 0x4e, 0xf6, 0x64, 0x08, 0xf7, 0x53, 0xe0, 0x16, 0x7a, 0x80, 0x8c, | ||||
| 	0xe7, 0x54, 0x66, 0xec, 0x1e, 0x93, 0x4c, 0x6c, 0x32, 0x01, 0xb7, 0xd2, 0xfd, 0x64, 0xcc, 0xd4, | ||||
| 	0x32, 0xb0, 0xdb, 0xe8, 0x28, 0xd9, 0x9d, 0x62, 0xcb, 0x33, 0x0b, 0xec, 0x89, 0x90, 0xc9, 0x00, | ||||
| 	0x6e, 0x37, 0x5d, 0x8b, 0x8e, 0xa5, 0xcf, 0x3d, 0x0c, 0xe9, 0x0e, 0x7a, 0x94, 0x1c, 0xca, 0x92, | ||||
| 	0x10, 0x2c, 0xa2, 0x99, 0xc8, 0x1a, 0x5e, 0x19, 0xc8, 0xa6, 0xd3, 0x61, 0x3d, 0x1b, 0xee, 0xa4, | ||||
| 	0x53, 0xe4, 0xc4, 0xce, 0x32, 0xda, 0xde, 0x5d, 0x43, 0xec, 0xc5, 0x72, 0x95, 0x6a, 0x63, 0xa1, | ||||
| 	0x5a, 0x2e, 0xb5, 0xaa, 0x15, 0xb8, 0x9b, 0x1e, 0x26, 0x93, 0xc3, 0x64, 0xb4, 0x95, 0x7b, 0xcc, | ||||
| 	0x00, 0x4b, 0xbe, 0x5f, 0xf3, 0xd6, 0xf8, 0xa2, 0xdf, 0xb6, 0x03, 0x4c, 0xf2, 0xbd, 0x66, 0x66, | ||||
| 	0x96, 0xa2, 0xc7, 0xc5, 0xe3, 0x26, 0x93, 0xd2, 0xe5, 0x1e, 0xdc, 0x47, 0xaf, 0x25, 0xc5, 0x6d, | ||||
| 	0x40, 0x6d, 0xbd, 0x64, 0xfa, 0x58, 0xe7, 0x7c, 0x23, 0xf4, 0x4b, 0x8e, 0xc3, 0x43, 0x2f, 0x98, | ||||
| 	0x16, 0xbc, 0x57, 0xf3, 0xfc, 0x30, 0x80, 0xb3, 0xb9, 0xfc, 0x33, 0xaf, 0x3d, 0xdb, 0x6a, 0x35, | ||||
| 	0xd2, 0x64, 0x96, 0xcd, 0x5b, 0xfa, 0x40, 0x7d, 0x4b, 0xc5, 0x7c, 0xf4, 0x86, 0x60, 0x2d, 0x04, | ||||
| 	0x9b, 0x2c, 0x08, 0x7d, 0xa8, 0xd2, 0x22, 0x39, 0x90, 0x22, 0x0b, 0xcc, 0xe1, 0xa2, 0xdd, 0x0c, | ||||
| 	0x7d, 0x9f, 0x8b, 0xa0, 0xe4, 0x04, 0x51, 0x14, 0xd3, 0xf4, 0x3a, 0x72, 0xcc, 0x48, 0x90, 0xf2, | ||||
| 	0xae, 0xc2, 0x02, 0xdb, 0xed, 0xca, 0x15, 0x23, 0x95, 0x33, 0x66, 0x28, 0x68, 0x8a, 0xb9, 0x9b, | ||||
| 	0xac, 0xe6, 0x05, 0x4c, 0x60, 0xd2, 0xe6, 0x30, 0x6c, 0x7b, 0x9d, 0x41, 0xcd, 0x74, 0x64, 0xda, | ||||
| 	0xf5, 0xda, 0xca, 0x9c, 0x84, 0x73, 0x66, 0xad, 0x34, 0xb8, 0x0c, 0x4a, 0x5d, 0x26, 0x02, 0xb8, | ||||
| 	0xdf, 0x2c, 0x4a, 0xbc, 0xbe, 0xee, 0x3a, 0x0c, 0x23, 0x92, 0x50, 0xcf, 0x77, 0x4c, 0xf6, 0x70, | ||||
| 	0x30, 0xd7, 0xa7, 0xa2, 0x2a, 0x5f, 0xc2, 0x79, 0x33, 0x56, 0x03, 0xd0, 0x69, 0x9a, 0xcf, 0x3d, | ||||
| 	0x75, 0xbb, 0x3d, 0x2d, 0x18, 0x53, 0x17, 0x42, 0xc3, 0x8c, 0x2e, 0x8f, 0x69, 0xfd, 0x0b, 0x74, | ||||
| 	0x1f, 0x19, 0x35, 0x2e, 0xa8, 0x35, 0xea, 0xdc, 0xb1, 0xe3, 0x34, 0x2e, 0xd0, 0x23, 0xe4, 0xe0, | ||||
| 	0x50, 0x48, 0x6b, 0x37, 0xe9, 0x41, 0xb2, 0x2f, 0xdf, 0xe9, 0x66, 0xe5, 0xb7, 0x4c, 0xe7, 0xd0, | ||||
| 	0x82, 0x21, 0x01, 0x8b, 0x7d, 0x95, 0x6e, 0x60, 0xda, 0xfc, 0x92, 0x99, 0xe0, 0xa8, 0x50, 0xaa, | ||||
| 	0x3d, 0x7c, 0x41, 0x58, 0xce, 0xdd, 0x9a, 0x1e, 0x6b, 0xad, 0x07, 0xe8, 0x24, 0x99, 0x30, 0x2c, | ||||
| 	0xc7, 0x68, 0x8b, 0xf5, 0xfc, 0x2e, 0x16, 0x33, 0x3c, 0x48, 0x8f, 0x91, 0xc3, 0xdb, 0xa1, 0xda, | ||||
| 	0xc6, 0x43, 0x39, 0xcf, 0x85, 0xed, 0x05, 0x33, 0x51, 0x75, 0x36, 0x6c, 0x29, 0xe1, 0xe1, 0x9c, | ||||
| 	0xe7, 0x39, 0x4c, 0xeb, 0x3f, 0x62, 0xba, 0x38, 0x50, 0x82, 0xf0, 0x28, 0x3d, 0x4e, 0x8e, 0x6c, | ||||
| 	0x0b, 0x6b, 0x2b, 0x8f, 0x99, 0x5d, 0x84, 0x62, 0x0d, 0x26, 0x24, 0xf7, 0xec, 0xf3, 0x11, 0x5d, | ||||
| 	0xc1, 0x8a, 0xd9, 0x45, 0x7d, 0xa0, 0xb6, 0xf0, 0xb8, 0x59, 0x72, 0x31, 0x6f, 0xfb, 0x5d, 0x76, | ||||
| 	0x11, 0x7f, 0x83, 0x6d, 0xe6, 0x61, 0x99, 0xad, 0x96, 0x1a, 0xb5, 0x05, 0xb6, 0xee, 0xe2, 0x23, | ||||
| 	0x88, 0xb8, 0x03, 0xd6, 0x6c, 0x07, 0x2f, 0x61, 0x66, 0x2e, 0x13, 0xa9, 0x73, 0x7c, 0x35, 0x6d, | ||||
| 	0xe4, 0x35, 0xb3, 0xd1, 0xfa, 0xd1, 0xd9, 0x20, 0xf0, 0xb5, 0x1f, 0x1d, 0x7a, 0x3d, 0x39, 0xb9, | ||||
| 	0x9d, 0xe4, 0x34, 0x17, 0xd1, 0x04, 0xd0, 0xc2, 0x2e, 0xd6, 0x64, 0xe6, 0x34, 0xeb, 0x95, 0x6d, | ||||
| 	0x2c, 0xa7, 0x36, 0x86, 0x08, 0x9f, 0x58, 0x58, 0x93, 0x93, 0xc3, 0x20, 0xad, 0xfc, 0xa9, 0x35, | ||||
| 	0x54, 0x1b, 0xa9, 0x03, 0x3e, 0xb3, 0x30, 0x9a, 0xf1, 0x01, 0xa8, 0xc2, 0xba, 0x0c, 0x0b, 0xe3, | ||||
| 	0x73, 0x0b, 0xb3, 0x3d, 0x36, 0xa8, 0x18, 0x57, 0xeb, 0x17, 0x16, 0x66, 0xfb, 0xd0, 0x70, 0x50, | ||||
| 	0x5f, 0xfd, 0xa5, 0x85, 0xf5, 0x0a, 0xba, 0x30, 0x2f, 0xd4, 0x13, 0xdd, 0xaf, 0x2c, 0x2c, 0x86, | ||||
| 	0x89, 0xfe, 0x63, 0xad, 0xf5, 0xb5, 0x85, 0x3d, 0xae, 0xc7, 0xe2, 0x9c, 0x1d, 0xbd, 0x00, 0x7a, | ||||
| 	0x5b, 0x71, 0x05, 0x73, 0x02, 0x2e, 0xb6, 0xe0, 0x1b, 0x8b, 0x9e, 0x24, 0x47, 0xb7, 0x17, 0xd0, | ||||
| 	0x96, 0xbe, 0xcd, 0x3b, 0x99, 0x0a, 0xaa, 0xc7, 0xe5, 0x61, 0x10, 0x4d, 0xc6, 0xef, 0x2c, 0x7c, | ||||
| 	0x8a, 0x13, 0x3b, 0x0b, 0x69, 0x8b, 0xdf, 0x5b, 0xf4, 0x44, 0x56, 0xa8, 0x5a, 0xb8, 0xdc, 0x75, | ||||
| 	0x71, 0x6c, 0x47, 0x94, 0xa9, 0x8c, 0xfe, 0x60, 0xd1, 0xd3, 0xe4, 0xd4, 0x7f, 0xca, 0x69, 0xbb, | ||||
| 	0x3f, 0x5a, 0x48, 0x78, 0xd9, 0x8a, 0xc0, 0x82, 0x79, 0x3f, 0xe2, 0x15, 0x09, 0x3f, 0xe5, 0x92, | ||||
| 	0x91, 0x01, 0x5a, 0xf3, 0x72, 0xb4, 0x76, 0xec, 0x19, 0x5c, 0x2e, 0xce, 0xc0, 0x2f, 0x05, 0x33, | ||||
| 	0xfa, 0xa8, 0x21, 0x42, 0xe1, 0x74, 0x10, 0x6a, 0x89, 0x10, 0x47, 0x07, 0xe6, 0x3c, 0x94, 0xf0, | ||||
| 	0x6b, 0xc1, 0x8c, 0x7e, 0xb8, 0x90, 0xbe, 0xeb, 0xb7, 0x02, 0xb2, 0x80, 0x26, 0xc7, 0x64, 0x80, | ||||
| 	0xa6, 0x93, 0xf2, 0xf7, 0x02, 0xb6, 0x70, 0xc6, 0x23, 0x65, 0xd5, 0xc1, 0x4b, 0xb6, 0x93, 0x18, | ||||
| 	0x29, 0x77, 0x6c, 0x0f, 0x87, 0xc7, 0x1f, 0x05, 0xb3, 0xe4, 0xca, 0x1d, 0xe6, 0x6c, 0x4c, 0x0b, | ||||
| 	0x4c, 0x4a, 0x5b, 0x76, 0x5c, 0x1f, 0xfe, 0x2c, 0x60, 0x13, 0x16, 0xb7, 0x41, 0xb5, 0x1b, 0x7f, | ||||
| 	0x15, 0x90, 0x70, 0x4c, 0x22, 0x6e, 0xe0, 0x3a, 0x83, 0xeb, 0x96, 0xba, 0xb2, 0xee, 0x7a, 0x1b, | ||||
| 	0xf0, 0x77, 0x01, 0x97, 0x8c, 0xe3, 0x3b, 0xca, 0x68, 0x7b, 0xff, 0x14, 0xe8, 0xa9, 0xac, 0x6d, | ||||
| 	0x97, 0x9a, 0xb8, 0xb4, 0xe1, 0xec, 0xc4, 0x62, 0x0e, 0xa5, 0xef, 0x3a, 0x2e, 0x0f, 0x65, 0x34, | ||||
| 	0x47, 0x37, 0xdd, 0x60, 0x0b, 0xae, 0x14, 0xcc, 0xe7, 0xa8, 0x34, 0x94, 0xd5, 0x39, 0xd7, 0x11, | ||||
| 	0xbc, 0x75, 0x11, 0xdf, 0xeb, 0xd2, 0x88, 0x59, 0x9b, 0x83, 0x02, 0xfa, 0xd2, 0xa7, 0x46, 0xcc, | ||||
| 	0xde, 0x88, 0xa7, 0x49, 0xa9, 0x79, 0x1e, 0x9e, 0x1e, 0x31, 0x7b, 0x23, 0x3d, 0xd6, 0x5a, 0xcf, | ||||
| 	0x8c, 0xe0, 0xca, 0x98, 0xe3, 0x51, 0xdf, 0x57, 0x19, 0xaa, 0x23, 0x55, 0xc1, 0xb3, 0x23, 0x66, | ||||
| 	0x7d, 0x0e, 0xe0, 0xda, 0xce, 0x73, 0x23, 0x53, 0x3f, 0x5b, 0xe4, 0xff, 0xd5, 0xe6, 0x7c, 0xb6, | ||||
| 	0xdf, 0xc6, 0xbf, 0x57, 0xca, 0x82, 0x45, 0x53, 0x61, 0x34, 0x77, 0x98, 0x3c, 0x35, 0x8c, 0xd1, | ||||
| 	0xbd, 0xb1, 0xcb, 0xc9, 0x61, 0x05, 0x99, 0x4a, 0xf0, 0x2d, 0x18, 0x57, 0x94, 0xa8, 0xf4, 0x23, | ||||
| 	0x1e, 0x68, 0x86, 0xab, 0xd2, 0x11, 0xee, 0x2a, 0xae, 0x57, 0x13, 0x6a, 0xc7, 0x35, 0xd0, 0x45, | ||||
| 	0x4f, 0x66, 0xf8, 0x3e, 0x45, 0xe9, 0xe6, 0x45, 0x29, 0x2f, 0xc3, 0x7e, 0x35, 0x16, 0x06, 0x4d, | ||||
| 	0xfb, 0xc9, 0xd8, 0x5d, 0x13, 0x4c, 0x76, 0x60, 0x52, 0x51, 0xf7, 0x50, 0x0f, 0x16, 0xfd, 0x16, | ||||
| 	0xaf, 0x44, 0xde, 0x1f, 0x9c, 0xba, 0x62, 0x11, 0xc0, 0xcc, 0x44, 0xed, 0xa1, 0x3b, 0x51, 0x75, | ||||
| 	0x4f, 0x5c, 0xb3, 0x8d, 0xb8, 0x25, 0x13, 0x2a, 0xff, 0x68, 0x5c, 0xd1, 0xa6, 0x81, 0xa8, 0xe4, | ||||
| 	0x7d, 0x3c, 0xae, 0xda, 0x20, 0x86, 0x12, 0x4b, 0xcb, 0xac, 0xeb, 0xf0, 0x1e, 0x83, 0x77, 0x8a, | ||||
| 	0x26, 0xd6, 0x8c, 0x77, 0xe8, 0x14, 0x7b, 0xb7, 0x68, 0x5e, 0x96, 0xe8, 0xcd, 0xb2, 0x6e, 0x97, | ||||
| 	0xc3, 0x7b, 0x39, 0x24, 0xd1, 0x4a, 0x90, 0xf7, 0x8b, 0xaa, 0x89, 0x0d, 0x1d, 0xfc, 0x12, 0xf0, | ||||
| 	0x58, 0xbc, 0xd9, 0xa9, 0x26, 0xfe, 0x20, 0x27, 0x94, 0xa8, 0x0f, 0x08, 0x7d, 0x58, 0x9c, 0xba, | ||||
| 	0x5c, 0x20, 0x04, 0xe3, 0x6f, 0xf1, 0xb8, 0x3a, 0x74, 0x2f, 0xab, 0xff, 0x09, 0x4b, 0x95, 0x9c, | ||||
| 	0x0d, 0x78, 0xde, 0xd2, 0x0d, 0xd6, 0x8f, 0xe9, 0x24, 0xbc, 0x90, 0x31, 0x96, 0x92, 0x89, 0x38, | ||||
| 	0x0d, 0x1f, 0xf4, 0xc5, 0x6c, 0xa8, 0xe4, 0x80, 0xe4, 0x53, 0xe8, 0x25, 0xcb, 0x74, 0x55, 0x51, | ||||
| 	0x48, 0xb8, 0x1a, 0x79, 0x1d, 0xf3, 0x48, 0xb4, 0x99, 0xc3, 0xcb, 0x96, 0xa2, 0x81, 0x58, 0x48, | ||||
| 	0xbd, 0xc8, 0x80, 0xd4, 0x2b, 0x16, 0xbd, 0x21, 0x9e, 0xa1, 0x3b, 0x49, 0x69, 0x7f, 0x5f, 0xcd, | ||||
| 	0x98, 0x3b, 0x17, 0x53, 0xfc, 0x2d, 0x14, 0xfa, 0xb8, 0x47, 0xfa, 0xf1, 0xd4, 0x7b, 0x2d, 0x9d, | ||||
| 	0xa8, 0xb1, 0xd5, 0x48, 0xb4, 0x39, 0x9f, 0xaf, 0x28, 0x78, 0x3d, 0x17, 0x83, 0x21, 0x62, 0x14, | ||||
| 	0x36, 0xbc, 0x31, 0x20, 0x54, 0xe7, 0x76, 0x5b, 0x79, 0xa6, 0xe4, 0xe1, 0xcd, 0x74, 0xf6, 0xec, | ||||
| 	0x20, 0xa4, 0x23, 0x78, 0x6b, 0xc0, 0x62, 0x8e, 0x81, 0x93, 0xd9, 0xfa, 0xb6, 0x75, 0xf6, 0x7f, | ||||
| 	0xb3, 0xd6, 0x25, 0x6b, 0xd7, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x05, 0xab, 0xaf, 0x14, 0xda, | ||||
| 	0x0e, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										188
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/inventory.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/inventory.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,188 @@ | ||||
| /* | ||||
| Includes inventory types as used in the trade package | ||||
| */ | ||||
| package inventory | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"github.com/Philipp15b/go-steam/jsont" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| type GenericInventory map[uint32]map[uint64]*Inventory | ||||
|  | ||||
| func NewGenericInventory() GenericInventory { | ||||
| 	iMap := make(map[uint32]map[uint64]*Inventory) | ||||
| 	return GenericInventory(iMap) | ||||
| } | ||||
|  | ||||
| // Get inventory for specified AppId and ContextId | ||||
| func (i *GenericInventory) Get(appId uint32, contextId uint64) (*Inventory, error) { | ||||
| 	iMap := (map[uint32]map[uint64]*Inventory)(*i) | ||||
| 	iMap2, ok := iMap[appId] | ||||
| 	if !ok { | ||||
| 		return nil, fmt.Errorf("inventory for specified appId not found") | ||||
| 	} | ||||
| 	inv, ok := iMap2[contextId] | ||||
| 	if !ok { | ||||
| 		return nil, fmt.Errorf("inventory for specified contextId not found") | ||||
| 	} | ||||
| 	return inv, nil | ||||
| } | ||||
|  | ||||
| func (i *GenericInventory) Add(appId uint32, contextId uint64, inv *Inventory) { | ||||
| 	iMap := (map[uint32]map[uint64]*Inventory)(*i) | ||||
| 	iMap2, ok := iMap[appId] | ||||
| 	if !ok { | ||||
| 		iMap2 = make(map[uint64]*Inventory) | ||||
| 		iMap[appId] = iMap2 | ||||
| 	} | ||||
| 	iMap2[contextId] = inv | ||||
| } | ||||
|  | ||||
| type Inventory struct { | ||||
| 	Items        Items        `json:"rgInventory"` | ||||
| 	Currencies   Currencies   `json:"rgCurrency"` | ||||
| 	Descriptions Descriptions `json:"rgDescriptions"` | ||||
| 	AppInfo      *AppInfo     `json:"rgAppInfo"` | ||||
| } | ||||
|  | ||||
| // Items key is an AssetId | ||||
| type Items map[string]*Item | ||||
|  | ||||
| func (i *Items) ToMap() map[string]*Item { | ||||
| 	return (map[string]*Item)(*i) | ||||
| } | ||||
|  | ||||
| func (i *Items) Get(assetId uint64) (*Item, error) { | ||||
| 	iMap := (map[string]*Item)(*i) | ||||
| 	if item, ok := iMap[strconv.FormatUint(assetId, 10)]; ok { | ||||
| 		return item, nil | ||||
| 	} | ||||
| 	return nil, fmt.Errorf("item not found") | ||||
| } | ||||
|  | ||||
| func (i *Items) UnmarshalJSON(data []byte) error { | ||||
| 	if bytes.Equal(data, []byte("[]")) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return json.Unmarshal(data, (*map[string]*Item)(i)) | ||||
| } | ||||
|  | ||||
| type Currencies map[string]*Currency | ||||
|  | ||||
| func (c *Currencies) ToMap() map[string]*Currency { | ||||
| 	return (map[string]*Currency)(*c) | ||||
| } | ||||
|  | ||||
| func (c *Currencies) UnmarshalJSON(data []byte) error { | ||||
| 	if bytes.Equal(data, []byte("[]")) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return json.Unmarshal(data, (*map[string]*Currency)(c)) | ||||
| } | ||||
|  | ||||
| // Descriptions key format is %d_%d, first %d is ClassId, second is InstanceId | ||||
| type Descriptions map[string]*Description | ||||
|  | ||||
| func (d *Descriptions) ToMap() map[string]*Description { | ||||
| 	return (map[string]*Description)(*d) | ||||
| } | ||||
|  | ||||
| func (d *Descriptions) Get(classId uint64, instanceId uint64) (*Description, error) { | ||||
| 	dMap := (map[string]*Description)(*d) | ||||
| 	descId := fmt.Sprintf("%v_%v", classId, instanceId) | ||||
| 	if desc, ok := dMap[descId]; ok { | ||||
| 		return desc, nil | ||||
| 	} | ||||
| 	return nil, fmt.Errorf("description not found") | ||||
| } | ||||
|  | ||||
| func (d *Descriptions) UnmarshalJSON(data []byte) error { | ||||
| 	if bytes.Equal(data, []byte("[]")) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return json.Unmarshal(data, (*map[string]*Description)(d)) | ||||
| } | ||||
|  | ||||
| type Item struct { | ||||
| 	Id         uint64 `json:",string"` | ||||
| 	ClassId    uint64 `json:",string"` | ||||
| 	InstanceId uint64 `json:",string"` | ||||
| 	Amount     uint64 `json:",string"` | ||||
| 	Pos        uint32 | ||||
| } | ||||
|  | ||||
| type Currency struct { | ||||
| 	Id         uint64 `json:",string"` | ||||
| 	ClassId    uint64 `json:",string"` | ||||
| 	IsCurrency bool   `json:"is_currency"` | ||||
| 	Pos        uint32 | ||||
| } | ||||
|  | ||||
| type Description struct { | ||||
| 	AppId      uint32 `json:",string"` | ||||
| 	ClassId    uint64 `json:",string"` | ||||
| 	InstanceId uint64 `json:",string"` | ||||
|  | ||||
| 	IconUrl      string `json:"icon_url"` | ||||
| 	IconUrlLarge string `json:"icon_url_large"` | ||||
| 	IconDragUrl  string `json:"icon_drag_url"` | ||||
|  | ||||
| 	Name           string | ||||
| 	MarketName     string `json:"market_name"` | ||||
| 	MarketHashName string `json:"market_hash_name"` | ||||
|  | ||||
| 	// Colors in hex, for example `B2B2B2` | ||||
| 	NameColor       string `json:"name_color"` | ||||
| 	BackgroundColor string `json:"background_color"` | ||||
|  | ||||
| 	Type string | ||||
|  | ||||
| 	Tradable                  jsont.UintBool | ||||
| 	Marketable                jsont.UintBool | ||||
| 	Commodity                 jsont.UintBool | ||||
| 	MarketTradableRestriction uint32 `json:"market_tradable_restriction,string"` | ||||
|  | ||||
| 	Descriptions DescriptionLines | ||||
| 	Actions      []*Action | ||||
| 	// Application-specific data, like "def_index" and "quality" for TF2 | ||||
| 	AppData map[string]string | ||||
| 	Tags    []*Tag | ||||
| } | ||||
|  | ||||
| type DescriptionLines []*DescriptionLine | ||||
|  | ||||
| func (d *DescriptionLines) UnmarshalJSON(data []byte) error { | ||||
| 	if bytes.Equal(data, []byte(`""`)) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return json.Unmarshal(data, (*[]*DescriptionLine)(d)) | ||||
| } | ||||
|  | ||||
| type DescriptionLine struct { | ||||
| 	Value string | ||||
| 	Type  *string // Is `html` for HTML descriptions | ||||
| 	Color *string | ||||
| } | ||||
|  | ||||
| type Action struct { | ||||
| 	Name string | ||||
| 	Link string | ||||
| } | ||||
|  | ||||
| type AppInfo struct { | ||||
| 	AppId uint32 | ||||
| 	Name  string | ||||
| 	Icon  string | ||||
| 	Link  string | ||||
| } | ||||
|  | ||||
| type Tag struct { | ||||
| 	InternalName string `json:internal_name` | ||||
| 	Name         string | ||||
| 	Category     string | ||||
| 	CategoryName string `json:category_name` | ||||
| } | ||||
							
								
								
									
										79
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/inventory_apps.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/inventory_apps.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| package inventory | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"github.com/Philipp15b/go-steam/steamid" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"regexp" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| type InventoryApps map[string]*InventoryApp | ||||
|  | ||||
| func (i *InventoryApps) Get(appId uint32) (*InventoryApp, error) { | ||||
| 	iMap := (map[string]*InventoryApp)(*i) | ||||
| 	if inventoryApp, ok := iMap[strconv.FormatUint(uint64(appId), 10)]; ok { | ||||
| 		return inventoryApp, nil | ||||
| 	} | ||||
| 	return nil, fmt.Errorf("inventory app not found") | ||||
| } | ||||
|  | ||||
| func (i *InventoryApps) ToMap() map[string]*InventoryApp { | ||||
| 	return (map[string]*InventoryApp)(*i) | ||||
| } | ||||
|  | ||||
| type InventoryApp struct { | ||||
| 	AppId            uint32 | ||||
| 	Name             string | ||||
| 	Icon             string | ||||
| 	Link             string | ||||
| 	AssetCount       uint32   `json:"asset_count"` | ||||
| 	InventoryLogo    string   `json:"inventory_logo"` | ||||
| 	TradePermissions string   `json:"trade_permissions"` | ||||
| 	Contexts         Contexts `json:"rgContexts"` | ||||
| } | ||||
|  | ||||
| type Contexts map[string]*Context | ||||
|  | ||||
| func (c *Contexts) Get(contextId uint64) (*Context, error) { | ||||
| 	cMap := (map[string]*Context)(*c) | ||||
| 	if context, ok := cMap[strconv.FormatUint(contextId, 10)]; ok { | ||||
| 		return context, nil | ||||
| 	} | ||||
| 	return nil, fmt.Errorf("context not found") | ||||
| } | ||||
|  | ||||
| func (c *Contexts) ToMap() map[string]*Context { | ||||
| 	return (map[string]*Context)(*c) | ||||
| } | ||||
|  | ||||
| type Context struct { | ||||
| 	ContextId  uint64 `json:"id,string"` | ||||
| 	AssetCount uint32 `json:"asset_count"` | ||||
| 	Name       string | ||||
| } | ||||
|  | ||||
| func GetInventoryApps(client *http.Client, steamId steamid.SteamId) (InventoryApps, error) { | ||||
| 	resp, err := http.Get("http://steamcommunity.com/profiles/" + steamId.ToString() + "/inventory/") | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
| 	respBody, err := ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	reg := regexp.MustCompile("var g_rgAppContextData = (.*?);") | ||||
| 	inventoryAppsMatches := reg.FindSubmatch(respBody) | ||||
| 	if inventoryAppsMatches == nil { | ||||
| 		return nil, fmt.Errorf("profile inventory not found in steam response") | ||||
| 	} | ||||
| 	var inventoryApps InventoryApps | ||||
| 	if err = json.Unmarshal(inventoryAppsMatches[1], &inventoryApps); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	return inventoryApps, nil | ||||
| } | ||||
							
								
								
									
										28
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/own.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/own.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| package inventory | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| func GetPartialOwnInventory(client *http.Client, contextId uint64, appId uint32, start *uint) (*PartialInventory, error) { | ||||
| 	// TODO: the "trading" parameter can be left off to return non-tradable items too | ||||
| 	url := fmt.Sprintf("http://steamcommunity.com/my/inventory/json/%d/%d?trading=1", appId, contextId) | ||||
| 	if start != nil { | ||||
| 		url += "&start=" + strconv.FormatUint(uint64(*start), 10) | ||||
| 	} | ||||
| 	req, err := http.NewRequest("GET", url, nil) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return DoInventoryRequest(client, req) | ||||
| } | ||||
|  | ||||
| func GetOwnInventory(client *http.Client, contextId uint64, appId uint32) (*Inventory, error) { | ||||
| 	return GetFullInventory(func() (*PartialInventory, error) { | ||||
| 		return GetPartialOwnInventory(client, contextId, appId, nil) | ||||
| 	}, func(start uint) (*PartialInventory, error) { | ||||
| 		return GetPartialOwnInventory(client, contextId, appId, &start) | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										91
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/partial.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								vendor/github.com/Philipp15b/go-steam/economy/inventory/partial.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
| package inventory | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 	"net/http" | ||||
| ) | ||||
|  | ||||
| // A partial inventory as sent by the Steam API. | ||||
| type PartialInventory struct { | ||||
| 	Success bool | ||||
| 	Error   string | ||||
| 	Inventory | ||||
| 	More      bool | ||||
| 	MoreStart MoreStart `json:"more_start"` | ||||
| } | ||||
|  | ||||
| type MoreStart uint | ||||
|  | ||||
| func (m *MoreStart) UnmarshalJSON(data []byte) error { | ||||
| 	if bytes.Equal(data, []byte("false")) { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return json.Unmarshal(data, (*uint)(m)) | ||||
| } | ||||
|  | ||||
| func DoInventoryRequest(client *http.Client, req *http.Request) (*PartialInventory, error) { | ||||
| 	resp, err := client.Do(req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
|  | ||||
| 	inv := new(PartialInventory) | ||||
| 	err = json.NewDecoder(resp.Body).Decode(inv) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return inv, nil | ||||
| } | ||||
|  | ||||
| func GetFullInventory(getFirst func() (*PartialInventory, error), getNext func(start uint) (*PartialInventory, error)) (*Inventory, error) { | ||||
| 	first, err := getFirst() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if !first.Success { | ||||
| 		return nil, errors.New("GetFullInventory API call failed: " + first.Error) | ||||
| 	} | ||||
|  | ||||
| 	result := &first.Inventory | ||||
| 	var next *PartialInventory | ||||
| 	for latest := first; latest.More; latest = next { | ||||
| 		next, err := getNext(uint(latest.MoreStart)) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		if !next.Success { | ||||
| 			return nil, errors.New("GetFullInventory API call failed: " + next.Error) | ||||
| 		} | ||||
|  | ||||
| 		result = Merge(result, &next.Inventory) | ||||
| 	} | ||||
|  | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| // Merges the given Inventory into a single Inventory. | ||||
| // The given slice must have at least one element. The first element of the slice is used | ||||
| // and modified. | ||||
| func Merge(p ...*Inventory) *Inventory { | ||||
| 	inv := p[0] | ||||
| 	for idx, i := range p { | ||||
| 		if idx == 0 { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		for key, value := range i.Items { | ||||
| 			inv.Items[key] = value | ||||
| 		} | ||||
| 		for key, value := range i.Descriptions { | ||||
| 			inv.Descriptions[key] = value | ||||
| 		} | ||||
| 		for key, value := range i.Currencies { | ||||
| 			inv.Currencies[key] = value | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return inv | ||||
| } | ||||
							
								
								
									
										79
									
								
								vendor/github.com/Philipp15b/go-steam/gamecoordinator.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								vendor/github.com/Philipp15b/go-steam/gamecoordinator.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/gamecoordinator" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/protobuf" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| ) | ||||
|  | ||||
| type GameCoordinator struct { | ||||
| 	client   *Client | ||||
| 	handlers []GCPacketHandler | ||||
| } | ||||
|  | ||||
| func newGC(client *Client) *GameCoordinator { | ||||
| 	return &GameCoordinator{ | ||||
| 		client:   client, | ||||
| 		handlers: make([]GCPacketHandler, 0), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type GCPacketHandler interface { | ||||
| 	HandleGCPacket(*GCPacket) | ||||
| } | ||||
|  | ||||
| func (g *GameCoordinator) RegisterPacketHandler(handler GCPacketHandler) { | ||||
| 	g.handlers = append(g.handlers, handler) | ||||
| } | ||||
|  | ||||
| func (g *GameCoordinator) HandlePacket(packet *Packet) { | ||||
| 	if packet.EMsg != EMsg_ClientFromGC { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	msg := new(CMsgGCClient) | ||||
| 	packet.ReadProtoMsg(msg) | ||||
|  | ||||
| 	p, err := NewGCPacket(msg) | ||||
| 	if err != nil { | ||||
| 		g.client.Errorf("Error reading GC message: %v", err) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	for _, handler := range g.handlers { | ||||
| 		handler.HandleGCPacket(p) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (g *GameCoordinator) Write(msg IGCMsg) { | ||||
| 	buf := new(bytes.Buffer) | ||||
| 	msg.Serialize(buf) | ||||
|  | ||||
| 	msgType := msg.GetMsgType() | ||||
| 	if msg.IsProto() { | ||||
| 		msgType = msgType | 0x80000000 // mask with protoMask | ||||
| 	} | ||||
|  | ||||
| 	g.client.Write(NewClientMsgProtobuf(EMsg_ClientToGC, &CMsgGCClient{ | ||||
| 		Msgtype: proto.Uint32(msgType), | ||||
| 		Appid:   proto.Uint32(msg.GetAppId()), | ||||
| 		Payload: buf.Bytes(), | ||||
| 	})) | ||||
| } | ||||
|  | ||||
| // Sets you in the given games. Specify none to quit all games. | ||||
| func (g *GameCoordinator) SetGamesPlayed(appIds ...uint64) { | ||||
| 	games := make([]*CMsgClientGamesPlayed_GamePlayed, 0) | ||||
| 	for _, appId := range appIds { | ||||
| 		games = append(games, &CMsgClientGamesPlayed_GamePlayed{ | ||||
| 			GameId: proto.Uint64(appId), | ||||
| 		}) | ||||
| 	} | ||||
|  | ||||
| 	g.client.Write(NewClientMsgProtobuf(EMsg_ClientGamesPlayed, &CMsgClientGamesPlayed{ | ||||
| 		GamesPlayed: games, | ||||
| 	})) | ||||
| } | ||||
							
								
								
									
										295
									
								
								vendor/github.com/Philipp15b/go-steam/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										295
									
								
								vendor/github.com/Philipp15b/go-steam/generator/generator.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,295 @@ | ||||
| /* | ||||
| This program generates the protobuf and SteamLanguage files from the SteamKit data. | ||||
| */ | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"fmt" | ||||
| 	"go/ast" | ||||
| 	"go/parser" | ||||
| 	"go/token" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"path/filepath" | ||||
| 	"regexp" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| var printCommands = false | ||||
|  | ||||
| func main() { | ||||
| 	args := strings.Join(os.Args[1:], " ") | ||||
|  | ||||
| 	found := false | ||||
| 	if strings.Contains(args, "clean") { | ||||
| 		clean() | ||||
| 		found = true | ||||
| 	} | ||||
| 	if strings.Contains(args, "steamlang") { | ||||
| 		buildSteamLanguage() | ||||
| 		found = true | ||||
| 	} | ||||
| 	if strings.Contains(args, "proto") { | ||||
| 		buildProto() | ||||
| 		found = true | ||||
| 	} | ||||
|  | ||||
| 	if !found { | ||||
| 		os.Stderr.WriteString("Invalid target!\nAvailable targets: clean, proto, steamlang\n") | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func clean() { | ||||
| 	print("# Cleaning") | ||||
| 	cleanGlob("../protocol/**/*.pb.go") | ||||
| 	cleanGlob("../tf2/protocol/**/*.pb.go") | ||||
| 	cleanGlob("../dota/protocol/**/*.pb.go") | ||||
|  | ||||
| 	os.Remove("../protocol/steamlang/enums.go") | ||||
| 	os.Remove("../protocol/steamlang/messages.go") | ||||
| } | ||||
|  | ||||
| func cleanGlob(pattern string) { | ||||
| 	protos, _ := filepath.Glob(pattern) | ||||
| 	for _, proto := range protos { | ||||
| 		err := os.Remove(proto) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func buildSteamLanguage() { | ||||
| 	print("# Building Steam Language") | ||||
| 	exePath := "./GoSteamLanguageGenerator/bin/Debug/GoSteamLanguageGenerator.exe" | ||||
|  | ||||
| 	if runtime.GOOS != "windows" { | ||||
| 		execute("mono", exePath, "./SteamKit", "../protocol/steamlang") | ||||
| 	} else { | ||||
| 		execute(exePath, "./SteamKit", "../protocol/steamlang") | ||||
| 	} | ||||
| 	execute("gofmt", "-w", "../protocol/steamlang/enums.go", "../protocol/steamlang/messages.go") | ||||
| } | ||||
|  | ||||
| func buildProto() { | ||||
| 	print("# Building Protobufs") | ||||
|  | ||||
| 	buildProtoMap("steamclient", clientProtoFiles, "../protocol/protobuf") | ||||
| 	buildProtoMap("tf", tf2ProtoFiles, "../tf2/protocol/protobuf") | ||||
| 	buildProtoMap("dota", dotaProtoFiles, "../dota/protocol/protobuf") | ||||
| } | ||||
|  | ||||
| func buildProtoMap(srcSubdir string, files map[string]string, outDir string) { | ||||
| 	os.MkdirAll(outDir, os.ModePerm) | ||||
| 	for proto, out := range files { | ||||
| 		full := filepath.Join(outDir, out) | ||||
| 		compileProto("SteamKit/Resources/Protobufs", srcSubdir, proto, full) | ||||
| 		fixProto(full) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Maps the proto files to their target files. | ||||
| // See `SteamKit/Resources/Protobufs/steamclient/generate-base.bat` for reference. | ||||
| var clientProtoFiles = map[string]string{ | ||||
| 	"steammessages_base.proto":   "base.pb.go", | ||||
| 	"encrypted_app_ticket.proto": "app_ticket.pb.go", | ||||
|  | ||||
| 	"steammessages_clientserver.proto":   "client_server.pb.go", | ||||
| 	"steammessages_clientserver_2.proto": "client_server_2.pb.go", | ||||
|  | ||||
| 	"content_manifest.proto": "content_manifest.pb.go", | ||||
|  | ||||
| 	"steammessages_unified_base.steamclient.proto":      "unified/base.pb.go", | ||||
| 	"steammessages_cloud.steamclient.proto":             "unified/cloud.pb.go", | ||||
| 	"steammessages_credentials.steamclient.proto":       "unified/credentials.pb.go", | ||||
| 	"steammessages_deviceauth.steamclient.proto":        "unified/deviceauth.pb.go", | ||||
| 	"steammessages_gamenotifications.steamclient.proto": "unified/gamenotifications.pb.go", | ||||
| 	"steammessages_offline.steamclient.proto":           "unified/offline.pb.go", | ||||
| 	"steammessages_parental.steamclient.proto":          "unified/parental.pb.go", | ||||
| 	"steammessages_partnerapps.steamclient.proto":       "unified/partnerapps.pb.go", | ||||
| 	"steammessages_player.steamclient.proto":            "unified/player.pb.go", | ||||
| 	"steammessages_publishedfile.steamclient.proto":     "unified/publishedfile.pb.go", | ||||
| } | ||||
|  | ||||
| var tf2ProtoFiles = map[string]string{ | ||||
| 	"base_gcmessages.proto":  "base.pb.go", | ||||
| 	"econ_gcmessages.proto":  "econ.pb.go", | ||||
| 	"gcsdk_gcmessages.proto": "gcsdk.pb.go", | ||||
| 	"tf_gcmessages.proto":    "tf.pb.go", | ||||
| 	"gcsystemmsgs.proto":     "system.pb.go", | ||||
| } | ||||
|  | ||||
| var dotaProtoFiles = map[string]string{ | ||||
| 	"base_gcmessages.proto":                "base.pb.go", | ||||
| 	"econ_gcmessages.proto":                "econ.pb.go", | ||||
| 	"gcsdk_gcmessages.proto":               "gcsdk.pb.go", | ||||
| 	"dota_gcmessages_common.proto":         "dota_common.pb.go", | ||||
| 	"dota_gcmessages_client.proto":         "dota_client.pb.go", | ||||
| 	"dota_gcmessages_client_fantasy.proto": "dota_client_fantasy.pb.go", | ||||
| 	"gcsystemmsgs.proto":                   "system.pb.go", | ||||
| } | ||||
|  | ||||
| func compileProto(srcBase, srcSubdir, proto, target string) { | ||||
| 	outDir, _ := filepath.Split(target) | ||||
| 	err := os.MkdirAll(outDir, os.ModePerm) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	execute("protoc", "--go_out="+outDir, "-I="+srcBase+"/"+srcSubdir, "-I="+srcBase, filepath.Join(srcBase, srcSubdir, proto)) | ||||
| 	out := strings.Replace(filepath.Join(outDir, proto), ".proto", ".pb.go", 1) | ||||
| 	err = forceRename(out, target) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func forceRename(from, to string) error { | ||||
| 	if from != to { | ||||
| 		os.Remove(to) | ||||
| 	} | ||||
| 	return os.Rename(from, to) | ||||
| } | ||||
|  | ||||
| var pkgRegex = regexp.MustCompile(`(package \w+)`) | ||||
| var pkgCommentRegex = regexp.MustCompile(`(?s)(\/\*.*?\*\/\n)package`) | ||||
| var unusedImportCommentRegex = regexp.MustCompile("// discarding unused import .*\n") | ||||
| var fileDescriptorVarRegex = regexp.MustCompile(`fileDescriptor\d+`) | ||||
|  | ||||
| func fixProto(path string) { | ||||
| 	// goprotobuf is really bad at dependencies, so we must fix them manually... | ||||
| 	// It tries to load each dependency of a file as a seperate package (but in a very, very wrong way). | ||||
| 	// Because we want some files in the same package, we'll remove those imports to local files. | ||||
|  | ||||
| 	file, err := ioutil.ReadFile(path) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| 	fset := token.NewFileSet() | ||||
| 	f, err := parser.ParseFile(fset, path, file, parser.ImportsOnly) | ||||
| 	if err != nil { | ||||
| 		panic("Error parsing " + path + ": " + err.Error()) | ||||
| 	} | ||||
|  | ||||
| 	importsToRemove := make([]*ast.ImportSpec, 0) | ||||
| 	for _, i := range f.Imports { | ||||
| 		// We remove all local imports | ||||
| 		if i.Path.Value == "\".\"" { | ||||
| 			importsToRemove = append(importsToRemove, i) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	for _, itr := range importsToRemove { | ||||
| 		// remove the package name from all types | ||||
| 		file = bytes.Replace(file, []byte(itr.Name.Name+"."), []byte{}, -1) | ||||
| 		// and remove the import itself | ||||
| 		file = bytes.Replace(file, []byte(fmt.Sprintf("import %v %v\n", itr.Name.Name, itr.Path.Value)), []byte{}, -1) | ||||
| 	} | ||||
|  | ||||
| 	// remove the package comment because it just includes a list of all messages and | ||||
| 	// collides not only with the other compiled protobuf files, but also our own documentation. | ||||
| 	file = cutAllSubmatch(pkgCommentRegex, file, 1) | ||||
|  | ||||
| 	// remove warnings | ||||
| 	file = unusedImportCommentRegex.ReplaceAllLiteral(file, []byte{}) | ||||
|  | ||||
| 	// fix the package name | ||||
| 	file = pkgRegex.ReplaceAll(file, []byte("package "+inferPackageName(path))) | ||||
|  | ||||
| 	// fix the google dependency; | ||||
| 	// we just reuse the one from protoc-gen-go | ||||
| 	file = bytes.Replace(file, []byte("google/protobuf"), []byte("github.com/golang/protobuf/protoc-gen-go/descriptor"), -1) | ||||
|  | ||||
| 	// we need to prefix local variables created by protoc-gen-go so that they don't clash with others in the same package | ||||
| 	filename := strings.Split(filepath.Base(path), ".")[0] | ||||
| 	file = fileDescriptorVarRegex.ReplaceAllFunc(file, func(match []byte) []byte { | ||||
| 		return []byte(filename + "_" + string(match)) | ||||
| 	}) | ||||
|  | ||||
| 	err = ioutil.WriteFile(path, file, os.ModePerm) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func inferPackageName(path string) string { | ||||
| 	pieces := strings.Split(path, string(filepath.Separator)) | ||||
| 	return pieces[len(pieces)-2] | ||||
| } | ||||
|  | ||||
| func cutAllSubmatch(r *regexp.Regexp, b []byte, n int) []byte { | ||||
| 	i := r.FindSubmatchIndex(b) | ||||
| 	return bytesCut(b, i[2*n], i[2*n+1]) | ||||
| } | ||||
|  | ||||
| // Removes the given section from the byte array | ||||
| func bytesCut(b []byte, from, to int) []byte { | ||||
| 	buf := new(bytes.Buffer) | ||||
| 	buf.Write(b[:from]) | ||||
| 	buf.Write(b[to:]) | ||||
| 	return buf.Bytes() | ||||
| } | ||||
|  | ||||
| func print(text string) { os.Stdout.WriteString(text + "\n") } | ||||
|  | ||||
| func printerr(text string) { os.Stderr.WriteString(text + "\n") } | ||||
|  | ||||
| // This writer appends a "> " after every newline so that the outpout appears quoted. | ||||
| type QuotedWriter struct { | ||||
| 	w       io.Writer | ||||
| 	started bool | ||||
| } | ||||
|  | ||||
| func NewQuotedWriter(w io.Writer) *QuotedWriter { | ||||
| 	return &QuotedWriter{w, false} | ||||
| } | ||||
|  | ||||
| func (w *QuotedWriter) Write(p []byte) (n int, err error) { | ||||
| 	if !w.started { | ||||
| 		_, err = w.w.Write([]byte("> ")) | ||||
| 		if err != nil { | ||||
| 			return n, err | ||||
| 		} | ||||
| 		w.started = true | ||||
| 	} | ||||
|  | ||||
| 	for i, c := range p { | ||||
| 		if c == '\n' { | ||||
| 			nw, err := w.w.Write(p[n : i+1]) | ||||
| 			n += nw | ||||
| 			if err != nil { | ||||
| 				return n, err | ||||
| 			} | ||||
|  | ||||
| 			_, err = w.w.Write([]byte("> ")) | ||||
| 			if err != nil { | ||||
| 				return n, err | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	if n != len(p) { | ||||
| 		nw, err := w.w.Write(p[n:len(p)]) | ||||
| 		n += nw | ||||
| 		return n, err | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func execute(command string, args ...string) { | ||||
| 	if printCommands { | ||||
| 		print(command + " " + strings.Join(args, " ")) | ||||
| 	} | ||||
| 	cmd := exec.Command(command, args...) | ||||
| 	cmd.Stdout = NewQuotedWriter(os.Stdout) | ||||
| 	cmd.Stderr = NewQuotedWriter(os.Stderr) | ||||
| 	err := cmd.Run() | ||||
| 	if err != nil { | ||||
| 		printerr(err.Error()) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										210
									
								
								vendor/github.com/Philipp15b/go-steam/gsbot/gsbot.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								vendor/github.com/Philipp15b/go-steam/gsbot/gsbot.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,210 @@ | ||||
| // The GsBot package contains some useful utilites for working with the | ||||
| // steam package. It implements authentication with sentries, server lists and | ||||
| // logging messages and events. | ||||
| // | ||||
| // Every module is optional and requires an instance of the GsBot struct. | ||||
| // Should a module have a `HandlePacket` method, you must register it with the | ||||
| // steam.Client with `RegisterPacketHandler`. Any module with a `HandleEvent` | ||||
| // method must be integrated into your event loop and should be called for each | ||||
| // event you receive. | ||||
| package gsbot | ||||
|  | ||||
| import ( | ||||
| 	"encoding/hex" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"log" | ||||
| 	"math/rand" | ||||
| 	"net" | ||||
| 	"os" | ||||
| 	"path" | ||||
| 	"reflect" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/Philipp15b/go-steam" | ||||
| 	"github.com/Philipp15b/go-steam/netutil" | ||||
| 	"github.com/Philipp15b/go-steam/protocol" | ||||
| 	"github.com/davecgh/go-spew/spew" | ||||
| ) | ||||
|  | ||||
| // Base structure holding common data among GsBot modules. | ||||
| type GsBot struct { | ||||
| 	Client *steam.Client | ||||
| 	Log    *log.Logger | ||||
| } | ||||
|  | ||||
| // Creates a new GsBot with a new steam.Client where logs are written to stdout. | ||||
| func Default() *GsBot { | ||||
| 	return &GsBot{ | ||||
| 		steam.NewClient(), | ||||
| 		log.New(os.Stdout, "", 0), | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // This module handles authentication. It logs on automatically after a ConnectedEvent | ||||
| // and saves the sentry data to a file which is also used for logon if available. | ||||
| // If you're logging on for the first time Steam may require an authcode. You can then | ||||
| // connect again with the new logon details. | ||||
| type Auth struct { | ||||
| 	bot             *GsBot | ||||
| 	details         *LogOnDetails | ||||
| 	sentryPath      string | ||||
| 	machineAuthHash []byte | ||||
| } | ||||
|  | ||||
| func NewAuth(bot *GsBot, details *LogOnDetails, sentryPath string) *Auth { | ||||
| 	return &Auth{ | ||||
| 		bot:        bot, | ||||
| 		details:    details, | ||||
| 		sentryPath: sentryPath, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type LogOnDetails struct { | ||||
| 	Username      string | ||||
| 	Password      string | ||||
| 	AuthCode      string | ||||
| 	TwoFactorCode string | ||||
| } | ||||
|  | ||||
| // This is called automatically after every ConnectedEvent, but must be called once again manually | ||||
| // with an authcode if Steam requires it when logging on for the first time. | ||||
| func (a *Auth) LogOn(details *LogOnDetails) { | ||||
| 	a.details = details | ||||
| 	sentry, err := ioutil.ReadFile(a.sentryPath) | ||||
| 	if err != nil { | ||||
| 		a.bot.Log.Printf("Error loading sentry file from path %v - This is normal if you're logging in for the first time.\n", a.sentryPath) | ||||
| 	} | ||||
| 	a.bot.Client.Auth.LogOn(&steam.LogOnDetails{ | ||||
| 		Username:       details.Username, | ||||
| 		Password:       details.Password, | ||||
| 		SentryFileHash: sentry, | ||||
| 		AuthCode:       details.AuthCode, | ||||
| 		TwoFactorCode:  details.TwoFactorCode, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (a *Auth) HandleEvent(event interface{}) { | ||||
| 	switch e := event.(type) { | ||||
| 	case *steam.ConnectedEvent: | ||||
| 		a.LogOn(a.details) | ||||
| 	case *steam.LoggedOnEvent: | ||||
| 		a.bot.Log.Printf("Logged on (%v) with SteamId %v and account flags %v", e.Result, e.ClientSteamId, e.AccountFlags) | ||||
| 	case *steam.MachineAuthUpdateEvent: | ||||
| 		a.machineAuthHash = e.Hash | ||||
| 		err := ioutil.WriteFile(a.sentryPath, e.Hash, 0666) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // This module saves the server list from ClientCMListEvent and uses | ||||
| // it when you call `Connect()`. | ||||
| type ServerList struct { | ||||
| 	bot      *GsBot | ||||
| 	listPath string | ||||
| } | ||||
|  | ||||
| func NewServerList(bot *GsBot, listPath string) *ServerList { | ||||
| 	return &ServerList{ | ||||
| 		bot, | ||||
| 		listPath, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *ServerList) HandleEvent(event interface{}) { | ||||
| 	switch e := event.(type) { | ||||
| 	case *steam.ClientCMListEvent: | ||||
| 		d, err := json.Marshal(e.Addresses) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 		err = ioutil.WriteFile(s.listPath, d, 0666) | ||||
| 		if err != nil { | ||||
| 			panic(err) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *ServerList) Connect() (bool, error) { | ||||
| 	return s.ConnectBind(nil) | ||||
| } | ||||
|  | ||||
| func (s *ServerList) ConnectBind(laddr *net.TCPAddr) (bool, error) { | ||||
| 	d, err := ioutil.ReadFile(s.listPath) | ||||
| 	if err != nil { | ||||
| 		s.bot.Log.Println("Connecting to random server.") | ||||
| 		s.bot.Client.Connect() | ||||
| 		return false, nil | ||||
| 	} | ||||
| 	var addrs []*netutil.PortAddr | ||||
| 	err = json.Unmarshal(d, &addrs) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 	raddr := addrs[rand.Intn(len(addrs))] | ||||
| 	s.bot.Log.Printf("Connecting to %v from server list\n", raddr) | ||||
| 	s.bot.Client.ConnectToBind(raddr, laddr) | ||||
| 	return true, nil | ||||
| } | ||||
|  | ||||
| // This module logs incoming packets and events to a directory. | ||||
| type Debug struct { | ||||
| 	packetId, eventId uint64 | ||||
| 	bot               *GsBot | ||||
| 	base              string | ||||
| } | ||||
|  | ||||
| func NewDebug(bot *GsBot, base string) (*Debug, error) { | ||||
| 	base = path.Join(base, fmt.Sprint(time.Now().Unix())) | ||||
| 	err := os.MkdirAll(path.Join(base, "events"), 0700) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	err = os.MkdirAll(path.Join(base, "packets"), 0700) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &Debug{ | ||||
| 		0, 0, | ||||
| 		bot, | ||||
| 		base, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| func (d *Debug) HandlePacket(packet *protocol.Packet) { | ||||
| 	d.packetId++ | ||||
| 	name := path.Join(d.base, "packets", fmt.Sprintf("%d_%d_%s", time.Now().Unix(), d.packetId, packet.EMsg)) | ||||
|  | ||||
| 	text := packet.String() + "\n\n" + hex.Dump(packet.Data) | ||||
| 	err := ioutil.WriteFile(name+".txt", []byte(text), 0666) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
|  | ||||
| 	err = ioutil.WriteFile(name+".bin", packet.Data, 0666) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (d *Debug) HandleEvent(event interface{}) { | ||||
| 	d.eventId++ | ||||
| 	name := fmt.Sprintf("%d_%d_%s.txt", time.Now().Unix(), d.eventId, name(event)) | ||||
| 	err := ioutil.WriteFile(path.Join(d.base, "events", name), []byte(spew.Sdump(event)), 0666) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func name(obj interface{}) string { | ||||
| 	val := reflect.ValueOf(obj) | ||||
| 	ind := reflect.Indirect(val) | ||||
| 	if ind.IsValid() { | ||||
| 		return ind.Type().Name() | ||||
| 	} else { | ||||
| 		return val.Type().Name() | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										56
									
								
								vendor/github.com/Philipp15b/go-steam/gsbot/gsbot/gsbot.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								vendor/github.com/Philipp15b/go-steam/gsbot/gsbot/gsbot.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| // A simple example that uses the modules from the gsbot package and go-steam to log on | ||||
| // to the Steam network. | ||||
| // | ||||
| // The command expects log on data, optionally with an auth code: | ||||
| // | ||||
| //     gsbot [username] [password] | ||||
| //     gsbot [username] [password] [authcode] | ||||
| package main | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
|  | ||||
| 	"github.com/Philipp15b/go-steam" | ||||
| 	"github.com/Philipp15b/go-steam/gsbot" | ||||
| 	"github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| ) | ||||
|  | ||||
| func main() { | ||||
| 	if len(os.Args) < 3 { | ||||
| 		fmt.Println("gsbot example\nusage: \n\tgsbot [username] [password] [authcode]") | ||||
| 		return | ||||
| 	} | ||||
| 	authcode := "" | ||||
| 	if len(os.Args) > 3 { | ||||
| 		authcode = os.Args[3] | ||||
| 	} | ||||
|  | ||||
| 	bot := gsbot.Default() | ||||
| 	client := bot.Client | ||||
| 	auth := gsbot.NewAuth(bot, &gsbot.LogOnDetails{ | ||||
| 		os.Args[1], | ||||
| 		os.Args[2], | ||||
| 		authcode, | ||||
| 	}, "sentry.bin") | ||||
| 	debug, err := gsbot.NewDebug(bot, "debug") | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	client.RegisterPacketHandler(debug) | ||||
| 	serverList := gsbot.NewServerList(bot, "serverlist.json") | ||||
| 	serverList.Connect() | ||||
|  | ||||
| 	for event := range client.Events() { | ||||
| 		auth.HandleEvent(event) | ||||
| 		debug.HandleEvent(event) | ||||
| 		serverList.HandleEvent(event) | ||||
|  | ||||
| 		switch e := event.(type) { | ||||
| 		case error: | ||||
| 			fmt.Printf("Error: %v", e) | ||||
| 		case *steam.LoggedOnEvent: | ||||
| 			client.Social.SetPersonaState(steamlang.EPersonaState_Online) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										19
									
								
								vendor/github.com/Philipp15b/go-steam/jsont/jsont.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/Philipp15b/go-steam/jsont/jsont.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| // Includes helper types for working with JSON data | ||||
| package jsont | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| ) | ||||
|  | ||||
| // A boolean value that can be unmarshaled from a number in JSON. | ||||
| type UintBool bool | ||||
|  | ||||
| func (u *UintBool) UnmarshalJSON(data []byte) error { | ||||
| 	var n uint | ||||
| 	err := json.Unmarshal(data, &n) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*u = n != 0 | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										58
									
								
								vendor/github.com/Philipp15b/go-steam/keys.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								vendor/github.com/Philipp15b/go-steam/keys.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"crypto/rsa" | ||||
| 	"github.com/Philipp15b/go-steam/cryptoutil" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| ) | ||||
|  | ||||
| var publicKeys = map[EUniverse][]byte{ | ||||
| 	EUniverse_Public: []byte{ | ||||
| 		0x30, 0x81, 0x9D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, | ||||
| 		0x05, 0x00, 0x03, 0x81, 0x8B, 0x00, 0x30, 0x81, 0x87, 0x02, 0x81, 0x81, 0x00, 0xDF, 0xEC, 0x1A, | ||||
| 		0xD6, 0x2C, 0x10, 0x66, 0x2C, 0x17, 0x35, 0x3A, 0x14, 0xB0, 0x7C, 0x59, 0x11, 0x7F, 0x9D, 0xD3, | ||||
| 		0xD8, 0x2B, 0x7A, 0xE3, 0xE0, 0x15, 0xCD, 0x19, 0x1E, 0x46, 0xE8, 0x7B, 0x87, 0x74, 0xA2, 0x18, | ||||
| 		0x46, 0x31, 0xA9, 0x03, 0x14, 0x79, 0x82, 0x8E, 0xE9, 0x45, 0xA2, 0x49, 0x12, 0xA9, 0x23, 0x68, | ||||
| 		0x73, 0x89, 0xCF, 0x69, 0xA1, 0xB1, 0x61, 0x46, 0xBD, 0xC1, 0xBE, 0xBF, 0xD6, 0x01, 0x1B, 0xD8, | ||||
| 		0x81, 0xD4, 0xDC, 0x90, 0xFB, 0xFE, 0x4F, 0x52, 0x73, 0x66, 0xCB, 0x95, 0x70, 0xD7, 0xC5, 0x8E, | ||||
| 		0xBA, 0x1C, 0x7A, 0x33, 0x75, 0xA1, 0x62, 0x34, 0x46, 0xBB, 0x60, 0xB7, 0x80, 0x68, 0xFA, 0x13, | ||||
| 		0xA7, 0x7A, 0x8A, 0x37, 0x4B, 0x9E, 0xC6, 0xF4, 0x5D, 0x5F, 0x3A, 0x99, 0xF9, 0x9E, 0xC4, 0x3A, | ||||
| 		0xE9, 0x63, 0xA2, 0xBB, 0x88, 0x19, 0x28, 0xE0, 0xE7, 0x14, 0xC0, 0x42, 0x89, 0x02, 0x01, 0x11, | ||||
| 	}, | ||||
|  | ||||
| 	EUniverse_Beta: []byte{ | ||||
| 		0x30, 0x81, 0x9D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, | ||||
| 		0x05, 0x00, 0x03, 0x81, 0x8B, 0x00, 0x30, 0x81, 0x87, 0x02, 0x81, 0x81, 0x00, 0xAE, 0xD1, 0x4B, | ||||
| 		0xC0, 0xA3, 0x36, 0x8B, 0xA0, 0x39, 0x0B, 0x43, 0xDC, 0xED, 0x6A, 0xC8, 0xF2, 0xA3, 0xE4, 0x7E, | ||||
| 		0x09, 0x8C, 0x55, 0x2E, 0xE7, 0xE9, 0x3C, 0xBB, 0xE5, 0x5E, 0x0F, 0x18, 0x74, 0x54, 0x8F, 0xF3, | ||||
| 		0xBD, 0x56, 0x69, 0x5B, 0x13, 0x09, 0xAF, 0xC8, 0xBE, 0xB3, 0xA1, 0x48, 0x69, 0xE9, 0x83, 0x49, | ||||
| 		0x65, 0x8D, 0xD2, 0x93, 0x21, 0x2F, 0xB9, 0x1E, 0xFA, 0x74, 0x3B, 0x55, 0x22, 0x79, 0xBF, 0x85, | ||||
| 		0x18, 0xCB, 0x6D, 0x52, 0x44, 0x4E, 0x05, 0x92, 0x89, 0x6A, 0xA8, 0x99, 0xED, 0x44, 0xAE, 0xE2, | ||||
| 		0x66, 0x46, 0x42, 0x0C, 0xFB, 0x6E, 0x4C, 0x30, 0xC6, 0x6C, 0x5C, 0x16, 0xFF, 0xBA, 0x9C, 0xB9, | ||||
| 		0x78, 0x3F, 0x17, 0x4B, 0xCB, 0xC9, 0x01, 0x5D, 0x3E, 0x37, 0x70, 0xEC, 0x67, 0x5A, 0x33, 0x48, | ||||
| 	}, | ||||
|  | ||||
| 	EUniverse_Internal: []byte{ | ||||
| 		0x30, 0x81, 0x9D, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, | ||||
| 		0x05, 0x00, 0x03, 0x81, 0x8B, 0x00, 0x30, 0x81, 0x87, 0x02, 0x81, 0x81, 0x00, 0xA8, 0xFE, 0x01, | ||||
| 		0x3B, 0xB6, 0xD7, 0x21, 0x4B, 0x53, 0x23, 0x6F, 0xA1, 0xAB, 0x4E, 0xF1, 0x07, 0x30, 0xA7, 0xC6, | ||||
| 		0x7E, 0x6A, 0x2C, 0xC2, 0x5D, 0x3A, 0xB8, 0x40, 0xCA, 0x59, 0x4D, 0x16, 0x2D, 0x74, 0xEB, 0x0E, | ||||
| 		0x72, 0x46, 0x29, 0xF9, 0xDE, 0x9B, 0xCE, 0x4B, 0x8C, 0xD0, 0xCA, 0xF4, 0x08, 0x94, 0x46, 0xA5, | ||||
| 		0x11, 0xAF, 0x3A, 0xCB, 0xB8, 0x4E, 0xDE, 0xC6, 0xD8, 0x85, 0x0A, 0x7D, 0xAA, 0x96, 0x0A, 0xEA, | ||||
| 		0x7B, 0x51, 0xD6, 0x22, 0x62, 0x5C, 0x1E, 0x58, 0xD7, 0x46, 0x1E, 0x09, 0xAE, 0x43, 0xA7, 0xC4, | ||||
| 		0x34, 0x69, 0xA2, 0xA5, 0xE8, 0x44, 0x76, 0x18, 0xE2, 0x3D, 0xB7, 0xC5, 0xA8, 0x96, 0xFD, 0xE5, | ||||
| 		0xB4, 0x4B, 0xF8, 0x40, 0x12, 0xA6, 0x17, 0x4E, 0xC4, 0xC1, 0x60, 0x0E, 0xB0, 0xC2, 0xB8, 0x40, | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func GetPublicKey(universe EUniverse) *rsa.PublicKey { | ||||
| 	bytes, ok := publicKeys[universe] | ||||
| 	if !ok { | ||||
| 		return nil | ||||
| 	} | ||||
| 	key, err := cryptoutil.ParseASN1RSAPublicKey(bytes) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	return key | ||||
| } | ||||
							
								
								
									
										43
									
								
								vendor/github.com/Philipp15b/go-steam/netutil/addr.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								vendor/github.com/Philipp15b/go-steam/netutil/addr.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| package netutil | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // An addr that is neither restricted to TCP nor UDP, but has an IP and a port. | ||||
| type PortAddr struct { | ||||
| 	IP   net.IP | ||||
| 	Port uint16 | ||||
| } | ||||
|  | ||||
| // Parses an IP address with a port, for example "209.197.29.196:27017". | ||||
| // If the given string is not valid, this function returns nil. | ||||
| func ParsePortAddr(addr string) *PortAddr { | ||||
| 	parts := strings.Split(addr, ":") | ||||
| 	if len(parts) != 2 { | ||||
| 		return nil | ||||
| 	} | ||||
| 	ip := net.ParseIP(parts[0]) | ||||
| 	if ip == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	port, err := strconv.ParseUint(parts[1], 10, 16) | ||||
| 	if err != nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return &PortAddr{ip, uint16(port)} | ||||
| } | ||||
|  | ||||
| func (p *PortAddr) ToTCPAddr() *net.TCPAddr { | ||||
| 	return &net.TCPAddr{p.IP, int(p.Port), ""} | ||||
| } | ||||
|  | ||||
| func (p *PortAddr) ToUDPAddr() *net.UDPAddr { | ||||
| 	return &net.UDPAddr{p.IP, int(p.Port), ""} | ||||
| } | ||||
|  | ||||
| func (p *PortAddr) String() string { | ||||
| 	return p.IP.String() + ":" + strconv.FormatUint(uint64(p.Port), 10) | ||||
| } | ||||
							
								
								
									
										17
									
								
								vendor/github.com/Philipp15b/go-steam/netutil/http.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/github.com/Philipp15b/go-steam/netutil/http.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| package netutil | ||||
|  | ||||
| import ( | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| // Version of http.Client.PostForm that returns a new request instead of executing it directly. | ||||
| func NewPostForm(url string, data url.Values) *http.Request { | ||||
| 	req, err := http.NewRequest("POST", url, strings.NewReader(data.Encode())) | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	req.Header.Set("Content-Type", "application/x-www-form-urlencoded") | ||||
| 	return req | ||||
| } | ||||
							
								
								
									
										13
									
								
								vendor/github.com/Philipp15b/go-steam/netutil/url.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								vendor/github.com/Philipp15b/go-steam/netutil/url.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| package netutil | ||||
|  | ||||
| import ( | ||||
| 	"net/url" | ||||
| ) | ||||
|  | ||||
| func ToUrlValues(m map[string]string) url.Values { | ||||
| 	r := make(url.Values) | ||||
| 	for k, v := range m { | ||||
| 		r.Add(k, v) | ||||
| 	} | ||||
| 	return r | ||||
| } | ||||
							
								
								
									
										62
									
								
								vendor/github.com/Philipp15b/go-steam/notifications.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								vendor/github.com/Philipp15b/go-steam/notifications.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	. "github.com/Philipp15b/go-steam/protocol" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/protobuf" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| ) | ||||
|  | ||||
| type Notifications struct { | ||||
| 	// Maps notification types to their count. If a type is not present in the map, | ||||
| 	// its count is zero. | ||||
| 	notifications map[NotificationType]uint | ||||
| 	client        *Client | ||||
| } | ||||
|  | ||||
| func newNotifications(client *Client) *Notifications { | ||||
| 	return &Notifications{ | ||||
| 		make(map[NotificationType]uint), | ||||
| 		client, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (n *Notifications) HandlePacket(packet *Packet) { | ||||
| 	switch packet.EMsg { | ||||
| 	case EMsg_ClientUserNotifications: | ||||
| 		n.handleClientUserNotifications(packet) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type NotificationType uint | ||||
|  | ||||
| const ( | ||||
| 	TradeOffer NotificationType = 1 | ||||
| ) | ||||
|  | ||||
| func (n *Notifications) handleClientUserNotifications(packet *Packet) { | ||||
| 	msg := new(CMsgClientUserNotifications) | ||||
| 	packet.ReadProtoMsg(msg) | ||||
|  | ||||
| 	for _, notification := range msg.GetNotifications() { | ||||
| 		typ := NotificationType(*notification.UserNotificationType) | ||||
| 		count := uint(*notification.Count) | ||||
| 		n.notifications[typ] = count | ||||
| 		n.client.Emit(&NotificationEvent{typ, count}) | ||||
| 	} | ||||
|  | ||||
| 	// check if there is a notification in our map that isn't in the current packet | ||||
| 	for typ, _ := range n.notifications { | ||||
| 		exists := false | ||||
| 		for _, t := range msg.GetNotifications() { | ||||
| 			if NotificationType(*t.UserNotificationType) == typ { | ||||
| 				exists = true | ||||
| 				break | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if !exists { | ||||
| 			delete(n.notifications, typ) | ||||
| 			n.client.Emit(&NotificationEvent{typ, 0}) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										9
									
								
								vendor/github.com/Philipp15b/go-steam/notifications_events.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/Philipp15b/go-steam/notifications_events.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| package steam | ||||
|  | ||||
| // This event is emitted for every CMsgClientUserNotifications message and likewise only used for | ||||
| // trade offers. Unlike the the above it is also emitted when the count of a type that was tracked | ||||
| // before by this Notifications instance reaches zero. | ||||
| type NotificationEvent struct { | ||||
| 	Type  NotificationType | ||||
| 	Count uint | ||||
| } | ||||
							
								
								
									
										18
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/doc.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| /* | ||||
| This package includes some basics for the Steam protocol. It defines basic interfaces that are used throughout go-steam: | ||||
| There is IMsg, which is extended by IClientMsg (sent after logging in) and abstracts over | ||||
| the outgoing message types. Both interfaces are implemented by ClientMsgProtobuf and ClientMsg. | ||||
| Msg is like ClientMsg, but it is used for sending messages before logging in. | ||||
|  | ||||
| There is also the concept of a Packet: This is a type for incoming messages where only | ||||
| the header is deserialized. It therefore only contains EMsg data, job information and the remaining data. | ||||
| Its contents can then be read via the Read* methods which read data into a MessageBody - a type which is Serializable and | ||||
| has an EMsg. | ||||
|  | ||||
| In addition, there are extra types for communication with the Game Coordinator (GC) included in the gamecoordinator sub-package. | ||||
| For outgoing messages the IGCMsg interface is used which is implemented by GCMsgProtobuf and GCMsg. | ||||
| Incoming messages are of the GCPacket type and are read like regular Packets. | ||||
|  | ||||
| The actual messages and enums are in the sub-packages steamlang and protobuf, generated from the SteamKit data. | ||||
| */ | ||||
| package protocol | ||||
							
								
								
									
										132
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/gamecoordinator/msg.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/gamecoordinator/msg.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,132 @@ | ||||
| package gamecoordinator | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
|  | ||||
| 	. "github.com/Philipp15b/go-steam/protocol" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| ) | ||||
|  | ||||
| // An outgoing message to the Game Coordinator. | ||||
| type IGCMsg interface { | ||||
| 	Serializer | ||||
| 	IsProto() bool | ||||
| 	GetAppId() uint32 | ||||
| 	GetMsgType() uint32 | ||||
|  | ||||
| 	GetTargetJobId() JobId | ||||
| 	SetTargetJobId(JobId) | ||||
| 	GetSourceJobId() JobId | ||||
| 	SetSourceJobId(JobId) | ||||
| } | ||||
|  | ||||
| type GCMsgProtobuf struct { | ||||
| 	AppId  uint32 | ||||
| 	Header *MsgGCHdrProtoBuf | ||||
| 	Body   proto.Message | ||||
| } | ||||
|  | ||||
| func NewGCMsgProtobuf(appId, msgType uint32, body proto.Message) *GCMsgProtobuf { | ||||
| 	hdr := NewMsgGCHdrProtoBuf() | ||||
| 	hdr.Msg = msgType | ||||
| 	return &GCMsgProtobuf{ | ||||
| 		AppId:  appId, | ||||
| 		Header: hdr, | ||||
| 		Body:   body, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (g *GCMsgProtobuf) IsProto() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| func (g *GCMsgProtobuf) GetAppId() uint32 { | ||||
| 	return g.AppId | ||||
| } | ||||
|  | ||||
| func (g *GCMsgProtobuf) GetMsgType() uint32 { | ||||
| 	return g.Header.Msg | ||||
| } | ||||
|  | ||||
| func (g *GCMsgProtobuf) GetTargetJobId() JobId { | ||||
| 	return JobId(g.Header.Proto.GetJobidTarget()) | ||||
| } | ||||
|  | ||||
| func (g *GCMsgProtobuf) SetTargetJobId(job JobId) { | ||||
| 	g.Header.Proto.JobidTarget = proto.Uint64(uint64(job)) | ||||
| } | ||||
|  | ||||
| func (g *GCMsgProtobuf) GetSourceJobId() JobId { | ||||
| 	return JobId(g.Header.Proto.GetJobidSource()) | ||||
| } | ||||
|  | ||||
| func (g *GCMsgProtobuf) SetSourceJobId(job JobId) { | ||||
| 	g.Header.Proto.JobidSource = proto.Uint64(uint64(job)) | ||||
| } | ||||
|  | ||||
| func (g *GCMsgProtobuf) Serialize(w io.Writer) error { | ||||
| 	err := g.Header.Serialize(w) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	body, err := proto.Marshal(g.Body) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = w.Write(body) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| type GCMsg struct { | ||||
| 	AppId   uint32 | ||||
| 	MsgType uint32 | ||||
| 	Header  *MsgGCHdr | ||||
| 	Body    Serializer | ||||
| } | ||||
|  | ||||
| func NewGCMsg(appId, msgType uint32, body Serializer) *GCMsg { | ||||
| 	return &GCMsg{ | ||||
| 		AppId:   appId, | ||||
| 		MsgType: msgType, | ||||
| 		Header:  NewMsgGCHdr(), | ||||
| 		Body:    body, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (g *GCMsg) GetMsgType() uint32 { | ||||
| 	return g.MsgType | ||||
| } | ||||
|  | ||||
| func (g *GCMsg) GetAppId() uint32 { | ||||
| 	return g.AppId | ||||
| } | ||||
|  | ||||
| func (g *GCMsg) IsProto() bool { | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (g *GCMsg) GetTargetJobId() JobId { | ||||
| 	return JobId(g.Header.TargetJobID) | ||||
| } | ||||
|  | ||||
| func (g *GCMsg) SetTargetJobId(job JobId) { | ||||
| 	g.Header.TargetJobID = uint64(job) | ||||
| } | ||||
|  | ||||
| func (g *GCMsg) GetSourceJobId() JobId { | ||||
| 	return JobId(g.Header.SourceJobID) | ||||
| } | ||||
|  | ||||
| func (g *GCMsg) SetSourceJobId(job JobId) { | ||||
| 	g.Header.SourceJobID = uint64(job) | ||||
| } | ||||
|  | ||||
| func (g *GCMsg) Serialize(w io.Writer) error { | ||||
| 	err := g.Header.Serialize(w) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	err = g.Body.Serialize(w) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										61
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/gamecoordinator/packet.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/gamecoordinator/packet.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| package gamecoordinator | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/protobuf" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| ) | ||||
|  | ||||
| // An incoming, partially unread message from the Game Coordinator. | ||||
| type GCPacket struct { | ||||
| 	AppId       uint32 | ||||
| 	MsgType     uint32 | ||||
| 	IsProto     bool | ||||
| 	GCName      string | ||||
| 	Body        []byte | ||||
| 	TargetJobId JobId | ||||
| } | ||||
|  | ||||
| func NewGCPacket(wrapper *CMsgGCClient) (*GCPacket, error) { | ||||
| 	packet := &GCPacket{ | ||||
| 		AppId:   wrapper.GetAppid(), | ||||
| 		MsgType: wrapper.GetMsgtype(), | ||||
| 		GCName:  wrapper.GetGcname(), | ||||
| 	} | ||||
|  | ||||
| 	r := bytes.NewReader(wrapper.GetPayload()) | ||||
| 	if IsProto(wrapper.GetMsgtype()) { | ||||
| 		packet.MsgType = packet.MsgType & EMsgMask | ||||
| 		packet.IsProto = true | ||||
|  | ||||
| 		header := NewMsgGCHdrProtoBuf() | ||||
| 		err := header.Deserialize(r) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		packet.TargetJobId = JobId(header.Proto.GetJobidTarget()) | ||||
| 	} else { | ||||
| 		header := NewMsgGCHdr() | ||||
| 		err := header.Deserialize(r) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		packet.TargetJobId = JobId(header.TargetJobID) | ||||
| 	} | ||||
|  | ||||
| 	body := make([]byte, r.Len()) | ||||
| 	r.Read(body) | ||||
| 	packet.Body = body | ||||
|  | ||||
| 	return packet, nil | ||||
| } | ||||
|  | ||||
| func (g *GCPacket) ReadProtoMsg(body proto.Message) { | ||||
| 	proto.Unmarshal(g.Body, body) | ||||
| } | ||||
|  | ||||
| func (g *GCPacket) ReadMsg(body MessageBody) { | ||||
| 	body.Deserialize(bytes.NewReader(g.Body)) | ||||
| } | ||||
							
								
								
									
										47
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/internal.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/internal.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | ||||
| package protocol | ||||
|  | ||||
| import ( | ||||
| 	"io" | ||||
| 	"math" | ||||
| 	"strconv" | ||||
|  | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| ) | ||||
|  | ||||
| type JobId uint64 | ||||
|  | ||||
| func (j JobId) String() string { | ||||
| 	if j == math.MaxUint64 { | ||||
| 		return "(none)" | ||||
| 	} | ||||
| 	return strconv.FormatUint(uint64(j), 10) | ||||
| } | ||||
|  | ||||
| type Serializer interface { | ||||
| 	Serialize(w io.Writer) error | ||||
| } | ||||
|  | ||||
| type Deserializer interface { | ||||
| 	Deserialize(r io.Reader) error | ||||
| } | ||||
|  | ||||
| type Serializable interface { | ||||
| 	Serializer | ||||
| 	Deserializer | ||||
| } | ||||
|  | ||||
| type MessageBody interface { | ||||
| 	Serializable | ||||
| 	GetEMsg() EMsg | ||||
| } | ||||
|  | ||||
| // the default details to request in most situations | ||||
| const EClientPersonaStateFlag_DefaultInfoRequest = EClientPersonaStateFlag_PlayerName | | ||||
| 	EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID | | ||||
| 	EClientPersonaStateFlag_GameExtraInfo | ||||
|  | ||||
| const DefaultAvatar = "fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb" | ||||
|  | ||||
| func ValidAvatar(avatar string) bool { | ||||
| 	return !(avatar == "0000000000000000000000000000000000000000" || len(avatar) != 40) | ||||
| } | ||||
							
								
								
									
										221
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/msg.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										221
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/msg.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,221 @@ | ||||
| package protocol | ||||
|  | ||||
| import ( | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| // Interface for all messages, typically outgoing. They can also be created by | ||||
| // using the Read* methods in a PacketMsg. | ||||
| type IMsg interface { | ||||
| 	Serializer | ||||
| 	IsProto() bool | ||||
| 	GetMsgType() EMsg | ||||
| 	GetTargetJobId() JobId | ||||
| 	SetTargetJobId(JobId) | ||||
| 	GetSourceJobId() JobId | ||||
| 	SetSourceJobId(JobId) | ||||
| } | ||||
|  | ||||
| // Interface for client messages, i.e. messages that are sent after logging in. | ||||
| // ClientMsgProtobuf and ClientMsg implement this. | ||||
| type IClientMsg interface { | ||||
| 	IMsg | ||||
| 	GetSessionId() int32 | ||||
| 	SetSessionId(int32) | ||||
| 	GetSteamId() SteamId | ||||
| 	SetSteamId(SteamId) | ||||
| } | ||||
|  | ||||
| // Represents a protobuf backed client message with session data. | ||||
| type ClientMsgProtobuf struct { | ||||
| 	Header *MsgHdrProtoBuf | ||||
| 	Body   proto.Message | ||||
| } | ||||
|  | ||||
| func NewClientMsgProtobuf(eMsg EMsg, body proto.Message) *ClientMsgProtobuf { | ||||
| 	hdr := NewMsgHdrProtoBuf() | ||||
| 	hdr.Msg = eMsg | ||||
| 	return &ClientMsgProtobuf{ | ||||
| 		Header: hdr, | ||||
| 		Body:   body, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) IsProto() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) GetMsgType() EMsg { | ||||
| 	return NewEMsg(uint32(c.Header.Msg)) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) GetSessionId() int32 { | ||||
| 	return c.Header.Proto.GetClientSessionid() | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) SetSessionId(session int32) { | ||||
| 	c.Header.Proto.ClientSessionid = &session | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) GetSteamId() SteamId { | ||||
| 	return SteamId(c.Header.Proto.GetSteamid()) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) SetSteamId(s SteamId) { | ||||
| 	c.Header.Proto.Steamid = proto.Uint64(uint64(s)) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) GetTargetJobId() JobId { | ||||
| 	return JobId(c.Header.Proto.GetJobidTarget()) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) SetTargetJobId(job JobId) { | ||||
| 	c.Header.Proto.JobidTarget = proto.Uint64(uint64(job)) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) GetSourceJobId() JobId { | ||||
| 	return JobId(c.Header.Proto.GetJobidSource()) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) SetSourceJobId(job JobId) { | ||||
| 	c.Header.Proto.JobidSource = proto.Uint64(uint64(job)) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsgProtobuf) Serialize(w io.Writer) error { | ||||
| 	err := c.Header.Serialize(w) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	body, err := proto.Marshal(c.Body) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = w.Write(body) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| // Represents a struct backed client message. | ||||
| type ClientMsg struct { | ||||
| 	Header  *ExtendedClientMsgHdr | ||||
| 	Body    MessageBody | ||||
| 	Payload []byte | ||||
| } | ||||
|  | ||||
| func NewClientMsg(body MessageBody, payload []byte) *ClientMsg { | ||||
| 	hdr := NewExtendedClientMsgHdr() | ||||
| 	hdr.Msg = body.GetEMsg() | ||||
| 	return &ClientMsg{ | ||||
| 		Header:  hdr, | ||||
| 		Body:    body, | ||||
| 		Payload: payload, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) IsProto() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) GetMsgType() EMsg { | ||||
| 	return c.Header.Msg | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) GetSessionId() int32 { | ||||
| 	return c.Header.SessionID | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) SetSessionId(session int32) { | ||||
| 	c.Header.SessionID = session | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) GetSteamId() SteamId { | ||||
| 	return c.Header.SteamID | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) SetSteamId(s SteamId) { | ||||
| 	c.Header.SteamID = s | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) GetTargetJobId() JobId { | ||||
| 	return JobId(c.Header.TargetJobID) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) SetTargetJobId(job JobId) { | ||||
| 	c.Header.TargetJobID = uint64(job) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) GetSourceJobId() JobId { | ||||
| 	return JobId(c.Header.SourceJobID) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) SetSourceJobId(job JobId) { | ||||
| 	c.Header.SourceJobID = uint64(job) | ||||
| } | ||||
|  | ||||
| func (c *ClientMsg) Serialize(w io.Writer) error { | ||||
| 	err := c.Header.Serialize(w) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	err = c.Body.Serialize(w) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = w.Write(c.Payload) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| type Msg struct { | ||||
| 	Header  *MsgHdr | ||||
| 	Body    MessageBody | ||||
| 	Payload []byte | ||||
| } | ||||
|  | ||||
| func NewMsg(body MessageBody, payload []byte) *Msg { | ||||
| 	hdr := NewMsgHdr() | ||||
| 	hdr.Msg = body.GetEMsg() | ||||
| 	return &Msg{ | ||||
| 		Header:  hdr, | ||||
| 		Body:    body, | ||||
| 		Payload: payload, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (m *Msg) GetMsgType() EMsg { | ||||
| 	return m.Header.Msg | ||||
| } | ||||
|  | ||||
| func (m *Msg) IsProto() bool { | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *Msg) GetTargetJobId() JobId { | ||||
| 	return JobId(m.Header.TargetJobID) | ||||
| } | ||||
|  | ||||
| func (m *Msg) SetTargetJobId(job JobId) { | ||||
| 	m.Header.TargetJobID = uint64(job) | ||||
| } | ||||
|  | ||||
| func (m *Msg) GetSourceJobId() JobId { | ||||
| 	return JobId(m.Header.SourceJobID) | ||||
| } | ||||
|  | ||||
| func (m *Msg) SetSourceJobId(job JobId) { | ||||
| 	m.Header.SourceJobID = uint64(job) | ||||
| } | ||||
|  | ||||
| func (m *Msg) Serialize(w io.Writer) error { | ||||
| 	err := m.Header.Serialize(w) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	err = m.Body.Serialize(w) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = w.Write(m.Payload) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										116
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/packet.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/packet.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,116 @@ | ||||
| package protocol | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"encoding/binary" | ||||
| 	"fmt" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| ) | ||||
|  | ||||
| // TODO: Headers are always deserialized twice. | ||||
|  | ||||
| // Represents an incoming, partially unread message. | ||||
| type Packet struct { | ||||
| 	EMsg        EMsg | ||||
| 	IsProto     bool | ||||
| 	TargetJobId JobId | ||||
| 	SourceJobId JobId | ||||
| 	Data        []byte | ||||
| } | ||||
|  | ||||
| func NewPacket(data []byte) (*Packet, error) { | ||||
| 	var rawEMsg uint32 | ||||
| 	err := binary.Read(bytes.NewReader(data), binary.LittleEndian, &rawEMsg) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	eMsg := NewEMsg(rawEMsg) | ||||
| 	buf := bytes.NewReader(data) | ||||
| 	if eMsg == EMsg_ChannelEncryptRequest || eMsg == EMsg_ChannelEncryptResult { | ||||
| 		header := NewMsgHdr() | ||||
| 		header.Msg = eMsg | ||||
| 		err = header.Deserialize(buf) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return &Packet{ | ||||
| 			EMsg:        eMsg, | ||||
| 			IsProto:     false, | ||||
| 			TargetJobId: JobId(header.TargetJobID), | ||||
| 			SourceJobId: JobId(header.SourceJobID), | ||||
| 			Data:        data, | ||||
| 		}, nil | ||||
| 	} else if IsProto(rawEMsg) { | ||||
| 		header := NewMsgHdrProtoBuf() | ||||
| 		header.Msg = eMsg | ||||
| 		err = header.Deserialize(buf) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return &Packet{ | ||||
| 			EMsg:        eMsg, | ||||
| 			IsProto:     true, | ||||
| 			TargetJobId: JobId(header.Proto.GetJobidTarget()), | ||||
| 			SourceJobId: JobId(header.Proto.GetJobidSource()), | ||||
| 			Data:        data, | ||||
| 		}, nil | ||||
| 	} else { | ||||
| 		header := NewExtendedClientMsgHdr() | ||||
| 		header.Msg = eMsg | ||||
| 		err = header.Deserialize(buf) | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		return &Packet{ | ||||
| 			EMsg:        eMsg, | ||||
| 			IsProto:     false, | ||||
| 			TargetJobId: JobId(header.TargetJobID), | ||||
| 			SourceJobId: JobId(header.SourceJobID), | ||||
| 			Data:        data, | ||||
| 		}, nil | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (p *Packet) String() string { | ||||
| 	return fmt.Sprintf("Packet{EMsg = %v, Proto = %v, Len = %v, TargetJobId = %v, SourceJobId = %v}", p.EMsg, p.IsProto, len(p.Data), p.TargetJobId, p.SourceJobId) | ||||
| } | ||||
|  | ||||
| func (p *Packet) ReadProtoMsg(body proto.Message) *ClientMsgProtobuf { | ||||
| 	header := NewMsgHdrProtoBuf() | ||||
| 	buf := bytes.NewBuffer(p.Data) | ||||
| 	header.Deserialize(buf) | ||||
| 	proto.Unmarshal(buf.Bytes(), body) | ||||
| 	return &ClientMsgProtobuf{ // protobuf messages have no payload | ||||
| 		Header: header, | ||||
| 		Body:   body, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (p *Packet) ReadClientMsg(body MessageBody) *ClientMsg { | ||||
| 	header := NewExtendedClientMsgHdr() | ||||
| 	buf := bytes.NewReader(p.Data) | ||||
| 	header.Deserialize(buf) | ||||
| 	body.Deserialize(buf) | ||||
| 	payload := make([]byte, buf.Len()) | ||||
| 	buf.Read(payload) | ||||
| 	return &ClientMsg{ | ||||
| 		Header:  header, | ||||
| 		Body:    body, | ||||
| 		Payload: payload, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (p *Packet) ReadMsg(body MessageBody) *Msg { | ||||
| 	header := NewMsgHdr() | ||||
| 	buf := bytes.NewReader(p.Data) | ||||
| 	header.Deserialize(buf) | ||||
| 	body.Deserialize(buf) | ||||
| 	payload := make([]byte, buf.Len()) | ||||
| 	buf.Read(payload) | ||||
| 	return &Msg{ | ||||
| 		Header:  header, | ||||
| 		Body:    body, | ||||
| 		Payload: payload, | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										82
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/app_ticket.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/app_ticket.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,82 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: encrypted_app_ticket.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package protobuf | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type EncryptedAppTicket struct { | ||||
| 	TicketVersionNo               *uint32 `protobuf:"varint,1,opt,name=ticket_version_no" json:"ticket_version_no,omitempty"` | ||||
| 	CrcEncryptedticket            *uint32 `protobuf:"varint,2,opt,name=crc_encryptedticket" json:"crc_encryptedticket,omitempty"` | ||||
| 	CbEncrypteduserdata           *uint32 `protobuf:"varint,3,opt,name=cb_encrypteduserdata" json:"cb_encrypteduserdata,omitempty"` | ||||
| 	CbEncryptedAppownershipticket *uint32 `protobuf:"varint,4,opt,name=cb_encrypted_appownershipticket" json:"cb_encrypted_appownershipticket,omitempty"` | ||||
| 	EncryptedTicket               []byte  `protobuf:"bytes,5,opt,name=encrypted_ticket" json:"encrypted_ticket,omitempty"` | ||||
| 	XXX_unrecognized              []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *EncryptedAppTicket) Reset()                    { *m = EncryptedAppTicket{} } | ||||
| func (m *EncryptedAppTicket) String() string            { return proto.CompactTextString(m) } | ||||
| func (*EncryptedAppTicket) ProtoMessage()               {} | ||||
| func (*EncryptedAppTicket) Descriptor() ([]byte, []int) { return app_ticket_fileDescriptor0, []int{0} } | ||||
|  | ||||
| func (m *EncryptedAppTicket) GetTicketVersionNo() uint32 { | ||||
| 	if m != nil && m.TicketVersionNo != nil { | ||||
| 		return *m.TicketVersionNo | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *EncryptedAppTicket) GetCrcEncryptedticket() uint32 { | ||||
| 	if m != nil && m.CrcEncryptedticket != nil { | ||||
| 		return *m.CrcEncryptedticket | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *EncryptedAppTicket) GetCbEncrypteduserdata() uint32 { | ||||
| 	if m != nil && m.CbEncrypteduserdata != nil { | ||||
| 		return *m.CbEncrypteduserdata | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *EncryptedAppTicket) GetCbEncryptedAppownershipticket() uint32 { | ||||
| 	if m != nil && m.CbEncryptedAppownershipticket != nil { | ||||
| 		return *m.CbEncryptedAppownershipticket | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *EncryptedAppTicket) GetEncryptedTicket() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.EncryptedTicket | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*EncryptedAppTicket)(nil), "EncryptedAppTicket") | ||||
| } | ||||
|  | ||||
| var app_ticket_fileDescriptor0 = []byte{ | ||||
| 	// 162 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x4a, 0xcd, 0x4b, 0x2e, | ||||
| 	0xaa, 0x2c, 0x28, 0x49, 0x4d, 0x89, 0x4f, 0x2c, 0x28, 0x88, 0x2f, 0xc9, 0x4c, 0xce, 0x4e, 0x2d, | ||||
| 	0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x57, 0x5a, 0xcb, 0xc8, 0x25, 0xe4, 0x0a, 0x93, 0x76, 0x2c, | ||||
| 	0x28, 0x08, 0x01, 0x4b, 0x0a, 0x49, 0x72, 0x09, 0x42, 0x94, 0xc5, 0x97, 0xa5, 0x16, 0x15, 0x67, | ||||
| 	0xe6, 0xe7, 0xc5, 0xe7, 0xe5, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0xf0, 0x0a, 0x49, 0x73, 0x09, 0x27, | ||||
| 	0x17, 0x25, 0xc7, 0xc3, 0xcd, 0x84, 0xa8, 0x93, 0x60, 0x02, 0x4b, 0xca, 0x70, 0x89, 0x24, 0x27, | ||||
| 	0x21, 0xe4, 0x4a, 0x8b, 0x53, 0x8b, 0x52, 0x12, 0x4b, 0x12, 0x25, 0x98, 0xc1, 0xb2, 0xea, 0x5c, | ||||
| 	0xf2, 0xc8, 0xb2, 0x20, 0xd7, 0xe4, 0x97, 0xe7, 0x01, 0x2d, 0xc8, 0xc8, 0x2c, 0x80, 0x1a, 0xc3, | ||||
| 	0x02, 0x56, 0x28, 0xc1, 0x25, 0x80, 0x50, 0x05, 0x95, 0x61, 0x05, 0xca, 0xf0, 0x38, 0xb1, 0x7a, | ||||
| 	0x30, 0x36, 0x30, 0x32, 0x00, 0x02, 0x00, 0x00, 0xff, 0xff, 0x03, 0x8c, 0xdb, 0x92, 0xd3, 0x00, | ||||
| 	0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										613
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										613
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,613 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_base.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package protobuf | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
| import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type CMsgProtoBufHeader struct { | ||||
| 	Steamid           *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	ClientSessionid   *int32  `protobuf:"varint,2,opt,name=client_sessionid" json:"client_sessionid,omitempty"` | ||||
| 	RoutingAppid      *uint32 `protobuf:"varint,3,opt,name=routing_appid" json:"routing_appid,omitempty"` | ||||
| 	JobidSource       *uint64 `protobuf:"fixed64,10,opt,name=jobid_source,def=18446744073709551615" json:"jobid_source,omitempty"` | ||||
| 	JobidTarget       *uint64 `protobuf:"fixed64,11,opt,name=jobid_target,def=18446744073709551615" json:"jobid_target,omitempty"` | ||||
| 	TargetJobName     *string `protobuf:"bytes,12,opt,name=target_job_name" json:"target_job_name,omitempty"` | ||||
| 	SeqNum            *int32  `protobuf:"varint,24,opt,name=seq_num" json:"seq_num,omitempty"` | ||||
| 	Eresult           *int32  `protobuf:"varint,13,opt,name=eresult,def=2" json:"eresult,omitempty"` | ||||
| 	ErrorMessage      *string `protobuf:"bytes,14,opt,name=error_message" json:"error_message,omitempty"` | ||||
| 	Ip                *uint32 `protobuf:"varint,15,opt,name=ip" json:"ip,omitempty"` | ||||
| 	AuthAccountFlags  *uint32 `protobuf:"varint,16,opt,name=auth_account_flags" json:"auth_account_flags,omitempty"` | ||||
| 	TokenSource       *uint32 `protobuf:"varint,22,opt,name=token_source" json:"token_source,omitempty"` | ||||
| 	AdminSpoofingUser *bool   `protobuf:"varint,23,opt,name=admin_spoofing_user" json:"admin_spoofing_user,omitempty"` | ||||
| 	TransportError    *int32  `protobuf:"varint,17,opt,name=transport_error,def=1" json:"transport_error,omitempty"` | ||||
| 	Messageid         *uint64 `protobuf:"varint,18,opt,name=messageid,def=18446744073709551615" json:"messageid,omitempty"` | ||||
| 	PublisherGroupId  *uint32 `protobuf:"varint,19,opt,name=publisher_group_id" json:"publisher_group_id,omitempty"` | ||||
| 	Sysid             *uint32 `protobuf:"varint,20,opt,name=sysid" json:"sysid,omitempty"` | ||||
| 	TraceTag          *uint64 `protobuf:"varint,21,opt,name=trace_tag" json:"trace_tag,omitempty"` | ||||
| 	WebapiKeyId       *uint32 `protobuf:"varint,25,opt,name=webapi_key_id" json:"webapi_key_id,omitempty"` | ||||
| 	XXX_unrecognized  []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) Reset()                    { *m = CMsgProtoBufHeader{} } | ||||
| func (m *CMsgProtoBufHeader) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CMsgProtoBufHeader) ProtoMessage()               {} | ||||
| func (*CMsgProtoBufHeader) Descriptor() ([]byte, []int) { return base_fileDescriptor0, []int{0} } | ||||
|  | ||||
| const Default_CMsgProtoBufHeader_JobidSource uint64 = 18446744073709551615 | ||||
| const Default_CMsgProtoBufHeader_JobidTarget uint64 = 18446744073709551615 | ||||
| const Default_CMsgProtoBufHeader_Eresult int32 = 2 | ||||
| const Default_CMsgProtoBufHeader_TransportError int32 = 1 | ||||
| const Default_CMsgProtoBufHeader_Messageid uint64 = 18446744073709551615 | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetClientSessionid() int32 { | ||||
| 	if m != nil && m.ClientSessionid != nil { | ||||
| 		return *m.ClientSessionid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetRoutingAppid() uint32 { | ||||
| 	if m != nil && m.RoutingAppid != nil { | ||||
| 		return *m.RoutingAppid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetJobidSource() uint64 { | ||||
| 	if m != nil && m.JobidSource != nil { | ||||
| 		return *m.JobidSource | ||||
| 	} | ||||
| 	return Default_CMsgProtoBufHeader_JobidSource | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetJobidTarget() uint64 { | ||||
| 	if m != nil && m.JobidTarget != nil { | ||||
| 		return *m.JobidTarget | ||||
| 	} | ||||
| 	return Default_CMsgProtoBufHeader_JobidTarget | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetTargetJobName() string { | ||||
| 	if m != nil && m.TargetJobName != nil { | ||||
| 		return *m.TargetJobName | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetSeqNum() int32 { | ||||
| 	if m != nil && m.SeqNum != nil { | ||||
| 		return *m.SeqNum | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetEresult() int32 { | ||||
| 	if m != nil && m.Eresult != nil { | ||||
| 		return *m.Eresult | ||||
| 	} | ||||
| 	return Default_CMsgProtoBufHeader_Eresult | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetErrorMessage() string { | ||||
| 	if m != nil && m.ErrorMessage != nil { | ||||
| 		return *m.ErrorMessage | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetIp() uint32 { | ||||
| 	if m != nil && m.Ip != nil { | ||||
| 		return *m.Ip | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetAuthAccountFlags() uint32 { | ||||
| 	if m != nil && m.AuthAccountFlags != nil { | ||||
| 		return *m.AuthAccountFlags | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetTokenSource() uint32 { | ||||
| 	if m != nil && m.TokenSource != nil { | ||||
| 		return *m.TokenSource | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetAdminSpoofingUser() bool { | ||||
| 	if m != nil && m.AdminSpoofingUser != nil { | ||||
| 		return *m.AdminSpoofingUser | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetTransportError() int32 { | ||||
| 	if m != nil && m.TransportError != nil { | ||||
| 		return *m.TransportError | ||||
| 	} | ||||
| 	return Default_CMsgProtoBufHeader_TransportError | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetMessageid() uint64 { | ||||
| 	if m != nil && m.Messageid != nil { | ||||
| 		return *m.Messageid | ||||
| 	} | ||||
| 	return Default_CMsgProtoBufHeader_Messageid | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetPublisherGroupId() uint32 { | ||||
| 	if m != nil && m.PublisherGroupId != nil { | ||||
| 		return *m.PublisherGroupId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetSysid() uint32 { | ||||
| 	if m != nil && m.Sysid != nil { | ||||
| 		return *m.Sysid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetTraceTag() uint64 { | ||||
| 	if m != nil && m.TraceTag != nil { | ||||
| 		return *m.TraceTag | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtoBufHeader) GetWebapiKeyId() uint32 { | ||||
| 	if m != nil && m.WebapiKeyId != nil { | ||||
| 		return *m.WebapiKeyId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CMsgMulti struct { | ||||
| 	SizeUnzipped     *uint32 `protobuf:"varint,1,opt,name=size_unzipped" json:"size_unzipped,omitempty"` | ||||
| 	MessageBody      []byte  `protobuf:"bytes,2,opt,name=message_body" json:"message_body,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CMsgMulti) Reset()                    { *m = CMsgMulti{} } | ||||
| func (m *CMsgMulti) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CMsgMulti) ProtoMessage()               {} | ||||
| func (*CMsgMulti) Descriptor() ([]byte, []int) { return base_fileDescriptor0, []int{1} } | ||||
|  | ||||
| func (m *CMsgMulti) GetSizeUnzipped() uint32 { | ||||
| 	if m != nil && m.SizeUnzipped != nil { | ||||
| 		return *m.SizeUnzipped | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgMulti) GetMessageBody() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.MessageBody | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CMsgProtobufWrapped struct { | ||||
| 	MessageBody      []byte `protobuf:"bytes,1,opt,name=message_body" json:"message_body,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CMsgProtobufWrapped) Reset()                    { *m = CMsgProtobufWrapped{} } | ||||
| func (m *CMsgProtobufWrapped) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CMsgProtobufWrapped) ProtoMessage()               {} | ||||
| func (*CMsgProtobufWrapped) Descriptor() ([]byte, []int) { return base_fileDescriptor0, []int{2} } | ||||
|  | ||||
| func (m *CMsgProtobufWrapped) GetMessageBody() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.MessageBody | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CMsgAuthTicket struct { | ||||
| 	Estate           *uint32 `protobuf:"varint,1,opt,name=estate" json:"estate,omitempty"` | ||||
| 	Eresult          *uint32 `protobuf:"varint,2,opt,name=eresult,def=2" json:"eresult,omitempty"` | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,3,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	Gameid           *uint64 `protobuf:"fixed64,4,opt,name=gameid" json:"gameid,omitempty"` | ||||
| 	HSteamPipe       *uint32 `protobuf:"varint,5,opt,name=h_steam_pipe" json:"h_steam_pipe,omitempty"` | ||||
| 	TicketCrc        *uint32 `protobuf:"varint,6,opt,name=ticket_crc" json:"ticket_crc,omitempty"` | ||||
| 	Ticket           []byte  `protobuf:"bytes,7,opt,name=ticket" json:"ticket,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CMsgAuthTicket) Reset()                    { *m = CMsgAuthTicket{} } | ||||
| func (m *CMsgAuthTicket) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CMsgAuthTicket) ProtoMessage()               {} | ||||
| func (*CMsgAuthTicket) Descriptor() ([]byte, []int) { return base_fileDescriptor0, []int{3} } | ||||
|  | ||||
| const Default_CMsgAuthTicket_Eresult uint32 = 2 | ||||
|  | ||||
| func (m *CMsgAuthTicket) GetEstate() uint32 { | ||||
| 	if m != nil && m.Estate != nil { | ||||
| 		return *m.Estate | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgAuthTicket) GetEresult() uint32 { | ||||
| 	if m != nil && m.Eresult != nil { | ||||
| 		return *m.Eresult | ||||
| 	} | ||||
| 	return Default_CMsgAuthTicket_Eresult | ||||
| } | ||||
|  | ||||
| func (m *CMsgAuthTicket) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgAuthTicket) GetGameid() uint64 { | ||||
| 	if m != nil && m.Gameid != nil { | ||||
| 		return *m.Gameid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgAuthTicket) GetHSteamPipe() uint32 { | ||||
| 	if m != nil && m.HSteamPipe != nil { | ||||
| 		return *m.HSteamPipe | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgAuthTicket) GetTicketCrc() uint32 { | ||||
| 	if m != nil && m.TicketCrc != nil { | ||||
| 		return *m.TicketCrc | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CMsgAuthTicket) GetTicket() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Ticket | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CCDDBAppDetailCommon struct { | ||||
| 	Appid                 *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"` | ||||
| 	Name                  *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` | ||||
| 	Icon                  *string `protobuf:"bytes,3,opt,name=icon" json:"icon,omitempty"` | ||||
| 	Logo                  *string `protobuf:"bytes,4,opt,name=logo" json:"logo,omitempty"` | ||||
| 	LogoSmall             *string `protobuf:"bytes,5,opt,name=logo_small" json:"logo_small,omitempty"` | ||||
| 	Tool                  *bool   `protobuf:"varint,6,opt,name=tool" json:"tool,omitempty"` | ||||
| 	Demo                  *bool   `protobuf:"varint,7,opt,name=demo" json:"demo,omitempty"` | ||||
| 	Media                 *bool   `protobuf:"varint,8,opt,name=media" json:"media,omitempty"` | ||||
| 	CommunityVisibleStats *bool   `protobuf:"varint,9,opt,name=community_visible_stats" json:"community_visible_stats,omitempty"` | ||||
| 	FriendlyName          *string `protobuf:"bytes,10,opt,name=friendly_name" json:"friendly_name,omitempty"` | ||||
| 	Propagation           *string `protobuf:"bytes,11,opt,name=propagation" json:"propagation,omitempty"` | ||||
| 	HasAdultContent       *bool   `protobuf:"varint,12,opt,name=has_adult_content" json:"has_adult_content,omitempty"` | ||||
| 	XXX_unrecognized      []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) Reset()                    { *m = CCDDBAppDetailCommon{} } | ||||
| func (m *CCDDBAppDetailCommon) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CCDDBAppDetailCommon) ProtoMessage()               {} | ||||
| func (*CCDDBAppDetailCommon) Descriptor() ([]byte, []int) { return base_fileDescriptor0, []int{4} } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetName() string { | ||||
| 	if m != nil && m.Name != nil { | ||||
| 		return *m.Name | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetIcon() string { | ||||
| 	if m != nil && m.Icon != nil { | ||||
| 		return *m.Icon | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetLogo() string { | ||||
| 	if m != nil && m.Logo != nil { | ||||
| 		return *m.Logo | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetLogoSmall() string { | ||||
| 	if m != nil && m.LogoSmall != nil { | ||||
| 		return *m.LogoSmall | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetTool() bool { | ||||
| 	if m != nil && m.Tool != nil { | ||||
| 		return *m.Tool | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetDemo() bool { | ||||
| 	if m != nil && m.Demo != nil { | ||||
| 		return *m.Demo | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetMedia() bool { | ||||
| 	if m != nil && m.Media != nil { | ||||
| 		return *m.Media | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetCommunityVisibleStats() bool { | ||||
| 	if m != nil && m.CommunityVisibleStats != nil { | ||||
| 		return *m.CommunityVisibleStats | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetFriendlyName() string { | ||||
| 	if m != nil && m.FriendlyName != nil { | ||||
| 		return *m.FriendlyName | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetPropagation() string { | ||||
| 	if m != nil && m.Propagation != nil { | ||||
| 		return *m.Propagation | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCDDBAppDetailCommon) GetHasAdultContent() bool { | ||||
| 	if m != nil && m.HasAdultContent != nil { | ||||
| 		return *m.HasAdultContent | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CMsgAppRights struct { | ||||
| 	EditInfo                 *bool  `protobuf:"varint,1,opt,name=edit_info" json:"edit_info,omitempty"` | ||||
| 	Publish                  *bool  `protobuf:"varint,2,opt,name=publish" json:"publish,omitempty"` | ||||
| 	ViewErrorData            *bool  `protobuf:"varint,3,opt,name=view_error_data" json:"view_error_data,omitempty"` | ||||
| 	Download                 *bool  `protobuf:"varint,4,opt,name=download" json:"download,omitempty"` | ||||
| 	UploadCdkeys             *bool  `protobuf:"varint,5,opt,name=upload_cdkeys" json:"upload_cdkeys,omitempty"` | ||||
| 	GenerateCdkeys           *bool  `protobuf:"varint,6,opt,name=generate_cdkeys" json:"generate_cdkeys,omitempty"` | ||||
| 	ViewFinancials           *bool  `protobuf:"varint,7,opt,name=view_financials" json:"view_financials,omitempty"` | ||||
| 	ManageCeg                *bool  `protobuf:"varint,8,opt,name=manage_ceg" json:"manage_ceg,omitempty"` | ||||
| 	ManageSigning            *bool  `protobuf:"varint,9,opt,name=manage_signing" json:"manage_signing,omitempty"` | ||||
| 	ManageCdkeys             *bool  `protobuf:"varint,10,opt,name=manage_cdkeys" json:"manage_cdkeys,omitempty"` | ||||
| 	EditMarketing            *bool  `protobuf:"varint,11,opt,name=edit_marketing" json:"edit_marketing,omitempty"` | ||||
| 	EconomySupport           *bool  `protobuf:"varint,12,opt,name=economy_support" json:"economy_support,omitempty"` | ||||
| 	EconomySupportSupervisor *bool  `protobuf:"varint,13,opt,name=economy_support_supervisor" json:"economy_support_supervisor,omitempty"` | ||||
| 	ManagePricing            *bool  `protobuf:"varint,14,opt,name=manage_pricing" json:"manage_pricing,omitempty"` | ||||
| 	BroadcastLive            *bool  `protobuf:"varint,15,opt,name=broadcast_live" json:"broadcast_live,omitempty"` | ||||
| 	XXX_unrecognized         []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) Reset()                    { *m = CMsgAppRights{} } | ||||
| func (m *CMsgAppRights) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CMsgAppRights) ProtoMessage()               {} | ||||
| func (*CMsgAppRights) Descriptor() ([]byte, []int) { return base_fileDescriptor0, []int{5} } | ||||
|  | ||||
| func (m *CMsgAppRights) GetEditInfo() bool { | ||||
| 	if m != nil && m.EditInfo != nil { | ||||
| 		return *m.EditInfo | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetPublish() bool { | ||||
| 	if m != nil && m.Publish != nil { | ||||
| 		return *m.Publish | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetViewErrorData() bool { | ||||
| 	if m != nil && m.ViewErrorData != nil { | ||||
| 		return *m.ViewErrorData | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetDownload() bool { | ||||
| 	if m != nil && m.Download != nil { | ||||
| 		return *m.Download | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetUploadCdkeys() bool { | ||||
| 	if m != nil && m.UploadCdkeys != nil { | ||||
| 		return *m.UploadCdkeys | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetGenerateCdkeys() bool { | ||||
| 	if m != nil && m.GenerateCdkeys != nil { | ||||
| 		return *m.GenerateCdkeys | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetViewFinancials() bool { | ||||
| 	if m != nil && m.ViewFinancials != nil { | ||||
| 		return *m.ViewFinancials | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetManageCeg() bool { | ||||
| 	if m != nil && m.ManageCeg != nil { | ||||
| 		return *m.ManageCeg | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetManageSigning() bool { | ||||
| 	if m != nil && m.ManageSigning != nil { | ||||
| 		return *m.ManageSigning | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetManageCdkeys() bool { | ||||
| 	if m != nil && m.ManageCdkeys != nil { | ||||
| 		return *m.ManageCdkeys | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetEditMarketing() bool { | ||||
| 	if m != nil && m.EditMarketing != nil { | ||||
| 		return *m.EditMarketing | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetEconomySupport() bool { | ||||
| 	if m != nil && m.EconomySupport != nil { | ||||
| 		return *m.EconomySupport | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetEconomySupportSupervisor() bool { | ||||
| 	if m != nil && m.EconomySupportSupervisor != nil { | ||||
| 		return *m.EconomySupportSupervisor | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetManagePricing() bool { | ||||
| 	if m != nil && m.ManagePricing != nil { | ||||
| 		return *m.ManagePricing | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CMsgAppRights) GetBroadcastLive() bool { | ||||
| 	if m != nil && m.BroadcastLive != nil { | ||||
| 		return *m.BroadcastLive | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| var E_MsgpoolSoftLimit = &proto.ExtensionDesc{ | ||||
| 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||
| 	ExtensionType: (*int32)(nil), | ||||
| 	Field:         50000, | ||||
| 	Name:          "msgpool_soft_limit", | ||||
| 	Tag:           "varint,50000,opt,name=msgpool_soft_limit,def=32", | ||||
| } | ||||
|  | ||||
| var E_MsgpoolHardLimit = &proto.ExtensionDesc{ | ||||
| 	ExtendedType:  (*google_protobuf.MessageOptions)(nil), | ||||
| 	ExtensionType: (*int32)(nil), | ||||
| 	Field:         50001, | ||||
| 	Name:          "msgpool_hard_limit", | ||||
| 	Tag:           "varint,50001,opt,name=msgpool_hard_limit,def=384", | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*CMsgProtoBufHeader)(nil), "CMsgProtoBufHeader") | ||||
| 	proto.RegisterType((*CMsgMulti)(nil), "CMsgMulti") | ||||
| 	proto.RegisterType((*CMsgProtobufWrapped)(nil), "CMsgProtobufWrapped") | ||||
| 	proto.RegisterType((*CMsgAuthTicket)(nil), "CMsgAuthTicket") | ||||
| 	proto.RegisterType((*CCDDBAppDetailCommon)(nil), "CCDDBAppDetailCommon") | ||||
| 	proto.RegisterType((*CMsgAppRights)(nil), "CMsgAppRights") | ||||
| 	proto.RegisterExtension(E_MsgpoolSoftLimit) | ||||
| 	proto.RegisterExtension(E_MsgpoolHardLimit) | ||||
| } | ||||
|  | ||||
| var base_fileDescriptor0 = []byte{ | ||||
| 	// 906 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x54, 0x4d, 0x6f, 0x1c, 0x45, | ||||
| 	0x10, 0x65, 0x77, 0xfd, 0x31, 0xdb, 0xde, 0x5d, 0xdb, 0x63, 0x27, 0xee, 0x98, 0x43, 0xa2, 0xbd, | ||||
| 	0x80, 0x40, 0x72, 0xe2, 0x78, 0x1d, 0x1b, 0xdf, 0xfc, 0x71, 0xc8, 0xc5, 0x02, 0x21, 0x24, 0x8e, | ||||
| 	0xad, 0x9e, 0x99, 0xda, 0xd9, 0xc6, 0x33, 0xdd, 0x4d, 0x77, 0x8f, 0xad, 0xcd, 0x89, 0x13, 0x57, | ||||
| 	0xfe, 0x1a, 0xfc, 0x12, 0x6e, 0x88, 0x23, 0xd5, 0x35, 0xb3, 0x38, 0x04, 0x81, 0x72, 0x1a, 0x55, | ||||
| 	0xd5, 0xeb, 0xaa, 0x57, 0xaf, 0xaa, 0x86, 0x71, 0x1f, 0x40, 0xd6, 0x35, 0x78, 0x2f, 0x4b, 0xf0, | ||||
| 	0x22, 0x93, 0x1e, 0x8e, 0xac, 0x33, 0xc1, 0x1c, 0xbe, 0x28, 0x8d, 0x29, 0x2b, 0x78, 0x49, 0x56, | ||||
| 	0xd6, 0xcc, 0x5f, 0x16, 0xe0, 0x73, 0xa7, 0x6c, 0x30, 0xae, 0x45, 0x4c, 0xff, 0x1c, 0xb0, 0xf4, | ||||
| 	0xfa, 0xd6, 0x97, 0xdf, 0x44, 0xeb, 0xaa, 0x99, 0xbf, 0x05, 0x59, 0x80, 0x4b, 0xb7, 0xd9, 0x26, | ||||
| 	0x25, 0x55, 0x05, 0xef, 0xbd, 0xe8, 0x7d, 0xbe, 0x91, 0x72, 0xb6, 0x93, 0x57, 0x0a, 0x74, 0x10, | ||||
| 	0x1e, 0xeb, 0x28, 0xa3, 0x31, 0xd2, 0xc7, 0xc8, 0x7a, 0xfa, 0x84, 0x8d, 0x9d, 0x69, 0x82, 0xd2, | ||||
| 	0xa5, 0x90, 0xd6, 0xa2, 0x7b, 0x80, 0xee, 0x71, 0xfa, 0x05, 0x1b, 0xfd, 0x60, 0x32, 0x55, 0x08, | ||||
| 	0x6f, 0x1a, 0x97, 0x03, 0x67, 0x31, 0xcd, 0xc5, 0xfe, 0xf1, 0xf9, 0x6c, 0xf6, 0xe6, 0x6c, 0x36, | ||||
| 	0x7b, 0x75, 0x76, 0x72, 0xf6, 0xea, 0xab, 0xd3, 0xd3, 0xe3, 0x37, 0xc7, 0xa7, 0x8f, 0xd8, 0x20, | ||||
| 	0x5d, 0x09, 0x81, 0x6f, 0xfd, 0x0f, 0xf6, 0x80, 0x6d, 0xb7, 0x28, 0x81, 0x4f, 0x84, 0x96, 0x35, | ||||
| 	0xf0, 0x11, 0xc2, 0x87, 0x44, 0x19, 0x7e, 0x14, 0xba, 0xa9, 0x39, 0x27, 0x62, 0x29, 0xdb, 0x04, | ||||
| 	0x07, 0xbe, 0xa9, 0x02, 0x1f, 0x47, 0xc7, 0x45, 0xef, 0x75, 0x24, 0x0b, 0xce, 0x19, 0x27, 0x3a, | ||||
| 	0xb5, 0xf8, 0x84, 0xde, 0x32, 0xd6, 0x57, 0x96, 0x6f, 0x13, 0xf1, 0x43, 0x96, 0xca, 0x26, 0x2c, | ||||
| 	0x84, 0xcc, 0x73, 0xd3, 0x60, 0xbf, 0xf3, 0x4a, 0x96, 0x9e, 0xef, 0x50, 0x6c, 0x9f, 0x8d, 0x82, | ||||
| 	0xb9, 0x03, 0xbd, 0x6a, 0xea, 0x29, 0x79, 0x3f, 0x65, 0x7b, 0xb2, 0xa8, 0x15, 0x7a, 0xad, 0x31, | ||||
| 	0xf3, 0x28, 0x44, 0xe3, 0xc1, 0xf1, 0x03, 0x0c, 0x26, 0x98, 0x6e, 0x3b, 0x38, 0xa9, 0x31, 0xe4, | ||||
| 	0x82, 0xa0, 0xda, 0x7c, 0xb7, 0x65, 0x73, 0x9c, 0x7e, 0xc6, 0x86, 0x1d, 0x0f, 0x94, 0x2d, 0x45, | ||||
| 	0xef, 0xda, 0x7f, 0x34, 0x8d, 0x9c, 0x6c, 0x93, 0x55, 0xca, 0x2f, 0xc0, 0x89, 0x12, 0xe5, 0xb6, | ||||
| 	0x02, 0x5f, 0xec, 0x51, 0xf5, 0x31, 0x5b, 0xf7, 0x4b, 0x8f, 0xe6, 0x3e, 0x99, 0xbb, 0x6c, 0x88, | ||||
| 	0xf5, 0x72, 0x40, 0x2d, 0x4b, 0xfe, 0x24, 0xe6, 0x8c, 0x4d, 0x3f, 0x40, 0x26, 0xad, 0x12, 0x77, | ||||
| 	0xb0, 0x8c, 0x0f, 0x9f, 0x45, 0xe4, 0xf4, 0x9c, 0x0d, 0xe3, 0xe4, 0x6f, 0x51, 0x20, 0x15, 0x31, | ||||
| 	0x5e, 0xbd, 0x03, 0xd1, 0xe8, 0x77, 0xca, 0x5a, 0x68, 0xc7, 0x4e, 0x0d, 0x77, 0x0c, 0x45, 0x66, | ||||
| 	0x8a, 0x25, 0x8d, 0x7c, 0x34, 0xfd, 0x92, 0xed, 0xfd, 0xbd, 0x33, 0xb8, 0x55, 0xdf, 0x3b, 0x19, | ||||
| 	0x9f, 0xfc, 0x0b, 0xdc, 0x23, 0xf0, 0x2f, 0x3d, 0x36, 0x89, 0xe8, 0x4b, 0x14, 0xf5, 0x3b, 0x95, | ||||
| 	0xdf, 0x41, 0x48, 0x27, 0x6c, 0x03, 0x7c, 0x90, 0x01, 0xba, 0x2a, 0xef, 0x4d, 0x2a, 0x16, 0x18, | ||||
| 	0xc7, 0x49, 0xbd, 0xb7, 0x81, 0x03, 0xda, 0x40, 0x7c, 0x54, 0xe2, 0xb4, 0xd1, 0x5e, 0x23, 0x1b, | ||||
| 	0xab, 0x2d, 0x04, 0x41, 0x84, 0x55, 0x16, 0xf8, 0x7a, 0x97, 0x8a, 0x05, 0x2a, 0x22, 0x72, 0x97, | ||||
| 	0xf3, 0x0d, 0xf2, 0xe1, 0xcb, 0xd6, 0xc7, 0x37, 0x89, 0xd1, 0x1f, 0x3d, 0xb6, 0x7f, 0x7d, 0x7d, | ||||
| 	0x73, 0x73, 0x75, 0x69, 0xed, 0x0d, 0x04, 0xa9, 0xaa, 0x6b, 0x53, 0xd7, 0x46, 0x47, 0x29, 0xdb, | ||||
| 	0x15, 0x6e, 0x69, 0x8d, 0xd8, 0x1a, 0xed, 0x57, 0x9f, 0x76, 0x04, 0x2d, 0x95, 0x1b, 0x4d, 0x6c, | ||||
| 	0xc8, 0xaa, 0x4c, 0x69, 0x88, 0xcb, 0x30, 0x56, 0x8d, 0x96, 0xf0, 0xb5, 0xac, 0x2a, 0x62, 0x42, | ||||
| 	0x88, 0x60, 0x4c, 0x45, 0x1c, 0x92, 0x68, 0x15, 0x50, 0x1b, 0x62, 0x90, 0xc4, 0x42, 0x35, 0x14, | ||||
| 	0x4a, 0xf2, 0x84, 0xcc, 0xe7, 0xec, 0x20, 0x47, 0x06, 0x8d, 0x56, 0x61, 0x29, 0xee, 0x95, 0x57, | ||||
| 	0x59, 0x05, 0x22, 0x0a, 0xe4, 0xf9, 0x90, 0x00, 0x38, 0x9d, 0xb9, 0xc3, 0xeb, 0x2b, 0xaa, 0x65, | ||||
| 	0xbb, 0xf2, 0x8c, 0x4a, 0xec, 0xb1, 0x2d, 0xbc, 0x62, 0x2b, 0x4b, 0x19, 0xf0, 0x22, 0xe9, 0x6c, | ||||
| 	0x86, 0xe9, 0x33, 0xb6, 0xbb, 0x90, 0x5e, 0xc8, 0x02, 0xe5, 0x14, 0x48, 0x38, 0xe0, 0xd1, 0xd2, | ||||
| 	0x89, 0x24, 0xd3, 0xdf, 0xfb, 0x6c, 0x4c, 0xa3, 0xb0, 0xf6, 0x5b, 0x55, 0x2e, 0x82, 0x8f, 0xdb, | ||||
| 	0x82, 0x3c, 0x82, 0x50, 0x7a, 0x6e, 0xa8, 0xeb, 0x24, 0x0a, 0xdf, 0xed, 0x1a, 0x35, 0x9e, 0xc4, | ||||
| 	0x8b, 0xbb, 0x57, 0xf0, 0xd0, 0x2e, 0xaf, 0x28, 0x64, 0x90, 0xa4, 0x41, 0x92, 0xee, 0xb0, 0xa4, | ||||
| 	0x30, 0x0f, 0xba, 0x32, 0xb2, 0x9d, 0x09, 0xf1, 0x6c, 0x6c, 0xb4, 0x45, 0x5e, 0xe0, 0xae, 0x79, | ||||
| 	0x92, 0x82, 0x32, 0x94, 0xa0, 0xc1, 0xe1, 0xc4, 0x57, 0x81, 0x8d, 0x7f, 0xa4, 0xc6, 0xa3, 0x91, | ||||
| 	0x3a, 0x57, 0xb2, 0xf2, 0x9d, 0x40, 0x28, 0x68, 0x2d, 0x75, 0xdc, 0xa4, 0x1c, 0xca, 0x4e, 0xa5, | ||||
| 	0xa7, 0x6c, 0xd2, 0xf9, 0xbc, 0x2a, 0x35, 0x9e, 0xd9, 0xa3, 0x38, 0x2b, 0x6c, 0x9b, 0x9b, 0xad, | ||||
| 	0xe0, 0xd4, 0x5a, 0x2d, 0x1d, 0x8e, 0x3e, 0xc2, 0xb7, 0x56, 0x35, 0x01, 0x65, 0x31, 0xf5, 0x52, | ||||
| 	0xf8, 0xc6, 0xc6, 0xb3, 0x6c, 0xd5, 0x49, 0xa7, 0xec, 0xf0, 0x83, 0x40, 0xfc, 0x82, 0xc3, 0x81, | ||||
| 	0xe0, 0xd1, 0x8e, 0x3f, 0xe0, 0x60, 0x9d, 0xca, 0x63, 0xd2, 0xc9, 0xca, 0x9f, 0x39, 0xec, 0x3b, | ||||
| 	0x97, 0x3e, 0x88, 0x4a, 0xdd, 0x03, 0xfd, 0x4c, 0x92, 0x8b, 0x4b, 0x96, 0xd6, 0xbe, 0xc4, 0xdf, | ||||
| 	0x42, 0x85, 0xbf, 0x8c, 0x79, 0x0c, 0xd5, 0x2a, 0xa4, 0xcf, 0x8f, 0xda, 0xff, 0xf2, 0xd1, 0xea, | ||||
| 	0xbf, 0x7c, 0x74, 0xdb, 0xde, 0xcd, 0xd7, 0x36, 0x0e, 0xd2, 0xf3, 0x5f, 0x7f, 0x1e, 0xd0, 0x3f, | ||||
| 	0xa2, 0x7f, 0xf2, 0xfa, 0xe2, 0xea, 0x31, 0xc5, 0x42, 0xba, 0xe2, 0x63, 0x53, 0xfc, 0xd6, 0xa5, | ||||
| 	0x18, 0x9c, 0x9c, 0xcf, 0xae, 0xd6, 0xdf, 0xf6, 0x7e, 0xea, 0x7d, 0xf2, 0x57, 0x00, 0x00, 0x00, | ||||
| 	0xff, 0xff, 0x66, 0x1a, 0xa6, 0xfc, 0x29, 0x06, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										9259
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										9259
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										8018
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server_2.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8018
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/client_server_2.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										289
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/content_manifest.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										289
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/content_manifest.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,289 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: content_manifest.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package protobuf | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type ContentManifestPayload struct { | ||||
| 	Mappings         []*ContentManifestPayload_FileMapping `protobuf:"bytes,1,rep,name=mappings" json:"mappings,omitempty"` | ||||
| 	XXX_unrecognized []byte                                `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload) Reset()                    { *m = ContentManifestPayload{} } | ||||
| func (m *ContentManifestPayload) String() string            { return proto.CompactTextString(m) } | ||||
| func (*ContentManifestPayload) ProtoMessage()               {} | ||||
| func (*ContentManifestPayload) Descriptor() ([]byte, []int) { return content_manifest_fileDescriptor0, []int{0} } | ||||
|  | ||||
| func (m *ContentManifestPayload) GetMappings() []*ContentManifestPayload_FileMapping { | ||||
| 	if m != nil { | ||||
| 		return m.Mappings | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type ContentManifestPayload_FileMapping struct { | ||||
| 	Filename         *string                                         `protobuf:"bytes,1,opt,name=filename" json:"filename,omitempty"` | ||||
| 	Size             *uint64                                         `protobuf:"varint,2,opt,name=size" json:"size,omitempty"` | ||||
| 	Flags            *uint32                                         `protobuf:"varint,3,opt,name=flags" json:"flags,omitempty"` | ||||
| 	ShaFilename      []byte                                          `protobuf:"bytes,4,opt,name=sha_filename" json:"sha_filename,omitempty"` | ||||
| 	ShaContent       []byte                                          `protobuf:"bytes,5,opt,name=sha_content" json:"sha_content,omitempty"` | ||||
| 	Chunks           []*ContentManifestPayload_FileMapping_ChunkData `protobuf:"bytes,6,rep,name=chunks" json:"chunks,omitempty"` | ||||
| 	Linktarget       *string                                         `protobuf:"bytes,7,opt,name=linktarget" json:"linktarget,omitempty"` | ||||
| 	XXX_unrecognized []byte                                          `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping) Reset()         { *m = ContentManifestPayload_FileMapping{} } | ||||
| func (m *ContentManifestPayload_FileMapping) String() string { return proto.CompactTextString(m) } | ||||
| func (*ContentManifestPayload_FileMapping) ProtoMessage()    {} | ||||
| func (*ContentManifestPayload_FileMapping) Descriptor() ([]byte, []int) { | ||||
| 	return content_manifest_fileDescriptor0, []int{0, 0} | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping) GetFilename() string { | ||||
| 	if m != nil && m.Filename != nil { | ||||
| 		return *m.Filename | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping) GetSize() uint64 { | ||||
| 	if m != nil && m.Size != nil { | ||||
| 		return *m.Size | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping) GetFlags() uint32 { | ||||
| 	if m != nil && m.Flags != nil { | ||||
| 		return *m.Flags | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping) GetShaFilename() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.ShaFilename | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping) GetShaContent() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.ShaContent | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping) GetChunks() []*ContentManifestPayload_FileMapping_ChunkData { | ||||
| 	if m != nil { | ||||
| 		return m.Chunks | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping) GetLinktarget() string { | ||||
| 	if m != nil && m.Linktarget != nil { | ||||
| 		return *m.Linktarget | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type ContentManifestPayload_FileMapping_ChunkData struct { | ||||
| 	Sha              []byte  `protobuf:"bytes,1,opt,name=sha" json:"sha,omitempty"` | ||||
| 	Crc              *uint32 `protobuf:"fixed32,2,opt,name=crc" json:"crc,omitempty"` | ||||
| 	Offset           *uint64 `protobuf:"varint,3,opt,name=offset" json:"offset,omitempty"` | ||||
| 	CbOriginal       *uint32 `protobuf:"varint,4,opt,name=cb_original" json:"cb_original,omitempty"` | ||||
| 	CbCompressed     *uint32 `protobuf:"varint,5,opt,name=cb_compressed" json:"cb_compressed,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping_ChunkData) Reset() { | ||||
| 	*m = ContentManifestPayload_FileMapping_ChunkData{} | ||||
| } | ||||
| func (m *ContentManifestPayload_FileMapping_ChunkData) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*ContentManifestPayload_FileMapping_ChunkData) ProtoMessage() {} | ||||
| func (*ContentManifestPayload_FileMapping_ChunkData) Descriptor() ([]byte, []int) { | ||||
| 	return content_manifest_fileDescriptor0, []int{0, 0, 0} | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping_ChunkData) GetSha() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Sha | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping_ChunkData) GetCrc() uint32 { | ||||
| 	if m != nil && m.Crc != nil { | ||||
| 		return *m.Crc | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping_ChunkData) GetOffset() uint64 { | ||||
| 	if m != nil && m.Offset != nil { | ||||
| 		return *m.Offset | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping_ChunkData) GetCbOriginal() uint32 { | ||||
| 	if m != nil && m.CbOriginal != nil { | ||||
| 		return *m.CbOriginal | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestPayload_FileMapping_ChunkData) GetCbCompressed() uint32 { | ||||
| 	if m != nil && m.CbCompressed != nil { | ||||
| 		return *m.CbCompressed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type ContentManifestMetadata struct { | ||||
| 	DepotId            *uint32 `protobuf:"varint,1,opt,name=depot_id" json:"depot_id,omitempty"` | ||||
| 	GidManifest        *uint64 `protobuf:"varint,2,opt,name=gid_manifest" json:"gid_manifest,omitempty"` | ||||
| 	CreationTime       *uint32 `protobuf:"varint,3,opt,name=creation_time" json:"creation_time,omitempty"` | ||||
| 	FilenamesEncrypted *bool   `protobuf:"varint,4,opt,name=filenames_encrypted" json:"filenames_encrypted,omitempty"` | ||||
| 	CbDiskOriginal     *uint64 `protobuf:"varint,5,opt,name=cb_disk_original" json:"cb_disk_original,omitempty"` | ||||
| 	CbDiskCompressed   *uint64 `protobuf:"varint,6,opt,name=cb_disk_compressed" json:"cb_disk_compressed,omitempty"` | ||||
| 	UniqueChunks       *uint32 `protobuf:"varint,7,opt,name=unique_chunks" json:"unique_chunks,omitempty"` | ||||
| 	CrcEncrypted       *uint32 `protobuf:"varint,8,opt,name=crc_encrypted" json:"crc_encrypted,omitempty"` | ||||
| 	CrcClear           *uint32 `protobuf:"varint,9,opt,name=crc_clear" json:"crc_clear,omitempty"` | ||||
| 	XXX_unrecognized   []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) Reset()                    { *m = ContentManifestMetadata{} } | ||||
| func (m *ContentManifestMetadata) String() string            { return proto.CompactTextString(m) } | ||||
| func (*ContentManifestMetadata) ProtoMessage()               {} | ||||
| func (*ContentManifestMetadata) Descriptor() ([]byte, []int) { return content_manifest_fileDescriptor0, []int{1} } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetDepotId() uint32 { | ||||
| 	if m != nil && m.DepotId != nil { | ||||
| 		return *m.DepotId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetGidManifest() uint64 { | ||||
| 	if m != nil && m.GidManifest != nil { | ||||
| 		return *m.GidManifest | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetCreationTime() uint32 { | ||||
| 	if m != nil && m.CreationTime != nil { | ||||
| 		return *m.CreationTime | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetFilenamesEncrypted() bool { | ||||
| 	if m != nil && m.FilenamesEncrypted != nil { | ||||
| 		return *m.FilenamesEncrypted | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetCbDiskOriginal() uint64 { | ||||
| 	if m != nil && m.CbDiskOriginal != nil { | ||||
| 		return *m.CbDiskOriginal | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetCbDiskCompressed() uint64 { | ||||
| 	if m != nil && m.CbDiskCompressed != nil { | ||||
| 		return *m.CbDiskCompressed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetUniqueChunks() uint32 { | ||||
| 	if m != nil && m.UniqueChunks != nil { | ||||
| 		return *m.UniqueChunks | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetCrcEncrypted() uint32 { | ||||
| 	if m != nil && m.CrcEncrypted != nil { | ||||
| 		return *m.CrcEncrypted | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestMetadata) GetCrcClear() uint32 { | ||||
| 	if m != nil && m.CrcClear != nil { | ||||
| 		return *m.CrcClear | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type ContentManifestSignature struct { | ||||
| 	Signature        []byte `protobuf:"bytes,1,opt,name=signature" json:"signature,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *ContentManifestSignature) Reset()                    { *m = ContentManifestSignature{} } | ||||
| func (m *ContentManifestSignature) String() string            { return proto.CompactTextString(m) } | ||||
| func (*ContentManifestSignature) ProtoMessage()               {} | ||||
| func (*ContentManifestSignature) Descriptor() ([]byte, []int) { return content_manifest_fileDescriptor0, []int{2} } | ||||
|  | ||||
| func (m *ContentManifestSignature) GetSignature() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Signature | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*ContentManifestPayload)(nil), "ContentManifestPayload") | ||||
| 	proto.RegisterType((*ContentManifestPayload_FileMapping)(nil), "ContentManifestPayload.FileMapping") | ||||
| 	proto.RegisterType((*ContentManifestPayload_FileMapping_ChunkData)(nil), "ContentManifestPayload.FileMapping.ChunkData") | ||||
| 	proto.RegisterType((*ContentManifestMetadata)(nil), "ContentManifestMetadata") | ||||
| 	proto.RegisterType((*ContentManifestSignature)(nil), "ContentManifestSignature") | ||||
| } | ||||
|  | ||||
| var content_manifest_fileDescriptor0 = []byte{ | ||||
| 	// 409 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x8c, 0x91, 0xbd, 0x8e, 0xd4, 0x30, | ||||
| 	0x14, 0x85, 0xc9, 0xfc, 0x26, 0x37, 0x09, 0x5a, 0xbc, 0xb0, 0x58, 0x43, 0x83, 0x96, 0x66, 0x9b, | ||||
| 	0x4d, 0x81, 0x44, 0x49, 0xc3, 0x22, 0x44, 0x33, 0x12, 0x12, 0x0f, 0x10, 0x5d, 0x1c, 0x27, 0x6b, | ||||
| 	0x4d, 0x62, 0x07, 0xdb, 0x29, 0x96, 0x8a, 0x17, 0xe1, 0x0d, 0x91, 0x78, 0x05, 0x6c, 0x27, 0x99, | ||||
| 	0x1d, 0x8d, 0x28, 0x28, 0xcf, 0xf1, 0xb5, 0xcf, 0x77, 0x8f, 0xe1, 0x8a, 0x29, 0x69, 0xb9, 0xb4, | ||||
| 	0x65, 0x87, 0x52, 0xd4, 0xdc, 0xd8, 0xa2, 0xd7, 0xca, 0xaa, 0xeb, 0x3f, 0x0b, 0xb8, 0xba, 0x1b, | ||||
| 	0x8f, 0xf6, 0xd3, 0xc9, 0x17, 0x7c, 0x68, 0x15, 0x56, 0xe4, 0x1d, 0xc4, 0x1d, 0xf6, 0xbd, 0x90, | ||||
| 	0x8d, 0xa1, 0xd1, 0xeb, 0xe5, 0x4d, 0xfa, 0xf6, 0x4d, 0xf1, 0xef, 0xd1, 0xe2, 0x93, 0x68, 0xf9, | ||||
| 	0x7e, 0x9c, 0xdd, 0xfd, 0x5a, 0x40, 0x7a, 0xa2, 0xc9, 0x05, 0xc4, 0xb5, 0x93, 0x12, 0x3b, 0xee, | ||||
| 	0x9e, 0x89, 0x6e, 0x12, 0x92, 0xc1, 0xca, 0x88, 0x1f, 0x9c, 0x2e, 0x9c, 0x5a, 0x91, 0x1c, 0xd6, | ||||
| 	0x75, 0x8b, 0x2e, 0x63, 0xe9, 0x64, 0x4e, 0x9e, 0x43, 0x66, 0xee, 0xb1, 0x3c, 0x5e, 0x59, 0x39, | ||||
| 	0x37, 0x23, 0x97, 0x90, 0x7a, 0x77, 0x5a, 0x82, 0xae, 0x83, 0xf9, 0x1e, 0x36, 0xec, 0x7e, 0x90, | ||||
| 	0x07, 0x43, 0x37, 0x01, 0xef, 0xf6, 0x3f, 0xf0, 0x8a, 0x3b, 0x7f, 0xe3, 0x23, 0x5a, 0x24, 0x04, | ||||
| 	0xa0, 0x15, 0xf2, 0x60, 0x51, 0x37, 0xdc, 0xd2, 0xad, 0x47, 0xdb, 0x21, 0x24, 0x8f, 0x03, 0x29, | ||||
| 	0x2c, 0x5d, 0x68, 0x80, 0xce, 0xbc, 0x60, 0x9a, 0x05, 0xe6, 0x2d, 0x79, 0x0a, 0x1b, 0x55, 0xd7, | ||||
| 	0xc6, 0x5d, 0x5b, 0x86, 0x1d, 0x1c, 0x1e, 0xfb, 0x56, 0x2a, 0x2d, 0x1a, 0x21, 0xb1, 0x0d, 0xcc, | ||||
| 	0x39, 0x79, 0x01, 0xb9, 0x33, 0x99, 0xea, 0x7a, 0xcd, 0x8d, 0xe1, 0x55, 0xa0, 0xce, 0xaf, 0x7f, | ||||
| 	0x47, 0xf0, 0xf2, 0x8c, 0x73, 0xcf, 0x2d, 0x56, 0x3e, 0xd1, 0x75, 0x55, 0xf1, 0x5e, 0xd9, 0x52, | ||||
| 	0x54, 0x21, 0x36, 0xd4, 0xd1, 0x88, 0xea, 0xf8, 0x6b, 0x53, 0x67, 0xfe, 0x69, 0xcd, 0xd1, 0x0a, | ||||
| 	0x25, 0x4b, 0x2b, 0x5c, 0x4b, 0x63, 0x77, 0xaf, 0xe0, 0x72, 0xee, 0xcd, 0x94, 0x5c, 0x32, 0xfd, | ||||
| 	0xd0, 0x5b, 0x97, 0xeb, 0x71, 0x62, 0x42, 0xe1, 0xc2, 0xe1, 0x54, 0xc2, 0x1c, 0x1e, 0x41, 0xd7, | ||||
| 	0xe1, 0xb5, 0x1d, 0x90, 0xf9, 0xe4, 0x84, 0x76, 0x33, 0x27, 0x0d, 0x52, 0x7c, 0x1f, 0x78, 0x39, | ||||
| 	0x55, 0xbd, 0x3d, 0xee, 0xa6, 0xd9, 0x49, 0x46, 0x1c, 0xec, 0x67, 0x90, 0x78, 0x9b, 0xb5, 0x1c, | ||||
| 	0x35, 0x4d, 0xc2, 0xba, 0xb7, 0x40, 0xcf, 0xb6, 0xfd, 0x2a, 0x1a, 0x89, 0x76, 0xd0, 0xdc, 0x8f, | ||||
| 	0x9b, 0x59, 0x8c, 0x35, 0x7f, 0x58, 0x7f, 0x8e, 0x7e, 0x46, 0x4f, 0xfe, 0x06, 0x00, 0x00, 0xff, | ||||
| 	0xff, 0xc6, 0x87, 0xdb, 0xe6, 0xaf, 0x02, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										141
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,141 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_unified_base.steamclient.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package unified | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
| import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type EProtoExecutionSite int32 | ||||
|  | ||||
| const ( | ||||
| 	EProtoExecutionSite_k_EProtoExecutionSiteUnknown     EProtoExecutionSite = 0 | ||||
| 	EProtoExecutionSite_k_EProtoExecutionSiteSteamClient EProtoExecutionSite = 2 | ||||
| ) | ||||
|  | ||||
| var EProtoExecutionSite_name = map[int32]string{ | ||||
| 	0: "k_EProtoExecutionSiteUnknown", | ||||
| 	2: "k_EProtoExecutionSiteSteamClient", | ||||
| } | ||||
| var EProtoExecutionSite_value = map[string]int32{ | ||||
| 	"k_EProtoExecutionSiteUnknown":     0, | ||||
| 	"k_EProtoExecutionSiteSteamClient": 2, | ||||
| } | ||||
|  | ||||
| func (x EProtoExecutionSite) Enum() *EProtoExecutionSite { | ||||
| 	p := new(EProtoExecutionSite) | ||||
| 	*p = x | ||||
| 	return p | ||||
| } | ||||
| func (x EProtoExecutionSite) String() string { | ||||
| 	return proto.EnumName(EProtoExecutionSite_name, int32(x)) | ||||
| } | ||||
| func (x *EProtoExecutionSite) UnmarshalJSON(data []byte) error { | ||||
| 	value, err := proto.UnmarshalJSONEnum(EProtoExecutionSite_value, data, "EProtoExecutionSite") | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	*x = EProtoExecutionSite(value) | ||||
| 	return nil | ||||
| } | ||||
| func (EProtoExecutionSite) EnumDescriptor() ([]byte, []int) { return base_fileDescriptor0, []int{0} } | ||||
|  | ||||
| type NoResponse struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *NoResponse) Reset()                    { *m = NoResponse{} } | ||||
| func (m *NoResponse) String() string            { return proto.CompactTextString(m) } | ||||
| func (*NoResponse) ProtoMessage()               {} | ||||
| func (*NoResponse) Descriptor() ([]byte, []int) { return base_fileDescriptor0, []int{0} } | ||||
|  | ||||
| var E_Description = &proto.ExtensionDesc{ | ||||
| 	ExtendedType:  (*google_protobuf.FieldOptions)(nil), | ||||
| 	ExtensionType: (*string)(nil), | ||||
| 	Field:         50000, | ||||
| 	Name:          "description", | ||||
| 	Tag:           "bytes,50000,opt,name=description", | ||||
| } | ||||
|  | ||||
| var E_ServiceDescription = &proto.ExtensionDesc{ | ||||
| 	ExtendedType:  (*google_protobuf.ServiceOptions)(nil), | ||||
| 	ExtensionType: (*string)(nil), | ||||
| 	Field:         50000, | ||||
| 	Name:          "service_description", | ||||
| 	Tag:           "bytes,50000,opt,name=service_description", | ||||
| } | ||||
|  | ||||
| var E_ServiceExecutionSite = &proto.ExtensionDesc{ | ||||
| 	ExtendedType:  (*google_protobuf.ServiceOptions)(nil), | ||||
| 	ExtensionType: (*EProtoExecutionSite)(nil), | ||||
| 	Field:         50008, | ||||
| 	Name:          "service_execution_site", | ||||
| 	Tag:           "varint,50008,opt,name=service_execution_site,enum=EProtoExecutionSite,def=0", | ||||
| } | ||||
|  | ||||
| var E_MethodDescription = &proto.ExtensionDesc{ | ||||
| 	ExtendedType:  (*google_protobuf.MethodOptions)(nil), | ||||
| 	ExtensionType: (*string)(nil), | ||||
| 	Field:         50000, | ||||
| 	Name:          "method_description", | ||||
| 	Tag:           "bytes,50000,opt,name=method_description", | ||||
| } | ||||
|  | ||||
| var E_EnumDescription = &proto.ExtensionDesc{ | ||||
| 	ExtendedType:  (*google_protobuf.EnumOptions)(nil), | ||||
| 	ExtensionType: (*string)(nil), | ||||
| 	Field:         50000, | ||||
| 	Name:          "enum_description", | ||||
| 	Tag:           "bytes,50000,opt,name=enum_description", | ||||
| } | ||||
|  | ||||
| var E_EnumValueDescription = &proto.ExtensionDesc{ | ||||
| 	ExtendedType:  (*google_protobuf.EnumValueOptions)(nil), | ||||
| 	ExtensionType: (*string)(nil), | ||||
| 	Field:         50000, | ||||
| 	Name:          "enum_value_description", | ||||
| 	Tag:           "bytes,50000,opt,name=enum_value_description", | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*NoResponse)(nil), "NoResponse") | ||||
| 	proto.RegisterEnum("EProtoExecutionSite", EProtoExecutionSite_name, EProtoExecutionSite_value) | ||||
| 	proto.RegisterExtension(E_Description) | ||||
| 	proto.RegisterExtension(E_ServiceDescription) | ||||
| 	proto.RegisterExtension(E_ServiceExecutionSite) | ||||
| 	proto.RegisterExtension(E_MethodDescription) | ||||
| 	proto.RegisterExtension(E_EnumDescription) | ||||
| 	proto.RegisterExtension(E_EnumValueDescription) | ||||
| } | ||||
|  | ||||
| var base_fileDescriptor0 = []byte{ | ||||
| 	// 306 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x90, 0x4d, 0x4b, 0xc3, 0x40, | ||||
| 	0x10, 0x86, 0x1b, 0xc5, 0x83, 0xa3, 0x48, 0x48, 0xa5, 0x88, 0x54, 0x8d, 0xe2, 0x41, 0x44, 0xb6, | ||||
| 	0x20, 0x1e, 0x24, 0x88, 0x07, 0x4b, 0xc4, 0x8b, 0x1f, 0x18, 0xf4, 0x26, 0x21, 0x4d, 0xa6, 0x71, | ||||
| 	0x69, 0xb2, 0x1b, 0xb2, 0xbb, 0xd5, 0xa3, 0x27, 0x7f, 0x9f, 0x47, 0x7f, 0x8e, 0xcd, 0x86, 0x80, | ||||
| 	0xf9, 0x40, 0x8f, 0xc9, 0xfb, 0x3e, 0xb3, 0xcf, 0x0c, 0x9c, 0x08, 0x89, 0x41, 0x9a, 0xa2, 0x10, | ||||
| 	0x41, 0x8c, 0xc2, 0x57, 0x8c, 0x4e, 0x29, 0x46, 0xfe, 0x24, 0x10, 0x48, 0x74, 0x14, 0x26, 0x14, | ||||
| 	0x99, 0x24, 0x59, 0xce, 0x25, 0xdf, 0xb6, 0x63, 0xce, 0xe3, 0x04, 0x47, 0xfa, 0x6b, 0xa2, 0xa6, | ||||
| 	0xa3, 0x08, 0x45, 0x98, 0xd3, 0x4c, 0xf2, 0xbc, 0x6c, 0x1c, 0xac, 0x03, 0xdc, 0xf1, 0x47, 0x14, | ||||
| 	0x19, 0x67, 0x02, 0x8f, 0x5f, 0xa0, 0xef, 0x3e, 0x14, 0xff, 0xdd, 0x77, 0x0c, 0x95, 0xa4, 0x9c, | ||||
| 	0x79, 0x54, 0xa2, 0x65, 0xc3, 0x70, 0xe6, 0x77, 0x04, 0x4f, 0x6c, 0xc6, 0xf8, 0x1b, 0x33, 0x7b, | ||||
| 	0xd6, 0x21, 0xd8, 0x9d, 0x0d, 0xaf, 0x50, 0x1a, 0x6b, 0x25, 0x73, 0xc9, 0x39, 0x83, 0xb5, 0x4a, | ||||
| 	0x60, 0x91, 0x5b, 0x3b, 0xa4, 0xd4, 0x23, 0x95, 0x1e, 0xb9, 0xa6, 0x98, 0x44, 0xf7, 0x3a, 0x15, | ||||
| 	0x5b, 0x5f, 0x9f, 0xcb, 0xb6, 0x71, 0xb4, 0xea, 0x5c, 0x42, 0x5f, 0x60, 0x3e, 0xa7, 0x21, 0xfa, | ||||
| 	0xbf, 0xe9, 0xbd, 0x16, 0xed, 0x95, 0xad, 0x26, 0xaf, 0x60, 0x50, 0xf1, 0x58, 0xb9, 0xf9, 0xa2, | ||||
| 	0xd8, 0xeb, 0xdf, 0x11, 0xdf, 0x7a, 0xc4, 0xc6, 0xe9, 0x26, 0xe9, 0xd8, 0xcd, 0xf9, 0xf3, 0x28, | ||||
| 	0xce, 0x05, 0x58, 0x29, 0xca, 0x57, 0x1e, 0xd5, 0xac, 0x77, 0x5b, 0x4f, 0xde, 0xea, 0x52, 0x53, | ||||
| 	0xfa, 0x1c, 0x4c, 0x64, 0x2a, 0xad, 0xb1, 0xc3, 0x16, 0xeb, 0x2e, 0x2a, 0x4d, 0x72, 0x0c, 0x03, | ||||
| 	0x4d, 0xce, 0x83, 0x44, 0xd5, 0x2f, 0xb6, 0xdf, 0xc9, 0x3f, 0x17, 0xbd, 0xc6, 0x90, 0xab, 0x95, | ||||
| 	0x1b, 0xe3, 0xc3, 0xe8, 0xfd, 0x04, 0x00, 0x00, 0xff, 0xff, 0x5c, 0xf6, 0x07, 0xbb, 0x6e, 0x02, | ||||
| 	0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										1424
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/cloud.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1424
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/cloud.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										874
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/credentials.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										874
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/credentials.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,874 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_credentials.steamclient.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package unified | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type CCredentials_TestAvailablePassword_Request struct { | ||||
| 	Password          *string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"` | ||||
| 	ShaDigestPassword []byte  `protobuf:"bytes,2,opt,name=sha_digest_password" json:"sha_digest_password,omitempty"` | ||||
| 	AccountName       *string `protobuf:"bytes,3,opt,name=account_name" json:"account_name,omitempty"` | ||||
| 	XXX_unrecognized  []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_TestAvailablePassword_Request) Reset() { | ||||
| 	*m = CCredentials_TestAvailablePassword_Request{} | ||||
| } | ||||
| func (m *CCredentials_TestAvailablePassword_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_TestAvailablePassword_Request) ProtoMessage() {} | ||||
| func (*CCredentials_TestAvailablePassword_Request) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{0} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_TestAvailablePassword_Request) GetPassword() string { | ||||
| 	if m != nil && m.Password != nil { | ||||
| 		return *m.Password | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_TestAvailablePassword_Request) GetShaDigestPassword() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.ShaDigestPassword | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_TestAvailablePassword_Request) GetAccountName() string { | ||||
| 	if m != nil && m.AccountName != nil { | ||||
| 		return *m.AccountName | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CCredentials_TestAvailablePassword_Response struct { | ||||
| 	IsValid          *bool  `protobuf:"varint,3,opt,name=is_valid" json:"is_valid,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_TestAvailablePassword_Response) Reset() { | ||||
| 	*m = CCredentials_TestAvailablePassword_Response{} | ||||
| } | ||||
| func (m *CCredentials_TestAvailablePassword_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_TestAvailablePassword_Response) ProtoMessage() {} | ||||
| func (*CCredentials_TestAvailablePassword_Response) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{1} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_TestAvailablePassword_Response) GetIsValid() bool { | ||||
| 	if m != nil && m.IsValid != nil { | ||||
| 		return *m.IsValid | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CCredentials_GetSteamGuardDetails_Request struct { | ||||
| 	IncludeNewAuthentications *bool   `protobuf:"varint,1,opt,name=include_new_authentications,def=1" json:"include_new_authentications,omitempty"` | ||||
| 	Webcookie                 *string `protobuf:"bytes,2,opt,name=webcookie" json:"webcookie,omitempty"` | ||||
| 	TimestampMinimumWanted    *uint32 `protobuf:"fixed32,3,opt,name=timestamp_minimum_wanted" json:"timestamp_minimum_wanted,omitempty"` | ||||
| 	Ipaddress                 *int32  `protobuf:"varint,4,opt,name=ipaddress" json:"ipaddress,omitempty"` | ||||
| 	XXX_unrecognized          []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Request) Reset() { | ||||
| 	*m = CCredentials_GetSteamGuardDetails_Request{} | ||||
| } | ||||
| func (m *CCredentials_GetSteamGuardDetails_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CCredentials_GetSteamGuardDetails_Request) ProtoMessage()    {} | ||||
| func (*CCredentials_GetSteamGuardDetails_Request) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{2} | ||||
| } | ||||
|  | ||||
| const Default_CCredentials_GetSteamGuardDetails_Request_IncludeNewAuthentications bool = true | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Request) GetIncludeNewAuthentications() bool { | ||||
| 	if m != nil && m.IncludeNewAuthentications != nil { | ||||
| 		return *m.IncludeNewAuthentications | ||||
| 	} | ||||
| 	return Default_CCredentials_GetSteamGuardDetails_Request_IncludeNewAuthentications | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Request) GetWebcookie() string { | ||||
| 	if m != nil && m.Webcookie != nil { | ||||
| 		return *m.Webcookie | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Request) GetTimestampMinimumWanted() uint32 { | ||||
| 	if m != nil && m.TimestampMinimumWanted != nil { | ||||
| 		return *m.TimestampMinimumWanted | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Request) GetIpaddress() int32 { | ||||
| 	if m != nil && m.Ipaddress != nil { | ||||
| 		return *m.Ipaddress | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CCredentials_GetSteamGuardDetails_Response struct { | ||||
| 	IsSteamguardEnabled                                   *bool                                                           `protobuf:"varint,1,opt,name=is_steamguard_enabled" json:"is_steamguard_enabled,omitempty"` | ||||
| 	TimestampSteamguardEnabled                            *uint32                                                         `protobuf:"fixed32,2,opt,name=timestamp_steamguard_enabled" json:"timestamp_steamguard_enabled,omitempty"` | ||||
| 	DeprecatedNewauthentication                           []*CCredentials_GetSteamGuardDetails_Response_NewAuthentication `protobuf:"bytes,3,rep,name=deprecated_newauthentication" json:"deprecated_newauthentication,omitempty"` | ||||
| 	DeprecatedMachineNameUserchosen                       *string                                                         `protobuf:"bytes,4,opt,name=deprecated_machine_name_userchosen" json:"deprecated_machine_name_userchosen,omitempty"` | ||||
| 	DeprecatedTimestampMachineSteamguardEnabled           *uint32                                                         `protobuf:"fixed32,5,opt,name=deprecated_timestamp_machine_steamguard_enabled" json:"deprecated_timestamp_machine_steamguard_enabled,omitempty"` | ||||
| 	DeprecatedAuthenticationExistsFromGeolocBeforeMintime *bool                                                           `protobuf:"varint,6,opt,name=deprecated_authentication_exists_from_geoloc_before_mintime" json:"deprecated_authentication_exists_from_geoloc_before_mintime,omitempty"` | ||||
| 	DeprecatedMachineId                                   *uint64                                                         `protobuf:"varint,7,opt,name=deprecated_machine_id" json:"deprecated_machine_id,omitempty"` | ||||
| 	SessionData                                           []*CCredentials_GetSteamGuardDetails_Response_SessionData       `protobuf:"bytes,8,rep,name=session_data" json:"session_data,omitempty"` | ||||
| 	IsTwofactorEnabled                                    *bool                                                           `protobuf:"varint,9,opt,name=is_twofactor_enabled" json:"is_twofactor_enabled,omitempty"` | ||||
| 	TimestampTwofactorEnabled                             *uint32                                                         `protobuf:"fixed32,10,opt,name=timestamp_twofactor_enabled" json:"timestamp_twofactor_enabled,omitempty"` | ||||
| 	IsPhoneVerified                                       *bool                                                           `protobuf:"varint,11,opt,name=is_phone_verified" json:"is_phone_verified,omitempty"` | ||||
| 	XXX_unrecognized                                      []byte                                                          `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) Reset() { | ||||
| 	*m = CCredentials_GetSteamGuardDetails_Response{} | ||||
| } | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_GetSteamGuardDetails_Response) ProtoMessage() {} | ||||
| func (*CCredentials_GetSteamGuardDetails_Response) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{3} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetIsSteamguardEnabled() bool { | ||||
| 	if m != nil && m.IsSteamguardEnabled != nil { | ||||
| 		return *m.IsSteamguardEnabled | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetTimestampSteamguardEnabled() uint32 { | ||||
| 	if m != nil && m.TimestampSteamguardEnabled != nil { | ||||
| 		return *m.TimestampSteamguardEnabled | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedNewauthentication() []*CCredentials_GetSteamGuardDetails_Response_NewAuthentication { | ||||
| 	if m != nil { | ||||
| 		return m.DeprecatedNewauthentication | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedMachineNameUserchosen() string { | ||||
| 	if m != nil && m.DeprecatedMachineNameUserchosen != nil { | ||||
| 		return *m.DeprecatedMachineNameUserchosen | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedTimestampMachineSteamguardEnabled() uint32 { | ||||
| 	if m != nil && m.DeprecatedTimestampMachineSteamguardEnabled != nil { | ||||
| 		return *m.DeprecatedTimestampMachineSteamguardEnabled | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedAuthenticationExistsFromGeolocBeforeMintime() bool { | ||||
| 	if m != nil && m.DeprecatedAuthenticationExistsFromGeolocBeforeMintime != nil { | ||||
| 		return *m.DeprecatedAuthenticationExistsFromGeolocBeforeMintime | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetDeprecatedMachineId() uint64 { | ||||
| 	if m != nil && m.DeprecatedMachineId != nil { | ||||
| 		return *m.DeprecatedMachineId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetSessionData() []*CCredentials_GetSteamGuardDetails_Response_SessionData { | ||||
| 	if m != nil { | ||||
| 		return m.SessionData | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetIsTwofactorEnabled() bool { | ||||
| 	if m != nil && m.IsTwofactorEnabled != nil { | ||||
| 		return *m.IsTwofactorEnabled | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetTimestampTwofactorEnabled() uint32 { | ||||
| 	if m != nil && m.TimestampTwofactorEnabled != nil { | ||||
| 		return *m.TimestampTwofactorEnabled | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response) GetIsPhoneVerified() bool { | ||||
| 	if m != nil && m.IsPhoneVerified != nil { | ||||
| 		return *m.IsPhoneVerified | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CCredentials_GetSteamGuardDetails_Response_NewAuthentication struct { | ||||
| 	TimestampSteamguardEnabled *uint32 `protobuf:"fixed32,1,opt,name=timestamp_steamguard_enabled" json:"timestamp_steamguard_enabled,omitempty"` | ||||
| 	IsWebCookie                *bool   `protobuf:"varint,2,opt,name=is_web_cookie" json:"is_web_cookie,omitempty"` | ||||
| 	Ipaddress                  *int32  `protobuf:"varint,3,opt,name=ipaddress" json:"ipaddress,omitempty"` | ||||
| 	GeolocInfo                 *string `protobuf:"bytes,4,opt,name=geoloc_info" json:"geoloc_info,omitempty"` | ||||
| 	IsRemembered               *bool   `protobuf:"varint,5,opt,name=is_remembered" json:"is_remembered,omitempty"` | ||||
| 	MachineNameUserSupplied    *string `protobuf:"bytes,6,opt,name=machine_name_user_supplied" json:"machine_name_user_supplied,omitempty"` | ||||
| 	Status                     *int32  `protobuf:"varint,7,opt,name=status" json:"status,omitempty"` | ||||
| 	XXX_unrecognized           []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) Reset() { | ||||
| 	*m = CCredentials_GetSteamGuardDetails_Response_NewAuthentication{} | ||||
| } | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_GetSteamGuardDetails_Response_NewAuthentication) ProtoMessage() {} | ||||
| func (*CCredentials_GetSteamGuardDetails_Response_NewAuthentication) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{3, 0} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetTimestampSteamguardEnabled() uint32 { | ||||
| 	if m != nil && m.TimestampSteamguardEnabled != nil { | ||||
| 		return *m.TimestampSteamguardEnabled | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetIsWebCookie() bool { | ||||
| 	if m != nil && m.IsWebCookie != nil { | ||||
| 		return *m.IsWebCookie | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetIpaddress() int32 { | ||||
| 	if m != nil && m.Ipaddress != nil { | ||||
| 		return *m.Ipaddress | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetGeolocInfo() string { | ||||
| 	if m != nil && m.GeolocInfo != nil { | ||||
| 		return *m.GeolocInfo | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetIsRemembered() bool { | ||||
| 	if m != nil && m.IsRemembered != nil { | ||||
| 		return *m.IsRemembered | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetMachineNameUserSupplied() string { | ||||
| 	if m != nil && m.MachineNameUserSupplied != nil { | ||||
| 		return *m.MachineNameUserSupplied | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_NewAuthentication) GetStatus() int32 { | ||||
| 	if m != nil && m.Status != nil { | ||||
| 		return *m.Status | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CCredentials_GetSteamGuardDetails_Response_SessionData struct { | ||||
| 	MachineId                                   *uint64                                                         `protobuf:"varint,1,opt,name=machine_id" json:"machine_id,omitempty"` | ||||
| 	MachineNameUserchosen                       *string                                                         `protobuf:"bytes,2,opt,name=machine_name_userchosen" json:"machine_name_userchosen,omitempty"` | ||||
| 	TimestampMachineSteamguardEnabled           *uint32                                                         `protobuf:"fixed32,3,opt,name=timestamp_machine_steamguard_enabled" json:"timestamp_machine_steamguard_enabled,omitempty"` | ||||
| 	AuthenticationExistsFromGeolocBeforeMintime *bool                                                           `protobuf:"varint,4,opt,name=authentication_exists_from_geoloc_before_mintime" json:"authentication_exists_from_geoloc_before_mintime,omitempty"` | ||||
| 	Newauthentication                           []*CCredentials_GetSteamGuardDetails_Response_NewAuthentication `protobuf:"bytes,5,rep,name=newauthentication" json:"newauthentication,omitempty"` | ||||
| 	AuthenticationExistsFromSameIpBeforeMintime *bool                                                           `protobuf:"varint,6,opt,name=authentication_exists_from_same_ip_before_mintime" json:"authentication_exists_from_same_ip_before_mintime,omitempty"` | ||||
| 	PublicIpv4                                  *uint32                                                         `protobuf:"varint,7,opt,name=public_ipv4" json:"public_ipv4,omitempty"` | ||||
| 	XXX_unrecognized                            []byte                                                          `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) Reset() { | ||||
| 	*m = CCredentials_GetSteamGuardDetails_Response_SessionData{} | ||||
| } | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_GetSteamGuardDetails_Response_SessionData) ProtoMessage() {} | ||||
| func (*CCredentials_GetSteamGuardDetails_Response_SessionData) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{3, 1} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetMachineId() uint64 { | ||||
| 	if m != nil && m.MachineId != nil { | ||||
| 		return *m.MachineId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetMachineNameUserchosen() string { | ||||
| 	if m != nil && m.MachineNameUserchosen != nil { | ||||
| 		return *m.MachineNameUserchosen | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetTimestampMachineSteamguardEnabled() uint32 { | ||||
| 	if m != nil && m.TimestampMachineSteamguardEnabled != nil { | ||||
| 		return *m.TimestampMachineSteamguardEnabled | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetAuthenticationExistsFromGeolocBeforeMintime() bool { | ||||
| 	if m != nil && m.AuthenticationExistsFromGeolocBeforeMintime != nil { | ||||
| 		return *m.AuthenticationExistsFromGeolocBeforeMintime | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetNewauthentication() []*CCredentials_GetSteamGuardDetails_Response_NewAuthentication { | ||||
| 	if m != nil { | ||||
| 		return m.Newauthentication | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetAuthenticationExistsFromSameIpBeforeMintime() bool { | ||||
| 	if m != nil && m.AuthenticationExistsFromSameIpBeforeMintime != nil { | ||||
| 		return *m.AuthenticationExistsFromSameIpBeforeMintime | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetSteamGuardDetails_Response_SessionData) GetPublicIpv4() uint32 { | ||||
| 	if m != nil && m.PublicIpv4 != nil { | ||||
| 		return *m.PublicIpv4 | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CCredentials_NewMachineNotificationDialog_Request struct { | ||||
| 	IsApproved       *bool  `protobuf:"varint,1,opt,name=is_approved" json:"is_approved,omitempty"` | ||||
| 	IsWizardComplete *bool  `protobuf:"varint,2,opt,name=is_wizard_complete" json:"is_wizard_complete,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_NewMachineNotificationDialog_Request) Reset() { | ||||
| 	*m = CCredentials_NewMachineNotificationDialog_Request{} | ||||
| } | ||||
| func (m *CCredentials_NewMachineNotificationDialog_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_NewMachineNotificationDialog_Request) ProtoMessage() {} | ||||
| func (*CCredentials_NewMachineNotificationDialog_Request) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{4} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_NewMachineNotificationDialog_Request) GetIsApproved() bool { | ||||
| 	if m != nil && m.IsApproved != nil { | ||||
| 		return *m.IsApproved | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_NewMachineNotificationDialog_Request) GetIsWizardComplete() bool { | ||||
| 	if m != nil && m.IsWizardComplete != nil { | ||||
| 		return *m.IsWizardComplete | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CCredentials_NewMachineNotificationDialog_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_NewMachineNotificationDialog_Response) Reset() { | ||||
| 	*m = CCredentials_NewMachineNotificationDialog_Response{} | ||||
| } | ||||
| func (m *CCredentials_NewMachineNotificationDialog_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_NewMachineNotificationDialog_Response) ProtoMessage() {} | ||||
| func (*CCredentials_NewMachineNotificationDialog_Response) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{5} | ||||
| } | ||||
|  | ||||
| type CCredentials_ValidateEmailAddress_Request struct { | ||||
| 	Stoken           *string `protobuf:"bytes,1,opt,name=stoken" json:"stoken,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_ValidateEmailAddress_Request) Reset() { | ||||
| 	*m = CCredentials_ValidateEmailAddress_Request{} | ||||
| } | ||||
| func (m *CCredentials_ValidateEmailAddress_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CCredentials_ValidateEmailAddress_Request) ProtoMessage()    {} | ||||
| func (*CCredentials_ValidateEmailAddress_Request) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{6} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_ValidateEmailAddress_Request) GetStoken() string { | ||||
| 	if m != nil && m.Stoken != nil { | ||||
| 		return *m.Stoken | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CCredentials_ValidateEmailAddress_Response struct { | ||||
| 	WasValidated     *bool  `protobuf:"varint,1,opt,name=was_validated" json:"was_validated,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_ValidateEmailAddress_Response) Reset() { | ||||
| 	*m = CCredentials_ValidateEmailAddress_Response{} | ||||
| } | ||||
| func (m *CCredentials_ValidateEmailAddress_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_ValidateEmailAddress_Response) ProtoMessage() {} | ||||
| func (*CCredentials_ValidateEmailAddress_Response) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{7} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_ValidateEmailAddress_Response) GetWasValidated() bool { | ||||
| 	if m != nil && m.WasValidated != nil { | ||||
| 		return *m.WasValidated | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CCredentials_SteamGuardPhishingReport_Request struct { | ||||
| 	ParamString      *string `protobuf:"bytes,1,opt,name=param_string" json:"param_string,omitempty"` | ||||
| 	IpaddressActual  *uint32 `protobuf:"varint,2,opt,name=ipaddress_actual" json:"ipaddress_actual,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Request) Reset() { | ||||
| 	*m = CCredentials_SteamGuardPhishingReport_Request{} | ||||
| } | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_SteamGuardPhishingReport_Request) ProtoMessage() {} | ||||
| func (*CCredentials_SteamGuardPhishingReport_Request) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{8} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Request) GetParamString() string { | ||||
| 	if m != nil && m.ParamString != nil { | ||||
| 		return *m.ParamString | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Request) GetIpaddressActual() uint32 { | ||||
| 	if m != nil && m.IpaddressActual != nil { | ||||
| 		return *m.IpaddressActual | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CCredentials_SteamGuardPhishingReport_Response struct { | ||||
| 	IpaddressLoginattempt   *uint32 `protobuf:"varint,1,opt,name=ipaddress_loginattempt" json:"ipaddress_loginattempt,omitempty"` | ||||
| 	CountrynameLoginattempt *string `protobuf:"bytes,2,opt,name=countryname_loginattempt" json:"countryname_loginattempt,omitempty"` | ||||
| 	StatenameLoginattempt   *string `protobuf:"bytes,3,opt,name=statename_loginattempt" json:"statename_loginattempt,omitempty"` | ||||
| 	CitynameLoginattempt    *string `protobuf:"bytes,4,opt,name=cityname_loginattempt" json:"cityname_loginattempt,omitempty"` | ||||
| 	IpaddressActual         *uint32 `protobuf:"varint,5,opt,name=ipaddress_actual" json:"ipaddress_actual,omitempty"` | ||||
| 	CountrynameActual       *string `protobuf:"bytes,6,opt,name=countryname_actual" json:"countryname_actual,omitempty"` | ||||
| 	StatenameActual         *string `protobuf:"bytes,7,opt,name=statename_actual" json:"statename_actual,omitempty"` | ||||
| 	CitynameActual          *string `protobuf:"bytes,8,opt,name=cityname_actual" json:"cityname_actual,omitempty"` | ||||
| 	SteamguardCode          *string `protobuf:"bytes,9,opt,name=steamguard_code" json:"steamguard_code,omitempty"` | ||||
| 	XXX_unrecognized        []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) Reset() { | ||||
| 	*m = CCredentials_SteamGuardPhishingReport_Response{} | ||||
| } | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_SteamGuardPhishingReport_Response) ProtoMessage() {} | ||||
| func (*CCredentials_SteamGuardPhishingReport_Response) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{9} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetIpaddressLoginattempt() uint32 { | ||||
| 	if m != nil && m.IpaddressLoginattempt != nil { | ||||
| 		return *m.IpaddressLoginattempt | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetCountrynameLoginattempt() string { | ||||
| 	if m != nil && m.CountrynameLoginattempt != nil { | ||||
| 		return *m.CountrynameLoginattempt | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetStatenameLoginattempt() string { | ||||
| 	if m != nil && m.StatenameLoginattempt != nil { | ||||
| 		return *m.StatenameLoginattempt | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetCitynameLoginattempt() string { | ||||
| 	if m != nil && m.CitynameLoginattempt != nil { | ||||
| 		return *m.CitynameLoginattempt | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetIpaddressActual() uint32 { | ||||
| 	if m != nil && m.IpaddressActual != nil { | ||||
| 		return *m.IpaddressActual | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetCountrynameActual() string { | ||||
| 	if m != nil && m.CountrynameActual != nil { | ||||
| 		return *m.CountrynameActual | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetStatenameActual() string { | ||||
| 	if m != nil && m.StatenameActual != nil { | ||||
| 		return *m.StatenameActual | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetCitynameActual() string { | ||||
| 	if m != nil && m.CitynameActual != nil { | ||||
| 		return *m.CitynameActual | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_SteamGuardPhishingReport_Response) GetSteamguardCode() string { | ||||
| 	if m != nil && m.SteamguardCode != nil { | ||||
| 		return *m.SteamguardCode | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CCredentials_AccountLockRequest_Request struct { | ||||
| 	ParamString      *string `protobuf:"bytes,1,opt,name=param_string" json:"param_string,omitempty"` | ||||
| 	IpaddressActual  *uint32 `protobuf:"varint,2,opt,name=ipaddress_actual" json:"ipaddress_actual,omitempty"` | ||||
| 	QueryOnly        *bool   `protobuf:"varint,3,opt,name=query_only" json:"query_only,omitempty"` | ||||
| 	EmailMessageType *int32  `protobuf:"varint,4,opt,name=email_message_type" json:"email_message_type,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Request) Reset() { | ||||
| 	*m = CCredentials_AccountLockRequest_Request{} | ||||
| } | ||||
| func (m *CCredentials_AccountLockRequest_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CCredentials_AccountLockRequest_Request) ProtoMessage()    {} | ||||
| func (*CCredentials_AccountLockRequest_Request) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{10} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Request) GetParamString() string { | ||||
| 	if m != nil && m.ParamString != nil { | ||||
| 		return *m.ParamString | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Request) GetIpaddressActual() uint32 { | ||||
| 	if m != nil && m.IpaddressActual != nil { | ||||
| 		return *m.IpaddressActual | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Request) GetQueryOnly() bool { | ||||
| 	if m != nil && m.QueryOnly != nil { | ||||
| 		return *m.QueryOnly | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Request) GetEmailMessageType() int32 { | ||||
| 	if m != nil && m.EmailMessageType != nil { | ||||
| 		return *m.EmailMessageType | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CCredentials_AccountLockRequest_Response struct { | ||||
| 	Success              *bool  `protobuf:"varint,1,opt,name=success" json:"success,omitempty"` | ||||
| 	AccountAlreadyLocked *bool  `protobuf:"varint,2,opt,name=account_already_locked" json:"account_already_locked,omitempty"` | ||||
| 	ExpiredLink          *bool  `protobuf:"varint,3,opt,name=expired_link" json:"expired_link,omitempty"` | ||||
| 	XXX_unrecognized     []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Response) Reset() { | ||||
| 	*m = CCredentials_AccountLockRequest_Response{} | ||||
| } | ||||
| func (m *CCredentials_AccountLockRequest_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CCredentials_AccountLockRequest_Response) ProtoMessage()    {} | ||||
| func (*CCredentials_AccountLockRequest_Response) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{11} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Response) GetSuccess() bool { | ||||
| 	if m != nil && m.Success != nil { | ||||
| 		return *m.Success | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Response) GetAccountAlreadyLocked() bool { | ||||
| 	if m != nil && m.AccountAlreadyLocked != nil { | ||||
| 		return *m.AccountAlreadyLocked | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_AccountLockRequest_Response) GetExpiredLink() bool { | ||||
| 	if m != nil && m.ExpiredLink != nil { | ||||
| 		return *m.ExpiredLink | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CCredentials_LastCredentialChangeTime_Request struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_LastCredentialChangeTime_Request) Reset() { | ||||
| 	*m = CCredentials_LastCredentialChangeTime_Request{} | ||||
| } | ||||
| func (m *CCredentials_LastCredentialChangeTime_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_LastCredentialChangeTime_Request) ProtoMessage() {} | ||||
| func (*CCredentials_LastCredentialChangeTime_Request) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{12} | ||||
| } | ||||
|  | ||||
| type CCredentials_LastCredentialChangeTime_Response struct { | ||||
| 	TimestampLastPasswordChange *uint32 `protobuf:"fixed32,1,opt,name=timestamp_last_password_change" json:"timestamp_last_password_change,omitempty"` | ||||
| 	TimestampLastEmailChange    *uint32 `protobuf:"fixed32,2,opt,name=timestamp_last_email_change" json:"timestamp_last_email_change,omitempty"` | ||||
| 	TimestampLastPasswordReset  *uint32 `protobuf:"fixed32,3,opt,name=timestamp_last_password_reset" json:"timestamp_last_password_reset,omitempty"` | ||||
| 	XXX_unrecognized            []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_LastCredentialChangeTime_Response) Reset() { | ||||
| 	*m = CCredentials_LastCredentialChangeTime_Response{} | ||||
| } | ||||
| func (m *CCredentials_LastCredentialChangeTime_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_LastCredentialChangeTime_Response) ProtoMessage() {} | ||||
| func (*CCredentials_LastCredentialChangeTime_Response) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{13} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_LastCredentialChangeTime_Response) GetTimestampLastPasswordChange() uint32 { | ||||
| 	if m != nil && m.TimestampLastPasswordChange != nil { | ||||
| 		return *m.TimestampLastPasswordChange | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_LastCredentialChangeTime_Response) GetTimestampLastEmailChange() uint32 { | ||||
| 	if m != nil && m.TimestampLastEmailChange != nil { | ||||
| 		return *m.TimestampLastEmailChange | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_LastCredentialChangeTime_Response) GetTimestampLastPasswordReset() uint32 { | ||||
| 	if m != nil && m.TimestampLastPasswordReset != nil { | ||||
| 		return *m.TimestampLastPasswordReset | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CCredentials_GetAccountAuthSecret_Request struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetAccountAuthSecret_Request) Reset() { | ||||
| 	*m = CCredentials_GetAccountAuthSecret_Request{} | ||||
| } | ||||
| func (m *CCredentials_GetAccountAuthSecret_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CCredentials_GetAccountAuthSecret_Request) ProtoMessage()    {} | ||||
| func (*CCredentials_GetAccountAuthSecret_Request) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{14} | ||||
| } | ||||
|  | ||||
| type CCredentials_GetAccountAuthSecret_Response struct { | ||||
| 	SecretId         *int32 `protobuf:"varint,1,opt,name=secret_id" json:"secret_id,omitempty"` | ||||
| 	Secret           []byte `protobuf:"bytes,2,opt,name=secret" json:"secret,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetAccountAuthSecret_Response) Reset() { | ||||
| 	*m = CCredentials_GetAccountAuthSecret_Response{} | ||||
| } | ||||
| func (m *CCredentials_GetAccountAuthSecret_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CCredentials_GetAccountAuthSecret_Response) ProtoMessage() {} | ||||
| func (*CCredentials_GetAccountAuthSecret_Response) Descriptor() ([]byte, []int) { | ||||
| 	return credentials_fileDescriptor0, []int{15} | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetAccountAuthSecret_Response) GetSecretId() int32 { | ||||
| 	if m != nil && m.SecretId != nil { | ||||
| 		return *m.SecretId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CCredentials_GetAccountAuthSecret_Response) GetSecret() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Secret | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*CCredentials_TestAvailablePassword_Request)(nil), "CCredentials_TestAvailablePassword_Request") | ||||
| 	proto.RegisterType((*CCredentials_TestAvailablePassword_Response)(nil), "CCredentials_TestAvailablePassword_Response") | ||||
| 	proto.RegisterType((*CCredentials_GetSteamGuardDetails_Request)(nil), "CCredentials_GetSteamGuardDetails_Request") | ||||
| 	proto.RegisterType((*CCredentials_GetSteamGuardDetails_Response)(nil), "CCredentials_GetSteamGuardDetails_Response") | ||||
| 	proto.RegisterType((*CCredentials_GetSteamGuardDetails_Response_NewAuthentication)(nil), "CCredentials_GetSteamGuardDetails_Response.NewAuthentication") | ||||
| 	proto.RegisterType((*CCredentials_GetSteamGuardDetails_Response_SessionData)(nil), "CCredentials_GetSteamGuardDetails_Response.SessionData") | ||||
| 	proto.RegisterType((*CCredentials_NewMachineNotificationDialog_Request)(nil), "CCredentials_NewMachineNotificationDialog_Request") | ||||
| 	proto.RegisterType((*CCredentials_NewMachineNotificationDialog_Response)(nil), "CCredentials_NewMachineNotificationDialog_Response") | ||||
| 	proto.RegisterType((*CCredentials_ValidateEmailAddress_Request)(nil), "CCredentials_ValidateEmailAddress_Request") | ||||
| 	proto.RegisterType((*CCredentials_ValidateEmailAddress_Response)(nil), "CCredentials_ValidateEmailAddress_Response") | ||||
| 	proto.RegisterType((*CCredentials_SteamGuardPhishingReport_Request)(nil), "CCredentials_SteamGuardPhishingReport_Request") | ||||
| 	proto.RegisterType((*CCredentials_SteamGuardPhishingReport_Response)(nil), "CCredentials_SteamGuardPhishingReport_Response") | ||||
| 	proto.RegisterType((*CCredentials_AccountLockRequest_Request)(nil), "CCredentials_AccountLockRequest_Request") | ||||
| 	proto.RegisterType((*CCredentials_AccountLockRequest_Response)(nil), "CCredentials_AccountLockRequest_Response") | ||||
| 	proto.RegisterType((*CCredentials_LastCredentialChangeTime_Request)(nil), "CCredentials_LastCredentialChangeTime_Request") | ||||
| 	proto.RegisterType((*CCredentials_LastCredentialChangeTime_Response)(nil), "CCredentials_LastCredentialChangeTime_Response") | ||||
| 	proto.RegisterType((*CCredentials_GetAccountAuthSecret_Request)(nil), "CCredentials_GetAccountAuthSecret_Request") | ||||
| 	proto.RegisterType((*CCredentials_GetAccountAuthSecret_Response)(nil), "CCredentials_GetAccountAuthSecret_Response") | ||||
| } | ||||
|  | ||||
| var credentials_fileDescriptor0 = []byte{ | ||||
| 	// 1482 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x57, 0x5d, 0x6f, 0x14, 0xd5, | ||||
| 	0x1b, 0xcf, 0x94, 0xbe, 0xec, 0x3e, 0xa5, 0x7f, 0xe8, 0x40, 0x61, 0x59, 0x0a, 0x4c, 0x06, 0xfe, | ||||
| 	0xb6, 0xd0, 0x3a, 0x48, 0x25, 0x41, 0x25, 0xc6, 0x94, 0x56, 0x09, 0x06, 0x90, 0x00, 0x51, 0xef, | ||||
| 	0x4e, 0x4e, 0x67, 0x4e, 0x77, 0x4f, 0x3a, 0x33, 0x67, 0x98, 0x39, 0xb3, 0x4b, 0x4d, 0x4c, 0xc4, | ||||
| 	0x3b, 0xbc, 0xf0, 0xce, 0x0b, 0x13, 0x2f, 0x8d, 0x5f, 0xc0, 0xe8, 0x17, 0xf0, 0x2b, 0xf8, 0x25, | ||||
| 	0xbc, 0x32, 0x7e, 0x03, 0x9f, 0x73, 0xe6, 0xec, 0xfb, 0x6c, 0xbb, 0x4b, 0xbc, 0xdc, 0x39, 0xcf, | ||||
| 	0xcb, 0xef, 0xf9, 0x3d, 0xaf, 0x0b, 0x1b, 0x99, 0x64, 0x34, 0x8a, 0x58, 0x96, 0xd1, 0x06, 0xcb, | ||||
| 	0x88, 0x9f, 0xb2, 0x80, 0xc5, 0x92, 0xd3, 0x30, 0xf3, 0xf4, 0x8b, 0x1f, 0x72, 0xfc, 0xed, 0x25, | ||||
| 	0xa9, 0x90, 0xa2, 0xbe, 0x39, 0x28, 0x9c, 0xc7, 0x7c, 0x9f, 0xb3, 0x80, 0xec, 0xd1, 0x8c, 0x8d, | ||||
| 	0x4a, 0xbb, 0x2f, 0xe0, 0xc6, 0xce, 0x4e, 0xcf, 0x1e, 0x79, 0xce, 0x32, 0xb9, 0xdd, 0xa2, 0x3c, | ||||
| 	0xa4, 0x7b, 0x21, 0x7b, 0x42, 0xb3, 0xac, 0x2d, 0xd2, 0x80, 0x3c, 0x65, 0x2f, 0x72, 0x7c, 0xb0, | ||||
| 	0x4f, 0x43, 0x25, 0x31, 0xdf, 0x6a, 0x96, 0x63, 0xad, 0x57, 0xed, 0x8b, 0x70, 0x26, 0x6b, 0x52, | ||||
| 	0x12, 0x70, 0xf4, 0x25, 0x49, 0xf7, 0x71, 0x06, 0x1f, 0x4f, 0xda, 0x67, 0xe1, 0x24, 0xf5, 0x7d, | ||||
| 	0x91, 0xc7, 0x92, 0xc4, 0x34, 0x62, 0xb5, 0x13, 0x4a, 0xc5, 0xfd, 0x08, 0x36, 0x26, 0x72, 0x99, | ||||
| 	0x25, 0x22, 0xce, 0x98, 0xf2, 0xc9, 0x33, 0xd2, 0xa2, 0x21, 0x0f, 0xb4, 0x81, 0x8a, 0xfb, 0xf7, | ||||
| 	0x0c, 0x5c, 0x1f, 0xb0, 0x70, 0x9f, 0xc9, 0x67, 0x2a, 0xb2, 0xfb, 0x39, 0x4d, 0x83, 0x5d, 0x26, | ||||
| 	0xd1, 0x56, 0xd6, 0xc5, 0x9c, 0xc3, 0x45, 0x1e, 0xfb, 0x61, 0x1e, 0x30, 0x12, 0xb3, 0x36, 0xa1, | ||||
| 	0xb9, 0x6c, 0x2a, 0x3d, 0x9f, 0x4a, 0x8e, 0xf6, 0x75, 0x18, 0x95, 0x0f, 0x66, 0x65, 0x9a, 0xb3, | ||||
| 	0x7b, 0x9f, 0x7e, 0xfb, 0x5b, 0xed, 0x93, 0x2f, 0x9a, 0x0c, 0x25, 0x52, 0x47, 0xa4, 0x4e, 0x2c, | ||||
| 	0xa4, 0x23, 0x85, 0x93, 0x88, 0x24, 0x0f, 0xa9, 0x64, 0x0e, 0x7e, 0x77, 0xd0, 0xc6, 0xa0, 0x09, | ||||
| 	0x07, 0xe9, 0x0d, 0x03, 0x87, 0xc7, 0xfa, 0x39, 0xed, 0xc0, 0xfe, 0xc1, 0x82, 0x6a, 0x9b, 0xed, | ||||
| 	0xf9, 0x42, 0x1c, 0x70, 0xa6, 0xf9, 0xa8, 0xde, 0x7b, 0x65, 0xa1, 0x83, 0xaf, 0x9f, 0xa3, 0x58, | ||||
| 	0x9e, 0xb1, 0x74, 0x2d, 0x73, 0x34, 0x6a, 0x47, 0xc3, 0x76, 0x22, 0xea, 0x37, 0x79, 0xcc, 0x1c, | ||||
| 	0x65, 0xdd, 0x29, 0xd4, 0x3c, 0xe7, 0xc1, 0xbe, 0x93, 0xa0, 0x49, 0xf4, 0xb6, 0xe9, 0x70, 0xb9, | ||||
| 	0x16, 0x86, 0xce, 0x9e, 0x56, 0x0e, 0x14, 0xae, 0x06, 0x93, 0xda, 0xa7, 0x31, 0xd6, 0x31, 0xf0, | ||||
| 	0x60, 0x17, 0xc1, 0xa8, 0x4c, 0x07, 0x8e, 0xd8, 0xd7, 0x02, 0xdb, 0x8f, 0x9c, 0x0c, 0xeb, 0x01, | ||||
| 	0xc1, 0x7a, 0xb6, 0x03, 0x35, 0xc9, 0xb1, 0x3a, 0x24, 0x8d, 0x12, 0x12, 0xf1, 0x98, 0x47, 0x79, | ||||
| 	0x44, 0xda, 0x34, 0x96, 0xac, 0xa0, 0x77, 0xc1, 0x5e, 0x86, 0x2a, 0x4f, 0x68, 0x10, 0xa0, 0xdf, | ||||
| 	0xac, 0x36, 0x8b, 0x9f, 0xe6, 0xdc, 0xbf, 0x2a, 0x43, 0x65, 0x32, 0x86, 0x71, 0x13, 0xfb, 0x25, | ||||
| 	0x58, 0xc1, 0x94, 0xe9, 0x62, 0x6b, 0x28, 0x01, 0xc2, 0x62, 0x95, 0xdb, 0xa2, 0x66, 0x2a, 0xf6, | ||||
| 	0x35, 0x58, 0xed, 0x41, 0x28, 0x91, 0x9a, 0xd1, 0x30, 0x7c, 0x58, 0x0d, 0x18, 0x06, 0x8f, 0x2c, | ||||
| 	0x63, 0xf9, 0x8e, 0xd0, 0x8e, 0x60, 0x4f, 0xac, 0x2f, 0x6e, 0x7d, 0xe8, 0x4d, 0x8e, 0xcb, 0x7b, | ||||
| 	0xcc, 0xda, 0xdb, 0x03, 0x46, 0xec, 0x1b, 0xe0, 0xf6, 0x39, 0x31, 0x0c, 0xea, 0x62, 0x25, 0x8a, | ||||
| 	0x55, 0xbf, 0x29, 0x90, 0x7b, 0x4d, 0x42, 0xd5, 0xbe, 0x03, 0x37, 0xfb, 0x64, 0xfb, 0x48, 0x34, | ||||
| 	0x5a, 0x25, 0x91, 0xcc, 0xe9, 0x48, 0x76, 0xe0, 0x6e, 0x9f, 0xe2, 0x60, 0x18, 0x84, 0xbd, 0xe4, | ||||
| 	0x99, 0xcc, 0xc8, 0x7e, 0x2a, 0x22, 0xd2, 0x60, 0x22, 0x14, 0x3e, 0xd9, 0x63, 0xfb, 0x22, 0x65, | ||||
| 	0x2a, 0x39, 0xca, 0x49, 0x6d, 0x5e, 0x93, 0x86, 0x9c, 0x96, 0x20, 0xc5, 0x9e, 0x58, 0xc0, 0xe7, | ||||
| 	0x59, 0xfb, 0x11, 0x9c, 0x34, 0x29, 0x26, 0x01, 0x95, 0xb4, 0x56, 0xd1, 0xec, 0xdc, 0x99, 0x86, | ||||
| 	0x9d, 0x67, 0x85, 0xfe, 0x2e, 0xaa, 0xdb, 0xab, 0x70, 0x16, 0x33, 0x28, 0xdb, 0x62, 0x9f, 0xfa, | ||||
| 	0x52, 0xa4, 0xdd, 0x80, 0xaa, 0x1a, 0xcb, 0x55, 0xb8, 0xd8, 0x0b, 0x7f, 0x54, 0x08, 0x74, 0xd4, | ||||
| 	0x17, 0x60, 0x19, 0x4d, 0x24, 0x4d, 0x81, 0x30, 0x5b, 0x2c, 0xd5, 0x53, 0xa8, 0xb6, 0xa8, 0xf4, | ||||
| 	0xeb, 0x7f, 0x58, 0xb0, 0x3c, 0x9a, 0x8b, 0xe3, 0xca, 0xc2, 0xd2, 0x66, 0x57, 0x60, 0x09, 0xcd, | ||||
| 	0x62, 0x67, 0x91, 0xbe, 0xd6, 0xaa, 0x0c, 0x16, 0xad, 0xaa, 0xe3, 0x39, 0xfb, 0x0c, 0x2c, 0x1a, | ||||
| 	0x42, 0x79, 0xbc, 0x2f, 0x4c, 0x12, 0x0b, 0xf5, 0x94, 0x45, 0x2c, 0xda, 0x63, 0xa9, 0x49, 0x51, | ||||
| 	0xc5, 0x76, 0xa1, 0x3e, 0x92, 0x7c, 0x92, 0xe5, 0x49, 0x12, 0x2a, 0xd4, 0xf3, 0x5a, 0xf5, 0x7f, | ||||
| 	0x30, 0x8f, 0xd8, 0x64, 0x9e, 0x69, 0xca, 0xe7, 0xea, 0x7f, 0xce, 0xc0, 0x62, 0x3f, 0x67, 0x36, | ||||
| 	0x40, 0x5f, 0x5a, 0x2c, 0x9d, 0x96, 0x2b, 0x70, 0x7e, 0x5c, 0x51, 0xe9, 0x91, 0x60, 0x6f, 0xc2, | ||||
| 	0xb5, 0x89, 0x2a, 0xa9, 0x68, 0xcd, 0xf7, 0xe0, 0x9d, 0xa9, 0xcb, 0x67, 0x56, 0x07, 0xf8, 0x25, | ||||
| 	0x2c, 0x8f, 0xb6, 0xd0, 0xdc, 0x7f, 0xd1, 0x42, 0xef, 0xc3, 0xad, 0x23, 0x30, 0x65, 0x2a, 0x6a, | ||||
| 	0x9e, 0x94, 0xd7, 0x34, 0x66, 0x28, 0xc9, 0xf7, 0x42, 0x8e, 0x19, 0x4a, 0x5a, 0xb7, 0x35, 0xad, | ||||
| 	0x4b, 0x6e, 0x00, 0xb7, 0x06, 0xf0, 0xa0, 0xc7, 0x47, 0x05, 0x2f, 0x8f, 0x85, 0xc4, 0x2a, 0x2a, | ||||
| 	0x9c, 0xec, 0xe2, 0x9b, 0x68, 0x74, 0x87, 0x3c, 0x5a, 0xc2, 0xb4, 0xd2, 0x04, 0x97, 0x5a, 0xab, | ||||
| 	0x3b, 0x67, 0xea, 0x60, 0xab, 0x52, 0xe1, 0x5f, 0x29, 0x22, 0x7d, 0x11, 0x25, 0x21, 0x93, 0xa6, | ||||
| 	0x5e, 0xdc, 0xdb, 0xb0, 0x35, 0x8d, 0x97, 0x22, 0x7a, 0xf7, 0xee, 0xd0, 0xe2, 0xf9, 0x5c, 0x6d, | ||||
| 	0x25, 0x6c, 0xc8, 0x8f, 0x23, 0x64, 0x69, 0xbb, 0xa8, 0xbe, 0x2e, 0x26, 0x5d, 0x2f, 0xe2, 0x00, | ||||
| 	0x53, 0xad, 0x57, 0xa5, 0xbb, 0x33, 0x34, 0x43, 0xc7, 0x28, 0x9b, 0x19, 0x8a, 0x85, 0xda, 0xa6, | ||||
| 	0x66, 0xef, 0xa9, 0x96, 0x2f, 0x62, 0x72, 0x09, 0xbc, 0x3d, 0x60, 0xa4, 0x97, 0xaa, 0x27, 0x4d, | ||||
| 	0x9e, 0x21, 0xfe, 0xc6, 0x53, 0x96, 0x88, 0x54, 0x76, 0x51, 0xe0, 0x0e, 0x4e, 0x68, 0x4a, 0x31, | ||||
| 	0x13, 0x32, 0xc5, 0x57, 0xb3, 0xb6, 0x6b, 0x70, 0xba, 0xdb, 0x2e, 0x04, 0xbb, 0x37, 0xa7, 0xa1, | ||||
| 	0x26, 0x66, 0xc9, 0xfd, 0x75, 0x06, 0xbc, 0x49, 0x3d, 0x18, 0xa8, 0x97, 0xe1, 0x5c, 0xcf, 0x18, | ||||
| 	0xf2, 0xc5, 0x63, 0x2a, 0x25, 0x8b, 0x12, 0xa9, 0x9d, 0x2d, 0xa9, 0x95, 0xa3, 0x8f, 0x80, 0xf4, | ||||
| 	0x50, 0xf7, 0xc0, 0x80, 0x44, 0xd1, 0x05, 0x68, 0x41, 0xb5, 0x16, 0x1b, 0x7d, 0xd7, 0x27, 0x83, | ||||
| 	0x1a, 0x7e, 0x3e, 0x97, 0x25, 0xea, 0xb3, 0x63, 0xa3, 0x99, 0xd3, 0xae, 0xb1, 0x04, 0xfa, 0x5d, | ||||
| 	0x9b, 0xb7, 0xf9, 0x8e, 0x56, 0xcf, 0xa9, 0x79, 0x59, 0xd0, 0x2f, 0xe7, 0xe1, 0x54, 0xd7, 0x9d, | ||||
| 	0x79, 0xa8, 0x74, 0x1e, 0xfa, 0x7a, 0xd3, 0x17, 0x01, 0xd3, 0x13, 0xb1, 0xea, 0xbe, 0xb6, 0x60, | ||||
| 	0x6d, 0x80, 0xb5, 0xed, 0xe2, 0xee, 0x79, 0x28, 0xfc, 0x03, 0x93, 0x89, 0x37, 0xcd, 0x88, 0x9a, | ||||
| 	0x2b, 0xa8, 0x98, 0x1e, 0x12, 0x11, 0x87, 0x87, 0xc5, 0x09, 0xa4, 0xe2, 0x62, 0xaa, 0x6c, 0x88, | ||||
| 	0xb9, 0xf3, 0x88, 0x3c, 0x4c, 0x98, 0x59, 0xd6, 0x2f, 0x60, 0xfd, 0x78, 0x28, 0x26, 0x75, 0xa7, | ||||
| 	0x60, 0x21, 0xcb, 0x7d, 0x5f, 0x0d, 0xcd, 0xa2, 0x67, 0x30, 0x13, 0x9d, 0x93, 0x8d, 0x86, 0x29, | ||||
| 	0xde, 0x10, 0x87, 0x48, 0xb8, 0x7f, 0x60, 0xb6, 0x72, 0x45, 0x81, 0x67, 0x2f, 0x13, 0x8e, 0xe6, | ||||
| 	0x49, 0xc8, 0xe3, 0x03, 0x73, 0x91, 0xdd, 0x1c, 0xaa, 0xca, 0x87, 0x34, 0x93, 0xbd, 0xdf, 0x3b, | ||||
| 	0x4d, 0x1a, 0x37, 0xd8, 0x73, 0xec, 0xfb, 0x0e, 0x07, 0xee, 0xcf, 0xd6, 0x50, 0x95, 0x1d, 0xa1, | ||||
| 	0x61, 0xa0, 0xbe, 0x05, 0x97, 0x7b, 0x93, 0x32, 0xa4, 0x7d, 0xd7, 0x26, 0xf1, 0xb5, 0xb8, 0x59, | ||||
| 	0x10, 0x03, 0xcb, 0x49, 0xcb, 0x15, 0x4c, 0x19, 0xa1, 0xe2, 0xb8, 0xf8, 0x3f, 0x5c, 0x1a, 0x67, | ||||
| 	0x4c, 0x9d, 0x5b, 0x45, 0xdd, 0x2d, 0xb8, 0x1b, 0xa3, 0x87, 0xa6, 0x61, 0x53, 0x0d, 0xc1, 0x67, | ||||
| 	0x0c, 0x2f, 0xf1, 0x6e, 0x5e, 0xdd, 0xcf, 0x46, 0x6f, 0xa4, 0x32, 0x61, 0x13, 0x0e, 0x2e, 0xac, | ||||
| 	0xac, 0xf8, 0x64, 0x96, 0xc5, 0x9c, 0x1e, 0x18, 0xfa, 0x53, 0x71, 0x3e, 0x6f, 0xfd, 0x53, 0x85, | ||||
| 	0xc5, 0x3e, 0x83, 0xf6, 0xf7, 0x16, 0xac, 0x94, 0x1e, 0xcb, 0xf6, 0x86, 0x37, 0xf9, 0x11, 0x5f, | ||||
| 	0xdf, 0xf4, 0xa6, 0x38, 0xbf, 0xdd, 0x3a, 0x9e, 0xac, 0xe7, 0x4a, 0x65, 0x3c, 0xfb, 0x3b, 0x0b, | ||||
| 	0xce, 0x96, 0xad, 0x0b, 0xfb, 0x86, 0x37, 0xf1, 0x7d, 0x5e, 0xdf, 0x98, 0x62, 0xfd, 0xb8, 0x17, | ||||
| 	0x10, 0xcd, 0x4a, 0x99, 0x88, 0x67, 0xff, 0x6e, 0x81, 0x7b, 0xd4, 0x14, 0x47, 0x1b, 0x79, 0x28, | ||||
| 	0xed, 0x2d, 0x6f, 0xea, 0xed, 0x52, 0x7f, 0xd7, 0x7b, 0x83, 0x5d, 0xb1, 0x86, 0x50, 0xaf, 0x1e, | ||||
| 	0x0f, 0xc8, 0xb3, 0x7f, 0x42, 0x16, 0xcb, 0x76, 0xc1, 0x30, 0x8b, 0x47, 0x2d, 0x9b, 0x61, 0x16, | ||||
| 	0x8f, 0xdc, 0x2d, 0xee, 0x06, 0x42, 0x5b, 0xeb, 0x88, 0x38, 0x34, 0x76, 0x74, 0x87, 0x38, 0x66, | ||||
| 	0xfa, 0x38, 0x0d, 0xde, 0x62, 0xb1, 0x43, 0x1d, 0xbd, 0xbc, 0xec, 0x1f, 0x2d, 0xa8, 0x8d, 0xdb, | ||||
| 	0x01, 0xb6, 0xe7, 0x4d, 0xb5, 0x8d, 0xea, 0x37, 0xa7, 0xdc, 0x2d, 0xee, 0x2a, 0x42, 0x1d, 0xef, | ||||
| 	0xfe, 0x95, 0x05, 0xf6, 0xe8, 0x78, 0xb3, 0xd7, 0xbd, 0x09, 0x67, 0x71, 0xfd, 0xba, 0x37, 0xe9, | ||||
| 	0xa8, 0x74, 0xcf, 0x21, 0x92, 0x32, 0x67, 0xbf, 0x58, 0x70, 0x19, 0x2b, 0xb2, 0x6c, 0x78, 0x75, | ||||
| 	0xda, 0xc1, 0xf3, 0xa6, 0x9a, 0x8e, 0xc3, 0x2c, 0x1d, 0x3b, 0x1b, 0xdd, 0xab, 0x88, 0xed, 0xca, | ||||
| 	0xd1, 0x20, 0x3c, 0xfb, 0x75, 0xd1, 0xad, 0x23, 0x33, 0xa9, 0xa4, 0x5b, 0xc7, 0x0e, 0xb9, 0x92, | ||||
| 	0x6e, 0x1d, 0x3f, 0xe3, 0xdc, 0x1a, 0xc2, 0x2a, 0x75, 0x59, 0x3f, 0x8f, 0x2f, 0x67, 0xfa, 0x0c, | ||||
| 	0xe1, 0xff, 0xd3, 0xb4, 0xc5, 0x7d, 0x76, 0xef, 0xc4, 0x37, 0x96, 0xf5, 0x6f, 0x00, 0x00, 0x00, | ||||
| 	0xff, 0xff, 0x3c, 0x6e, 0x05, 0xde, 0xf0, 0x10, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										694
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/deviceauth.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										694
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/deviceauth.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,694 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_deviceauth.steamclient.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package unified | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type CDeviceAuth_GetOwnAuthorizedDevices_Request struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	IncludeCanceled  *bool   `protobuf:"varint,2,opt,name=include_canceled" json:"include_canceled,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Request) Reset() { | ||||
| 	*m = CDeviceAuth_GetOwnAuthorizedDevices_Request{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetOwnAuthorizedDevices_Request) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetOwnAuthorizedDevices_Request) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{0} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Request) GetIncludeCanceled() bool { | ||||
| 	if m != nil && m.IncludeCanceled != nil { | ||||
| 		return *m.IncludeCanceled | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_GetOwnAuthorizedDevices_Response struct { | ||||
| 	Devices          []*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device `protobuf:"bytes,1,rep,name=devices" json:"devices,omitempty"` | ||||
| 	XXX_unrecognized []byte                                                 `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response) Reset() { | ||||
| 	*m = CDeviceAuth_GetOwnAuthorizedDevices_Response{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetOwnAuthorizedDevices_Response) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetOwnAuthorizedDevices_Response) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{1} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response) GetDevices() []*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device { | ||||
| 	if m != nil { | ||||
| 		return m.Devices | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_GetOwnAuthorizedDevices_Response_Device struct { | ||||
| 	AuthDeviceToken  *uint64 `protobuf:"fixed64,1,opt,name=auth_device_token" json:"auth_device_token,omitempty"` | ||||
| 	DeviceName       *string `protobuf:"bytes,2,opt,name=device_name" json:"device_name,omitempty"` | ||||
| 	IsPending        *bool   `protobuf:"varint,3,opt,name=is_pending" json:"is_pending,omitempty"` | ||||
| 	IsCanceled       *bool   `protobuf:"varint,4,opt,name=is_canceled" json:"is_canceled,omitempty"` | ||||
| 	LastTimeUsed     *uint32 `protobuf:"varint,5,opt,name=last_time_used" json:"last_time_used,omitempty"` | ||||
| 	LastBorrowerId   *uint64 `protobuf:"fixed64,6,opt,name=last_borrower_id" json:"last_borrower_id,omitempty"` | ||||
| 	LastAppPlayed    *uint32 `protobuf:"varint,7,opt,name=last_app_played" json:"last_app_played,omitempty"` | ||||
| 	IsLimited        *bool   `protobuf:"varint,8,opt,name=is_limited" json:"is_limited,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) Reset() { | ||||
| 	*m = CDeviceAuth_GetOwnAuthorizedDevices_Response_Device{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{1, 0} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetAuthDeviceToken() uint64 { | ||||
| 	if m != nil && m.AuthDeviceToken != nil { | ||||
| 		return *m.AuthDeviceToken | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetDeviceName() string { | ||||
| 	if m != nil && m.DeviceName != nil { | ||||
| 		return *m.DeviceName | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetIsPending() bool { | ||||
| 	if m != nil && m.IsPending != nil { | ||||
| 		return *m.IsPending | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetIsCanceled() bool { | ||||
| 	if m != nil && m.IsCanceled != nil { | ||||
| 		return *m.IsCanceled | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetLastTimeUsed() uint32 { | ||||
| 	if m != nil && m.LastTimeUsed != nil { | ||||
| 		return *m.LastTimeUsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetLastBorrowerId() uint64 { | ||||
| 	if m != nil && m.LastBorrowerId != nil { | ||||
| 		return *m.LastBorrowerId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetLastAppPlayed() uint32 { | ||||
| 	if m != nil && m.LastAppPlayed != nil { | ||||
| 		return *m.LastAppPlayed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetOwnAuthorizedDevices_Response_Device) GetIsLimited() bool { | ||||
| 	if m != nil && m.IsLimited != nil { | ||||
| 		return *m.IsLimited | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_AcceptAuthorizationRequest_Request struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	AuthDeviceToken  *uint64 `protobuf:"fixed64,2,opt,name=auth_device_token" json:"auth_device_token,omitempty"` | ||||
| 	AuthCode         *uint64 `protobuf:"fixed64,3,opt,name=auth_code" json:"auth_code,omitempty"` | ||||
| 	FromSteamid      *uint64 `protobuf:"fixed64,4,opt,name=from_steamid" json:"from_steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) Reset() { | ||||
| 	*m = CDeviceAuth_AcceptAuthorizationRequest_Request{} | ||||
| } | ||||
| func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_AcceptAuthorizationRequest_Request) ProtoMessage() {} | ||||
| func (*CDeviceAuth_AcceptAuthorizationRequest_Request) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{2} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) GetAuthDeviceToken() uint64 { | ||||
| 	if m != nil && m.AuthDeviceToken != nil { | ||||
| 		return *m.AuthDeviceToken | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) GetAuthCode() uint64 { | ||||
| 	if m != nil && m.AuthCode != nil { | ||||
| 		return *m.AuthCode | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AcceptAuthorizationRequest_Request) GetFromSteamid() uint64 { | ||||
| 	if m != nil && m.FromSteamid != nil { | ||||
| 		return *m.FromSteamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_AcceptAuthorizationRequest_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AcceptAuthorizationRequest_Response) Reset() { | ||||
| 	*m = CDeviceAuth_AcceptAuthorizationRequest_Response{} | ||||
| } | ||||
| func (m *CDeviceAuth_AcceptAuthorizationRequest_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_AcceptAuthorizationRequest_Response) ProtoMessage() {} | ||||
| func (*CDeviceAuth_AcceptAuthorizationRequest_Response) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{3} | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_AuthorizeRemoteDevice_Request struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	AuthDeviceToken  *uint64 `protobuf:"fixed64,2,opt,name=auth_device_token" json:"auth_device_token,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AuthorizeRemoteDevice_Request) Reset() { | ||||
| 	*m = CDeviceAuth_AuthorizeRemoteDevice_Request{} | ||||
| } | ||||
| func (m *CDeviceAuth_AuthorizeRemoteDevice_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CDeviceAuth_AuthorizeRemoteDevice_Request) ProtoMessage()    {} | ||||
| func (*CDeviceAuth_AuthorizeRemoteDevice_Request) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{4} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AuthorizeRemoteDevice_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AuthorizeRemoteDevice_Request) GetAuthDeviceToken() uint64 { | ||||
| 	if m != nil && m.AuthDeviceToken != nil { | ||||
| 		return *m.AuthDeviceToken | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_AuthorizeRemoteDevice_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AuthorizeRemoteDevice_Response) Reset() { | ||||
| 	*m = CDeviceAuth_AuthorizeRemoteDevice_Response{} | ||||
| } | ||||
| func (m *CDeviceAuth_AuthorizeRemoteDevice_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_AuthorizeRemoteDevice_Response) ProtoMessage() {} | ||||
| func (*CDeviceAuth_AuthorizeRemoteDevice_Response) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{5} | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_DeauthorizeRemoteDevice_Request struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	AuthDeviceToken  *uint64 `protobuf:"fixed64,2,opt,name=auth_device_token" json:"auth_device_token,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_DeauthorizeRemoteDevice_Request) Reset() { | ||||
| 	*m = CDeviceAuth_DeauthorizeRemoteDevice_Request{} | ||||
| } | ||||
| func (m *CDeviceAuth_DeauthorizeRemoteDevice_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_DeauthorizeRemoteDevice_Request) ProtoMessage() {} | ||||
| func (*CDeviceAuth_DeauthorizeRemoteDevice_Request) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{6} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_DeauthorizeRemoteDevice_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_DeauthorizeRemoteDevice_Request) GetAuthDeviceToken() uint64 { | ||||
| 	if m != nil && m.AuthDeviceToken != nil { | ||||
| 		return *m.AuthDeviceToken | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_DeauthorizeRemoteDevice_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_DeauthorizeRemoteDevice_Response) Reset() { | ||||
| 	*m = CDeviceAuth_DeauthorizeRemoteDevice_Response{} | ||||
| } | ||||
| func (m *CDeviceAuth_DeauthorizeRemoteDevice_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_DeauthorizeRemoteDevice_Response) ProtoMessage() {} | ||||
| func (*CDeviceAuth_DeauthorizeRemoteDevice_Response) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{7} | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_GetUsedAuthorizedDevices_Request struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Request) Reset() { | ||||
| 	*m = CDeviceAuth_GetUsedAuthorizedDevices_Request{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetUsedAuthorizedDevices_Request) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetUsedAuthorizedDevices_Request) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{8} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_GetUsedAuthorizedDevices_Response struct { | ||||
| 	Devices          []*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device `protobuf:"bytes,1,rep,name=devices" json:"devices,omitempty"` | ||||
| 	XXX_unrecognized []byte                                                  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response) Reset() { | ||||
| 	*m = CDeviceAuth_GetUsedAuthorizedDevices_Response{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetUsedAuthorizedDevices_Response) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetUsedAuthorizedDevices_Response) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{9} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response) GetDevices() []*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device { | ||||
| 	if m != nil { | ||||
| 		return m.Devices | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_GetUsedAuthorizedDevices_Response_Device struct { | ||||
| 	AuthDeviceToken  *uint64 `protobuf:"fixed64,1,opt,name=auth_device_token" json:"auth_device_token,omitempty"` | ||||
| 	DeviceName       *string `protobuf:"bytes,2,opt,name=device_name" json:"device_name,omitempty"` | ||||
| 	OwnerSteamid     *uint64 `protobuf:"fixed64,3,opt,name=owner_steamid" json:"owner_steamid,omitempty"` | ||||
| 	LastTimeUsed     *uint32 `protobuf:"varint,4,opt,name=last_time_used" json:"last_time_used,omitempty"` | ||||
| 	LastAppPlayed    *uint32 `protobuf:"varint,5,opt,name=last_app_played" json:"last_app_played,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) Reset() { | ||||
| 	*m = CDeviceAuth_GetUsedAuthorizedDevices_Response_Device{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{9, 0} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetAuthDeviceToken() uint64 { | ||||
| 	if m != nil && m.AuthDeviceToken != nil { | ||||
| 		return *m.AuthDeviceToken | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetDeviceName() string { | ||||
| 	if m != nil && m.DeviceName != nil { | ||||
| 		return *m.DeviceName | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetOwnerSteamid() uint64 { | ||||
| 	if m != nil && m.OwnerSteamid != nil { | ||||
| 		return *m.OwnerSteamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetLastTimeUsed() uint32 { | ||||
| 	if m != nil && m.LastTimeUsed != nil { | ||||
| 		return *m.LastTimeUsed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetUsedAuthorizedDevices_Response_Device) GetLastAppPlayed() uint32 { | ||||
| 	if m != nil && m.LastAppPlayed != nil { | ||||
| 		return *m.LastAppPlayed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_GetAuthorizedBorrowers_Request struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	IncludeCanceled  *bool   `protobuf:"varint,2,opt,name=include_canceled" json:"include_canceled,omitempty"` | ||||
| 	IncludePending   *bool   `protobuf:"varint,3,opt,name=include_pending" json:"include_pending,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) Reset() { | ||||
| 	*m = CDeviceAuth_GetAuthorizedBorrowers_Request{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetAuthorizedBorrowers_Request) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetAuthorizedBorrowers_Request) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{10} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) GetIncludeCanceled() bool { | ||||
| 	if m != nil && m.IncludeCanceled != nil { | ||||
| 		return *m.IncludeCanceled | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Request) GetIncludePending() bool { | ||||
| 	if m != nil && m.IncludePending != nil { | ||||
| 		return *m.IncludePending | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_GetAuthorizedBorrowers_Response struct { | ||||
| 	Borrowers        []*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower `protobuf:"bytes,1,rep,name=borrowers" json:"borrowers,omitempty"` | ||||
| 	XXX_unrecognized []byte                                                  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response) Reset() { | ||||
| 	*m = CDeviceAuth_GetAuthorizedBorrowers_Response{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetAuthorizedBorrowers_Response) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetAuthorizedBorrowers_Response) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{11} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response) GetBorrowers() []*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower { | ||||
| 	if m != nil { | ||||
| 		return m.Borrowers | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	IsPending        *bool   `protobuf:"varint,2,opt,name=is_pending" json:"is_pending,omitempty"` | ||||
| 	IsCanceled       *bool   `protobuf:"varint,3,opt,name=is_canceled" json:"is_canceled,omitempty"` | ||||
| 	TimeCreated      *uint32 `protobuf:"varint,4,opt,name=time_created" json:"time_created,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) Reset() { | ||||
| 	*m = CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower{} | ||||
| } | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) ProtoMessage() {} | ||||
| func (*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{11, 0} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) GetIsPending() bool { | ||||
| 	if m != nil && m.IsPending != nil { | ||||
| 		return *m.IsPending | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) GetIsCanceled() bool { | ||||
| 	if m != nil && m.IsCanceled != nil { | ||||
| 		return *m.IsCanceled | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower) GetTimeCreated() uint32 { | ||||
| 	if m != nil && m.TimeCreated != nil { | ||||
| 		return *m.TimeCreated | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_AddAuthorizedBorrowers_Request struct { | ||||
| 	Steamid          *uint64  `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	SteamidBorrower  []uint64 `protobuf:"fixed64,2,rep,name=steamid_borrower" json:"steamid_borrower,omitempty"` | ||||
| 	XXX_unrecognized []byte   `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AddAuthorizedBorrowers_Request) Reset() { | ||||
| 	*m = CDeviceAuth_AddAuthorizedBorrowers_Request{} | ||||
| } | ||||
| func (m *CDeviceAuth_AddAuthorizedBorrowers_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_AddAuthorizedBorrowers_Request) ProtoMessage() {} | ||||
| func (*CDeviceAuth_AddAuthorizedBorrowers_Request) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{12} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AddAuthorizedBorrowers_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AddAuthorizedBorrowers_Request) GetSteamidBorrower() []uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.SteamidBorrower | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_AddAuthorizedBorrowers_Response struct { | ||||
| 	SecondsToWait    *int32 `protobuf:"varint,1,opt,name=seconds_to_wait" json:"seconds_to_wait,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AddAuthorizedBorrowers_Response) Reset() { | ||||
| 	*m = CDeviceAuth_AddAuthorizedBorrowers_Response{} | ||||
| } | ||||
| func (m *CDeviceAuth_AddAuthorizedBorrowers_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_AddAuthorizedBorrowers_Response) ProtoMessage() {} | ||||
| func (*CDeviceAuth_AddAuthorizedBorrowers_Response) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{13} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_AddAuthorizedBorrowers_Response) GetSecondsToWait() int32 { | ||||
| 	if m != nil && m.SecondsToWait != nil { | ||||
| 		return *m.SecondsToWait | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_RemoveAuthorizedBorrowers_Request struct { | ||||
| 	Steamid          *uint64  `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	SteamidBorrower  []uint64 `protobuf:"fixed64,2,rep,name=steamid_borrower" json:"steamid_borrower,omitempty"` | ||||
| 	XXX_unrecognized []byte   `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Request) Reset() { | ||||
| 	*m = CDeviceAuth_RemoveAuthorizedBorrowers_Request{} | ||||
| } | ||||
| func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_RemoveAuthorizedBorrowers_Request) ProtoMessage() {} | ||||
| func (*CDeviceAuth_RemoveAuthorizedBorrowers_Request) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{14} | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Request) GetSteamidBorrower() []uint64 { | ||||
| 	if m != nil { | ||||
| 		return m.SteamidBorrower | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CDeviceAuth_RemoveAuthorizedBorrowers_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Response) Reset() { | ||||
| 	*m = CDeviceAuth_RemoveAuthorizedBorrowers_Response{} | ||||
| } | ||||
| func (m *CDeviceAuth_RemoveAuthorizedBorrowers_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CDeviceAuth_RemoveAuthorizedBorrowers_Response) ProtoMessage() {} | ||||
| func (*CDeviceAuth_RemoveAuthorizedBorrowers_Response) Descriptor() ([]byte, []int) { | ||||
| 	return deviceauth_fileDescriptor0, []int{15} | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*CDeviceAuth_GetOwnAuthorizedDevices_Request)(nil), "CDeviceAuth_GetOwnAuthorizedDevices_Request") | ||||
| 	proto.RegisterType((*CDeviceAuth_GetOwnAuthorizedDevices_Response)(nil), "CDeviceAuth_GetOwnAuthorizedDevices_Response") | ||||
| 	proto.RegisterType((*CDeviceAuth_GetOwnAuthorizedDevices_Response_Device)(nil), "CDeviceAuth_GetOwnAuthorizedDevices_Response.Device") | ||||
| 	proto.RegisterType((*CDeviceAuth_AcceptAuthorizationRequest_Request)(nil), "CDeviceAuth_AcceptAuthorizationRequest_Request") | ||||
| 	proto.RegisterType((*CDeviceAuth_AcceptAuthorizationRequest_Response)(nil), "CDeviceAuth_AcceptAuthorizationRequest_Response") | ||||
| 	proto.RegisterType((*CDeviceAuth_AuthorizeRemoteDevice_Request)(nil), "CDeviceAuth_AuthorizeRemoteDevice_Request") | ||||
| 	proto.RegisterType((*CDeviceAuth_AuthorizeRemoteDevice_Response)(nil), "CDeviceAuth_AuthorizeRemoteDevice_Response") | ||||
| 	proto.RegisterType((*CDeviceAuth_DeauthorizeRemoteDevice_Request)(nil), "CDeviceAuth_DeauthorizeRemoteDevice_Request") | ||||
| 	proto.RegisterType((*CDeviceAuth_DeauthorizeRemoteDevice_Response)(nil), "CDeviceAuth_DeauthorizeRemoteDevice_Response") | ||||
| 	proto.RegisterType((*CDeviceAuth_GetUsedAuthorizedDevices_Request)(nil), "CDeviceAuth_GetUsedAuthorizedDevices_Request") | ||||
| 	proto.RegisterType((*CDeviceAuth_GetUsedAuthorizedDevices_Response)(nil), "CDeviceAuth_GetUsedAuthorizedDevices_Response") | ||||
| 	proto.RegisterType((*CDeviceAuth_GetUsedAuthorizedDevices_Response_Device)(nil), "CDeviceAuth_GetUsedAuthorizedDevices_Response.Device") | ||||
| 	proto.RegisterType((*CDeviceAuth_GetAuthorizedBorrowers_Request)(nil), "CDeviceAuth_GetAuthorizedBorrowers_Request") | ||||
| 	proto.RegisterType((*CDeviceAuth_GetAuthorizedBorrowers_Response)(nil), "CDeviceAuth_GetAuthorizedBorrowers_Response") | ||||
| 	proto.RegisterType((*CDeviceAuth_GetAuthorizedBorrowers_Response_Borrower)(nil), "CDeviceAuth_GetAuthorizedBorrowers_Response.Borrower") | ||||
| 	proto.RegisterType((*CDeviceAuth_AddAuthorizedBorrowers_Request)(nil), "CDeviceAuth_AddAuthorizedBorrowers_Request") | ||||
| 	proto.RegisterType((*CDeviceAuth_AddAuthorizedBorrowers_Response)(nil), "CDeviceAuth_AddAuthorizedBorrowers_Response") | ||||
| 	proto.RegisterType((*CDeviceAuth_RemoveAuthorizedBorrowers_Request)(nil), "CDeviceAuth_RemoveAuthorizedBorrowers_Request") | ||||
| 	proto.RegisterType((*CDeviceAuth_RemoveAuthorizedBorrowers_Response)(nil), "CDeviceAuth_RemoveAuthorizedBorrowers_Response") | ||||
| } | ||||
|  | ||||
| var deviceauth_fileDescriptor0 = []byte{ | ||||
| 	// 934 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x56, 0xdf, 0x4e, 0x3b, 0x45, | ||||
| 	0x14, 0xce, 0xb6, 0x50, 0x60, 0x10, 0x91, 0x51, 0xa0, 0xec, 0x85, 0x4e, 0x56, 0x2f, 0x10, 0xca, | ||||
| 	0x80, 0x04, 0xe3, 0xff, 0x3f, 0x20, 0xa2, 0x17, 0x26, 0x26, 0x18, 0xa3, 0x72, 0xb3, 0x99, 0xee, | ||||
| 	0x0e, 0x74, 0x62, 0xbb, 0xbb, 0xee, 0x4c, 0x69, 0xf0, 0x8a, 0x98, 0xf8, 0x12, 0xfa, 0x06, 0x5e, | ||||
| 	0x19, 0x13, 0xa2, 0x89, 0x5e, 0xf8, 0x0e, 0xbe, 0x8d, 0x57, 0xbf, 0xb3, 0xb3, 0xb3, 0x85, 0x6d, | ||||
| 	0x77, 0x4b, 0xb7, 0xe1, 0xaa, 0x9b, 0x73, 0xce, 0x9c, 0xf9, 0xce, 0x99, 0xf3, 0x7d, 0xa7, 0x68, | ||||
| 	0x47, 0x2a, 0xce, 0x7a, 0x3d, 0x2e, 0x25, 0xbb, 0xe2, 0xd2, 0xf5, 0xf9, 0xb5, 0xf0, 0x38, 0xeb, | ||||
| 	0xab, 0x0e, 0xd5, 0x0e, 0xaf, 0x2b, 0x78, 0xa0, 0x68, 0x14, 0x87, 0x2a, 0xb4, 0x5b, 0xf9, 0xd8, | ||||
| 	0x7e, 0x20, 0x2e, 0x05, 0xf7, 0xdd, 0x36, 0x93, 0x7c, 0x3c, 0xda, 0xf9, 0x16, 0xed, 0x7e, 0x72, | ||||
| 	0xaa, 0xd3, 0x1d, 0x43, 0x3a, 0xf7, 0x33, 0xae, 0xbe, 0x1c, 0x04, 0xc9, 0x67, 0x18, 0x8b, 0x1f, | ||||
| 	0xb9, 0x9f, 0xba, 0xa4, 0x7b, 0xce, 0x7f, 0xe8, 0x73, 0xa9, 0xf0, 0x2a, 0x5a, 0xd0, 0x39, 0x84, | ||||
| 	0xdf, 0xb4, 0x88, 0xb5, 0xdd, 0xc0, 0x4d, 0xf4, 0x82, 0x08, 0xbc, 0x6e, 0xdf, 0xe7, 0xae, 0xc7, | ||||
| 	0x02, 0x8f, 0x77, 0xb9, 0xdf, 0xac, 0x81, 0x67, 0xd1, 0xf9, 0xab, 0x86, 0x5a, 0xd3, 0xa5, 0x96, | ||||
| 	0x51, 0x18, 0x48, 0x8e, 0x3f, 0x45, 0x0b, 0x69, 0x61, 0x12, 0x72, 0xd7, 0xb7, 0x97, 0x0f, 0x8f, | ||||
| 	0x68, 0x95, 0xf3, 0x34, 0x35, 0xd8, 0xff, 0x5a, 0xa8, 0x91, 0x7e, 0xe2, 0x2d, 0xb4, 0x96, 0x34, | ||||
| 	0xc9, 0xf4, 0xcb, 0x55, 0xe1, 0xf7, 0x3c, 0x30, 0xb8, 0x5f, 0x44, 0xcb, 0xc6, 0x1a, 0xb0, 0x1e, | ||||
| 	0xd7, 0x90, 0x97, 0x30, 0x46, 0x48, 0x48, 0x37, 0xe2, 0x81, 0x2f, 0x82, 0xab, 0x66, 0x3d, 0x29, | ||||
| 	0x23, 0x09, 0x04, 0xdb, 0xb0, 0xb6, 0x39, 0x6d, 0xdc, 0x40, 0xcf, 0x77, 0x99, 0x54, 0xae, 0x12, | ||||
| 	0x3d, 0xee, 0xf6, 0x25, 0xd8, 0xe7, 0xc1, 0xbe, 0x92, 0x74, 0x43, 0xdb, 0xdb, 0x61, 0x1c, 0x87, | ||||
| 	0x03, 0x1e, 0xbb, 0xd0, 0xa7, 0x86, 0xbe, 0x6f, 0x13, 0xad, 0x6a, 0x0f, 0x8b, 0x22, 0x37, 0xea, | ||||
| 	0xb2, 0x1b, 0x38, 0xb2, 0xa0, 0x8f, 0xa4, 0x77, 0x76, 0x45, 0x4f, 0x28, 0xb0, 0x2d, 0xea, 0xd6, | ||||
| 	0xfd, 0x6c, 0xa1, 0x5c, 0xe9, 0xc7, 0x9e, 0xc7, 0x23, 0x95, 0x95, 0xce, 0x94, 0x08, 0x03, 0xf3, | ||||
| 	0x20, 0xe5, 0x0f, 0x53, 0x58, 0x7b, 0x4d, 0xbb, 0xd6, 0xd0, 0x92, 0x76, 0x79, 0xa1, 0xcf, 0x75, | ||||
| 	0x95, 0x0d, 0xfc, 0x12, 0x7a, 0xee, 0x32, 0x0e, 0x7b, 0x6e, 0x96, 0x23, 0x29, 0xb3, 0xe1, 0xbc, | ||||
| 	0x81, 0xf6, 0xa7, 0x86, 0x91, 0x3e, 0x82, 0xf3, 0x0d, 0x7a, 0x3d, 0x77, 0x24, 0x7b, 0xae, 0x73, | ||||
| 	0xde, 0x0b, 0x15, 0x4f, 0x3d, 0xb3, 0x80, 0x76, 0x5a, 0x68, 0x67, 0x9a, 0xc4, 0x06, 0xc6, 0x77, | ||||
| 	0xf9, 0xb1, 0x3e, 0xd5, 0x64, 0x79, 0x1a, 0x20, 0x34, 0x3f, 0xd6, 0xe5, 0xa9, 0x0d, 0x94, 0x8f, | ||||
| 	0xc6, 0x68, 0xf0, 0x35, 0x0c, 0xcc, 0xf4, 0x14, 0x73, 0xfe, 0xb7, 0xd0, 0xde, 0x94, 0x19, 0x0c, | ||||
| 	0x93, 0xce, 0x46, 0x99, 0xf4, 0x26, 0xad, 0x94, 0x20, 0xa3, 0xd2, 0xed, 0xec, 0x54, 0x5a, 0x47, | ||||
| 	0x2b, 0xe1, 0x20, 0x00, 0x06, 0x64, 0xb5, 0xa4, 0x73, 0x36, 0x4e, 0x9c, 0x39, 0xcd, 0x82, 0x02, | ||||
| 	0x7a, 0x68, 0x46, 0x39, 0x51, 0xfe, 0xd9, 0x01, 0xfa, 0x3d, 0xec, 0x13, 0xc3, 0xb2, 0x59, 0xe4, | ||||
| 	0x29, 0xb9, 0x31, 0xf3, 0xe4, 0x08, 0xef, 0xfc, 0x67, 0x8d, 0x49, 0x62, 0xf1, 0x95, 0xa6, 0xd9, | ||||
| 	0x9f, 0xa3, 0xa5, 0x8c, 0xee, 0xa5, 0xed, 0x9e, 0x94, 0x80, 0x66, 0x26, 0xfb, 0x02, 0x2d, 0x66, | ||||
| 	0xdf, 0xe3, 0x95, 0xe4, 0xb5, 0xa9, 0x56, 0xa4, 0x4d, 0xa9, 0x60, 0x01, 0x95, 0x75, 0x77, 0xbd, | ||||
| 	0x98, 0x33, 0x95, 0x35, 0x18, 0x78, 0x99, 0xa7, 0x8f, 0xef, 0x57, 0xed, 0xa3, 0x31, 0x0c, 0xb5, | ||||
| 	0x0d, 0x30, 0xd4, 0x61, 0x3a, 0xcf, 0xf2, 0xdd, 0x2a, 0x4d, 0x6c, 0xba, 0x05, 0x6d, 0x97, 0xdc, | ||||
| 	0x0b, 0x03, 0x5f, 0xc2, 0x0c, 0xb9, 0x03, 0x26, 0x94, 0xbe, 0x61, 0xde, 0xb9, 0xc8, 0x0f, 0x79, | ||||
| 	0xc2, 0xa5, 0x6b, 0xfe, 0x44, 0x18, 0x0f, 0xf2, 0x72, 0x3a, 0x29, 0x77, 0x0a, 0xf3, 0xf0, 0xcf, | ||||
| 	0x65, 0x84, 0xee, 0x4f, 0xe0, 0x5f, 0x2c, 0xb4, 0x59, 0xb2, 0x7f, 0x70, 0x8b, 0x56, 0x58, 0xa0, | ||||
| 	0xf6, 0x5e, 0xa5, 0x9d, 0xe6, 0x38, 0x3f, 0xdd, 0x35, 0x5f, 0x86, 0x28, 0xd2, 0x15, 0x52, 0x91, | ||||
| 	0xf0, 0x92, 0x0c, 0xc5, 0xc6, 0x27, 0x86, 0xe2, 0xf8, 0xce, 0x42, 0x76, 0xb9, 0x34, 0xe3, 0xfd, | ||||
| 	0x8a, 0xab, 0xc4, 0x3e, 0xa0, 0x55, 0x45, 0xff, 0x08, 0x50, 0x1e, 0xa4, 0x81, 0x84, 0x05, 0x43, | ||||
| 	0x8c, 0x3a, 0x98, 0xc4, 0x69, 0x34, 0x69, 0xdf, 0x80, 0x2f, 0x54, 0x1d, 0x1e, 0x13, 0x20, 0x7e, | ||||
| 	0x2c, 0xf1, 0x6f, 0x16, 0x5a, 0x2f, 0x94, 0x71, 0xbc, 0x43, 0xa7, 0xde, 0x21, 0xf6, 0x2e, 0xad, | ||||
| 	0xb0, 0x16, 0xde, 0x06, 0xa0, 0x47, 0xc3, 0x18, 0x02, 0x0a, 0x05, 0xf0, 0x92, 0x40, 0xd3, 0x4c, | ||||
| 	0xa2, 0x3a, 0x4c, 0x91, 0x0e, 0x93, 0xc4, 0x10, 0x2d, 0x43, 0x8f, 0x7f, 0x85, 0x09, 0x28, 0x91, | ||||
| 	0xfa, 0x91, 0x09, 0x78, 0x64, 0xd7, 0x8c, 0x4c, 0xc0, 0xa3, 0xeb, 0xe3, 0x55, 0x80, 0xfc, 0xca, | ||||
| 	0x39, 0xbf, 0x06, 0xc1, 0xd5, 0x78, 0x0d, 0xd0, 0x5c, 0x8f, 0xf1, 0xdf, 0x16, 0x6a, 0x96, 0xa9, | ||||
| 	0x3a, 0xde, 0xa3, 0x55, 0xf6, 0x8f, 0x4d, 0xab, 0xed, 0x0a, 0xe7, 0x63, 0x00, 0xf8, 0xfe, 0xe4, | ||||
| 	0x11, 0xd5, 0x0f, 0x4e, 0x52, 0x5d, 0x27, 0x86, 0x9b, 0x3e, 0xb9, 0x82, 0x6d, 0x21, 0x09, 0xa0, | ||||
| 	0xff, 0xc3, 0x42, 0x1b, 0xc5, 0x22, 0x89, 0x77, 0xe9, 0xf4, 0xea, 0x6f, 0xb7, 0xaa, 0xc8, 0xae, | ||||
| 	0xf3, 0x01, 0xe0, 0x7e, 0xe7, 0x21, 0x6e, 0x3d, 0x95, 0xe9, 0x04, 0x80, 0xa4, 0x1a, 0x9c, 0x80, | ||||
| 	0xef, 0xe1, 0x48, 0x0f, 0x6b, 0xc2, 0xbf, 0x03, 0xe8, 0x62, 0xb1, 0x1b, 0x01, 0x3d, 0x59, 0x6a, | ||||
| 	0x47, 0x40, 0x3f, 0x22, 0x9f, 0xce, 0x7b, 0x00, 0xfa, 0x2d, 0x08, 0x2a, 0x07, 0x6b, 0xfe, 0x49, | ||||
| 	0x16, 0x09, 0xc5, 0x3f, 0x16, 0xda, 0x2a, 0xd5, 0x3e, 0x4c, 0x69, 0x25, 0xfd, 0xb5, 0xf7, 0x2b, | ||||
| 	0x6a, 0xaa, 0xf3, 0x21, 0x60, 0x7f, 0x37, 0x8d, 0x9b, 0x05, 0xbe, 0xfd, 0x1a, 0x9c, 0x27, 0x5f, | ||||
| 	0x88, 0x76, 0xcc, 0xe2, 0x1b, 0xf2, 0x55, 0x87, 0xc5, 0x09, 0x3f, 0x25, 0x57, 0x0a, 0x7e, 0x25, | ||||
| 	0x7c, 0xc4, 0x49, 0xd8, 0x49, 0xfd, 0xd6, 0xb2, 0x9e, 0x05, 0x00, 0x00, 0xff, 0xff, 0x27, 0xc5, | ||||
| 	0x15, 0xba, 0x30, 0x0d, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										850
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/gamenotifications.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										850
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/gamenotifications.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,850 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_gamenotifications.steamclient.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package unified | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type CGameNotifications_Variable struct { | ||||
| 	Key              *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` | ||||
| 	Value            *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Variable) Reset()                    { *m = CGameNotifications_Variable{} } | ||||
| func (m *CGameNotifications_Variable) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_Variable) ProtoMessage()               {} | ||||
| func (*CGameNotifications_Variable) Descriptor() ([]byte, []int) { return gamenotifications_fileDescriptor0, []int{0} } | ||||
|  | ||||
| func (m *CGameNotifications_Variable) GetKey() string { | ||||
| 	if m != nil && m.Key != nil { | ||||
| 		return *m.Key | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Variable) GetValue() string { | ||||
| 	if m != nil && m.Value != nil { | ||||
| 		return *m.Value | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CGameNotifications_LocalizedText struct { | ||||
| 	Token            *string                        `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` | ||||
| 	Variables        []*CGameNotifications_Variable `protobuf:"bytes,2,rep,name=variables" json:"variables,omitempty"` | ||||
| 	RenderedText     *string                        `protobuf:"bytes,3,opt,name=rendered_text" json:"rendered_text,omitempty"` | ||||
| 	XXX_unrecognized []byte                         `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_LocalizedText) Reset()         { *m = CGameNotifications_LocalizedText{} } | ||||
| func (m *CGameNotifications_LocalizedText) String() string { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_LocalizedText) ProtoMessage()    {} | ||||
| func (*CGameNotifications_LocalizedText) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{1} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_LocalizedText) GetToken() string { | ||||
| 	if m != nil && m.Token != nil { | ||||
| 		return *m.Token | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_LocalizedText) GetVariables() []*CGameNotifications_Variable { | ||||
| 	if m != nil { | ||||
| 		return m.Variables | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_LocalizedText) GetRenderedText() string { | ||||
| 	if m != nil && m.RenderedText != nil { | ||||
| 		return *m.RenderedText | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CGameNotifications_UserStatus struct { | ||||
| 	Steamid          *uint64                           `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	State            *string                           `protobuf:"bytes,2,opt,name=state" json:"state,omitempty"` | ||||
| 	Title            *CGameNotifications_LocalizedText `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` | ||||
| 	Message          *CGameNotifications_LocalizedText `protobuf:"bytes,4,opt,name=message" json:"message,omitempty"` | ||||
| 	XXX_unrecognized []byte                            `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UserStatus) Reset()                    { *m = CGameNotifications_UserStatus{} } | ||||
| func (m *CGameNotifications_UserStatus) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_UserStatus) ProtoMessage()               {} | ||||
| func (*CGameNotifications_UserStatus) Descriptor() ([]byte, []int) { return gamenotifications_fileDescriptor0, []int{2} } | ||||
|  | ||||
| func (m *CGameNotifications_UserStatus) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UserStatus) GetState() string { | ||||
| 	if m != nil && m.State != nil { | ||||
| 		return *m.State | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UserStatus) GetTitle() *CGameNotifications_LocalizedText { | ||||
| 	if m != nil { | ||||
| 		return m.Title | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UserStatus) GetMessage() *CGameNotifications_LocalizedText { | ||||
| 	if m != nil { | ||||
| 		return m.Message | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CGameNotifications_CreateSession_Request struct { | ||||
| 	Appid            *uint32                           `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"` | ||||
| 	Context          *uint64                           `protobuf:"varint,2,opt,name=context" json:"context,omitempty"` | ||||
| 	Title            *CGameNotifications_LocalizedText `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` | ||||
| 	Users            []*CGameNotifications_UserStatus  `protobuf:"bytes,4,rep,name=users" json:"users,omitempty"` | ||||
| 	Steamid          *uint64                           `protobuf:"fixed64,5,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte                            `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_CreateSession_Request) Reset() { | ||||
| 	*m = CGameNotifications_CreateSession_Request{} | ||||
| } | ||||
| func (m *CGameNotifications_CreateSession_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_CreateSession_Request) ProtoMessage()    {} | ||||
| func (*CGameNotifications_CreateSession_Request) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{3} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_CreateSession_Request) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_CreateSession_Request) GetContext() uint64 { | ||||
| 	if m != nil && m.Context != nil { | ||||
| 		return *m.Context | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_CreateSession_Request) GetTitle() *CGameNotifications_LocalizedText { | ||||
| 	if m != nil { | ||||
| 		return m.Title | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_CreateSession_Request) GetUsers() []*CGameNotifications_UserStatus { | ||||
| 	if m != nil { | ||||
| 		return m.Users | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_CreateSession_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CGameNotifications_CreateSession_Response struct { | ||||
| 	Sessionid        *uint64 `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_CreateSession_Response) Reset() { | ||||
| 	*m = CGameNotifications_CreateSession_Response{} | ||||
| } | ||||
| func (m *CGameNotifications_CreateSession_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_CreateSession_Response) ProtoMessage()    {} | ||||
| func (*CGameNotifications_CreateSession_Response) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{4} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_CreateSession_Response) GetSessionid() uint64 { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CGameNotifications_DeleteSession_Request struct { | ||||
| 	Sessionid        *uint64 `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	Appid            *uint32 `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"` | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,3,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_DeleteSession_Request) Reset() { | ||||
| 	*m = CGameNotifications_DeleteSession_Request{} | ||||
| } | ||||
| func (m *CGameNotifications_DeleteSession_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_DeleteSession_Request) ProtoMessage()    {} | ||||
| func (*CGameNotifications_DeleteSession_Request) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{5} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_DeleteSession_Request) GetSessionid() uint64 { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_DeleteSession_Request) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_DeleteSession_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CGameNotifications_DeleteSession_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_DeleteSession_Response) Reset() { | ||||
| 	*m = CGameNotifications_DeleteSession_Response{} | ||||
| } | ||||
| func (m *CGameNotifications_DeleteSession_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_DeleteSession_Response) ProtoMessage()    {} | ||||
| func (*CGameNotifications_DeleteSession_Response) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{6} | ||||
| } | ||||
|  | ||||
| type CGameNotifications_UpdateSession_Request struct { | ||||
| 	Sessionid        *uint64                           `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	Appid            *uint32                           `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"` | ||||
| 	Title            *CGameNotifications_LocalizedText `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` | ||||
| 	Users            []*CGameNotifications_UserStatus  `protobuf:"bytes,4,rep,name=users" json:"users,omitempty"` | ||||
| 	Steamid          *uint64                           `protobuf:"fixed64,6,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte                            `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateSession_Request) Reset() { | ||||
| 	*m = CGameNotifications_UpdateSession_Request{} | ||||
| } | ||||
| func (m *CGameNotifications_UpdateSession_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_UpdateSession_Request) ProtoMessage()    {} | ||||
| func (*CGameNotifications_UpdateSession_Request) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{7} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateSession_Request) GetSessionid() uint64 { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateSession_Request) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateSession_Request) GetTitle() *CGameNotifications_LocalizedText { | ||||
| 	if m != nil { | ||||
| 		return m.Title | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateSession_Request) GetUsers() []*CGameNotifications_UserStatus { | ||||
| 	if m != nil { | ||||
| 		return m.Users | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateSession_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CGameNotifications_UpdateSession_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateSession_Response) Reset() { | ||||
| 	*m = CGameNotifications_UpdateSession_Response{} | ||||
| } | ||||
| func (m *CGameNotifications_UpdateSession_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_UpdateSession_Response) ProtoMessage()    {} | ||||
| func (*CGameNotifications_UpdateSession_Response) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{8} | ||||
| } | ||||
|  | ||||
| type CGameNotifications_EnumerateSessions_Request struct { | ||||
| 	Appid                  *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"` | ||||
| 	IncludeAllUserMessages *bool   `protobuf:"varint,3,opt,name=include_all_user_messages" json:"include_all_user_messages,omitempty"` | ||||
| 	IncludeAuthUserMessage *bool   `protobuf:"varint,4,opt,name=include_auth_user_message" json:"include_auth_user_message,omitempty"` | ||||
| 	Language               *string `protobuf:"bytes,5,opt,name=language" json:"language,omitempty"` | ||||
| 	XXX_unrecognized       []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_EnumerateSessions_Request) Reset() { | ||||
| 	*m = CGameNotifications_EnumerateSessions_Request{} | ||||
| } | ||||
| func (m *CGameNotifications_EnumerateSessions_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_EnumerateSessions_Request) ProtoMessage() {} | ||||
| func (*CGameNotifications_EnumerateSessions_Request) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{9} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_EnumerateSessions_Request) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_EnumerateSessions_Request) GetIncludeAllUserMessages() bool { | ||||
| 	if m != nil && m.IncludeAllUserMessages != nil { | ||||
| 		return *m.IncludeAllUserMessages | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_EnumerateSessions_Request) GetIncludeAuthUserMessage() bool { | ||||
| 	if m != nil && m.IncludeAuthUserMessage != nil { | ||||
| 		return *m.IncludeAuthUserMessage | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_EnumerateSessions_Request) GetLanguage() string { | ||||
| 	if m != nil && m.Language != nil { | ||||
| 		return *m.Language | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CGameNotifications_Session struct { | ||||
| 	Sessionid        *uint64                           `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	Appid            *uint64                           `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"` | ||||
| 	Context          *uint64                           `protobuf:"varint,3,opt,name=context" json:"context,omitempty"` | ||||
| 	Title            *CGameNotifications_LocalizedText `protobuf:"bytes,4,opt,name=title" json:"title,omitempty"` | ||||
| 	TimeCreated      *uint32                           `protobuf:"varint,5,opt,name=time_created" json:"time_created,omitempty"` | ||||
| 	TimeUpdated      *uint32                           `protobuf:"varint,6,opt,name=time_updated" json:"time_updated,omitempty"` | ||||
| 	UserStatus       []*CGameNotifications_UserStatus  `protobuf:"bytes,7,rep,name=user_status" json:"user_status,omitempty"` | ||||
| 	XXX_unrecognized []byte                            `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Session) Reset()                    { *m = CGameNotifications_Session{} } | ||||
| func (m *CGameNotifications_Session) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CGameNotifications_Session) ProtoMessage()               {} | ||||
| func (*CGameNotifications_Session) Descriptor() ([]byte, []int) { return gamenotifications_fileDescriptor0, []int{10} } | ||||
|  | ||||
| func (m *CGameNotifications_Session) GetSessionid() uint64 { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Session) GetAppid() uint64 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Session) GetContext() uint64 { | ||||
| 	if m != nil && m.Context != nil { | ||||
| 		return *m.Context | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Session) GetTitle() *CGameNotifications_LocalizedText { | ||||
| 	if m != nil { | ||||
| 		return m.Title | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Session) GetTimeCreated() uint32 { | ||||
| 	if m != nil && m.TimeCreated != nil { | ||||
| 		return *m.TimeCreated | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Session) GetTimeUpdated() uint32 { | ||||
| 	if m != nil && m.TimeUpdated != nil { | ||||
| 		return *m.TimeUpdated | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_Session) GetUserStatus() []*CGameNotifications_UserStatus { | ||||
| 	if m != nil { | ||||
| 		return m.UserStatus | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CGameNotifications_EnumerateSessions_Response struct { | ||||
| 	Sessions         []*CGameNotifications_Session `protobuf:"bytes,1,rep,name=sessions" json:"sessions,omitempty"` | ||||
| 	XXX_unrecognized []byte                        `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_EnumerateSessions_Response) Reset() { | ||||
| 	*m = CGameNotifications_EnumerateSessions_Response{} | ||||
| } | ||||
| func (m *CGameNotifications_EnumerateSessions_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_EnumerateSessions_Response) ProtoMessage() {} | ||||
| func (*CGameNotifications_EnumerateSessions_Response) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{11} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_EnumerateSessions_Response) GetSessions() []*CGameNotifications_Session { | ||||
| 	if m != nil { | ||||
| 		return m.Sessions | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CGameNotifications_GetSessionDetails_Request struct { | ||||
| 	Sessions         []*CGameNotifications_GetSessionDetails_Request_RequestedSession `protobuf:"bytes,1,rep,name=sessions" json:"sessions,omitempty"` | ||||
| 	Appid            *uint32                                                          `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"` | ||||
| 	Language         *string                                                          `protobuf:"bytes,3,opt,name=language" json:"language,omitempty"` | ||||
| 	XXX_unrecognized []byte                                                           `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Request) Reset() { | ||||
| 	*m = CGameNotifications_GetSessionDetails_Request{} | ||||
| } | ||||
| func (m *CGameNotifications_GetSessionDetails_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_GetSessionDetails_Request) ProtoMessage() {} | ||||
| func (*CGameNotifications_GetSessionDetails_Request) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{12} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Request) GetSessions() []*CGameNotifications_GetSessionDetails_Request_RequestedSession { | ||||
| 	if m != nil { | ||||
| 		return m.Sessions | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Request) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Request) GetLanguage() string { | ||||
| 	if m != nil && m.Language != nil { | ||||
| 		return *m.Language | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CGameNotifications_GetSessionDetails_Request_RequestedSession struct { | ||||
| 	Sessionid              *uint64 `protobuf:"varint,1,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	IncludeAuthUserMessage *bool   `protobuf:"varint,3,opt,name=include_auth_user_message" json:"include_auth_user_message,omitempty"` | ||||
| 	XXX_unrecognized       []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Request_RequestedSession) Reset() { | ||||
| 	*m = CGameNotifications_GetSessionDetails_Request_RequestedSession{} | ||||
| } | ||||
| func (m *CGameNotifications_GetSessionDetails_Request_RequestedSession) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_GetSessionDetails_Request_RequestedSession) ProtoMessage() {} | ||||
| func (*CGameNotifications_GetSessionDetails_Request_RequestedSession) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{12, 0} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Request_RequestedSession) GetSessionid() uint64 { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Request_RequestedSession) GetIncludeAuthUserMessage() bool { | ||||
| 	if m != nil && m.IncludeAuthUserMessage != nil { | ||||
| 		return *m.IncludeAuthUserMessage | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CGameNotifications_GetSessionDetails_Response struct { | ||||
| 	Sessions         []*CGameNotifications_Session `protobuf:"bytes,1,rep,name=sessions" json:"sessions,omitempty"` | ||||
| 	XXX_unrecognized []byte                        `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Response) Reset() { | ||||
| 	*m = CGameNotifications_GetSessionDetails_Response{} | ||||
| } | ||||
| func (m *CGameNotifications_GetSessionDetails_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_GetSessionDetails_Response) ProtoMessage() {} | ||||
| func (*CGameNotifications_GetSessionDetails_Response) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{13} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_GetSessionDetails_Response) GetSessions() []*CGameNotifications_Session { | ||||
| 	if m != nil { | ||||
| 		return m.Sessions | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type GameNotificationSettings struct { | ||||
| 	Appid              *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"` | ||||
| 	AllowNotifications *bool   `protobuf:"varint,2,opt,name=allow_notifications" json:"allow_notifications,omitempty"` | ||||
| 	XXX_unrecognized   []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *GameNotificationSettings) Reset()                    { *m = GameNotificationSettings{} } | ||||
| func (m *GameNotificationSettings) String() string            { return proto.CompactTextString(m) } | ||||
| func (*GameNotificationSettings) ProtoMessage()               {} | ||||
| func (*GameNotificationSettings) Descriptor() ([]byte, []int) { return gamenotifications_fileDescriptor0, []int{14} } | ||||
|  | ||||
| func (m *GameNotificationSettings) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *GameNotificationSettings) GetAllowNotifications() bool { | ||||
| 	if m != nil && m.AllowNotifications != nil { | ||||
| 		return *m.AllowNotifications | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CGameNotifications_UpdateNotificationSettings_Request struct { | ||||
| 	GameNotificationSettings []*GameNotificationSettings `protobuf:"bytes,1,rep,name=game_notification_settings" json:"game_notification_settings,omitempty"` | ||||
| 	XXX_unrecognized         []byte                      `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateNotificationSettings_Request) Reset() { | ||||
| 	*m = CGameNotifications_UpdateNotificationSettings_Request{} | ||||
| } | ||||
| func (m *CGameNotifications_UpdateNotificationSettings_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_UpdateNotificationSettings_Request) ProtoMessage() {} | ||||
| func (*CGameNotifications_UpdateNotificationSettings_Request) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{15} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateNotificationSettings_Request) GetGameNotificationSettings() []*GameNotificationSettings { | ||||
| 	if m != nil { | ||||
| 		return m.GameNotificationSettings | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CGameNotifications_UpdateNotificationSettings_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_UpdateNotificationSettings_Response) Reset() { | ||||
| 	*m = CGameNotifications_UpdateNotificationSettings_Response{} | ||||
| } | ||||
| func (m *CGameNotifications_UpdateNotificationSettings_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_UpdateNotificationSettings_Response) ProtoMessage() {} | ||||
| func (*CGameNotifications_UpdateNotificationSettings_Response) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{16} | ||||
| } | ||||
|  | ||||
| type CGameNotifications_OnNotificationsRequested_Notification struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	Appid            *uint32 `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnNotificationsRequested_Notification) Reset() { | ||||
| 	*m = CGameNotifications_OnNotificationsRequested_Notification{} | ||||
| } | ||||
| func (m *CGameNotifications_OnNotificationsRequested_Notification) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_OnNotificationsRequested_Notification) ProtoMessage() {} | ||||
| func (*CGameNotifications_OnNotificationsRequested_Notification) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{17} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnNotificationsRequested_Notification) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnNotificationsRequested_Notification) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CGameNotifications_OnUserStatusChanged_Notification struct { | ||||
| 	Steamid          *uint64                        `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	Sessionid        *uint64                        `protobuf:"varint,2,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	Appid            *uint32                        `protobuf:"varint,3,opt,name=appid" json:"appid,omitempty"` | ||||
| 	Status           *CGameNotifications_UserStatus `protobuf:"bytes,4,opt,name=status" json:"status,omitempty"` | ||||
| 	Removed          *bool                          `protobuf:"varint,5,opt,name=removed" json:"removed,omitempty"` | ||||
| 	XXX_unrecognized []byte                         `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnUserStatusChanged_Notification) Reset() { | ||||
| 	*m = CGameNotifications_OnUserStatusChanged_Notification{} | ||||
| } | ||||
| func (m *CGameNotifications_OnUserStatusChanged_Notification) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CGameNotifications_OnUserStatusChanged_Notification) ProtoMessage() {} | ||||
| func (*CGameNotifications_OnUserStatusChanged_Notification) Descriptor() ([]byte, []int) { | ||||
| 	return gamenotifications_fileDescriptor0, []int{18} | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnUserStatusChanged_Notification) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnUserStatusChanged_Notification) GetSessionid() uint64 { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnUserStatusChanged_Notification) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnUserStatusChanged_Notification) GetStatus() *CGameNotifications_UserStatus { | ||||
| 	if m != nil { | ||||
| 		return m.Status | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CGameNotifications_OnUserStatusChanged_Notification) GetRemoved() bool { | ||||
| 	if m != nil && m.Removed != nil { | ||||
| 		return *m.Removed | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*CGameNotifications_Variable)(nil), "CGameNotifications_Variable") | ||||
| 	proto.RegisterType((*CGameNotifications_LocalizedText)(nil), "CGameNotifications_LocalizedText") | ||||
| 	proto.RegisterType((*CGameNotifications_UserStatus)(nil), "CGameNotifications_UserStatus") | ||||
| 	proto.RegisterType((*CGameNotifications_CreateSession_Request)(nil), "CGameNotifications_CreateSession_Request") | ||||
| 	proto.RegisterType((*CGameNotifications_CreateSession_Response)(nil), "CGameNotifications_CreateSession_Response") | ||||
| 	proto.RegisterType((*CGameNotifications_DeleteSession_Request)(nil), "CGameNotifications_DeleteSession_Request") | ||||
| 	proto.RegisterType((*CGameNotifications_DeleteSession_Response)(nil), "CGameNotifications_DeleteSession_Response") | ||||
| 	proto.RegisterType((*CGameNotifications_UpdateSession_Request)(nil), "CGameNotifications_UpdateSession_Request") | ||||
| 	proto.RegisterType((*CGameNotifications_UpdateSession_Response)(nil), "CGameNotifications_UpdateSession_Response") | ||||
| 	proto.RegisterType((*CGameNotifications_EnumerateSessions_Request)(nil), "CGameNotifications_EnumerateSessions_Request") | ||||
| 	proto.RegisterType((*CGameNotifications_Session)(nil), "CGameNotifications_Session") | ||||
| 	proto.RegisterType((*CGameNotifications_EnumerateSessions_Response)(nil), "CGameNotifications_EnumerateSessions_Response") | ||||
| 	proto.RegisterType((*CGameNotifications_GetSessionDetails_Request)(nil), "CGameNotifications_GetSessionDetails_Request") | ||||
| 	proto.RegisterType((*CGameNotifications_GetSessionDetails_Request_RequestedSession)(nil), "CGameNotifications_GetSessionDetails_Request.RequestedSession") | ||||
| 	proto.RegisterType((*CGameNotifications_GetSessionDetails_Response)(nil), "CGameNotifications_GetSessionDetails_Response") | ||||
| 	proto.RegisterType((*GameNotificationSettings)(nil), "GameNotificationSettings") | ||||
| 	proto.RegisterType((*CGameNotifications_UpdateNotificationSettings_Request)(nil), "CGameNotifications_UpdateNotificationSettings_Request") | ||||
| 	proto.RegisterType((*CGameNotifications_UpdateNotificationSettings_Response)(nil), "CGameNotifications_UpdateNotificationSettings_Response") | ||||
| 	proto.RegisterType((*CGameNotifications_OnNotificationsRequested_Notification)(nil), "CGameNotifications_OnNotificationsRequested_Notification") | ||||
| 	proto.RegisterType((*CGameNotifications_OnUserStatusChanged_Notification)(nil), "CGameNotifications_OnUserStatusChanged_Notification") | ||||
| } | ||||
|  | ||||
| var gamenotifications_fileDescriptor0 = []byte{ | ||||
| 	// 2245 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x59, 0xcd, 0x8f, 0x1c, 0x47, | ||||
| 	0x15, 0x57, 0xef, 0xec, 0x7a, 0xd7, 0x65, 0x2c, 0x91, 0x0e, 0x12, 0x93, 0xb1, 0xe3, 0xb4, 0x3b, | ||||
| 	0x38, 0xde, 0x8d, 0x77, 0xcb, 0x78, 0x43, 0xfc, 0x01, 0x24, 0xc2, 0xbd, 0x8e, 0x4c, 0x24, 0xb3, | ||||
| 	0x49, 0xbc, 0x9b, 0x60, 0x21, 0xc4, 0xa8, 0xa6, 0xbb, 0x66, 0xa7, 0xb3, 0x3d, 0xdd, 0x43, 0x57, | ||||
| 	0xf5, 0x6e, 0x36, 0x07, 0x82, 0xcc, 0xd7, 0x09, 0x82, 0x48, 0x22, 0x40, 0x48, 0x91, 0x90, 0x50, | ||||
| 	0xc4, 0x81, 0x0b, 0x87, 0x1c, 0x41, 0x48, 0x91, 0x38, 0x72, 0xcc, 0x15, 0xce, 0xfc, 0x15, 0xbc, | ||||
| 	0xfa, 0xec, 0xee, 0x99, 0x1e, 0xef, 0xcc, 0x22, 0x11, 0x71, 0xb1, 0x3c, 0x5d, 0xf5, 0xde, 0xfb, | ||||
| 	0xd5, 0x7b, 0xbf, 0xf7, 0x51, 0xb5, 0xe8, 0x1a, 0xe3, 0x94, 0x0c, 0x87, 0x94, 0x31, 0xb2, 0x47, | ||||
| 	0x59, 0x77, 0x8f, 0x0c, 0x69, 0x9a, 0xf1, 0xb8, 0x1f, 0x87, 0x84, 0xc7, 0x59, 0xca, 0xb0, 0x5c, | ||||
| 	0x0f, 0x93, 0x98, 0xa6, 0x1c, 0x8f, 0xf2, 0x8c, 0x67, 0x9d, 0xf5, 0xba, 0x48, 0x91, 0xc2, 0x6e, | ||||
| 	0x1a, 0x75, 0x7b, 0x84, 0xd1, 0xc9, 0xdd, 0xfe, 0xbf, 0x16, 0xd0, 0xb9, 0xad, 0xbb, 0xa0, 0x76, | ||||
| 	0xbb, 0xaa, 0xb6, 0xfb, 0x06, 0xc9, 0x63, 0xd2, 0x4b, 0xa8, 0xfb, 0x91, 0x83, 0x5a, 0xfb, 0xf4, | ||||
| 	0xa8, 0xed, 0x78, 0xce, 0xea, 0xe9, 0xe0, 0x37, 0xce, 0xc3, 0x8f, 0xdb, 0xef, 0x39, 0xbb, 0x03, | ||||
| 	0xea, 0xa5, 0x20, 0xe3, 0x65, 0x7d, 0x8f, 0xc3, 0xff, 0x0f, 0xf4, 0x6e, 0x2f, 0x4e, 0xe5, 0xef, | ||||
| 	0x24, 0x0b, 0x49, 0x12, 0xbf, 0x4d, 0x23, 0x8f, 0xd3, 0xb7, 0xb8, 0xb7, 0xb1, 0xe1, 0x91, 0xf4, | ||||
| 	0xe8, 0x70, 0x40, 0x73, 0x0a, 0xcb, 0x84, 0x7b, 0x97, 0x8c, 0x80, 0x50, 0x72, 0xc9, 0x8b, 0x99, | ||||
| 	0xd7, 0xcf, 0x8a, 0x34, 0xf2, 0x0e, 0x63, 0x3e, 0xd0, 0x2a, 0xa4, 0x60, 0xcc, 0xe1, 0x53, 0x92, | ||||
| 	0x78, 0x3d, 0xea, 0xb1, 0xa2, 0xc7, 0x78, 0xcc, 0x8b, 0x88, 0xaa, 0x6d, 0x72, 0xd3, 0x5e, 0x7c, | ||||
| 	0x40, 0x53, 0xb0, 0x9e, 0x14, 0xd4, 0xfd, 0xb5, 0x83, 0x96, 0xe4, 0xff, 0xda, 0x0b, 0x12, 0xea, | ||||
| 	0xcf, 0x04, 0xd4, 0x87, 0x12, 0xaa, 0xfc, 0x3c, 0x81, 0x95, 0x67, 0x56, 0x29, 0x9f, 0x86, 0x1c, | ||||
| 	0xbe, 0x8e, 0x12, 0x12, 0x5a, 0x61, 0x63, 0x50, 0xa9, 0xc0, 0x9e, 0xb7, 0x45, 0x52, 0x40, 0xc9, | ||||
| 	0x68, 0xd2, 0x17, 0x20, 0x89, 0x91, 0x97, 0x5e, 0x04, 0x0b, 0xfb, 0x34, 0xc5, 0xfe, 0x4f, 0x5a, | ||||
| 	0xc8, 0x6b, 0x70, 0xf1, 0x3d, 0x63, 0x6a, 0x17, 0x2c, 0xb9, 0xdf, 0x44, 0x4b, 0x72, 0xbb, 0x76, | ||||
| 	0xf4, 0x2d, 0x00, 0xff, 0xfc, 0xed, 0x06, 0x75, 0xca, 0x81, 0x43, 0x32, 0x62, 0xe2, 0x00, 0x02, | ||||
| 	0x53, 0x44, 0x59, 0x9c, 0x03, 0x60, 0xc6, 0xf3, 0x38, 0xdd, 0xc3, 0xee, 0xcf, 0x1d, 0x74, 0xda, | ||||
| 	0x20, 0x64, 0xe0, 0x8c, 0xd6, 0xea, 0x99, 0xcd, 0xf3, 0xf8, 0x11, 0x31, 0x0e, 0xbe, 0x0b, 0xc6, | ||||
| 	0x1e, 0x80, 0xb1, 0x98, 0x71, 0x71, 0x50, 0x2b, 0xac, 0x1c, 0xc7, 0x26, 0x3d, 0x05, 0xd1, 0xac, | ||||
| 	0xec, 0x52, 0xb1, 0x9b, 0x70, 0xa0, 0xc1, 0xf3, 0x53, 0x07, 0x9d, 0xcd, 0x69, 0x1a, 0x41, 0xf4, | ||||
| 	0xa3, 0xae, 0xf0, 0x6a, 0xbb, 0x25, 0x8f, 0x98, 0x81, 0xd5, 0x7d, 0x71, 0x76, 0xcf, 0xac, 0x1a, | ||||
| 	0x1d, 0x39, 0xfd, 0x3e, 0x98, 0xe5, 0xf0, 0x21, 0x21, 0xe9, 0x5e, 0x01, 0x34, 0x5e, 0xf7, 0xc2, | ||||
| 	0x6c, 0x38, 0x4a, 0x28, 0x98, 0x97, 0xc1, 0xb7, 0x41, 0xb4, 0xb8, 0xc4, 0x89, 0xd6, 0xbd, 0xb8, | ||||
| 	0x2f, 0x62, 0xa0, 0x85, 0xbc, 0x43, 0xc2, 0x3c, 0x36, 0xa2, 0xa1, 0x4c, 0x00, 0xec, 0x7f, 0xb0, | ||||
| 	0x88, 0x9e, 0x6c, 0x70, 0xc3, 0xeb, 0x8c, 0xe6, 0x3b, 0x9c, 0xf0, 0x82, 0xb9, 0xd7, 0xd0, 0xb2, | ||||
| 	0xcc, 0x90, 0x38, 0x92, 0x61, 0x38, 0x15, 0x78, 0x80, 0xf1, 0xbc, 0xa0, 0x90, 0x56, 0x13, 0x7a, | ||||
| 	0x05, 0xec, 0xbe, 0x0c, 0x6a, 0xd5, 0x36, 0xec, 0xfe, 0x01, 0x68, 0xc7, 0x40, 0xda, 0xd0, 0xee, | ||||
| 	0x7d, 0x41, 0xbb, 0x77, 0x25, 0xed, 0xec, 0x56, 0x58, 0x05, 0xaa, 0xe4, 0x94, 0x44, 0x47, 0x22, | ||||
| 	0x17, 0xb8, 0x5e, 0x13, 0xbc, 0x57, 0x1f, 0xc1, 0xc1, 0x40, 0xb3, 0x23, 0xd8, 0x74, 0x48, 0x62, | ||||
| 	0x0e, 0x5e, 0x13, 0xdb, 0x84, 0x0a, 0x91, 0xef, 0x62, 0x9b, 0xf9, 0x9c, 0x09, 0xdf, 0x7b, 0x24, | ||||
| 	0x94, 0x7c, 0xe8, 0xe7, 0xd9, 0xd0, 0x2a, 0xc3, 0xd6, 0x43, 0xd1, 0xba, 0xa2, 0xaa, 0x16, 0xcd, | ||||
| 	0x0e, 0x60, 0xd1, 0xfd, 0x31, 0xc0, 0x04, 0x3f, 0x25, 0x54, 0x3a, 0xff, 0xcc, 0xe6, 0x45, 0x7c, | ||||
| 	0x1c, 0x23, 0x83, 0xfb, 0x70, 0x90, 0xed, 0x5d, 0x21, 0x63, 0xd8, 0xcf, 0xa0, 0xa6, 0x28, 0x22, | ||||
| 	0x7a, 0x51, 0xcc, 0x04, 0x62, 0xc5, 0x41, 0xb0, 0xa2, 0xce, 0x23, 0xc3, 0x17, 0xe7, 0x96, 0x49, | ||||
| 	0x02, 0xe8, 0x81, 0x95, 0x63, 0xd8, 0xfd, 0x95, 0x83, 0x96, 0x75, 0x65, 0x6a, 0x2f, 0xce, 0x0a, | ||||
| 	0xe4, 0x7b, 0x00, 0xe4, 0x3b, 0x3b, 0x45, 0x8f, 0xcf, 0x83, 0x45, 0xfe, 0x53, 0xd6, 0x93, 0x47, | ||||
| 	0x80, 0xf2, 0xdf, 0x5b, 0x42, 0xab, 0x0d, 0x20, 0xb6, 0x20, 0x36, 0x9c, 0xee, 0xa8, 0x6d, 0xdd, | ||||
| 	0xfb, 0x8a, 0x93, 0xee, 0x0d, 0xb4, 0x44, 0x46, 0x23, 0x4d, 0x90, 0xb3, 0xc1, 0x2a, 0x60, 0xfb, | ||||
| 	0x92, 0x88, 0x94, 0xfc, 0x28, 0x20, 0x84, 0x52, 0xac, 0x86, 0xb1, 0x9f, 0x41, 0x04, 0xde, 0x41, | ||||
| 	0xcb, 0x61, 0x96, 0x4a, 0xfe, 0x0b, 0xa6, 0x2c, 0x06, 0x29, 0x88, 0xbe, 0x29, 0xcc, 0x6e, 0x58, | ||||
| 	0x8e, 0x7a, 0x7a, 0x87, 0xae, 0x58, 0x36, 0x8c, 0x21, 0x04, 0x1d, 0x0e, 0x24, 0xf5, 0x13, 0xc6, | ||||
| 	0xb2, 0x30, 0x1e, 0x37, 0x21, 0xb3, 0x82, 0x65, 0xa2, 0x24, 0xf7, 0xde, 0xa4, 0x21, 0x17, 0x4c, | ||||
| 	0x51, 0xc7, 0xee, 0x91, 0x10, 0xca, 0x06, 0x30, 0xf5, 0x47, 0xf3, 0x53, 0xe0, 0x35, 0x80, 0xf8, | ||||
| 	0x2d, 0x71, 0xba, 0x69, 0xae, 0x87, 0x9a, 0xa7, 0xbd, 0x4f, 0x6d, 0xf5, 0xa6, 0x24, 0x1c, 0x18, | ||||
| 	0xee, 0x1b, 0x9f, 0x97, 0x0c, 0x20, 0x68, 0x49, 0xac, 0x31, 0x08, 0xbf, 0x28, 0x4c, 0x17, 0xf0, | ||||
| 	0x23, 0x33, 0x32, 0xd8, 0x04, 0x04, 0x58, 0x20, 0x88, 0x53, 0xc8, 0x00, 0x92, 0xa8, 0x6c, 0x92, | ||||
| 	0x61, 0x84, 0xbe, 0x20, 0x35, 0x99, 0xaa, 0xa1, 0x6d, 0x60, 0xf7, 0x13, 0xa7, 0x4c, 0xe3, 0x25, | ||||
| 	0x99, 0xc6, 0x7f, 0x16, 0x49, 0xf9, 0x27, 0x67, 0xf5, 0x95, 0x91, 0x30, 0x40, 0x92, 0x35, 0x93, | ||||
| 	0xbf, 0xe2, 0x0c, 0x43, 0xb2, 0x4f, 0xab, 0x65, 0x47, 0xb8, 0xae, 0x47, 0x07, 0x04, 0x4a, 0x3a, | ||||
| 	0x98, 0x81, 0x44, 0x84, 0xa2, 0x62, 0x23, 0xb4, 0x5e, 0x66, 0xef, 0xb0, 0x80, 0xbd, 0x3d, 0x3a, | ||||
| 	0x66, 0x1e, 0xf2, 0x33, 0xaa, 0x60, 0xeb, 0x51, 0x91, 0xb6, 0x24, 0x8a, 0x54, 0xf0, 0xaa, 0x1b, | ||||
| 	0x8d, 0x7c, 0x3f, 0x87, 0x76, 0x1c, 0xb1, 0xb2, 0xab, 0xc9, 0x74, 0xf6, 0x63, 0xb4, 0x36, 0x03, | ||||
| 	0x29, 0xd9, 0x08, 0xbe, 0x52, 0xf7, 0xeb, 0xe8, 0xb4, 0x56, 0xab, 0x99, 0xb9, 0x18, 0xac, 0xc1, | ||||
| 	0x91, 0x2f, 0xed, 0x96, 0xf6, 0xe0, 0xb0, 0x3a, 0x7e, 0x8a, 0xa1, 0x91, 0x75, 0x98, 0xff, 0xee, | ||||
| 	0x42, 0x63, 0x02, 0xdc, 0xa1, 0xa2, 0x9c, 0x8c, 0x27, 0xc0, 0xd5, 0x49, 0x53, 0xe7, 0xc1, 0x54, | ||||
| 	0xbb, 0x6e, 0x4a, 0xa4, 0xa5, 0x14, 0xc7, 0xee, 0x75, 0x93, 0x31, 0x0b, 0x32, 0x63, 0x2e, 0xc3, | ||||
| 	0xe6, 0xa7, 0xcb, 0x8c, 0x69, 0x48, 0x67, 0x2d, 0xf7, 0x76, 0x19, 0xc5, 0x96, 0x8c, 0x62, 0x0c, | ||||
| 	0x92, 0xf4, 0x7f, 0x11, 0x43, 0xec, 0x5f, 0x69, 0x74, 0xfe, 0xb8, 0x43, 0x94, 0xf3, 0xfd, 0xbf, | ||||
| 	0x34, 0xd7, 0x8f, 0xd7, 0x47, 0x11, 0xf9, 0x2f, 0xdc, 0x57, 0x48, 0xf1, 0xf9, 0xdd, 0x67, 0xe4, | ||||
| 	0x7e, 0x39, 0x7f, 0xba, 0xcb, 0x42, 0x5b, 0x71, 0xb0, 0x1c, 0xf3, 0xe8, 0x61, 0x63, 0xf6, 0x43, | ||||
| 	0xaf, 0x7a, 0xb9, 0xef, 0xc1, 0x2c, 0x3a, 0xee, 0x57, 0xb5, 0x59, 0x8e, 0x6d, 0x62, 0x15, 0x9c, | ||||
| 	0x1b, 0x0e, 0xa0, 0x21, 0x43, 0x03, 0x76, 0xff, 0xe1, 0xcc, 0x97, 0xfc, 0x1f, 0x8a, 0xb4, 0xfd, | ||||
| 	0x6d, 0x35, 0x6d, 0xcb, 0x21, 0x45, 0xa5, 0xd7, 0xe1, 0x20, 0x63, 0x54, 0xd7, 0x04, 0x33, 0x29, | ||||
| 	0x2a, 0x07, 0x48, 0x1f, 0xe6, 0xb4, 0x9f, 0x88, 0x62, 0x58, 0x8e, 0x6e, 0xba, 0x19, 0xbf, 0xdc, | ||||
| 	0xb7, 0x1c, 0x60, 0x1e, 0x81, 0xb1, 0x54, 0x40, 0x25, 0x89, 0xea, 0xc6, 0x75, 0x32, 0xc8, 0x53, | ||||
| 	0x1d, 0x59, 0xed, 0x36, 0x95, 0x63, 0x5e, 0xaf, 0x34, 0xa7, 0xfe, 0x6f, 0x2b, 0x4d, 0x33, 0xd9, | ||||
| 	0xc7, 0xe9, 0xab, 0xc9, 0xfe, 0xfb, 0x45, 0xb4, 0xde, 0xb0, 0xfb, 0xa5, 0xb4, 0x18, 0xd2, 0xbc, | ||||
| 	0x14, 0x60, 0x96, 0xf0, 0x3f, 0xa8, 0x37, 0x4c, 0x35, 0xf5, 0x8d, 0x93, 0xdd, 0x38, 0x24, 0xa2, | ||||
| 	0x9c, 0xc4, 0x09, 0x93, 0x1d, 0xd3, 0x33, 0x3e, 0xc4, 0x0d, 0x4c, 0x13, 0xe7, 0xe6, 0x95, 0x19, | ||||
| 	0x4b, 0x5b, 0xb5, 0x61, 0xca, 0x29, 0x2f, 0xf2, 0x54, 0x90, 0xee, 0x17, 0x0e, 0x7a, 0x22, 0x4e, | ||||
| 	0xc3, 0x04, 0x6e, 0x0e, 0x5d, 0x90, 0xea, 0x0a, 0x89, 0xae, 0xb9, 0x1d, 0xc9, 0xdc, 0x58, 0x09, | ||||
| 	0xf6, 0x01, 0xd4, 0x5e, 0x25, 0x66, 0x41, 0x96, 0x25, 0x14, 0x7a, 0x2e, 0xc0, 0xa1, 0xf9, 0x10, | ||||
| 	0x5a, 0x0f, 0x78, 0x16, 0xae, 0x2f, 0x60, 0x30, 0x97, 0x56, 0xb5, 0xb8, 0x80, 0x59, 0x89, 0x00, | ||||
| 	0x1b, 0x64, 0x45, 0x12, 0xa9, 0x40, 0x49, 0x7b, 0x11, 0xf6, 0xee, 0xd0, 0x3e, 0x29, 0x12, 0x2e, | ||||
| 	0x67, 0xe8, 0x3e, 0x49, 0xe0, 0x0a, 0xe6, 0xfe, 0xae, 0x0a, 0xa8, 0xe0, 0x83, 0x1a, 0x22, 0x39, | ||||
| 	0x15, 0xad, 0x04, 0x6f, 0x01, 0x20, 0x7e, 0x42, 0x40, 0xe2, 0xb7, 0xd0, 0x0b, 0x77, 0x3c, 0x11, | ||||
| 	0x1e, 0xa0, 0x83, 0x24, 0xd1, 0x8c, 0xe8, 0x02, 0xb4, 0x62, 0xe6, 0x67, 0xd9, 0x3c, 0x4f, 0x07, | ||||
| 	0x5f, 0x06, 0x2c, 0xeb, 0x15, 0x2c, 0xf7, 0xcc, 0x78, 0x0d, 0x42, 0x66, 0xda, 0xaf, 0x5c, 0xd9, | ||||
| 	0xa0, 0x7a, 0x7e, 0xb2, 0x88, 0x3a, 0x0d, 0x1c, 0xd1, 0xd4, 0x80, 0x8a, 0x36, 0x51, 0x02, 0x9f, | ||||
| 	0x06, 0x1b, 0x4f, 0xd5, 0x59, 0xa1, 0x8e, 0x12, 0xb3, 0xb2, 0xaf, 0x6f, 0x54, 0x2b, 0xe1, 0x62, | ||||
| 	0x70, 0x01, 0x64, 0x3a, 0x65, 0x25, 0x34, 0x47, 0xb7, 0xdb, 0x2b, 0x03, 0x57, 0xeb, 0x33, 0x19, | ||||
| 	0xb8, 0x1e, 0x98, 0x02, 0x3c, 0xf3, 0xa4, 0xfb, 0x0c, 0x20, 0xf4, 0xc5, 0x91, 0xc2, 0x22, 0x87, | ||||
| 	0x4b, 0x11, 0xd7, 0xc5, 0x74, 0xe2, 0x68, 0x5f, 0x43, 0x9f, 0xe3, 0xf1, 0x90, 0x76, 0x75, 0x27, | ||||
| 	0x97, 0x81, 0x3a, 0x1b, 0x5c, 0x02, 0xe9, 0x8b, 0x6a, 0x5a, 0x1b, 0x8e, 0x81, 0x85, 0x8b, 0x90, | ||||
| 	0xde, 0x8b, 0xdd, 0x6f, 0x68, 0x61, 0x5d, 0x27, 0x65, 0xe1, 0x3a, 0x1b, 0x3c, 0x0b, 0xc2, 0xcf, | ||||
| 	0x08, 0xe1, 0x84, 0x30, 0xde, 0xac, 0x41, 0x0b, 0x60, 0x37, 0x42, 0x67, 0x24, 0x67, 0x99, 0x2c, | ||||
| 	0xd3, 0xed, 0xe5, 0x99, 0x8a, 0xf9, 0x55, 0x30, 0x70, 0x45, 0x86, 0x58, 0xfe, 0x36, 0x23, 0x5c, | ||||
| 	0x59, 0x86, 0xc7, 0x7b, 0xf0, 0x43, 0x07, 0x6d, 0xcc, 0x58, 0x69, 0xf4, 0x14, 0xf4, 0x1a, 0x5a, | ||||
| 	0x31, 0x85, 0x00, 0x78, 0x25, 0x40, 0x9d, 0xc3, 0xd3, 0x79, 0x18, 0xf8, 0x80, 0xe8, 0x42, 0xd9, | ||||
| 	0x51, 0x1a, 0xca, 0x09, 0xf6, 0x3f, 0x6d, 0x35, 0x96, 0xbb, 0xbb, 0x94, 0x6b, 0x2d, 0x77, 0x54, | ||||
| 	0xc5, 0xb2, 0xe5, 0xee, 0xd5, 0x09, 0x0c, 0x2f, 0xe2, 0x79, 0x14, 0xe0, 0xfb, 0xe6, 0xf2, 0x6b, | ||||
| 	0xd2, 0x05, 0xd7, 0x07, 0x80, 0xa7, 0x00, 0xf5, 0xb9, 0xa9, 0xb4, 0x87, 0x09, 0xfb, 0x46, 0x25, | ||||
| 	0x83, 0xd5, 0x4d, 0x5b, 0x12, 0xe3, 0xd8, 0xb4, 0xed, 0xfc, 0xdb, 0x41, 0x9f, 0x9f, 0xb0, 0x7e, | ||||
| 	0x73, 0x32, 0x59, 0x2d, 0xcf, 0x6a, 0x25, 0x7c, 0x8f, 0xd6, 0xcb, 0xf7, 0x31, 0x75, 0xae, 0xf5, | ||||
| 	0xd9, 0xd6, 0x39, 0xff, 0x9d, 0x46, 0x72, 0x35, 0x85, 0x45, 0x93, 0x6b, 0x7b, 0x3e, 0x72, 0xd9, | ||||
| 	0x30, 0x19, 0x9f, 0x8c, 0x8d, 0x4f, 0xfe, 0x1f, 0x1d, 0xd4, 0x1e, 0x17, 0xdf, 0xa1, 0x5c, 0x5c, | ||||
| 	0xf3, 0xd9, 0xc9, 0x6f, 0x99, 0x3b, 0xe8, 0x71, 0xc8, 0xaa, 0xec, 0xb0, 0x5b, 0x7b, 0x25, 0x94, | ||||
| 	0xd4, 0x59, 0x09, 0xae, 0x83, 0x9a, 0xcd, 0x6f, 0x57, 0xdc, 0x29, 0x1d, 0x26, 0xf7, 0x33, 0xaf, | ||||
| 	0x2a, 0x50, 0x16, 0x5f, 0x30, 0x88, 0xfd, 0x03, 0xf4, 0xfc, 0xd4, 0x01, 0xa1, 0x09, 0xbe, 0x4d, | ||||
| 	0x86, 0x17, 0x50, 0x47, 0x94, 0xd3, 0x1a, 0x98, 0x2e, 0xd3, 0xbb, 0xb4, 0x17, 0x9f, 0xc0, 0xd3, | ||||
| 	0xbc, 0xe0, 0xdf, 0x44, 0xd7, 0xe7, 0xb5, 0xab, 0xa7, 0x94, 0xbf, 0x3b, 0xe8, 0x66, 0x83, 0xe8, | ||||
| 	0x2b, 0x69, 0xed, 0xb7, 0x25, 0x7b, 0xb7, 0xfa, 0x19, 0x22, 0x3d, 0xf6, 0x0a, 0xf4, 0x02, 0xf8, | ||||
| 	0xed, 0x96, 0x99, 0xe3, 0x2a, 0x95, 0x42, 0x8c, 0x9f, 0x35, 0xbf, 0xc1, 0xfc, 0x21, 0xde, 0x38, | ||||
| 	0xcb, 0xf7, 0x2b, 0x19, 0x93, 0xaf, 0xd6, 0x13, 0xf8, 0x0a, 0x68, 0xbb, 0x5c, 0x09, 0xa6, 0x78, | ||||
| 	0xcf, 0x2b, 0x25, 0xea, 0xaf, 0xbb, 0xfe, 0x5f, 0x5b, 0xe8, 0xb9, 0xc6, 0x83, 0x94, 0x95, 0x75, | ||||
| 	0x4b, 0x8d, 0xd7, 0xf5, 0x33, 0xbc, 0x38, 0x7e, 0x86, 0x0d, 0xb0, 0xba, 0x36, 0xe5, 0x0c, 0xcc, | ||||
| 	0x16, 0x65, 0x3b, 0xaa, 0x3f, 0xa8, 0xa6, 0xbd, 0xea, 0xb7, 0x2f, 0x81, 0x86, 0xdb, 0x8d, 0x17, | ||||
| 	0x4a, 0xdb, 0x24, 0xf4, 0x0b, 0x6f, 0xed, 0xe9, 0xab, 0x60, 0xaa, 0xfd, 0x18, 0xcd, 0xf7, 0x8c, | ||||
| 	0x37, 0x5a, 0xd2, 0x1b, 0xd2, 0xb7, 0x53, 0xef, 0x33, 0xd3, 0x34, 0x5a, 0x6d, 0x6f, 0xa0, 0x53, | ||||
| 	0xba, 0x0b, 0xa9, 0x26, 0x7b, 0x5c, 0x17, 0x92, 0x1d, 0xb6, 0x52, 0x70, 0xb6, 0xe1, 0x7a, 0x53, | ||||
| 	0x36, 0x24, 0x3b, 0x13, 0xbb, 0x77, 0xd1, 0x72, 0x4e, 0x87, 0xd9, 0x81, 0x6e, 0xae, 0x3a, 0x77, | ||||
| 	0x2a, 0x82, 0x42, 0xa7, 0x37, 0x20, 0x62, 0xee, 0x86, 0x6b, 0x85, 0xde, 0x5b, 0x3e, 0xc9, 0x99, | ||||
| 	0x34, 0xdf, 0xfc, 0x68, 0x05, 0x3d, 0x36, 0x81, 0x48, 0xbc, 0xd1, 0x3e, 0x26, 0x34, 0xd4, 0xae, | ||||
| 	0xf3, 0xee, 0x1a, 0x9e, 0xf5, 0x19, 0xaa, 0xf3, 0x2c, 0x9e, 0xf9, 0x71, 0xc0, 0xbf, 0x08, 0xd0, | ||||
| 	0x9f, 0x54, 0x6b, 0x4c, 0x3e, 0x1f, 0xb2, 0xa3, 0x34, 0x54, 0x73, 0x8e, 0x86, 0x69, 0xf1, 0xd4, | ||||
| 	0x6e, 0xb8, 0xcd, 0x78, 0x1a, 0x5f, 0x05, 0x9a, 0xf1, 0x4c, 0xb9, 0x2f, 0x4b, 0x3c, 0x6a, 0xed, | ||||
| 	0x38, 0x3c, 0xb5, 0x4b, 0x48, 0x33, 0x9e, 0xc6, 0x6b, 0x76, 0x33, 0x9e, 0x29, 0x57, 0x1a, 0x89, | ||||
| 	0x47, 0xad, 0x4d, 0xc3, 0xf3, 0x3e, 0xe0, 0x99, 0x18, 0x3c, 0xdc, 0x0d, 0x3c, 0xcf, 0x4d, 0xa8, | ||||
| 	0x83, 0xf1, 0x5c, 0xe3, 0x8c, 0x2f, 0x1f, 0x9f, 0xed, 0x3a, 0x40, 0x1b, 0x1f, 0x4f, 0xdc, 0x0f, | ||||
| 	0x01, 0xd6, 0x44, 0xcb, 0x6a, 0x86, 0x35, 0x75, 0xe0, 0x68, 0x86, 0x35, 0xbd, 0x11, 0xfa, 0x72, | ||||
| 	0x52, 0x84, 0x75, 0xfd, 0xc7, 0x07, 0xdb, 0xf1, 0x01, 0x9f, 0x7d, 0x25, 0x37, 0x7e, 0xfb, 0xd4, | ||||
| 	0x41, 0x9d, 0xe9, 0xf5, 0xda, 0xbd, 0x8e, 0x4f, 0xd4, 0x57, 0x3a, 0x37, 0xf0, 0x09, 0xfb, 0xc2, | ||||
| 	0x5d, 0xc0, 0xbe, 0x65, 0x42, 0x6d, 0x06, 0x0b, 0x52, 0xeb, 0x83, 0x32, 0xee, 0xf5, 0xa2, 0x3e, | ||||
| 	0x76, 0x38, 0xa8, 0x54, 0x9d, 0x57, 0x41, 0xd1, 0xbd, 0xdb, 0x70, 0xce, 0xfc, 0x20, 0x0e, 0xd5, | ||||
| 	0x3c, 0xd2, 0x2f, 0xd2, 0x50, 0xed, 0xcf, 0x69, 0x62, 0x5e, 0x20, 0xe4, 0x90, 0x22, 0xf8, 0x94, | ||||
| 	0x67, 0x69, 0x56, 0x34, 0x68, 0x97, 0x2a, 0xa0, 0xe2, 0x6c, 0xfe, 0x73, 0x01, 0x7d, 0x71, 0xe2, | ||||
| 	0x50, 0x5b, 0xf2, 0x4f, 0x75, 0xee, 0x07, 0x30, 0x2b, 0x4c, 0xeb, 0x5d, 0xee, 0x2d, 0x7c, 0xd2, | ||||
| 	0x4e, 0xd7, 0x39, 0x83, 0xb7, 0x33, 0xeb, 0x9b, 0x6b, 0x70, 0xa4, 0x0d, 0xbd, 0x91, 0xa9, 0xb6, | ||||
| 	0x64, 0x9b, 0x44, 0x36, 0x12, 0x23, 0x22, 0x1f, 0xeb, 0x76, 0x22, 0x4d, 0x1f, 0x6f, 0x68, 0x45, | ||||
| 	0xee, 0x57, 0xf0, 0x09, 0x7a, 0x56, 0x1d, 0xcd, 0x73, 0x80, 0xe6, 0x6a, 0x75, 0xb9, 0x8e, 0xa8, | ||||
| 	0x6c, 0x05, 0x83, 0xb2, 0xb9, 0x74, 0xc4, 0x4b, 0xda, 0x17, 0x94, 0xcf, 0xea, 0x48, 0xff, 0xf6, | ||||
| 	0x71, 0x7b, 0x21, 0x68, 0xfd, 0xd0, 0x71, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x0c, 0x81, 0x5e, | ||||
| 	0xd6, 0x51, 0x1d, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										163
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/offline.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/offline.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_offline.steamclient.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package unified | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type COffline_GetOfflineLogonTicket_Request struct { | ||||
| 	Priority         *uint32 `protobuf:"varint,1,opt,name=priority" json:"priority,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *COffline_GetOfflineLogonTicket_Request) Reset() { | ||||
| 	*m = COffline_GetOfflineLogonTicket_Request{} | ||||
| } | ||||
| func (m *COffline_GetOfflineLogonTicket_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*COffline_GetOfflineLogonTicket_Request) ProtoMessage()    {} | ||||
| func (*COffline_GetOfflineLogonTicket_Request) Descriptor() ([]byte, []int) { | ||||
| 	return offline_fileDescriptor0, []int{0} | ||||
| } | ||||
|  | ||||
| func (m *COffline_GetOfflineLogonTicket_Request) GetPriority() uint32 { | ||||
| 	if m != nil && m.Priority != nil { | ||||
| 		return *m.Priority | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type COffline_GetOfflineLogonTicket_Response struct { | ||||
| 	SerializedTicket []byte `protobuf:"bytes,1,opt,name=serialized_ticket" json:"serialized_ticket,omitempty"` | ||||
| 	Signature        []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *COffline_GetOfflineLogonTicket_Response) Reset() { | ||||
| 	*m = COffline_GetOfflineLogonTicket_Response{} | ||||
| } | ||||
| func (m *COffline_GetOfflineLogonTicket_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*COffline_GetOfflineLogonTicket_Response) ProtoMessage()    {} | ||||
| func (*COffline_GetOfflineLogonTicket_Response) Descriptor() ([]byte, []int) { | ||||
| 	return offline_fileDescriptor0, []int{1} | ||||
| } | ||||
|  | ||||
| func (m *COffline_GetOfflineLogonTicket_Response) GetSerializedTicket() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.SerializedTicket | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *COffline_GetOfflineLogonTicket_Response) GetSignature() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Signature | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type COffline_GetUnsignedOfflineLogonTicket_Request struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *COffline_GetUnsignedOfflineLogonTicket_Request) Reset() { | ||||
| 	*m = COffline_GetUnsignedOfflineLogonTicket_Request{} | ||||
| } | ||||
| func (m *COffline_GetUnsignedOfflineLogonTicket_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*COffline_GetUnsignedOfflineLogonTicket_Request) ProtoMessage() {} | ||||
| func (*COffline_GetUnsignedOfflineLogonTicket_Request) Descriptor() ([]byte, []int) { | ||||
| 	return offline_fileDescriptor0, []int{2} | ||||
| } | ||||
|  | ||||
| type COffline_OfflineLogonTicket struct { | ||||
| 	Accountid           *uint32 `protobuf:"varint,1,opt,name=accountid" json:"accountid,omitempty"` | ||||
| 	Rtime32CreationTime *uint32 `protobuf:"fixed32,2,opt,name=rtime32_creation_time" json:"rtime32_creation_time,omitempty"` | ||||
| 	XXX_unrecognized    []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *COffline_OfflineLogonTicket) Reset()                    { *m = COffline_OfflineLogonTicket{} } | ||||
| func (m *COffline_OfflineLogonTicket) String() string            { return proto.CompactTextString(m) } | ||||
| func (*COffline_OfflineLogonTicket) ProtoMessage()               {} | ||||
| func (*COffline_OfflineLogonTicket) Descriptor() ([]byte, []int) { return offline_fileDescriptor0, []int{3} } | ||||
|  | ||||
| func (m *COffline_OfflineLogonTicket) GetAccountid() uint32 { | ||||
| 	if m != nil && m.Accountid != nil { | ||||
| 		return *m.Accountid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *COffline_OfflineLogonTicket) GetRtime32CreationTime() uint32 { | ||||
| 	if m != nil && m.Rtime32CreationTime != nil { | ||||
| 		return *m.Rtime32CreationTime | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type COffline_GetUnsignedOfflineLogonTicket_Response struct { | ||||
| 	Ticket           *COffline_OfflineLogonTicket `protobuf:"bytes,1,opt,name=ticket" json:"ticket,omitempty"` | ||||
| 	XXX_unrecognized []byte                       `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *COffline_GetUnsignedOfflineLogonTicket_Response) Reset() { | ||||
| 	*m = COffline_GetUnsignedOfflineLogonTicket_Response{} | ||||
| } | ||||
| func (m *COffline_GetUnsignedOfflineLogonTicket_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*COffline_GetUnsignedOfflineLogonTicket_Response) ProtoMessage() {} | ||||
| func (*COffline_GetUnsignedOfflineLogonTicket_Response) Descriptor() ([]byte, []int) { | ||||
| 	return offline_fileDescriptor0, []int{4} | ||||
| } | ||||
|  | ||||
| func (m *COffline_GetUnsignedOfflineLogonTicket_Response) GetTicket() *COffline_OfflineLogonTicket { | ||||
| 	if m != nil { | ||||
| 		return m.Ticket | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*COffline_GetOfflineLogonTicket_Request)(nil), "COffline_GetOfflineLogonTicket_Request") | ||||
| 	proto.RegisterType((*COffline_GetOfflineLogonTicket_Response)(nil), "COffline_GetOfflineLogonTicket_Response") | ||||
| 	proto.RegisterType((*COffline_GetUnsignedOfflineLogonTicket_Request)(nil), "COffline_GetUnsignedOfflineLogonTicket_Request") | ||||
| 	proto.RegisterType((*COffline_OfflineLogonTicket)(nil), "COffline_OfflineLogonTicket") | ||||
| 	proto.RegisterType((*COffline_GetUnsignedOfflineLogonTicket_Response)(nil), "COffline_GetUnsignedOfflineLogonTicket_Response") | ||||
| } | ||||
|  | ||||
| var offline_fileDescriptor0 = []byte{ | ||||
| 	// 377 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x52, 0xcd, 0x4a, 0xf3, 0x40, | ||||
| 	0x14, 0x25, 0x5f, 0xe1, 0xab, 0x8e, 0x0a, 0x76, 0xa0, 0x10, 0x63, 0x0b, 0x43, 0x16, 0xb6, 0x8b, | ||||
| 	0x92, 0x96, 0xba, 0x52, 0x70, 0xa3, 0x88, 0x08, 0x42, 0x41, 0x14, 0x97, 0x61, 0x4c, 0x6e, 0xe2, | ||||
| 	0x60, 0x3a, 0x53, 0x67, 0x6e, 0x04, 0x5d, 0x89, 0xaf, 0xe2, 0x33, 0xf4, 0x01, 0x7c, 0x33, 0xf3, | ||||
| 	0x87, 0x56, 0xac, 0xb5, 0xdd, 0x25, 0x37, 0xe7, 0xdc, 0x9c, 0x9f, 0x4b, 0x3a, 0x06, 0x81, 0x8f, | ||||
| 	0xc7, 0x60, 0x0c, 0x8f, 0xc1, 0xf8, 0x2a, 0x8a, 0x12, 0x21, 0xc1, 0x2b, 0xa6, 0x41, 0x22, 0x40, | ||||
| 	0xa2, 0x37, 0xd1, 0x0a, 0x95, 0xd3, 0xfb, 0x0e, 0x4c, 0xa5, 0x88, 0x04, 0x84, 0xfe, 0x2d, 0x37, | ||||
| 	0x73, 0xd0, 0xee, 0x21, 0xd9, 0x3b, 0x19, 0x95, 0xbb, 0xfc, 0x33, 0xc0, 0xea, 0xf1, 0x42, 0xc5, | ||||
| 	0x4a, 0x5e, 0x89, 0xe0, 0x1e, 0xd0, 0xbf, 0x84, 0x87, 0x14, 0x0c, 0xd2, 0x6d, 0xb2, 0x36, 0xd1, | ||||
| 	0x42, 0x69, 0x81, 0x4f, 0xb6, 0xc5, 0xac, 0xee, 0x96, 0x7b, 0x43, 0x3a, 0x7f, 0x72, 0xcd, 0x44, | ||||
| 	0x49, 0x03, 0x74, 0x87, 0x34, 0x0c, 0x68, 0xc1, 0x13, 0xf1, 0x9c, 0x69, 0xc1, 0xe2, 0x6b, 0xb1, | ||||
| 	0x65, 0x93, 0x36, 0xc8, 0xba, 0x11, 0xb1, 0xe4, 0x98, 0x6a, 0xb0, 0xff, 0xe5, 0x23, 0x77, 0x40, | ||||
| 	0xbc, 0xd9, 0xc5, 0xd7, 0x32, 0x07, 0x40, 0xf8, 0xbb, 0x38, 0x77, 0x44, 0x76, 0x3f, 0x19, 0x3f, | ||||
| 	0x61, 0xf9, 0x3f, 0x78, 0x10, 0xa8, 0x54, 0xa2, 0x08, 0x4b, 0xf1, 0xb4, 0x4d, 0x9a, 0x1a, 0xc5, | ||||
| 	0x18, 0xf6, 0x87, 0x7e, 0xa0, 0x81, 0xa3, 0x50, 0xd2, 0xcf, 0xdf, 0x0b, 0x09, 0x75, 0xd7, 0x27, | ||||
| 	0xfd, 0xa5, 0x25, 0x54, 0x1e, 0x7b, 0xe4, 0xff, 0x8c, 0xb1, 0x8d, 0x61, 0xcb, 0x5b, 0x20, 0x69, | ||||
| 	0xf8, 0x56, 0x23, 0xf5, 0x6a, 0x4c, 0xa7, 0x16, 0x69, 0xce, 0x0d, 0x90, 0x76, 0xbc, 0xe5, 0xda, | ||||
| 	0x71, 0xba, 0xde, 0x92, 0x55, 0xb8, 0xe7, 0xaf, 0x53, 0xfb, 0x34, 0xc3, 0x30, 0xce, 0xbe, 0x2a, | ||||
| 	0x61, 0x5c, 0x86, 0xac, 0xb4, 0xc8, 0xaa, 0xd3, 0x62, 0x49, 0xce, 0x66, 0xa5, 0x25, 0x16, 0x29, | ||||
| 	0xcd, 0xf0, 0x0e, 0x58, 0x90, 0x6a, 0x9d, 0x5d, 0x0f, 0x4b, 0x33, 0x2e, 0x7d, 0xb7, 0x48, 0x7b, | ||||
| 	0x61, 0x38, 0xb4, 0xbf, 0x62, 0x91, 0xce, 0xc0, 0x5b, 0x31, 0x76, 0xf7, 0x28, 0xf3, 0x73, 0x50, | ||||
| 	0xf8, 0x91, 0x2c, 0x95, 0xab, 0x7a, 0x70, 0x5a, 0x19, 0xdd, 0xae, 0xf6, 0x67, 0x81, 0x20, 0x0a, | ||||
| 	0x19, 0x9b, 0x3c, 0x99, 0x47, 0x11, 0xc0, 0x71, 0xed, 0xc5, 0xb2, 0x3e, 0x02, 0x00, 0x00, 0xff, | ||||
| 	0xff, 0x90, 0xd3, 0xb5, 0xf7, 0x7b, 0x03, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										791
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/parental.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										791
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/parental.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,791 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_parental.steamclient.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package unified | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type ParentalApp struct { | ||||
| 	Appid            *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"` | ||||
| 	IsAllowed        *bool   `protobuf:"varint,2,opt,name=is_allowed" json:"is_allowed,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *ParentalApp) Reset()                    { *m = ParentalApp{} } | ||||
| func (m *ParentalApp) String() string            { return proto.CompactTextString(m) } | ||||
| func (*ParentalApp) ProtoMessage()               {} | ||||
| func (*ParentalApp) Descriptor() ([]byte, []int) { return parental_fileDescriptor0, []int{0} } | ||||
|  | ||||
| func (m *ParentalApp) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ParentalApp) GetIsAllowed() bool { | ||||
| 	if m != nil && m.IsAllowed != nil { | ||||
| 		return *m.IsAllowed | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type ParentalSettings struct { | ||||
| 	Steamid                *uint64        `protobuf:"fixed64,1,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	ApplistBaseId          *uint32        `protobuf:"varint,2,opt,name=applist_base_id" json:"applist_base_id,omitempty"` | ||||
| 	ApplistBaseDescription *string        `protobuf:"bytes,3,opt,name=applist_base_description" json:"applist_base_description,omitempty"` | ||||
| 	ApplistBase            []*ParentalApp `protobuf:"bytes,4,rep,name=applist_base" json:"applist_base,omitempty"` | ||||
| 	ApplistCustom          []*ParentalApp `protobuf:"bytes,5,rep,name=applist_custom" json:"applist_custom,omitempty"` | ||||
| 	Passwordhashtype       *uint32        `protobuf:"varint,6,opt,name=passwordhashtype" json:"passwordhashtype,omitempty"` | ||||
| 	Salt                   []byte         `protobuf:"bytes,7,opt,name=salt" json:"salt,omitempty"` | ||||
| 	Passwordhash           []byte         `protobuf:"bytes,8,opt,name=passwordhash" json:"passwordhash,omitempty"` | ||||
| 	IsEnabled              *bool          `protobuf:"varint,9,opt,name=is_enabled" json:"is_enabled,omitempty"` | ||||
| 	EnabledFeatures        *uint32        `protobuf:"varint,10,opt,name=enabled_features" json:"enabled_features,omitempty"` | ||||
| 	RecoveryEmail          *string        `protobuf:"bytes,11,opt,name=recovery_email" json:"recovery_email,omitempty"` | ||||
| 	XXX_unrecognized       []byte         `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) Reset()                    { *m = ParentalSettings{} } | ||||
| func (m *ParentalSettings) String() string            { return proto.CompactTextString(m) } | ||||
| func (*ParentalSettings) ProtoMessage()               {} | ||||
| func (*ParentalSettings) Descriptor() ([]byte, []int) { return parental_fileDescriptor0, []int{1} } | ||||
|  | ||||
| func (m *ParentalSettings) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetApplistBaseId() uint32 { | ||||
| 	if m != nil && m.ApplistBaseId != nil { | ||||
| 		return *m.ApplistBaseId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetApplistBaseDescription() string { | ||||
| 	if m != nil && m.ApplistBaseDescription != nil { | ||||
| 		return *m.ApplistBaseDescription | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetApplistBase() []*ParentalApp { | ||||
| 	if m != nil { | ||||
| 		return m.ApplistBase | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetApplistCustom() []*ParentalApp { | ||||
| 	if m != nil { | ||||
| 		return m.ApplistCustom | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetPasswordhashtype() uint32 { | ||||
| 	if m != nil && m.Passwordhashtype != nil { | ||||
| 		return *m.Passwordhashtype | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetSalt() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Salt | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetPasswordhash() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Passwordhash | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetIsEnabled() bool { | ||||
| 	if m != nil && m.IsEnabled != nil { | ||||
| 		return *m.IsEnabled | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetEnabledFeatures() uint32 { | ||||
| 	if m != nil && m.EnabledFeatures != nil { | ||||
| 		return *m.EnabledFeatures | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *ParentalSettings) GetRecoveryEmail() string { | ||||
| 	if m != nil && m.RecoveryEmail != nil { | ||||
| 		return *m.RecoveryEmail | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CParental_EnableParentalSettings_Request struct { | ||||
| 	Password         *string           `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"` | ||||
| 	Settings         *ParentalSettings `protobuf:"bytes,2,opt,name=settings" json:"settings,omitempty"` | ||||
| 	Sessionid        *string           `protobuf:"bytes,3,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	Enablecode       *uint32           `protobuf:"varint,4,opt,name=enablecode" json:"enablecode,omitempty"` | ||||
| 	Steamid          *uint64           `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte            `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_EnableParentalSettings_Request) Reset() { | ||||
| 	*m = CParental_EnableParentalSettings_Request{} | ||||
| } | ||||
| func (m *CParental_EnableParentalSettings_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_EnableParentalSettings_Request) ProtoMessage()    {} | ||||
| func (*CParental_EnableParentalSettings_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{2} | ||||
| } | ||||
|  | ||||
| func (m *CParental_EnableParentalSettings_Request) GetPassword() string { | ||||
| 	if m != nil && m.Password != nil { | ||||
| 		return *m.Password | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_EnableParentalSettings_Request) GetSettings() *ParentalSettings { | ||||
| 	if m != nil { | ||||
| 		return m.Settings | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CParental_EnableParentalSettings_Request) GetSessionid() string { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_EnableParentalSettings_Request) GetEnablecode() uint32 { | ||||
| 	if m != nil && m.Enablecode != nil { | ||||
| 		return *m.Enablecode | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CParental_EnableParentalSettings_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CParental_EnableParentalSettings_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_EnableParentalSettings_Response) Reset() { | ||||
| 	*m = CParental_EnableParentalSettings_Response{} | ||||
| } | ||||
| func (m *CParental_EnableParentalSettings_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_EnableParentalSettings_Response) ProtoMessage()    {} | ||||
| func (*CParental_EnableParentalSettings_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{3} | ||||
| } | ||||
|  | ||||
| type CParental_DisableParentalSettings_Request struct { | ||||
| 	Password         *string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"` | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_DisableParentalSettings_Request) Reset() { | ||||
| 	*m = CParental_DisableParentalSettings_Request{} | ||||
| } | ||||
| func (m *CParental_DisableParentalSettings_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_DisableParentalSettings_Request) ProtoMessage()    {} | ||||
| func (*CParental_DisableParentalSettings_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{4} | ||||
| } | ||||
|  | ||||
| func (m *CParental_DisableParentalSettings_Request) GetPassword() string { | ||||
| 	if m != nil && m.Password != nil { | ||||
| 		return *m.Password | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_DisableParentalSettings_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CParental_DisableParentalSettings_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_DisableParentalSettings_Response) Reset() { | ||||
| 	*m = CParental_DisableParentalSettings_Response{} | ||||
| } | ||||
| func (m *CParental_DisableParentalSettings_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CParental_DisableParentalSettings_Response) ProtoMessage() {} | ||||
| func (*CParental_DisableParentalSettings_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{5} | ||||
| } | ||||
|  | ||||
| type CParental_GetParentalSettings_Request struct { | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetParentalSettings_Request) Reset()         { *m = CParental_GetParentalSettings_Request{} } | ||||
| func (m *CParental_GetParentalSettings_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_GetParentalSettings_Request) ProtoMessage()    {} | ||||
| func (*CParental_GetParentalSettings_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{6} | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetParentalSettings_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CParental_GetParentalSettings_Response struct { | ||||
| 	Settings         *ParentalSettings `protobuf:"bytes,1,opt,name=settings" json:"settings,omitempty"` | ||||
| 	XXX_unrecognized []byte            `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetParentalSettings_Response) Reset() { | ||||
| 	*m = CParental_GetParentalSettings_Response{} | ||||
| } | ||||
| func (m *CParental_GetParentalSettings_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_GetParentalSettings_Response) ProtoMessage()    {} | ||||
| func (*CParental_GetParentalSettings_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{7} | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetParentalSettings_Response) GetSettings() *ParentalSettings { | ||||
| 	if m != nil { | ||||
| 		return m.Settings | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CParental_GetSignedParentalSettings_Request struct { | ||||
| 	Priority         *uint32 `protobuf:"varint,1,opt,name=priority" json:"priority,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetSignedParentalSettings_Request) Reset() { | ||||
| 	*m = CParental_GetSignedParentalSettings_Request{} | ||||
| } | ||||
| func (m *CParental_GetSignedParentalSettings_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CParental_GetSignedParentalSettings_Request) ProtoMessage() {} | ||||
| func (*CParental_GetSignedParentalSettings_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{8} | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetSignedParentalSettings_Request) GetPriority() uint32 { | ||||
| 	if m != nil && m.Priority != nil { | ||||
| 		return *m.Priority | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CParental_GetSignedParentalSettings_Response struct { | ||||
| 	SerializedSettings []byte `protobuf:"bytes,1,opt,name=serialized_settings" json:"serialized_settings,omitempty"` | ||||
| 	Signature          []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` | ||||
| 	XXX_unrecognized   []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetSignedParentalSettings_Response) Reset() { | ||||
| 	*m = CParental_GetSignedParentalSettings_Response{} | ||||
| } | ||||
| func (m *CParental_GetSignedParentalSettings_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CParental_GetSignedParentalSettings_Response) ProtoMessage() {} | ||||
| func (*CParental_GetSignedParentalSettings_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{9} | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetSignedParentalSettings_Response) GetSerializedSettings() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.SerializedSettings | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CParental_GetSignedParentalSettings_Response) GetSignature() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Signature | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CParental_SetParentalSettings_Request struct { | ||||
| 	Password         *string           `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"` | ||||
| 	Settings         *ParentalSettings `protobuf:"bytes,2,opt,name=settings" json:"settings,omitempty"` | ||||
| 	NewPassword      *string           `protobuf:"bytes,3,opt,name=new_password" json:"new_password,omitempty"` | ||||
| 	Sessionid        *string           `protobuf:"bytes,4,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	Steamid          *uint64           `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte            `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_SetParentalSettings_Request) Reset()         { *m = CParental_SetParentalSettings_Request{} } | ||||
| func (m *CParental_SetParentalSettings_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_SetParentalSettings_Request) ProtoMessage()    {} | ||||
| func (*CParental_SetParentalSettings_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{10} | ||||
| } | ||||
|  | ||||
| func (m *CParental_SetParentalSettings_Request) GetPassword() string { | ||||
| 	if m != nil && m.Password != nil { | ||||
| 		return *m.Password | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_SetParentalSettings_Request) GetSettings() *ParentalSettings { | ||||
| 	if m != nil { | ||||
| 		return m.Settings | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CParental_SetParentalSettings_Request) GetNewPassword() string { | ||||
| 	if m != nil && m.NewPassword != nil { | ||||
| 		return *m.NewPassword | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_SetParentalSettings_Request) GetSessionid() string { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_SetParentalSettings_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CParental_SetParentalSettings_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_SetParentalSettings_Response) Reset() { | ||||
| 	*m = CParental_SetParentalSettings_Response{} | ||||
| } | ||||
| func (m *CParental_SetParentalSettings_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_SetParentalSettings_Response) ProtoMessage()    {} | ||||
| func (*CParental_SetParentalSettings_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{11} | ||||
| } | ||||
|  | ||||
| type CParental_ValidateToken_Request struct { | ||||
| 	UnlockToken      *string `protobuf:"bytes,1,opt,name=unlock_token" json:"unlock_token,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidateToken_Request) Reset()         { *m = CParental_ValidateToken_Request{} } | ||||
| func (m *CParental_ValidateToken_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_ValidateToken_Request) ProtoMessage()    {} | ||||
| func (*CParental_ValidateToken_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{12} | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidateToken_Request) GetUnlockToken() string { | ||||
| 	if m != nil && m.UnlockToken != nil { | ||||
| 		return *m.UnlockToken | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CParental_ValidateToken_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidateToken_Response) Reset()         { *m = CParental_ValidateToken_Response{} } | ||||
| func (m *CParental_ValidateToken_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_ValidateToken_Response) ProtoMessage()    {} | ||||
| func (*CParental_ValidateToken_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{13} | ||||
| } | ||||
|  | ||||
| type CParental_ValidatePassword_Request struct { | ||||
| 	Password            *string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"` | ||||
| 	Session             *string `protobuf:"bytes,2,opt,name=session" json:"session,omitempty"` | ||||
| 	SendUnlockOnSuccess *bool   `protobuf:"varint,3,opt,name=send_unlock_on_success" json:"send_unlock_on_success,omitempty"` | ||||
| 	XXX_unrecognized    []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidatePassword_Request) Reset()         { *m = CParental_ValidatePassword_Request{} } | ||||
| func (m *CParental_ValidatePassword_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_ValidatePassword_Request) ProtoMessage()    {} | ||||
| func (*CParental_ValidatePassword_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{14} | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidatePassword_Request) GetPassword() string { | ||||
| 	if m != nil && m.Password != nil { | ||||
| 		return *m.Password | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidatePassword_Request) GetSession() string { | ||||
| 	if m != nil && m.Session != nil { | ||||
| 		return *m.Session | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidatePassword_Request) GetSendUnlockOnSuccess() bool { | ||||
| 	if m != nil && m.SendUnlockOnSuccess != nil { | ||||
| 		return *m.SendUnlockOnSuccess | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CParental_ValidatePassword_Response struct { | ||||
| 	Token            *string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidatePassword_Response) Reset()         { *m = CParental_ValidatePassword_Response{} } | ||||
| func (m *CParental_ValidatePassword_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_ValidatePassword_Response) ProtoMessage()    {} | ||||
| func (*CParental_ValidatePassword_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{15} | ||||
| } | ||||
|  | ||||
| func (m *CParental_ValidatePassword_Response) GetToken() string { | ||||
| 	if m != nil && m.Token != nil { | ||||
| 		return *m.Token | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CParental_LockClient_Request struct { | ||||
| 	Session          *string `protobuf:"bytes,1,opt,name=session" json:"session,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_LockClient_Request) Reset()                    { *m = CParental_LockClient_Request{} } | ||||
| func (m *CParental_LockClient_Request) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CParental_LockClient_Request) ProtoMessage()               {} | ||||
| func (*CParental_LockClient_Request) Descriptor() ([]byte, []int) { return parental_fileDescriptor0, []int{16} } | ||||
|  | ||||
| func (m *CParental_LockClient_Request) GetSession() string { | ||||
| 	if m != nil && m.Session != nil { | ||||
| 		return *m.Session | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CParental_LockClient_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_LockClient_Response) Reset()                    { *m = CParental_LockClient_Response{} } | ||||
| func (m *CParental_LockClient_Response) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CParental_LockClient_Response) ProtoMessage()               {} | ||||
| func (*CParental_LockClient_Response) Descriptor() ([]byte, []int) { return parental_fileDescriptor0, []int{17} } | ||||
|  | ||||
| type CParental_RequestRecoveryCode_Request struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_RequestRecoveryCode_Request) Reset()         { *m = CParental_RequestRecoveryCode_Request{} } | ||||
| func (m *CParental_RequestRecoveryCode_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_RequestRecoveryCode_Request) ProtoMessage()    {} | ||||
| func (*CParental_RequestRecoveryCode_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{18} | ||||
| } | ||||
|  | ||||
| type CParental_RequestRecoveryCode_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_RequestRecoveryCode_Response) Reset() { | ||||
| 	*m = CParental_RequestRecoveryCode_Response{} | ||||
| } | ||||
| func (m *CParental_RequestRecoveryCode_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_RequestRecoveryCode_Response) ProtoMessage()    {} | ||||
| func (*CParental_RequestRecoveryCode_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{19} | ||||
| } | ||||
|  | ||||
| type CParental_DisableWithRecoveryCode_Request struct { | ||||
| 	RecoveryCode     *uint32 `protobuf:"varint,1,opt,name=recovery_code" json:"recovery_code,omitempty"` | ||||
| 	Steamid          *uint64 `protobuf:"fixed64,10,opt,name=steamid" json:"steamid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_DisableWithRecoveryCode_Request) Reset() { | ||||
| 	*m = CParental_DisableWithRecoveryCode_Request{} | ||||
| } | ||||
| func (m *CParental_DisableWithRecoveryCode_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_DisableWithRecoveryCode_Request) ProtoMessage()    {} | ||||
| func (*CParental_DisableWithRecoveryCode_Request) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{20} | ||||
| } | ||||
|  | ||||
| func (m *CParental_DisableWithRecoveryCode_Request) GetRecoveryCode() uint32 { | ||||
| 	if m != nil && m.RecoveryCode != nil { | ||||
| 		return *m.RecoveryCode | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CParental_DisableWithRecoveryCode_Request) GetSteamid() uint64 { | ||||
| 	if m != nil && m.Steamid != nil { | ||||
| 		return *m.Steamid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CParental_DisableWithRecoveryCode_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_DisableWithRecoveryCode_Response) Reset() { | ||||
| 	*m = CParental_DisableWithRecoveryCode_Response{} | ||||
| } | ||||
| func (m *CParental_DisableWithRecoveryCode_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CParental_DisableWithRecoveryCode_Response) ProtoMessage() {} | ||||
| func (*CParental_DisableWithRecoveryCode_Response) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{21} | ||||
| } | ||||
|  | ||||
| type CParental_ParentalSettingsChange_Notification struct { | ||||
| 	SerializedSettings []byte  `protobuf:"bytes,1,opt,name=serialized_settings" json:"serialized_settings,omitempty"` | ||||
| 	Signature          []byte  `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` | ||||
| 	Password           *string `protobuf:"bytes,3,opt,name=password" json:"password,omitempty"` | ||||
| 	Sessionid          *string `protobuf:"bytes,4,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	XXX_unrecognized   []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalSettingsChange_Notification) Reset() { | ||||
| 	*m = CParental_ParentalSettingsChange_Notification{} | ||||
| } | ||||
| func (m *CParental_ParentalSettingsChange_Notification) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CParental_ParentalSettingsChange_Notification) ProtoMessage() {} | ||||
| func (*CParental_ParentalSettingsChange_Notification) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{22} | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalSettingsChange_Notification) GetSerializedSettings() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.SerializedSettings | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalSettingsChange_Notification) GetSignature() []byte { | ||||
| 	if m != nil { | ||||
| 		return m.Signature | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalSettingsChange_Notification) GetPassword() string { | ||||
| 	if m != nil && m.Password != nil { | ||||
| 		return *m.Password | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalSettingsChange_Notification) GetSessionid() string { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CParental_ParentalUnlock_Notification struct { | ||||
| 	Password         *string `protobuf:"bytes,1,opt,name=password" json:"password,omitempty"` | ||||
| 	Sessionid        *string `protobuf:"bytes,2,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalUnlock_Notification) Reset()         { *m = CParental_ParentalUnlock_Notification{} } | ||||
| func (m *CParental_ParentalUnlock_Notification) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_ParentalUnlock_Notification) ProtoMessage()    {} | ||||
| func (*CParental_ParentalUnlock_Notification) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{23} | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalUnlock_Notification) GetPassword() string { | ||||
| 	if m != nil && m.Password != nil { | ||||
| 		return *m.Password | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalUnlock_Notification) GetSessionid() string { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CParental_ParentalLock_Notification struct { | ||||
| 	Sessionid        *string `protobuf:"bytes,1,opt,name=sessionid" json:"sessionid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalLock_Notification) Reset()         { *m = CParental_ParentalLock_Notification{} } | ||||
| func (m *CParental_ParentalLock_Notification) String() string { return proto.CompactTextString(m) } | ||||
| func (*CParental_ParentalLock_Notification) ProtoMessage()    {} | ||||
| func (*CParental_ParentalLock_Notification) Descriptor() ([]byte, []int) { | ||||
| 	return parental_fileDescriptor0, []int{24} | ||||
| } | ||||
|  | ||||
| func (m *CParental_ParentalLock_Notification) GetSessionid() string { | ||||
| 	if m != nil && m.Sessionid != nil { | ||||
| 		return *m.Sessionid | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*ParentalApp)(nil), "ParentalApp") | ||||
| 	proto.RegisterType((*ParentalSettings)(nil), "ParentalSettings") | ||||
| 	proto.RegisterType((*CParental_EnableParentalSettings_Request)(nil), "CParental_EnableParentalSettings_Request") | ||||
| 	proto.RegisterType((*CParental_EnableParentalSettings_Response)(nil), "CParental_EnableParentalSettings_Response") | ||||
| 	proto.RegisterType((*CParental_DisableParentalSettings_Request)(nil), "CParental_DisableParentalSettings_Request") | ||||
| 	proto.RegisterType((*CParental_DisableParentalSettings_Response)(nil), "CParental_DisableParentalSettings_Response") | ||||
| 	proto.RegisterType((*CParental_GetParentalSettings_Request)(nil), "CParental_GetParentalSettings_Request") | ||||
| 	proto.RegisterType((*CParental_GetParentalSettings_Response)(nil), "CParental_GetParentalSettings_Response") | ||||
| 	proto.RegisterType((*CParental_GetSignedParentalSettings_Request)(nil), "CParental_GetSignedParentalSettings_Request") | ||||
| 	proto.RegisterType((*CParental_GetSignedParentalSettings_Response)(nil), "CParental_GetSignedParentalSettings_Response") | ||||
| 	proto.RegisterType((*CParental_SetParentalSettings_Request)(nil), "CParental_SetParentalSettings_Request") | ||||
| 	proto.RegisterType((*CParental_SetParentalSettings_Response)(nil), "CParental_SetParentalSettings_Response") | ||||
| 	proto.RegisterType((*CParental_ValidateToken_Request)(nil), "CParental_ValidateToken_Request") | ||||
| 	proto.RegisterType((*CParental_ValidateToken_Response)(nil), "CParental_ValidateToken_Response") | ||||
| 	proto.RegisterType((*CParental_ValidatePassword_Request)(nil), "CParental_ValidatePassword_Request") | ||||
| 	proto.RegisterType((*CParental_ValidatePassword_Response)(nil), "CParental_ValidatePassword_Response") | ||||
| 	proto.RegisterType((*CParental_LockClient_Request)(nil), "CParental_LockClient_Request") | ||||
| 	proto.RegisterType((*CParental_LockClient_Response)(nil), "CParental_LockClient_Response") | ||||
| 	proto.RegisterType((*CParental_RequestRecoveryCode_Request)(nil), "CParental_RequestRecoveryCode_Request") | ||||
| 	proto.RegisterType((*CParental_RequestRecoveryCode_Response)(nil), "CParental_RequestRecoveryCode_Response") | ||||
| 	proto.RegisterType((*CParental_DisableWithRecoveryCode_Request)(nil), "CParental_DisableWithRecoveryCode_Request") | ||||
| 	proto.RegisterType((*CParental_DisableWithRecoveryCode_Response)(nil), "CParental_DisableWithRecoveryCode_Response") | ||||
| 	proto.RegisterType((*CParental_ParentalSettingsChange_Notification)(nil), "CParental_ParentalSettingsChange_Notification") | ||||
| 	proto.RegisterType((*CParental_ParentalUnlock_Notification)(nil), "CParental_ParentalUnlock_Notification") | ||||
| 	proto.RegisterType((*CParental_ParentalLock_Notification)(nil), "CParental_ParentalLock_Notification") | ||||
| } | ||||
|  | ||||
| var parental_fileDescriptor0 = []byte{ | ||||
| 	// 1337 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x57, 0x41, 0x8f, 0x14, 0xc5, | ||||
| 	0x17, 0x4f, 0xc3, 0x02, 0xbb, 0xb5, 0xb3, 0xcb, 0x52, 0xf0, 0x87, 0x66, 0xfe, 0x02, 0x65, 0x2f, | ||||
| 	0xc2, 0x02, 0x4b, 0x6b, 0x56, 0x23, 0x26, 0x26, 0x12, 0x58, 0x0d, 0x26, 0x2e, 0x88, 0x0c, 0x8a, | ||||
| 	0x09, 0x89, 0x9d, 0xda, 0xee, 0xda, 0xd9, 0x92, 0x9e, 0xaa, 0xb6, 0xab, 0x86, 0x75, 0x3d, 0x19, | ||||
| 	0x63, 0xbc, 0x19, 0x2f, 0x1e, 0x34, 0xf1, 0x6e, 0xa2, 0x5e, 0x89, 0x57, 0x13, 0xbf, 0x80, 0xf1, | ||||
| 	0x53, 0xf8, 0x31, 0x7c, 0x5d, 0xd5, 0x3d, 0xd3, 0xbd, 0xd3, 0x33, 0xd3, 0x23, 0xb7, 0x99, 0xaa, | ||||
| 	0xf7, 0x5e, 0xfd, 0xde, 0x7b, 0xbf, 0x7a, 0xbf, 0x6a, 0xb4, 0xa6, 0x34, 0xa3, 0xbd, 0x1e, 0x53, | ||||
| 	0x8a, 0x76, 0x99, 0x0a, 0x12, 0x9a, 0x32, 0xa1, 0x69, 0xec, 0x9b, 0xe5, 0x30, 0xe6, 0xf0, 0xcf, | ||||
| 	0x4f, 0x52, 0xa9, 0x65, 0x7b, 0xbd, 0x6a, 0xd9, 0x17, 0x7c, 0x87, 0xb3, 0x28, 0xd8, 0xa6, 0x8a, | ||||
| 	0x8d, 0x5a, 0x7b, 0xaf, 0xa0, 0xc5, 0xfb, 0x79, 0xac, 0x5b, 0x49, 0x82, 0x97, 0xd0, 0x11, 0x9a, | ||||
| 	0x24, 0x3c, 0x72, 0x1d, 0xe2, 0xac, 0x2d, 0x61, 0x8c, 0x10, 0x57, 0x01, 0x8d, 0x63, 0xb9, 0xc7, | ||||
| 	0x22, 0xf7, 0x10, 0xac, 0xcd, 0x7b, 0xbf, 0x1d, 0x42, 0x2b, 0x85, 0x4b, 0x87, 0x69, 0xcd, 0x45, | ||||
| 	0x57, 0xe1, 0xe3, 0xe8, 0x98, 0x89, 0x9d, 0x7b, 0x1e, 0xc5, 0x67, 0xd0, 0x71, 0x08, 0x14, 0x73, | ||||
| 	0xa5, 0xcd, 0xc9, 0x01, 0xb7, 0xee, 0x4b, 0x98, 0x20, 0xb7, 0xb2, 0x11, 0x31, 0x15, 0xa6, 0x3c, | ||||
| 	0xd1, 0x5c, 0x0a, 0xf7, 0x30, 0x58, 0x2c, 0x60, 0x0f, 0xb5, 0xca, 0x16, 0xee, 0x1c, 0x39, 0xbc, | ||||
| 	0xb6, 0xb8, 0xd1, 0xf2, 0xcb, 0x38, 0x2f, 0xa2, 0xe5, 0xc2, 0x26, 0xec, 0x2b, 0x2d, 0x7b, 0xee, | ||||
| 	0x91, 0x1a, 0x2b, 0x17, 0xad, 0x24, 0x54, 0xa9, 0x3d, 0x99, 0x46, 0xbb, 0x54, 0xed, 0xea, 0xfd, | ||||
| 	0x84, 0xb9, 0x47, 0x0d, 0x8a, 0x16, 0x9a, 0x53, 0x34, 0xd6, 0xee, 0x31, 0xf8, 0xd7, 0xc2, 0xa7, | ||||
| 	0x50, 0xab, 0x6c, 0xe7, 0xce, 0x9b, 0x55, 0x9b, 0x3c, 0x13, 0x74, 0x3b, 0x86, 0xe4, 0x17, 0xb2, | ||||
| 	0xe4, 0xb3, 0x88, 0xf9, 0x42, 0xb0, 0xc3, 0xa8, 0xee, 0xa7, 0x4c, 0xb9, 0xc8, 0x44, 0x3c, 0x8d, | ||||
| 	0x96, 0x53, 0x16, 0xca, 0xa7, 0x2c, 0xdd, 0x0f, 0x58, 0x8f, 0xf2, 0xd8, 0x5d, 0xcc, 0xb2, 0xf1, | ||||
| 	0x7e, 0x74, 0xd0, 0xda, 0x66, 0x01, 0x2a, 0x78, 0xc7, 0x38, 0x1f, 0x2c, 0x5f, 0xf0, 0x80, 0x7d, | ||||
| 	0xd6, 0x67, 0x4a, 0xe3, 0x15, 0x34, 0x5f, 0x00, 0x31, 0x75, 0x5c, 0xc0, 0xab, 0x68, 0x5e, 0xe5, | ||||
| 	0x56, 0xa6, 0x80, 0x8b, 0x1b, 0x27, 0xfc, 0x91, 0xea, 0x9f, 0x40, 0x0b, 0x0a, 0xfa, 0x0d, 0x25, | ||||
| 	0x84, 0x32, 0xdb, 0x22, 0x02, 0x78, 0x0b, 0x34, 0x94, 0x51, 0x56, 0xc2, 0x0c, 0x62, 0xa9, 0x49, | ||||
| 	0x19, 0xe6, 0xa3, 0xde, 0x35, 0x74, 0xa5, 0x01, 0x34, 0x95, 0x48, 0xa1, 0x98, 0x77, 0xaf, 0x6c, | ||||
| 	0xfc, 0x36, 0x57, 0x33, 0x26, 0x32, 0x72, 0xf8, 0x3a, 0xba, 0xda, 0x24, 0x5e, 0x7e, 0xfa, 0x1b, | ||||
| 	0xe8, 0xa5, 0xa1, 0xf5, 0x1d, 0xa6, 0xc7, 0x9e, 0x3c, 0x72, 0xce, 0x5d, 0x74, 0x69, 0x9a, 0xa7, | ||||
| 	0x3d, 0xa3, 0x52, 0x6b, 0x67, 0x4c, 0xad, 0xbd, 0x9b, 0xe8, 0x5a, 0x25, 0x5c, 0x87, 0x77, 0x05, | ||||
| 	0x8b, 0x26, 0x16, 0x22, 0xe5, 0x32, 0xe5, 0x7a, 0xdf, 0xde, 0x29, 0xef, 0x13, 0xb4, 0xde, 0x2c, | ||||
| 	0x40, 0x8e, 0xea, 0xff, 0xe8, 0xa4, 0x62, 0x29, 0xa7, 0x31, 0xff, 0x02, 0x58, 0x57, 0x01, 0xd8, | ||||
| 	0x32, 0x9d, 0x07, 0x7f, 0xc3, 0x44, 0xc3, 0x8f, 0x96, 0xf7, 0x83, 0x53, 0x2e, 0x55, 0x67, 0x42, | ||||
| 	0xa9, 0xfe, 0x23, 0xdb, 0xe0, 0xb6, 0x08, 0xb6, 0x17, 0x0c, 0x5c, 0x2d, 0xe1, 0x2a, 0x1c, 0x9c, | ||||
| 	0xab, 0x6f, 0xf9, 0x5a, 0xb9, 0x15, 0x9d, 0x09, 0xad, 0xf0, 0x6e, 0xa0, 0x0b, 0x43, 0xcb, 0x8f, | ||||
| 	0x20, 0xf7, 0x88, 0x6a, 0xf6, 0x50, 0x3e, 0x61, 0x62, 0x80, 0x1e, 0x60, 0xf4, 0x45, 0x2c, 0xc3, | ||||
| 	0x27, 0x81, 0xce, 0xd6, 0x6d, 0x06, 0x9e, 0x87, 0xc8, 0x78, 0xc7, 0x3c, 0x78, 0x17, 0x79, 0xa3, | ||||
| 	0x36, 0xf7, 0xf3, 0x74, 0xa6, 0x50, 0xd8, 0xa6, 0x68, 0x8a, 0xb3, 0x80, 0xcf, 0xa3, 0xd3, 0x8a, | ||||
| 	0x89, 0x28, 0xc8, 0x71, 0x48, 0x11, 0xa8, 0x7e, 0x18, 0x82, 0x89, 0xa9, 0xc9, 0xbc, 0xf7, 0x1a, | ||||
| 	0x5a, 0x9d, 0x78, 0x50, 0xde, 0x61, 0x18, 0xba, 0xe5, 0x14, 0x5e, 0x46, 0x2f, 0x0c, 0xbd, 0xb6, | ||||
| 	0x20, 0xf0, 0xa6, 0x19, 0xd8, 0x15, 0x86, 0xe7, 0x30, 0xac, 0xc3, 0x05, 0x74, 0x6e, 0x8c, 0x43, | ||||
| 	0x9e, 0xf0, 0xe5, 0x32, 0x23, 0xf2, 0x30, 0x0f, 0xf2, 0x61, 0xb5, 0x09, 0xf3, 0xa1, 0x58, 0xab, | ||||
| 	0x36, 0xa8, 0xde, 0x30, 0x0f, 0xd9, 0xa9, 0x99, 0x06, 0x8f, 0xb8, 0xde, 0xad, 0x0b, 0x8b, 0xff, | ||||
| 	0x87, 0x96, 0x06, 0xb3, 0xd1, 0xcc, 0x23, 0xa7, 0x7e, 0x1e, 0xd5, 0x8d, 0x84, 0x9a, 0xa0, 0x39, | ||||
| 	0x84, 0xaf, 0x1d, 0x74, 0x7d, 0x68, 0x7e, 0x90, 0x4b, 0x9b, 0xbb, 0x54, 0x74, 0x59, 0x70, 0x4f, | ||||
| 	0x6a, 0xd0, 0xbf, 0x90, 0x66, 0xfa, 0x32, 0xeb, 0x55, 0xaa, 0x50, 0x60, 0x1c, 0xcb, 0xbd, 0xad, | ||||
| 	0x72, 0x71, 0x8b, 0x1f, 0x1f, 0x5a, 0x46, 0x54, 0x4e, 0x1f, 0x25, 0x54, 0x25, 0x9a, 0xa1, 0x14, | ||||
| 	0xcc, 0xb9, 0xd5, 0xd1, 0x68, 0x5b, 0x23, 0xb1, 0x2a, 0x9e, 0x26, 0xd8, 0xc6, 0xdf, 0xcb, 0x68, | ||||
| 	0xbe, 0x70, 0xc0, 0x7f, 0x39, 0xe8, 0x74, 0xfd, 0x40, 0xc7, 0x57, 0xfc, 0xa6, 0x72, 0xd4, 0xbe, | ||||
| 	0xea, 0x37, 0x97, 0x87, 0xe0, 0xab, 0x67, 0xee, 0x63, 0x6b, 0x44, 0x8a, 0xd7, 0x09, 0x29, 0x4a, | ||||
| 	0x4c, 0x76, 0x64, 0x4a, 0xf4, 0x2e, 0x23, 0xb1, 0xec, 0x76, 0x59, 0x44, 0xb8, 0x20, 0x34, 0x0c, | ||||
| 	0x65, 0x5f, 0xe8, 0x75, 0x22, 0x8d, 0xf6, 0xc3, 0x1b, 0x63, 0xbf, 0x30, 0x37, 0x96, 0x61, 0x3f, | ||||
| 	0xcd, 0x82, 0x0c, 0x42, 0xe0, 0x5f, 0x1d, 0x74, 0x66, 0x8c, 0x4c, 0xe0, 0x32, 0xd0, 0x29, 0xd2, | ||||
| 	0xd4, 0xbe, 0xe6, 0xcf, 0x20, 0x3b, 0x37, 0x20, 0xab, 0x57, 0x73, 0xab, 0x59, 0xd2, 0xc2, 0x3f, | ||||
| 	0x3b, 0xe8, 0x64, 0x8d, 0xd8, 0xe0, 0x4b, 0x7e, 0x23, 0x19, 0x6b, 0x5f, 0xf6, 0x9b, 0x89, 0x96, | ||||
| 	0x77, 0x13, 0x10, 0xbe, 0x09, 0x16, 0x95, 0xa2, 0xcd, 0x82, 0xf4, 0x1f, 0x07, 0x9d, 0x1d, 0x2b, | ||||
| 	0x43, 0x78, 0xdd, 0x9f, 0x41, 0xed, 0xda, 0xd7, 0xfd, 0x59, 0xa4, 0xcd, 0x13, 0x80, 0xfd, 0xd3, | ||||
| 	0xe7, 0xc0, 0x6e, 0x7e, 0x66, 0xdb, 0x3d, 0xd8, 0xa7, 0x9a, 0x84, 0x54, 0x90, 0xed, 0x7d, 0x02, | ||||
| 	0xa3, 0xc2, 0xbc, 0x79, 0xb3, 0xdf, 0x99, 0x1f, 0xcc, 0x1e, 0xc6, 0x61, 0xd1, 0x34, 0xa5, 0x33, | ||||
| 	0xa5, 0x29, 0x9d, 0x86, 0x4d, 0xe9, 0x4c, 0x6d, 0x4a, 0xe7, 0x39, 0x9a, 0x02, 0x48, 0x97, 0x2a, | ||||
| 	0xea, 0x85, 0x89, 0x3f, 0x45, 0x10, 0xdb, 0x2f, 0xfa, 0x53, 0x95, 0xef, 0x03, 0xc0, 0x75, 0x77, | ||||
| 	0x73, 0x97, 0x85, 0x4f, 0x08, 0xdf, 0x31, 0x47, 0x77, 0xa1, 0x30, 0x62, 0x08, 0xcd, 0x2a, 0x19, | ||||
| 	0x31, 0x72, 0x44, 0xb8, 0x22, 0xa1, 0x04, 0xec, 0xa1, 0x9e, 0x80, 0xf4, 0x77, 0x07, 0xad, 0x1c, | ||||
| 	0x94, 0x36, 0xbc, 0xea, 0x4f, 0x17, 0xd8, 0xf6, 0x45, 0xbf, 0x81, 0x38, 0x7a, 0x1f, 0x03, 0xe4, | ||||
| 	0x87, 0xc5, 0xb6, 0xc1, 0x90, 0xc4, 0x94, 0x0b, 0xcd, 0x3e, 0xcf, 0x2a, 0x6a, 0xad, 0x27, 0x30, | ||||
| 	0x84, 0x8a, 0x08, 0xfa, 0x0f, 0x33, 0x1d, 0x96, 0x44, 0x25, 0x3d, 0xfc, 0x9d, 0x83, 0xd0, 0x50, | ||||
| 	0x2d, 0xf1, 0x39, 0x7f, 0x92, 0xea, 0xb6, 0xcf, 0xfb, 0x93, 0x35, 0xf6, 0x36, 0xe0, 0x7c, 0xcb, | ||||
| 	0xcc, 0xe8, 0x7d, 0xa8, 0x9a, 0x10, 0x50, 0x35, 0x40, 0x62, 0xbf, 0xb5, 0x94, 0xa5, 0x27, 0x25, | ||||
| 	0xe6, 0x74, 0xf8, 0xc4, 0x20, 0x32, 0x34, 0xac, 0xb0, 0x50, 0xc9, 0x76, 0x2a, 0xf7, 0x40, 0x98, | ||||
| 	0xf0, 0x9f, 0xc0, 0xcf, 0x1a, 0xd5, 0xad, 0xf0, 0x73, 0x82, 0x7c, 0x57, 0xf8, 0x39, 0x51, 0xbd, | ||||
| 	0x1f, 0x03, 0xd8, 0x47, 0xb9, 0x05, 0x9c, 0x5f, 0x88, 0x33, 0xc9, 0xc4, 0x99, 0x6c, 0x33, 0x60, | ||||
| 	0x28, 0x94, 0x4e, 0xcb, 0xe2, 0xf6, 0xd8, 0x4d, 0xf3, 0x55, 0x43, 0x68, 0x14, 0xc1, 0x47, 0xcf, | ||||
| 	0x90, 0xbb, 0x2a, 0x61, 0xa1, 0xbd, 0x6d, 0x05, 0x23, 0x7e, 0x19, 0x0e, 0xea, 0x83, 0xe2, 0x5d, | ||||
| 	0x37, 0xa8, 0xc7, 0xbd, 0x1a, 0xea, 0x06, 0xf5, 0xf8, 0xc7, 0xc0, 0xeb, 0x90, 0xd1, 0xc6, 0x2d, | ||||
| 	0xad, 0x59, 0x2f, 0xa9, 0x64, 0x94, 0x77, 0x5c, 0x8a, 0x7a, 0xb0, 0xed, 0x73, 0xe0, 0x77, 0xf6, | ||||
| 	0xfe, 0xc8, 0xcd, 0x84, 0x6e, 0x3c, 0xe5, 0x21, 0xdb, 0xf8, 0x66, 0x0e, 0x2d, 0x17, 0xbb, 0x39, | ||||
| 	0x4f, 0x7e, 0x72, 0xd0, 0x29, 0xdb, 0xe7, 0xea, 0x53, 0x03, 0xfb, 0xfe, 0x4c, 0xaf, 0x91, 0xf6, | ||||
| 	0xa2, 0x7f, 0x4f, 0x0e, 0xf0, 0xdf, 0x01, 0x1c, 0x9b, 0xe5, 0x6d, 0xb2, 0x93, 0xca, 0x9e, 0xc1, | ||||
| 	0xc1, 0xd2, 0xac, 0x15, 0x96, 0x49, 0x44, 0xee, 0x40, 0x76, 0xa1, 0x89, 0x96, 0x71, 0x67, 0x64, | ||||
| 	0xa6, 0xe0, 0xef, 0x1d, 0xd4, 0xb2, 0xf0, 0xec, 0x1b, 0xa4, 0x42, 0x9e, 0x09, 0xcf, 0x93, 0x2a, | ||||
| 	0x9c, 0xf7, 0x01, 0xce, 0x7b, 0x0d, 0xe0, 0x58, 0x5e, 0x0f, 0x2e, 0xd6, 0x78, 0x6a, 0x7f, 0x0b, | ||||
| 	0x97, 0xcd, 0xc2, 0xca, 0x2e, 0x0f, 0xbe, 0xe8, 0x37, 0x78, 0xe5, 0x54, 0x21, 0x6d, 0x01, 0xa4, | ||||
| 	0x77, 0x1b, 0x43, 0x9a, 0x72, 0xd5, 0xda, 0x3e, 0x44, 0xbb, 0x34, 0xda, 0xf7, 0x3c, 0x86, 0x28, | ||||
| 	0x1d, 0xa3, 0xfe, 0x78, 0xe6, 0x1e, 0xba, 0x7d, 0xf8, 0x4b, 0xc7, 0xf9, 0x37, 0x00, 0x00, 0xff, | ||||
| 	0xff, 0xc4, 0x79, 0x5c, 0x8e, 0x85, 0x11, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										456
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/partnerapps.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										456
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/partnerapps.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,456 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_partnerapps.steamclient.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package unified | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type CPartnerApps_RequestUploadToken_Request struct { | ||||
| 	Filename         *string `protobuf:"bytes,1,opt,name=filename" json:"filename,omitempty"` | ||||
| 	Appid            *uint32 `protobuf:"varint,2,opt,name=appid" json:"appid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_RequestUploadToken_Request) Reset() { | ||||
| 	*m = CPartnerApps_RequestUploadToken_Request{} | ||||
| } | ||||
| func (m *CPartnerApps_RequestUploadToken_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_RequestUploadToken_Request) ProtoMessage()    {} | ||||
| func (*CPartnerApps_RequestUploadToken_Request) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{0} | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_RequestUploadToken_Request) GetFilename() string { | ||||
| 	if m != nil && m.Filename != nil { | ||||
| 		return *m.Filename | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_RequestUploadToken_Request) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPartnerApps_RequestUploadToken_Response struct { | ||||
| 	UploadToken      *uint64 `protobuf:"varint,1,opt,name=upload_token" json:"upload_token,omitempty"` | ||||
| 	Location         *string `protobuf:"bytes,2,opt,name=location" json:"location,omitempty"` | ||||
| 	RoutingId        *uint64 `protobuf:"varint,3,opt,name=routing_id" json:"routing_id,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_RequestUploadToken_Response) Reset() { | ||||
| 	*m = CPartnerApps_RequestUploadToken_Response{} | ||||
| } | ||||
| func (m *CPartnerApps_RequestUploadToken_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_RequestUploadToken_Response) ProtoMessage()    {} | ||||
| func (*CPartnerApps_RequestUploadToken_Response) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{1} | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_RequestUploadToken_Response) GetUploadToken() uint64 { | ||||
| 	if m != nil && m.UploadToken != nil { | ||||
| 		return *m.UploadToken | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_RequestUploadToken_Response) GetLocation() string { | ||||
| 	if m != nil && m.Location != nil { | ||||
| 		return *m.Location | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_RequestUploadToken_Response) GetRoutingId() uint64 { | ||||
| 	if m != nil && m.RoutingId != nil { | ||||
| 		return *m.RoutingId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPartnerApps_FinishUpload_Request struct { | ||||
| 	UploadToken      *uint64 `protobuf:"varint,1,opt,name=upload_token" json:"upload_token,omitempty"` | ||||
| 	RoutingId        *uint64 `protobuf:"varint,2,opt,name=routing_id" json:"routing_id,omitempty"` | ||||
| 	AppId            *uint32 `protobuf:"varint,3,opt,name=app_id" json:"app_id,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUpload_Request) Reset()         { *m = CPartnerApps_FinishUpload_Request{} } | ||||
| func (m *CPartnerApps_FinishUpload_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_FinishUpload_Request) ProtoMessage()    {} | ||||
| func (*CPartnerApps_FinishUpload_Request) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{2} | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUpload_Request) GetUploadToken() uint64 { | ||||
| 	if m != nil && m.UploadToken != nil { | ||||
| 		return *m.UploadToken | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUpload_Request) GetRoutingId() uint64 { | ||||
| 	if m != nil && m.RoutingId != nil { | ||||
| 		return *m.RoutingId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUpload_Request) GetAppId() uint32 { | ||||
| 	if m != nil && m.AppId != nil { | ||||
| 		return *m.AppId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPartnerApps_FinishUploadKVSign_Response struct { | ||||
| 	SignedInstallscript *string `protobuf:"bytes,1,opt,name=signed_installscript" json:"signed_installscript,omitempty"` | ||||
| 	XXX_unrecognized    []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadKVSign_Response) Reset() { | ||||
| 	*m = CPartnerApps_FinishUploadKVSign_Response{} | ||||
| } | ||||
| func (m *CPartnerApps_FinishUploadKVSign_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_FinishUploadKVSign_Response) ProtoMessage()    {} | ||||
| func (*CPartnerApps_FinishUploadKVSign_Response) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{3} | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadKVSign_Response) GetSignedInstallscript() string { | ||||
| 	if m != nil && m.SignedInstallscript != nil { | ||||
| 		return *m.SignedInstallscript | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CPartnerApps_FinishUploadLegacyDRM_Request struct { | ||||
| 	UploadToken      *uint64 `protobuf:"varint,1,opt,name=upload_token" json:"upload_token,omitempty"` | ||||
| 	RoutingId        *uint64 `protobuf:"varint,2,opt,name=routing_id" json:"routing_id,omitempty"` | ||||
| 	AppId            *uint32 `protobuf:"varint,3,opt,name=app_id" json:"app_id,omitempty"` | ||||
| 	Flags            *uint32 `protobuf:"varint,4,opt,name=flags" json:"flags,omitempty"` | ||||
| 	ToolName         *string `protobuf:"bytes,5,opt,name=tool_name" json:"tool_name,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Request) Reset() { | ||||
| 	*m = CPartnerApps_FinishUploadLegacyDRM_Request{} | ||||
| } | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CPartnerApps_FinishUploadLegacyDRM_Request) ProtoMessage() {} | ||||
| func (*CPartnerApps_FinishUploadLegacyDRM_Request) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{4} | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetUploadToken() uint64 { | ||||
| 	if m != nil && m.UploadToken != nil { | ||||
| 		return *m.UploadToken | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetRoutingId() uint64 { | ||||
| 	if m != nil && m.RoutingId != nil { | ||||
| 		return *m.RoutingId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetAppId() uint32 { | ||||
| 	if m != nil && m.AppId != nil { | ||||
| 		return *m.AppId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetFlags() uint32 { | ||||
| 	if m != nil && m.Flags != nil { | ||||
| 		return *m.Flags | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Request) GetToolName() string { | ||||
| 	if m != nil && m.ToolName != nil { | ||||
| 		return *m.ToolName | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CPartnerApps_FinishUploadLegacyDRM_Response struct { | ||||
| 	FileId           *string `protobuf:"bytes,1,opt,name=file_id" json:"file_id,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Response) Reset() { | ||||
| 	*m = CPartnerApps_FinishUploadLegacyDRM_Response{} | ||||
| } | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CPartnerApps_FinishUploadLegacyDRM_Response) ProtoMessage() {} | ||||
| func (*CPartnerApps_FinishUploadLegacyDRM_Response) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{5} | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUploadLegacyDRM_Response) GetFileId() string { | ||||
| 	if m != nil && m.FileId != nil { | ||||
| 		return *m.FileId | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CPartnerApps_FinishUpload_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FinishUpload_Response) Reset()         { *m = CPartnerApps_FinishUpload_Response{} } | ||||
| func (m *CPartnerApps_FinishUpload_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_FinishUpload_Response) ProtoMessage()    {} | ||||
| func (*CPartnerApps_FinishUpload_Response) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{6} | ||||
| } | ||||
|  | ||||
| type CPartnerApps_FindDRMUploads_Request struct { | ||||
| 	AppId            *int32 `protobuf:"varint,1,opt,name=app_id" json:"app_id,omitempty"` | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FindDRMUploads_Request) Reset()         { *m = CPartnerApps_FindDRMUploads_Request{} } | ||||
| func (m *CPartnerApps_FindDRMUploads_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_FindDRMUploads_Request) ProtoMessage()    {} | ||||
| func (*CPartnerApps_FindDRMUploads_Request) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{7} | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FindDRMUploads_Request) GetAppId() int32 { | ||||
| 	if m != nil && m.AppId != nil { | ||||
| 		return *m.AppId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPartnerApps_ExistingDRMUpload struct { | ||||
| 	FileId           *string `protobuf:"bytes,1,opt,name=file_id" json:"file_id,omitempty"` | ||||
| 	AppId            *uint32 `protobuf:"varint,2,opt,name=app_id" json:"app_id,omitempty"` | ||||
| 	ActorId          *int32  `protobuf:"varint,3,opt,name=actor_id" json:"actor_id,omitempty"` | ||||
| 	SuppliedName     *string `protobuf:"bytes,5,opt,name=supplied_name" json:"supplied_name,omitempty"` | ||||
| 	Flags            *uint32 `protobuf:"varint,6,opt,name=flags" json:"flags,omitempty"` | ||||
| 	ModType          *string `protobuf:"bytes,7,opt,name=mod_type" json:"mod_type,omitempty"` | ||||
| 	Timestamp        *uint32 `protobuf:"fixed32,8,opt,name=timestamp" json:"timestamp,omitempty"` | ||||
| 	OrigFileId       *string `protobuf:"bytes,9,opt,name=orig_file_id" json:"orig_file_id,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) Reset()                    { *m = CPartnerApps_ExistingDRMUpload{} } | ||||
| func (m *CPartnerApps_ExistingDRMUpload) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_ExistingDRMUpload) ProtoMessage()               {} | ||||
| func (*CPartnerApps_ExistingDRMUpload) Descriptor() ([]byte, []int) { return partnerapps_fileDescriptor0, []int{8} } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) GetFileId() string { | ||||
| 	if m != nil && m.FileId != nil { | ||||
| 		return *m.FileId | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) GetAppId() uint32 { | ||||
| 	if m != nil && m.AppId != nil { | ||||
| 		return *m.AppId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) GetActorId() int32 { | ||||
| 	if m != nil && m.ActorId != nil { | ||||
| 		return *m.ActorId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) GetSuppliedName() string { | ||||
| 	if m != nil && m.SuppliedName != nil { | ||||
| 		return *m.SuppliedName | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) GetFlags() uint32 { | ||||
| 	if m != nil && m.Flags != nil { | ||||
| 		return *m.Flags | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) GetModType() string { | ||||
| 	if m != nil && m.ModType != nil { | ||||
| 		return *m.ModType | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) GetTimestamp() uint32 { | ||||
| 	if m != nil && m.Timestamp != nil { | ||||
| 		return *m.Timestamp | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_ExistingDRMUpload) GetOrigFileId() string { | ||||
| 	if m != nil && m.OrigFileId != nil { | ||||
| 		return *m.OrigFileId | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CPartnerApps_FindDRMUploads_Response struct { | ||||
| 	Uploads          []*CPartnerApps_ExistingDRMUpload `protobuf:"bytes,1,rep,name=uploads" json:"uploads,omitempty"` | ||||
| 	XXX_unrecognized []byte                            `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FindDRMUploads_Response) Reset()         { *m = CPartnerApps_FindDRMUploads_Response{} } | ||||
| func (m *CPartnerApps_FindDRMUploads_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_FindDRMUploads_Response) ProtoMessage()    {} | ||||
| func (*CPartnerApps_FindDRMUploads_Response) Descriptor() ([]byte, []int) { | ||||
| 	return partnerapps_fileDescriptor0, []int{9} | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_FindDRMUploads_Response) GetUploads() []*CPartnerApps_ExistingDRMUpload { | ||||
| 	if m != nil { | ||||
| 		return m.Uploads | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CPartnerApps_Download_Request struct { | ||||
| 	FileId           *string `protobuf:"bytes,1,opt,name=file_id" json:"file_id,omitempty"` | ||||
| 	AppId            *int32  `protobuf:"varint,2,opt,name=app_id" json:"app_id,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_Download_Request) Reset()                    { *m = CPartnerApps_Download_Request{} } | ||||
| func (m *CPartnerApps_Download_Request) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_Download_Request) ProtoMessage()               {} | ||||
| func (*CPartnerApps_Download_Request) Descriptor() ([]byte, []int) { return partnerapps_fileDescriptor0, []int{10} } | ||||
|  | ||||
| func (m *CPartnerApps_Download_Request) GetFileId() string { | ||||
| 	if m != nil && m.FileId != nil { | ||||
| 		return *m.FileId | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_Download_Request) GetAppId() int32 { | ||||
| 	if m != nil && m.AppId != nil { | ||||
| 		return *m.AppId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPartnerApps_Download_Response struct { | ||||
| 	DownloadUrl      *string `protobuf:"bytes,1,opt,name=download_url" json:"download_url,omitempty"` | ||||
| 	AppId            *int32  `protobuf:"varint,2,opt,name=app_id" json:"app_id,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_Download_Response) Reset()                    { *m = CPartnerApps_Download_Response{} } | ||||
| func (m *CPartnerApps_Download_Response) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CPartnerApps_Download_Response) ProtoMessage()               {} | ||||
| func (*CPartnerApps_Download_Response) Descriptor() ([]byte, []int) { return partnerapps_fileDescriptor0, []int{11} } | ||||
|  | ||||
| func (m *CPartnerApps_Download_Response) GetDownloadUrl() string { | ||||
| 	if m != nil && m.DownloadUrl != nil { | ||||
| 		return *m.DownloadUrl | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CPartnerApps_Download_Response) GetAppId() int32 { | ||||
| 	if m != nil && m.AppId != nil { | ||||
| 		return *m.AppId | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*CPartnerApps_RequestUploadToken_Request)(nil), "CPartnerApps_RequestUploadToken_Request") | ||||
| 	proto.RegisterType((*CPartnerApps_RequestUploadToken_Response)(nil), "CPartnerApps_RequestUploadToken_Response") | ||||
| 	proto.RegisterType((*CPartnerApps_FinishUpload_Request)(nil), "CPartnerApps_FinishUpload_Request") | ||||
| 	proto.RegisterType((*CPartnerApps_FinishUploadKVSign_Response)(nil), "CPartnerApps_FinishUploadKVSign_Response") | ||||
| 	proto.RegisterType((*CPartnerApps_FinishUploadLegacyDRM_Request)(nil), "CPartnerApps_FinishUploadLegacyDRM_Request") | ||||
| 	proto.RegisterType((*CPartnerApps_FinishUploadLegacyDRM_Response)(nil), "CPartnerApps_FinishUploadLegacyDRM_Response") | ||||
| 	proto.RegisterType((*CPartnerApps_FinishUpload_Response)(nil), "CPartnerApps_FinishUpload_Response") | ||||
| 	proto.RegisterType((*CPartnerApps_FindDRMUploads_Request)(nil), "CPartnerApps_FindDRMUploads_Request") | ||||
| 	proto.RegisterType((*CPartnerApps_ExistingDRMUpload)(nil), "CPartnerApps_ExistingDRMUpload") | ||||
| 	proto.RegisterType((*CPartnerApps_FindDRMUploads_Response)(nil), "CPartnerApps_FindDRMUploads_Response") | ||||
| 	proto.RegisterType((*CPartnerApps_Download_Request)(nil), "CPartnerApps_Download_Request") | ||||
| 	proto.RegisterType((*CPartnerApps_Download_Response)(nil), "CPartnerApps_Download_Response") | ||||
| } | ||||
|  | ||||
| var partnerapps_fileDescriptor0 = []byte{ | ||||
| 	// 809 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xc4, 0x96, 0x4f, 0x6f, 0xd3, 0x4a, | ||||
| 	0x14, 0xc5, 0xe5, 0xb6, 0x69, 0x9a, 0xe9, 0x4b, 0xdf, 0x7b, 0x56, 0x2b, 0x45, 0x11, 0xb4, 0xc6, | ||||
| 	0x2d, 0x22, 0xb4, 0xd5, 0x50, 0x15, 0x21, 0x36, 0x08, 0x95, 0xa6, 0x7f, 0x10, 0x05, 0x84, 0x5a, | ||||
| 	0x40, 0x6c, 0x50, 0x34, 0x75, 0x26, 0xe9, 0x08, 0xdb, 0x63, 0x3c, 0x63, 0x68, 0x77, 0x88, 0x15, | ||||
| 	0x1b, 0x3e, 0x00, 0x7b, 0x76, 0x20, 0x24, 0x24, 0xfa, 0xfd, 0xb8, 0x33, 0xb6, 0x13, 0x3b, 0x69, | ||||
| 	0x53, 0x23, 0x84, 0x58, 0x66, 0x7c, 0x7d, 0xee, 0x6f, 0xce, 0xdc, 0x39, 0x31, 0x5a, 0x11, 0x92, | ||||
| 	0x12, 0xcf, 0xa3, 0x42, 0x90, 0x2e, 0x15, 0xad, 0x80, 0x84, 0xd2, 0xa7, 0x21, 0x09, 0x02, 0x81, | ||||
| 	0xf5, 0x13, 0xc7, 0x65, 0xd4, 0x97, 0x38, 0x08, 0xb9, 0xe4, 0xf5, 0xd5, 0x7c, 0x71, 0xe4, 0xb3, | ||||
| 	0x0e, 0xa3, 0xed, 0xd6, 0x21, 0x11, 0x74, 0xb8, 0xda, 0x7e, 0x80, 0xae, 0x35, 0x9f, 0xc4, 0x7a, | ||||
| 	0xf7, 0x40, 0xaf, 0xb5, 0x4f, 0x5f, 0x47, 0x54, 0xc8, 0x67, 0x81, 0xcb, 0x49, 0xfb, 0x29, 0x7f, | ||||
| 	0x45, 0xfd, 0x74, 0xc9, 0xfc, 0x0f, 0x4d, 0x75, 0x98, 0x4b, 0x7d, 0xe2, 0xd1, 0x9a, 0x61, 0x19, | ||||
| 	0x8d, 0x8a, 0x59, 0x45, 0x25, 0x80, 0x60, 0xed, 0xda, 0x18, 0xfc, 0xac, 0xda, 0x1d, 0xd4, 0xb8, | ||||
| 	0x58, 0x4b, 0x04, 0xdc, 0x17, 0xd4, 0x9c, 0x45, 0xff, 0x44, 0x7a, 0xbd, 0x25, 0xd5, 0x03, 0x2d, | ||||
| 	0x38, 0xa1, 0x5a, 0xb8, 0xdc, 0x21, 0x92, 0x71, 0x5f, 0x6b, 0x56, 0x4c, 0x13, 0xa1, 0x90, 0x47, | ||||
| 	0x92, 0xf9, 0xdd, 0x16, 0xf4, 0x19, 0x57, 0x55, 0xf6, 0x4b, 0x74, 0x25, 0xd7, 0x67, 0x87, 0xf9, | ||||
| 	0x4c, 0x1c, 0xc5, 0x6d, 0x7a, 0xb4, 0x67, 0x37, 0xc8, 0xcb, 0x8d, 0xe9, 0xb5, 0x19, 0x34, 0x09, | ||||
| 	0xbb, 0x48, 0xe5, 0xab, 0xf6, 0xfd, 0x81, 0x6d, 0x64, 0xe5, 0xf7, 0x9e, 0x1f, 0xb0, 0x6e, 0x66, | ||||
| 	0x1b, 0x97, 0xd0, 0xac, 0x80, 0x05, 0xf0, 0x97, 0xf9, 0x42, 0x12, 0xd7, 0x15, 0x4e, 0xc8, 0x02, | ||||
| 	0x19, 0xfb, 0x63, 0x7f, 0x30, 0xd0, 0xf2, 0xb9, 0x52, 0x0f, 0x69, 0x97, 0x38, 0x27, 0x5b, 0xfb, | ||||
| 	0x8f, 0x7e, 0x1f, 0x59, 0x1d, 0x44, 0xc7, 0x25, 0x5d, 0x51, 0x9b, 0xd0, 0x3f, 0xff, 0x47, 0x15, | ||||
| 	0xc9, 0xb9, 0xdb, 0xd2, 0x47, 0x55, 0xd2, 0x28, 0x77, 0xd1, 0x4a, 0x21, 0x92, 0x64, 0x5f, 0xff, | ||||
| 	0xa2, 0xb2, 0x3a, 0x6b, 0xd5, 0x21, 0xde, 0xca, 0x12, 0xb2, 0x47, 0x79, 0x1e, 0xbf, 0x66, 0xdf, | ||||
| 	0x42, 0x8b, 0x83, 0x55, 0x6d, 0xd0, 0x8d, 0xcb, 0x7a, 0x03, 0x91, 0xc1, 0x57, 0xe2, 0x25, 0xfb, | ||||
| 	0x87, 0x81, 0xe6, 0x73, 0xef, 0x6d, 0x1f, 0x33, 0xa1, 0x76, 0xdc, 0x7b, 0x77, 0x08, 0x28, 0xa3, | ||||
| 	0xa1, 0x87, 0x4f, 0x8d, 0x0e, 0x71, 0x24, 0x0f, 0x53, 0x53, 0x4a, 0xe6, 0x1c, 0xaa, 0x8a, 0x28, | ||||
| 	0x08, 0x5c, 0x35, 0xfd, 0x7d, 0x27, 0xfa, 0x5e, 0x4d, 0xa6, 0xef, 0x79, 0x1c, 0x1c, 0x3f, 0x09, | ||||
| 	0x68, 0xad, 0xac, 0x0b, 0x94, 0x7b, 0x0c, 0xee, 0x8f, 0x24, 0x5e, 0x50, 0x9b, 0x82, 0xa5, 0xb2, | ||||
| 	0x3a, 0x19, 0x1e, 0xb2, 0x6e, 0x2b, 0x45, 0xa8, 0x68, 0x4f, 0x5e, 0xa0, 0xa5, 0xd1, 0xbb, 0x4d, | ||||
| 	0xcc, 0x5c, 0x43, 0xe5, 0xf8, 0x5c, 0x05, 0xb0, 0x8f, 0x37, 0xa6, 0xd7, 0x17, 0xf0, 0xe8, 0xdd, | ||||
| 	0xda, 0x1b, 0xe8, 0x72, 0xae, 0x62, 0x8b, 0xbf, 0xf5, 0x73, 0xd3, 0x7d, 0x81, 0x1d, 0x25, 0x7b, | ||||
| 	0x67, 0xc0, 0xd1, 0x8c, 0x42, 0xff, 0x06, 0xb6, 0xd3, 0xc5, 0x28, 0x74, 0xcf, 0xd6, 0x59, 0xff, | ||||
| 	0x8a, 0xd0, 0x74, 0x46, 0xc7, 0xfc, 0x6e, 0xa0, 0x5a, 0x02, 0x11, 0xdf, 0x85, 0xcc, 0xed, 0x36, | ||||
| 	0x1b, 0xb8, 0x60, 0x96, 0xd4, 0xaf, 0xe3, 0xa2, 0x49, 0x61, 0x6f, 0xbc, 0x3f, 0xad, 0xdd, 0x49, | ||||
| 	0x0a, 0xac, 0xd8, 0x47, 0x4b, 0xdf, 0x0f, 0xab, 0xc3, 0x43, 0x2b, 0x77, 0xed, 0x2c, 0xe5, 0x49, | ||||
| 	0x5a, 0x73, 0xc3, 0x52, 0x37, 0x13, 0x6c, 0x35, 0xbf, 0x19, 0x68, 0x2e, 0x11, 0xe8, 0x59, 0xfc, | ||||
| 	0xd7, 0x80, 0xe9, 0x31, 0x75, 0x22, 0x49, 0x0e, 0x01, 0x34, 0x4f, 0x0b, 0x79, 0xec, 0x40, 0x68, | ||||
| 	0x2b, 0xe0, 0xd3, 0x3e, 0x70, 0x73, 0x7b, 0xf7, 0x8f, 0x03, 0xef, 0x02, 0x70, 0xf3, 0x5c, 0x60, | ||||
| 	0x27, 0x12, 0x92, 0x7b, 0x85, 0xb8, 0xbf, 0x18, 0xc8, 0x1c, 0x4e, 0x4b, 0xd3, 0xc6, 0x17, 0xc6, | ||||
| 	0xf5, 0x20, 0xee, 0x88, 0xcc, 0xb5, 0x77, 0x00, 0x77, 0xb3, 0xc9, 0x3d, 0x8f, 0x49, 0xcb, 0xa3, | ||||
| 	0xf2, 0x88, 0x2b, 0x5a, 0x7d, 0xd8, 0x16, 0xf1, 0x07, 0x06, 0x82, 0x74, 0x24, 0x0d, 0xd5, 0x72, | ||||
| 	0x82, 0xcb, 0x84, 0xe5, 0x70, 0x2f, 0x70, 0xa9, 0xa4, 0xe6, 0x67, 0x70, 0x39, 0xdb, 0xa7, 0x1f, | ||||
| 	0x36, 0x2b, 0xb8, 0x78, 0x6a, 0xd7, 0x57, 0xf1, 0x2f, 0x04, 0xab, 0xbd, 0x06, 0xf0, 0xab, 0x79, | ||||
| 	0xf8, 0xb3, 0xa6, 0x22, 0x63, 0xea, 0xa7, 0x01, 0xcc, 0xde, 0x44, 0x14, 0xf2, 0x75, 0x11, 0x17, | ||||
| 	0x88, 0xed, 0xdb, 0x00, 0x75, 0x73, 0x18, 0xea, 0x9c, 0x93, 0xcf, 0xb0, 0x7d, 0x34, 0xd0, 0x4c, | ||||
| 	0x3e, 0xf5, 0xcc, 0x25, 0x5c, 0xe0, 0x1f, 0xa0, 0x7e, 0x15, 0x17, 0x49, 0x4e, 0x1b, 0x03, 0xd8, | ||||
| 	0xb2, 0x7a, 0x28, 0xac, 0xc7, 0x96, 0xc7, 0x61, 0x3c, 0x43, 0xea, 0xc0, 0xc7, 0x0b, 0x30, 0x30, | ||||
| 	0x00, 0x4c, 0x52, 0xd5, 0x3a, 0x3c, 0xb1, 0xf4, 0x77, 0x88, 0xb9, 0x87, 0xa6, 0xd2, 0xa0, 0x33, | ||||
| 	0xe7, 0xf1, 0xc8, 0x08, 0xad, 0x2f, 0xe0, 0xd1, 0x01, 0x59, 0x5f, 0x87, 0xe6, 0xf8, 0x80, 0x86, | ||||
| 	0x6f, 0x98, 0x43, 0x13, 0x5b, 0x84, 0xf6, 0x05, 0x7a, 0x59, 0x1e, 0xf1, 0xe1, 0xf3, 0xca, 0x53, | ||||
| 	0x2c, 0xd0, 0x3d, 0xf9, 0x22, 0x13, 0x9b, 0xe3, 0xef, 0x0c, 0xe3, 0x67, 0x00, 0x00, 0x00, 0xff, | ||||
| 	0xff, 0xec, 0x20, 0xc0, 0x4b, 0xaf, 0x09, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										586
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/player.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										586
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/player.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,586 @@ | ||||
| // Code generated by protoc-gen-go. | ||||
| // source: steammessages_player.steamclient.proto | ||||
| // DO NOT EDIT! | ||||
|  | ||||
| package unified | ||||
|  | ||||
| import proto "github.com/golang/protobuf/proto" | ||||
| import fmt "fmt" | ||||
| import math "math" | ||||
|  | ||||
| // Reference imports to suppress errors if they are not otherwise used. | ||||
| var _ = proto.Marshal | ||||
| var _ = fmt.Errorf | ||||
| var _ = math.Inf | ||||
|  | ||||
| type CPlayer_GetGameBadgeLevels_Request struct { | ||||
| 	Appid            *uint32 `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Request) Reset()         { *m = CPlayer_GetGameBadgeLevels_Request{} } | ||||
| func (m *CPlayer_GetGameBadgeLevels_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_GetGameBadgeLevels_Request) ProtoMessage()    {} | ||||
| func (*CPlayer_GetGameBadgeLevels_Request) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{0} | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Request) GetAppid() uint32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPlayer_GetGameBadgeLevels_Response struct { | ||||
| 	PlayerLevel      *uint32                                      `protobuf:"varint,1,opt,name=player_level" json:"player_level,omitempty"` | ||||
| 	Badges           []*CPlayer_GetGameBadgeLevels_Response_Badge `protobuf:"bytes,2,rep,name=badges" json:"badges,omitempty"` | ||||
| 	XXX_unrecognized []byte                                       `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response) Reset()         { *m = CPlayer_GetGameBadgeLevels_Response{} } | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_GetGameBadgeLevels_Response) ProtoMessage()    {} | ||||
| func (*CPlayer_GetGameBadgeLevels_Response) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{1} | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response) GetPlayerLevel() uint32 { | ||||
| 	if m != nil && m.PlayerLevel != nil { | ||||
| 		return *m.PlayerLevel | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response) GetBadges() []*CPlayer_GetGameBadgeLevels_Response_Badge { | ||||
| 	if m != nil { | ||||
| 		return m.Badges | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CPlayer_GetGameBadgeLevels_Response_Badge struct { | ||||
| 	Level            *int32  `protobuf:"varint,1,opt,name=level" json:"level,omitempty"` | ||||
| 	Series           *int32  `protobuf:"varint,2,opt,name=series" json:"series,omitempty"` | ||||
| 	BorderColor      *uint32 `protobuf:"varint,3,opt,name=border_color" json:"border_color,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response_Badge) Reset() { | ||||
| 	*m = CPlayer_GetGameBadgeLevels_Response_Badge{} | ||||
| } | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response_Badge) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_GetGameBadgeLevels_Response_Badge) ProtoMessage()    {} | ||||
| func (*CPlayer_GetGameBadgeLevels_Response_Badge) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{1, 0} | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response_Badge) GetLevel() int32 { | ||||
| 	if m != nil && m.Level != nil { | ||||
| 		return *m.Level | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response_Badge) GetSeries() int32 { | ||||
| 	if m != nil && m.Series != nil { | ||||
| 		return *m.Series | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetGameBadgeLevels_Response_Badge) GetBorderColor() uint32 { | ||||
| 	if m != nil && m.BorderColor != nil { | ||||
| 		return *m.BorderColor | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPlayer_GetLastPlayedTimes_Request struct { | ||||
| 	MinLastPlayed    *uint32 `protobuf:"varint,1,opt,name=min_last_played" json:"min_last_played,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Request) Reset()         { *m = CPlayer_GetLastPlayedTimes_Request{} } | ||||
| func (m *CPlayer_GetLastPlayedTimes_Request) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_GetLastPlayedTimes_Request) ProtoMessage()    {} | ||||
| func (*CPlayer_GetLastPlayedTimes_Request) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{2} | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Request) GetMinLastPlayed() uint32 { | ||||
| 	if m != nil && m.MinLastPlayed != nil { | ||||
| 		return *m.MinLastPlayed | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPlayer_GetLastPlayedTimes_Response struct { | ||||
| 	Games            []*CPlayer_GetLastPlayedTimes_Response_Game `protobuf:"bytes,1,rep,name=games" json:"games,omitempty"` | ||||
| 	XXX_unrecognized []byte                                      `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response) Reset()         { *m = CPlayer_GetLastPlayedTimes_Response{} } | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_GetLastPlayedTimes_Response) ProtoMessage()    {} | ||||
| func (*CPlayer_GetLastPlayedTimes_Response) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{3} | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response) GetGames() []*CPlayer_GetLastPlayedTimes_Response_Game { | ||||
| 	if m != nil { | ||||
| 		return m.Games | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CPlayer_GetLastPlayedTimes_Response_Game struct { | ||||
| 	Appid            *int32  `protobuf:"varint,1,opt,name=appid" json:"appid,omitempty"` | ||||
| 	LastPlaytime     *uint32 `protobuf:"varint,2,opt,name=last_playtime" json:"last_playtime,omitempty"` | ||||
| 	Playtime_2Weeks  *int32  `protobuf:"varint,3,opt,name=playtime_2weeks" json:"playtime_2weeks,omitempty"` | ||||
| 	PlaytimeForever  *int32  `protobuf:"varint,4,opt,name=playtime_forever" json:"playtime_forever,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response_Game) Reset() { | ||||
| 	*m = CPlayer_GetLastPlayedTimes_Response_Game{} | ||||
| } | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response_Game) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_GetLastPlayedTimes_Response_Game) ProtoMessage()    {} | ||||
| func (*CPlayer_GetLastPlayedTimes_Response_Game) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{3, 0} | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response_Game) GetAppid() int32 { | ||||
| 	if m != nil && m.Appid != nil { | ||||
| 		return *m.Appid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response_Game) GetLastPlaytime() uint32 { | ||||
| 	if m != nil && m.LastPlaytime != nil { | ||||
| 		return *m.LastPlaytime | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response_Game) GetPlaytime_2Weeks() int32 { | ||||
| 	if m != nil && m.Playtime_2Weeks != nil { | ||||
| 		return *m.Playtime_2Weeks | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_GetLastPlayedTimes_Response_Game) GetPlaytimeForever() int32 { | ||||
| 	if m != nil && m.PlaytimeForever != nil { | ||||
| 		return *m.PlaytimeForever | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPlayer_AcceptSSA_Request struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_AcceptSSA_Request) Reset()                    { *m = CPlayer_AcceptSSA_Request{} } | ||||
| func (m *CPlayer_AcceptSSA_Request) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_AcceptSSA_Request) ProtoMessage()               {} | ||||
| func (*CPlayer_AcceptSSA_Request) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{4} } | ||||
|  | ||||
| type CPlayer_AcceptSSA_Response struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_AcceptSSA_Response) Reset()                    { *m = CPlayer_AcceptSSA_Response{} } | ||||
| func (m *CPlayer_AcceptSSA_Response) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_AcceptSSA_Response) ProtoMessage()               {} | ||||
| func (*CPlayer_AcceptSSA_Response) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{5} } | ||||
|  | ||||
| type CPlayer_LastPlayedTimes_Notification struct { | ||||
| 	Games            []*CPlayer_GetLastPlayedTimes_Response_Game `protobuf:"bytes,1,rep,name=games" json:"games,omitempty"` | ||||
| 	XXX_unrecognized []byte                                      `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_LastPlayedTimes_Notification) Reset()         { *m = CPlayer_LastPlayedTimes_Notification{} } | ||||
| func (m *CPlayer_LastPlayedTimes_Notification) String() string { return proto.CompactTextString(m) } | ||||
| func (*CPlayer_LastPlayedTimes_Notification) ProtoMessage()    {} | ||||
| func (*CPlayer_LastPlayedTimes_Notification) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{6} | ||||
| } | ||||
|  | ||||
| func (m *CPlayer_LastPlayedTimes_Notification) GetGames() []*CPlayer_GetLastPlayedTimes_Response_Game { | ||||
| 	if m != nil { | ||||
| 		return m.Games | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type CPlayerClient_GetSystemInformation_Request struct { | ||||
| 	XXX_unrecognized []byte `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayerClient_GetSystemInformation_Request) Reset() { | ||||
| 	*m = CPlayerClient_GetSystemInformation_Request{} | ||||
| } | ||||
| func (m *CPlayerClient_GetSystemInformation_Request) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CPlayerClient_GetSystemInformation_Request) ProtoMessage() {} | ||||
| func (*CPlayerClient_GetSystemInformation_Request) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{7} | ||||
| } | ||||
|  | ||||
| type CClientSystemInfo struct { | ||||
| 	Cpu                *CClientSystemInfo_CPU       `protobuf:"bytes,1,opt,name=cpu" json:"cpu,omitempty"` | ||||
| 	VideoCard          *CClientSystemInfo_VideoCard `protobuf:"bytes,2,opt,name=video_card" json:"video_card,omitempty"` | ||||
| 	OperatingSystem    *string                      `protobuf:"bytes,3,opt,name=operating_system" json:"operating_system,omitempty"` | ||||
| 	Os_64Bit           *bool                        `protobuf:"varint,4,opt,name=os_64bit" json:"os_64bit,omitempty"` | ||||
| 	SystemRamMb        *int32                       `protobuf:"varint,5,opt,name=system_ram_mb" json:"system_ram_mb,omitempty"` | ||||
| 	AudioDevice        *string                      `protobuf:"bytes,6,opt,name=audio_device" json:"audio_device,omitempty"` | ||||
| 	AudioDriverVersion *string                      `protobuf:"bytes,7,opt,name=audio_driver_version" json:"audio_driver_version,omitempty"` | ||||
| 	XXX_unrecognized   []byte                       `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo) Reset()                    { *m = CClientSystemInfo{} } | ||||
| func (m *CClientSystemInfo) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CClientSystemInfo) ProtoMessage()               {} | ||||
| func (*CClientSystemInfo) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{8} } | ||||
|  | ||||
| func (m *CClientSystemInfo) GetCpu() *CClientSystemInfo_CPU { | ||||
| 	if m != nil { | ||||
| 		return m.Cpu | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo) GetVideoCard() *CClientSystemInfo_VideoCard { | ||||
| 	if m != nil { | ||||
| 		return m.VideoCard | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo) GetOperatingSystem() string { | ||||
| 	if m != nil && m.OperatingSystem != nil { | ||||
| 		return *m.OperatingSystem | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo) GetOs_64Bit() bool { | ||||
| 	if m != nil && m.Os_64Bit != nil { | ||||
| 		return *m.Os_64Bit | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo) GetSystemRamMb() int32 { | ||||
| 	if m != nil && m.SystemRamMb != nil { | ||||
| 		return *m.SystemRamMb | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo) GetAudioDevice() string { | ||||
| 	if m != nil && m.AudioDevice != nil { | ||||
| 		return *m.AudioDevice | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo) GetAudioDriverVersion() string { | ||||
| 	if m != nil && m.AudioDriverVersion != nil { | ||||
| 		return *m.AudioDriverVersion | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| type CClientSystemInfo_CPU struct { | ||||
| 	SpeedMhz           *int32  `protobuf:"varint,1,opt,name=speed_mhz" json:"speed_mhz,omitempty"` | ||||
| 	Vendor             *string `protobuf:"bytes,2,opt,name=vendor" json:"vendor,omitempty"` | ||||
| 	LogicalProcessors  *int32  `protobuf:"varint,3,opt,name=logical_processors" json:"logical_processors,omitempty"` | ||||
| 	PhysicalProcessors *int32  `protobuf:"varint,4,opt,name=physical_processors" json:"physical_processors,omitempty"` | ||||
| 	Hyperthreading     *bool   `protobuf:"varint,5,opt,name=hyperthreading" json:"hyperthreading,omitempty"` | ||||
| 	Fcmov              *bool   `protobuf:"varint,6,opt,name=fcmov" json:"fcmov,omitempty"` | ||||
| 	Sse2               *bool   `protobuf:"varint,7,opt,name=sse2" json:"sse2,omitempty"` | ||||
| 	Sse3               *bool   `protobuf:"varint,8,opt,name=sse3" json:"sse3,omitempty"` | ||||
| 	Ssse3              *bool   `protobuf:"varint,9,opt,name=ssse3" json:"ssse3,omitempty"` | ||||
| 	Sse4A              *bool   `protobuf:"varint,10,opt,name=sse4a" json:"sse4a,omitempty"` | ||||
| 	Sse41              *bool   `protobuf:"varint,11,opt,name=sse41" json:"sse41,omitempty"` | ||||
| 	Sse42              *bool   `protobuf:"varint,12,opt,name=sse42" json:"sse42,omitempty"` | ||||
| 	XXX_unrecognized   []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) Reset()                    { *m = CClientSystemInfo_CPU{} } | ||||
| func (m *CClientSystemInfo_CPU) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CClientSystemInfo_CPU) ProtoMessage()               {} | ||||
| func (*CClientSystemInfo_CPU) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{8, 0} } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetSpeedMhz() int32 { | ||||
| 	if m != nil && m.SpeedMhz != nil { | ||||
| 		return *m.SpeedMhz | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetVendor() string { | ||||
| 	if m != nil && m.Vendor != nil { | ||||
| 		return *m.Vendor | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetLogicalProcessors() int32 { | ||||
| 	if m != nil && m.LogicalProcessors != nil { | ||||
| 		return *m.LogicalProcessors | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetPhysicalProcessors() int32 { | ||||
| 	if m != nil && m.PhysicalProcessors != nil { | ||||
| 		return *m.PhysicalProcessors | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetHyperthreading() bool { | ||||
| 	if m != nil && m.Hyperthreading != nil { | ||||
| 		return *m.Hyperthreading | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetFcmov() bool { | ||||
| 	if m != nil && m.Fcmov != nil { | ||||
| 		return *m.Fcmov | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetSse2() bool { | ||||
| 	if m != nil && m.Sse2 != nil { | ||||
| 		return *m.Sse2 | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetSse3() bool { | ||||
| 	if m != nil && m.Sse3 != nil { | ||||
| 		return *m.Sse3 | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetSsse3() bool { | ||||
| 	if m != nil && m.Ssse3 != nil { | ||||
| 		return *m.Ssse3 | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetSse4A() bool { | ||||
| 	if m != nil && m.Sse4A != nil { | ||||
| 		return *m.Sse4A | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetSse41() bool { | ||||
| 	if m != nil && m.Sse41 != nil { | ||||
| 		return *m.Sse41 | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_CPU) GetSse42() bool { | ||||
| 	if m != nil && m.Sse42 != nil { | ||||
| 		return *m.Sse42 | ||||
| 	} | ||||
| 	return false | ||||
| } | ||||
|  | ||||
| type CClientSystemInfo_VideoCard struct { | ||||
| 	Driver           *string `protobuf:"bytes,1,opt,name=driver" json:"driver,omitempty"` | ||||
| 	DriverVersion    *string `protobuf:"bytes,2,opt,name=driver_version" json:"driver_version,omitempty"` | ||||
| 	DriverDate       *uint32 `protobuf:"varint,3,opt,name=driver_date" json:"driver_date,omitempty"` | ||||
| 	DirectxVersion   *string `protobuf:"bytes,4,opt,name=directx_version" json:"directx_version,omitempty"` | ||||
| 	OpenglVersion    *string `protobuf:"bytes,5,opt,name=opengl_version" json:"opengl_version,omitempty"` | ||||
| 	Vendorid         *int32  `protobuf:"varint,6,opt,name=vendorid" json:"vendorid,omitempty"` | ||||
| 	Deviceid         *int32  `protobuf:"varint,7,opt,name=deviceid" json:"deviceid,omitempty"` | ||||
| 	VramMb           *int32  `protobuf:"varint,8,opt,name=vram_mb" json:"vram_mb,omitempty"` | ||||
| 	XXX_unrecognized []byte  `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) Reset()                    { *m = CClientSystemInfo_VideoCard{} } | ||||
| func (m *CClientSystemInfo_VideoCard) String() string            { return proto.CompactTextString(m) } | ||||
| func (*CClientSystemInfo_VideoCard) ProtoMessage()               {} | ||||
| func (*CClientSystemInfo_VideoCard) Descriptor() ([]byte, []int) { return player_fileDescriptor0, []int{8, 1} } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) GetDriver() string { | ||||
| 	if m != nil && m.Driver != nil { | ||||
| 		return *m.Driver | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) GetDriverVersion() string { | ||||
| 	if m != nil && m.DriverVersion != nil { | ||||
| 		return *m.DriverVersion | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) GetDriverDate() uint32 { | ||||
| 	if m != nil && m.DriverDate != nil { | ||||
| 		return *m.DriverDate | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) GetDirectxVersion() string { | ||||
| 	if m != nil && m.DirectxVersion != nil { | ||||
| 		return *m.DirectxVersion | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) GetOpenglVersion() string { | ||||
| 	if m != nil && m.OpenglVersion != nil { | ||||
| 		return *m.OpenglVersion | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) GetVendorid() int32 { | ||||
| 	if m != nil && m.Vendorid != nil { | ||||
| 		return *m.Vendorid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) GetDeviceid() int32 { | ||||
| 	if m != nil && m.Deviceid != nil { | ||||
| 		return *m.Deviceid | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| func (m *CClientSystemInfo_VideoCard) GetVramMb() int32 { | ||||
| 	if m != nil && m.VramMb != nil { | ||||
| 		return *m.VramMb | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| type CPlayerClient_GetSystemInformation_Response struct { | ||||
| 	SystemInfo       *CClientSystemInfo `protobuf:"bytes,1,opt,name=system_info" json:"system_info,omitempty"` | ||||
| 	XXX_unrecognized []byte             `json:"-"` | ||||
| } | ||||
|  | ||||
| func (m *CPlayerClient_GetSystemInformation_Response) Reset() { | ||||
| 	*m = CPlayerClient_GetSystemInformation_Response{} | ||||
| } | ||||
| func (m *CPlayerClient_GetSystemInformation_Response) String() string { | ||||
| 	return proto.CompactTextString(m) | ||||
| } | ||||
| func (*CPlayerClient_GetSystemInformation_Response) ProtoMessage() {} | ||||
| func (*CPlayerClient_GetSystemInformation_Response) Descriptor() ([]byte, []int) { | ||||
| 	return player_fileDescriptor0, []int{9} | ||||
| } | ||||
|  | ||||
| func (m *CPlayerClient_GetSystemInformation_Response) GetSystemInfo() *CClientSystemInfo { | ||||
| 	if m != nil { | ||||
| 		return m.SystemInfo | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	proto.RegisterType((*CPlayer_GetGameBadgeLevels_Request)(nil), "CPlayer_GetGameBadgeLevels_Request") | ||||
| 	proto.RegisterType((*CPlayer_GetGameBadgeLevels_Response)(nil), "CPlayer_GetGameBadgeLevels_Response") | ||||
| 	proto.RegisterType((*CPlayer_GetGameBadgeLevels_Response_Badge)(nil), "CPlayer_GetGameBadgeLevels_Response.Badge") | ||||
| 	proto.RegisterType((*CPlayer_GetLastPlayedTimes_Request)(nil), "CPlayer_GetLastPlayedTimes_Request") | ||||
| 	proto.RegisterType((*CPlayer_GetLastPlayedTimes_Response)(nil), "CPlayer_GetLastPlayedTimes_Response") | ||||
| 	proto.RegisterType((*CPlayer_GetLastPlayedTimes_Response_Game)(nil), "CPlayer_GetLastPlayedTimes_Response.Game") | ||||
| 	proto.RegisterType((*CPlayer_AcceptSSA_Request)(nil), "CPlayer_AcceptSSA_Request") | ||||
| 	proto.RegisterType((*CPlayer_AcceptSSA_Response)(nil), "CPlayer_AcceptSSA_Response") | ||||
| 	proto.RegisterType((*CPlayer_LastPlayedTimes_Notification)(nil), "CPlayer_LastPlayedTimes_Notification") | ||||
| 	proto.RegisterType((*CPlayerClient_GetSystemInformation_Request)(nil), "CPlayerClient_GetSystemInformation_Request") | ||||
| 	proto.RegisterType((*CClientSystemInfo)(nil), "CClientSystemInfo") | ||||
| 	proto.RegisterType((*CClientSystemInfo_CPU)(nil), "CClientSystemInfo.CPU") | ||||
| 	proto.RegisterType((*CClientSystemInfo_VideoCard)(nil), "CClientSystemInfo.VideoCard") | ||||
| 	proto.RegisterType((*CPlayerClient_GetSystemInformation_Response)(nil), "CPlayerClient_GetSystemInformation_Response") | ||||
| } | ||||
|  | ||||
| var player_fileDescriptor0 = []byte{ | ||||
| 	// 1067 bytes of a gzipped FileDescriptorProto | ||||
| 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x55, 0x4d, 0x6f, 0xdb, 0x46, | ||||
| 	0x10, 0x05, 0x2d, 0xcb, 0x96, 0x46, 0x76, 0x9c, 0x6c, 0x9c, 0x94, 0xa1, 0x5d, 0x60, 0x41, 0xa7, | ||||
| 	0xf9, 0x70, 0x1c, 0xa2, 0x55, 0x82, 0xa2, 0x68, 0x0b, 0x04, 0xb6, 0x0f, 0x41, 0x01, 0x23, 0x48, | ||||
| 	0xe3, 0x38, 0xa7, 0x02, 0xec, 0x8a, 0x5c, 0xc9, 0x44, 0x48, 0xae, 0xca, 0x5d, 0x29, 0x55, 0x4f, | ||||
| 	0x45, 0xce, 0xbd, 0x15, 0xfd, 0x1b, 0xbd, 0xb9, 0xe7, 0x00, 0xfd, 0x23, 0xfd, 0x03, 0x3d, 0xf6, | ||||
| 	0xde, 0xd9, 0x5d, 0x52, 0x1f, 0x96, 0x9d, 0xaa, 0x39, 0x18, 0xd6, 0xee, 0xbc, 0x1d, 0xbe, 0x79, | ||||
| 	0x3b, 0xf3, 0x16, 0xee, 0x48, 0xc5, 0x59, 0x96, 0x71, 0x29, 0x59, 0x8f, 0xcb, 0xb0, 0x9f, 0xb2, | ||||
| 	0x11, 0x2f, 0x02, 0xb3, 0x19, 0xa5, 0x09, 0xcf, 0x55, 0xd0, 0x2f, 0x84, 0x12, 0xde, 0xde, 0x2c, | ||||
| 	0x6e, 0x90, 0x27, 0xdd, 0x84, 0xc7, 0x61, 0x87, 0x49, 0x3e, 0x8f, 0xf6, 0x1f, 0x81, 0x7f, 0xf8, | ||||
| 	0xdc, 0xa4, 0x0a, 0x9f, 0x72, 0xf5, 0x94, 0x65, 0xfc, 0x80, 0xc5, 0x3d, 0x7e, 0xc4, 0x87, 0x3c, | ||||
| 	0x95, 0xe1, 0x0b, 0xfe, 0xc3, 0x80, 0x4b, 0x45, 0xd6, 0xa1, 0xce, 0xfa, 0xfd, 0x24, 0x76, 0x1d, | ||||
| 	0xea, 0xdc, 0x5b, 0xf7, 0xcf, 0x1c, 0xd8, 0x79, 0xef, 0x29, 0xd9, 0x17, 0xb9, 0xe4, 0x64, 0x13, | ||||
| 	0xd6, 0x2c, 0xcd, 0x30, 0xd5, 0x11, 0x7b, 0x9a, 0x7c, 0x09, 0x2b, 0x1d, 0x8d, 0x96, 0xee, 0x12, | ||||
| 	0xad, 0xdd, 0x6b, 0xb5, 0x77, 0x83, 0x05, 0x72, 0x05, 0x66, 0xd3, 0xfb, 0x1a, 0xea, 0xe6, 0x87, | ||||
| 	0x66, 0x34, 0xc9, 0x59, 0x27, 0x57, 0x60, 0x45, 0xf2, 0x22, 0x31, 0x39, 0xf5, 0x1a, 0xbf, 0xdc, | ||||
| 	0x11, 0x45, 0x8c, 0x39, 0x23, 0x91, 0x8a, 0xc2, 0xad, 0x19, 0xde, 0x6f, 0x9d, 0x99, 0x6a, 0x8f, | ||||
| 	0x98, 0x54, 0x66, 0x15, 0xbf, 0x4c, 0x50, 0xaf, 0x71, 0xb5, 0xdf, 0xc1, 0x46, 0x96, 0xe4, 0x61, | ||||
| 	0x8a, 0x61, 0x2b, 0x73, 0x59, 0xf7, 0xc1, 0xe1, 0xdb, 0x33, 0xf7, 0xc9, 0xcb, 0x53, 0x4e, 0x33, | ||||
| 	0x21, 0x15, 0x2d, 0x78, 0x84, 0x3a, 0x52, 0x0d, 0x7b, 0x68, 0x61, 0x54, 0x61, 0x1e, 0xaa, 0x10, | ||||
| 	0x60, 0x35, 0xa6, 0x2c, 0x2d, 0x38, 0x8b, 0x47, 0xf4, 0x75, 0x2e, 0xde, 0x48, 0xca, 0x3a, 0x62, | ||||
| 	0xa0, 0xfc, 0x77, 0xb3, 0xe2, 0xcd, 0x93, 0x28, 0xc5, 0xfb, 0x02, 0xea, 0x3d, 0x14, 0x43, 0xe2, | ||||
| 	0xb7, 0xb5, 0x4a, 0xf7, 0x83, 0x05, 0x0e, 0x05, 0x5a, 0x3e, 0x2f, 0x84, 0x65, 0xfd, 0x7f, 0xf6, | ||||
| 	0xd6, 0xea, 0xe4, 0x06, 0xac, 0x8f, 0x4b, 0xd2, 0x44, 0x8d, 0x54, 0xeb, 0xe4, 0x23, 0xd8, 0xa8, | ||||
| 	0x76, 0xc2, 0xf6, 0x1b, 0xce, 0x5f, 0x4b, 0xa3, 0x56, 0x9d, 0xb8, 0x70, 0x75, 0x1c, 0xe8, 0x8a, | ||||
| 	0x02, 0xd5, 0x2e, 0xdc, 0x65, 0x1d, 0xf1, 0xb7, 0xe0, 0x56, 0x45, 0x66, 0x3f, 0x8a, 0x78, 0x5f, | ||||
| 	0x1d, 0x1f, 0xef, 0x57, 0xea, 0xf9, 0xdb, 0xe0, 0x5d, 0x14, 0xb4, 0x04, 0xfd, 0xef, 0xe1, 0x76, | ||||
| 	0x15, 0x3d, 0x5f, 0xc4, 0x33, 0xa1, 0xb0, 0x55, 0x23, 0xa6, 0x12, 0x91, 0x7f, 0x78, 0xf5, 0xfe, | ||||
| 	0x1e, 0xec, 0x96, 0xd8, 0x43, 0x73, 0x09, 0xfa, 0xc4, 0xf1, 0x08, 0x3b, 0x3f, 0xfb, 0x26, 0xc7, | ||||
| 	0x32, 0x32, 0x93, 0x7f, 0xcc, 0xf6, 0x9f, 0x65, 0xb8, 0x76, 0x68, 0x81, 0x13, 0x10, 0xd9, 0x81, | ||||
| 	0x5a, 0xd4, 0x1f, 0x18, 0xdd, 0x5a, 0xed, 0x9b, 0xc1, 0x1c, 0x00, 0xd9, 0x9c, 0x90, 0x4f, 0x01, | ||||
| 	0x86, 0x49, 0xcc, 0x45, 0x18, 0xb1, 0x22, 0x36, 0x62, 0xb6, 0xda, 0xdb, 0x17, 0x60, 0x5f, 0x69, | ||||
| 	0xd0, 0x21, 0x62, 0xb4, 0xa2, 0xa2, 0xcf, 0x0b, 0x64, 0x90, 0xf7, 0x42, 0x69, 0x10, 0x46, 0xeb, | ||||
| 	0x26, 0xb9, 0x0a, 0x0d, 0x21, 0xc3, 0xcf, 0x1f, 0x77, 0x12, 0x65, 0x34, 0x6e, 0xe8, 0xdb, 0xb2, | ||||
| 	0x88, 0xb0, 0x60, 0x59, 0x98, 0x75, 0xdc, 0x7a, 0xd5, 0xd8, 0x6c, 0x10, 0x27, 0x22, 0x8c, 0xf9, | ||||
| 	0x30, 0x89, 0xb8, 0xbb, 0x62, 0x8e, 0x6f, 0xc3, 0x66, 0xb9, 0x5b, 0x24, 0x78, 0x4d, 0x21, 0xfe, | ||||
| 	0x49, 0xac, 0xd2, 0x5d, 0xd5, 0x51, 0xef, 0x2f, 0x07, 0x6a, 0x9a, 0xf0, 0x35, 0x68, 0xca, 0x3e, | ||||
| 	0x47, 0x2f, 0xc8, 0x4e, 0x7f, 0x9a, 0xcc, 0xcd, 0x90, 0xe7, 0x31, 0x4e, 0xc8, 0x92, 0x49, 0xe4, | ||||
| 	0x01, 0x49, 0x45, 0x0f, 0x2f, 0x21, 0x0d, 0xd1, 0x1f, 0x22, 0x34, 0x11, 0x51, 0x54, 0xfd, 0xb0, | ||||
| 	0x05, 0xd7, 0xfb, 0xa7, 0x23, 0x79, 0x3e, 0x68, 0x5a, 0x82, 0xdc, 0x84, 0x2b, 0xa7, 0x23, 0xac, | ||||
| 	0x4d, 0x9d, 0xea, 0x8e, 0xc7, 0xfa, 0x0c, 0xdf, 0x86, 0xee, 0xc1, 0x6e, 0x94, 0x89, 0xa1, 0x21, | ||||
| 	0xda, 0x20, 0x6b, 0xb0, 0x2c, 0x25, 0x6f, 0x1b, 0x62, 0xd5, 0xea, 0x91, 0xdb, 0xa8, 0xa0, 0xd2, | ||||
| 	0x2c, 0x9b, 0x93, 0x25, 0x7f, 0xcc, 0x5c, 0x98, 0x5e, 0x7e, 0xe6, 0xb6, 0xa6, 0x97, 0x6d, 0x77, | ||||
| 	0x4d, 0x2f, 0xbd, 0xdf, 0x1d, 0x68, 0x4e, 0x74, 0xc6, 0xaa, 0xac, 0x10, 0xa6, 0xca, 0xa6, 0x26, | ||||
| 	0x77, 0x4e, 0x18, 0x5b, 0xed, 0x75, 0x68, 0x95, 0xfb, 0x31, 0x53, 0xdc, 0x9a, 0x84, 0x9e, 0x87, | ||||
| 	0x38, 0xc1, 0xd9, 0x56, 0x3f, 0x8e, 0xd1, 0xcb, 0x55, 0x16, 0xbc, 0xbd, 0xbc, 0x97, 0x8e, 0xf7, | ||||
| 	0xeb, 0xd5, 0xdd, 0x59, 0x0d, 0x71, 0xd2, 0x56, 0x8c, 0x18, 0xb8, 0x63, 0xaf, 0x07, 0x77, 0x56, | ||||
| 	0xcd, 0xce, 0x06, 0xac, 0x0e, 0xcb, 0x7b, 0x6c, 0x98, 0x11, 0x7a, 0x05, 0x0f, 0x16, 0xea, 0xd2, | ||||
| 	0xd2, 0x0c, 0xee, 0x42, 0xab, 0xec, 0x86, 0x04, 0xc3, 0x65, 0x63, 0x92, 0xf9, 0x66, 0x6b, 0xff, | ||||
| 	0x5d, 0x83, 0x15, 0x9b, 0x97, 0xfc, 0xe1, 0x00, 0x99, 0x77, 0x54, 0xb2, 0x13, 0xfc, 0xb7, 0xe1, | ||||
| 	0x7b, 0xb7, 0x17, 0xf1, 0x64, 0xff, 0x04, 0xfd, 0xf0, 0xdb, 0x17, 0x5c, 0x0d, 0x8a, 0x5c, 0x1a, | ||||
| 	0xdb, 0x3b, 0xd6, 0xef, 0x0b, 0x35, 0x30, 0x2a, 0xba, 0x94, 0xd1, 0x01, 0xba, 0xf2, 0x9e, 0x09, | ||||
| 	0x99, 0x04, 0xd4, 0x78, 0x36, 0xc5, 0x02, 0xcd, 0x9e, 0x9e, 0xf0, 0x3d, 0xca, 0xf2, 0x98, 0x26, | ||||
| 	0x5d, 0x9a, 0xa8, 0xbb, 0x12, 0x23, 0x49, 0x4a, 0x7e, 0x73, 0xc0, 0xb5, 0x85, 0xcd, 0x0f, 0xfb, | ||||
| 	0x2c, 0xfd, 0x4b, 0x1c, 0x7c, 0x96, 0xfe, 0x65, 0x76, 0xe1, 0x07, 0x48, 0x7f, 0x17, 0x01, 0x96, | ||||
| 	0xfb, 0x79, 0x1f, 0x97, 0x63, 0x9a, 0x2c, 0x8a, 0xc4, 0x20, 0x57, 0x24, 0x82, 0xe6, 0xd8, 0xd1, | ||||
| 	0x88, 0x17, 0x5c, 0x6a, 0x81, 0xde, 0x56, 0xf0, 0x1e, 0x07, 0xfc, 0x18, 0xbf, 0x7a, 0xeb, 0x04, | ||||
| 	0x75, 0xa1, 0x89, 0xd4, 0xa9, 0x31, 0x8e, 0xe3, 0x62, 0xe5, 0x3b, 0xde, 0xf7, 0x1e, 0x62, 0xf8, | ||||
| 	0xfe, 0x3e, 0xc5, 0xb8, 0x6e, 0x20, 0xc3, 0x41, 0x83, 0xa4, 0xd4, 0x20, 0xab, 0xaf, 0x7d, 0x53, | ||||
| 	0x29, 0xf6, 0x2c, 0x6b, 0xff, 0x5a, 0x83, 0xb5, 0xe9, 0x3e, 0x22, 0xbf, 0x38, 0x70, 0xc3, 0x38, | ||||
| 	0xe9, 0xe8, 0xbc, 0x72, 0x9f, 0x04, 0x8b, 0x38, 0xaf, 0xd7, 0x0a, 0x9e, 0x89, 0x31, 0xd9, 0x27, | ||||
| 	0xc8, 0xe6, 0xab, 0xe9, 0x30, 0xed, 0x16, 0x22, 0x33, 0xec, 0x90, 0x81, 0x12, 0xd5, 0x43, 0x87, | ||||
| 	0x97, 0x9d, 0xe1, 0x13, 0x51, 0xbd, 0x89, 0x9a, 0xa1, 0x11, 0x91, 0xfc, 0xe9, 0xc0, 0xe6, 0x45, | ||||
| 	0xad, 0x4d, 0x1e, 0x04, 0x8b, 0xbb, 0xb4, 0xb7, 0x17, 0xfc, 0x8f, 0x61, 0xf1, 0x9f, 0x23, 0xe9, | ||||
| 	0xa3, 0xf2, 0xa8, 0xe5, 0xab, 0xc5, 0x9d, 0x70, 0x9e, 0x7a, 0xa0, 0xb5, 0xbc, 0xc9, 0x24, 0x87, | ||||
| 	0x7d, 0xa2, 0x0d, 0x40, 0x77, 0xae, 0xa4, 0x76, 0xe8, 0x3c, 0xdd, 0x29, 0x77, 0xe6, 0xc4, 0xaf, | ||||
| 	0x92, 0xe4, 0x53, 0xfa, 0xc8, 0x77, 0x67, 0xee, 0xd2, 0x41, 0xed, 0x67, 0xc7, 0xf9, 0x37, 0x00, | ||||
| 	0x00, 0xff, 0xff, 0x9e, 0xe2, 0xe2, 0x67, 0xb1, 0x09, 0x00, 0x00, | ||||
| } | ||||
							
								
								
									
										2702
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/publishedfile.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2702
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/protobuf/unified/publishedfile.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										6539
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/steamlang/enums.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6539
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/steamlang/enums.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										2543
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/steamlang/messages.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2543
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/steamlang/messages.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										17
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/steamlang/steamlang.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								vendor/github.com/Philipp15b/go-steam/protocol/steamlang/steamlang.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| /* | ||||
| Contains code generated from SteamKit's SteamLanguage data. | ||||
| */ | ||||
| package steamlang | ||||
|  | ||||
| const ( | ||||
| 	ProtoMask uint32 = 0x80000000 | ||||
| 	EMsgMask         = ^ProtoMask | ||||
| ) | ||||
|  | ||||
| func NewEMsg(e uint32) EMsg { | ||||
| 	return EMsg(e & EMsgMask) | ||||
| } | ||||
|  | ||||
| func IsProto(e uint32) bool { | ||||
| 	return e&ProtoMask > 0 | ||||
| } | ||||
							
								
								
									
										97
									
								
								vendor/github.com/Philipp15b/go-steam/rwu/rwu.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								vendor/github.com/Philipp15b/go-steam/rwu/rwu.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,97 @@ | ||||
| // Utilities for reading and writing of binary data | ||||
| package rwu | ||||
|  | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| func ReadBool(r io.Reader) (bool, error) { | ||||
| 	var c uint8 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c != 0, err | ||||
| } | ||||
|  | ||||
| func ReadUint8(r io.Reader) (uint8, error) { | ||||
| 	var c uint8 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadUint16(r io.Reader) (uint16, error) { | ||||
| 	var c uint16 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadUint32(r io.Reader) (uint32, error) { | ||||
| 	var c uint32 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadUint64(r io.Reader) (uint64, error) { | ||||
| 	var c uint64 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadInt8(r io.Reader) (int8, error) { | ||||
| 	var c int8 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadInt16(r io.Reader) (int16, error) { | ||||
| 	var c int16 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadInt32(r io.Reader) (int32, error) { | ||||
| 	var c int32 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadInt64(r io.Reader) (int64, error) { | ||||
| 	var c int64 | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadString(r io.Reader) (string, error) { | ||||
| 	c := make([]byte, 0) | ||||
| 	var err error | ||||
| 	for { | ||||
| 		var b byte | ||||
| 		err = binary.Read(r, binary.LittleEndian, &b) | ||||
| 		if b == byte(0x0) || err != nil { | ||||
| 			break | ||||
| 		} | ||||
| 		c = append(c, b) | ||||
| 	} | ||||
| 	return string(c), err | ||||
| } | ||||
|  | ||||
| func ReadByte(r io.Reader) (byte, error) { | ||||
| 	var c byte | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func ReadBytes(r io.Reader, num int32) ([]byte, error) { | ||||
| 	c := make([]byte, num) | ||||
| 	err := binary.Read(r, binary.LittleEndian, &c) | ||||
| 	return c, err | ||||
| } | ||||
|  | ||||
| func WriteBool(w io.Writer, b bool) error { | ||||
| 	var err error | ||||
| 	if b { | ||||
| 		_, err = w.Write([]byte{1}) | ||||
| 	} else { | ||||
| 		_, err = w.Write([]byte{0}) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										144
									
								
								vendor/github.com/Philipp15b/go-steam/servers.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								vendor/github.com/Philipp15b/go-steam/servers.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"math/rand" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/Philipp15b/go-steam/netutil" | ||||
| ) | ||||
|  | ||||
| // CMServers contains a list of worlwide servers | ||||
| var CMServers = [][]string{ | ||||
| 	{ // North American Servers | ||||
| 		// Chicago | ||||
| 		"162.254.193.44:27018", | ||||
| 		"162.254.193.44:27019", | ||||
| 		"162.254.193.44:27020", | ||||
| 		"162.254.193.44:27021", | ||||
| 		"162.254.193.45:27017", | ||||
| 		"162.254.193.45:27018", | ||||
| 		"162.254.193.45:27019", | ||||
| 		"162.254.193.45:27021", | ||||
| 		"162.254.193.46:27017", | ||||
| 		"162.254.193.46:27018", | ||||
| 		"162.254.193.46:27019", | ||||
| 		"162.254.193.46:27020", | ||||
| 		"162.254.193.46:27021", | ||||
| 		"162.254.193.47:27019", | ||||
| 		"162.254.193.47:27020", | ||||
|  | ||||
| 		// Ashburn | ||||
| 		"208.78.164.9:27017", | ||||
| 		"208.78.164.9:27018", | ||||
| 		"208.78.164.9:27019", | ||||
| 		"208.78.164.10:27017", | ||||
| 		"208.78.164.10:27018", | ||||
| 		"208.78.164.10:27019", | ||||
| 		"208.78.164.11:27017", | ||||
| 		"208.78.164.11:27018", | ||||
| 		"208.78.164.11:27019", | ||||
| 		"208.78.164.12:27017", | ||||
| 		"208.78.164.12:27018", | ||||
| 		"208.78.164.12:27019", | ||||
| 		"208.78.164.13:27017", | ||||
| 		"208.78.164.13:27018", | ||||
| 		"208.78.164.13:27019", | ||||
| 		"208.78.164.14:27017", | ||||
| 		"208.78.164.14:27018", | ||||
| 		"208.78.164.14:27019", | ||||
| 	}, | ||||
| 	{ // Europe Servers | ||||
| 		// Luxembourg | ||||
| 		"146.66.152.10:27017", | ||||
| 		"146.66.152.10:27018", | ||||
| 		"146.66.152.10:27019", | ||||
| 		"146.66.152.10:27020", | ||||
| 		"146.66.152.11:27017", | ||||
| 		"146.66.152.11:27018", | ||||
| 		"146.66.152.11:27019", | ||||
| 		"146.66.152.11:27020", | ||||
|  | ||||
| 		// Poland | ||||
| 		"155.133.242.8:27017", | ||||
| 		"155.133.242.8:27018", | ||||
| 		"155.133.242.8:27019", | ||||
| 		"155.133.242.8:27020", | ||||
| 		"155.133.242.9:27017", | ||||
| 		"155.133.242.9:27018", | ||||
| 		"155.133.242.9:27019", | ||||
| 		"155.133.242.9:27020", | ||||
|  | ||||
| 		// Vienna | ||||
| 		"146.66.155.8:27017", | ||||
| 		"146.66.155.8:27018", | ||||
| 		"146.66.155.8:27019", | ||||
| 		"146.66.155.8:27020", | ||||
| 		"185.25.182.10:27017", | ||||
| 		"185.25.182.10:27018", | ||||
| 		"185.25.182.10:27019", | ||||
| 		"185.25.182.10:27020", | ||||
|  | ||||
| 		// London | ||||
| 		"162.254.196.40:27017", | ||||
| 		"162.254.196.40:27018", | ||||
| 		"162.254.196.40:27019", | ||||
| 		"162.254.196.40:27020", | ||||
| 		"162.254.196.40:27021", | ||||
| 		"162.254.196.41:27017", | ||||
| 		"162.254.196.41:27018", | ||||
| 		"162.254.196.41:27019", | ||||
| 		"162.254.196.41:27020", | ||||
| 		"162.254.196.41:27021", | ||||
| 		"162.254.196.42:27017", | ||||
| 		"162.254.196.42:27018", | ||||
| 		"162.254.196.42:27019", | ||||
| 		"162.254.196.42:27020", | ||||
| 		"162.254.196.42:27021", | ||||
| 		"162.254.196.43:27017", | ||||
| 		"162.254.196.43:27018", | ||||
| 		"162.254.196.43:27019", | ||||
| 		"162.254.196.43:27020", | ||||
| 		"162.254.196.43:27021", | ||||
|  | ||||
| 		// Stockholm | ||||
| 		"185.25.180.14:27017", | ||||
| 		"185.25.180.14:27018", | ||||
| 		"185.25.180.14:27019", | ||||
| 		"185.25.180.14:27020", | ||||
| 		"185.25.180.15:27017", | ||||
| 		"185.25.180.15:27018", | ||||
| 		"185.25.180.15:27019", | ||||
| 		"185.25.180.15:27020", | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| // GetRandomCM returns back a random server anywhere | ||||
| func GetRandomCM() *netutil.PortAddr { | ||||
| 	rng := rand.New(rand.NewSource(time.Now().UnixNano())) | ||||
| 	servers := append(CMServers[0], CMServers[1]...) | ||||
| 	addr := netutil.ParsePortAddr(servers[rng.Int31n(int32(len(servers)))]) | ||||
| 	if addr == nil { | ||||
| 		panic("invalid address in CMServers slice") | ||||
| 	} | ||||
| 	return addr | ||||
| } | ||||
|  | ||||
| // GetRandomNorthAmericaCM returns back a random server in north america | ||||
| func GetRandomNorthAmericaCM() *netutil.PortAddr { | ||||
| 	rng := rand.New(rand.NewSource(time.Now().UnixNano())) | ||||
| 	addr := netutil.ParsePortAddr(CMServers[0][rng.Int31n(int32(len(CMServers[0])))]) | ||||
| 	if addr == nil { | ||||
| 		panic("invalid address in CMServers slice") | ||||
| 	} | ||||
| 	return addr | ||||
| } | ||||
|  | ||||
| // GetRandomEuropeCM returns back a random server in europe | ||||
| func GetRandomEuropeCM() *netutil.PortAddr { | ||||
| 	rng := rand.New(rand.NewSource(time.Now().UnixNano())) | ||||
| 	addr := netutil.ParsePortAddr(CMServers[1][rng.Int31n(int32(len(CMServers[1])))]) | ||||
| 	if addr == nil { | ||||
| 		panic("invalid address in CMServers slice") | ||||
| 	} | ||||
| 	return addr | ||||
| } | ||||
							
								
								
									
										624
									
								
								vendor/github.com/Philipp15b/go-steam/social.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										624
									
								
								vendor/github.com/Philipp15b/go-steam/social.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,624 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/binary" | ||||
| 	"encoding/hex" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/protobuf" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/rwu" | ||||
| 	"github.com/Philipp15b/go-steam/socialcache" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"io" | ||||
| 	"sync" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| // Provides access to social aspects of Steam. | ||||
| type Social struct { | ||||
| 	mutex sync.RWMutex | ||||
|  | ||||
| 	name         string | ||||
| 	avatar       string | ||||
| 	personaState EPersonaState | ||||
|  | ||||
| 	Friends *socialcache.FriendsList | ||||
| 	Groups  *socialcache.GroupsList | ||||
| 	Chats   *socialcache.ChatsList | ||||
|  | ||||
| 	client *Client | ||||
| } | ||||
|  | ||||
| func newSocial(client *Client) *Social { | ||||
| 	return &Social{ | ||||
| 		Friends: socialcache.NewFriendsList(), | ||||
| 		Groups:  socialcache.NewGroupsList(), | ||||
| 		Chats:   socialcache.NewChatsList(), | ||||
| 		client:  client, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Gets the local user's avatar | ||||
| func (s *Social) GetAvatar() string { | ||||
| 	s.mutex.RLock() | ||||
| 	defer s.mutex.RUnlock() | ||||
| 	return s.avatar | ||||
| } | ||||
|  | ||||
| // Gets the local user's persona name | ||||
| func (s *Social) GetPersonaName() string { | ||||
| 	s.mutex.RLock() | ||||
| 	defer s.mutex.RUnlock() | ||||
| 	return s.name | ||||
| } | ||||
|  | ||||
| // Sets the local user's persona name and broadcasts it over the network | ||||
| func (s *Social) SetPersonaName(name string) { | ||||
| 	s.mutex.Lock() | ||||
| 	defer s.mutex.Unlock() | ||||
| 	s.name = name | ||||
| 	s.client.Write(NewClientMsgProtobuf(EMsg_ClientChangeStatus, &CMsgClientChangeStatus{ | ||||
| 		PersonaState: proto.Uint32(uint32(s.personaState)), | ||||
| 		PlayerName:   proto.String(name), | ||||
| 	})) | ||||
| } | ||||
|  | ||||
| // Gets the local user's persona state | ||||
| func (s *Social) GetPersonaState() EPersonaState { | ||||
| 	s.mutex.RLock() | ||||
| 	defer s.mutex.RUnlock() | ||||
| 	return s.personaState | ||||
| } | ||||
|  | ||||
| // Sets the local user's persona state and broadcasts it over the network | ||||
| func (s *Social) SetPersonaState(state EPersonaState) { | ||||
| 	s.mutex.Lock() | ||||
| 	defer s.mutex.Unlock() | ||||
| 	s.personaState = state | ||||
| 	s.client.Write(NewClientMsgProtobuf(EMsg_ClientChangeStatus, &CMsgClientChangeStatus{ | ||||
| 		PersonaState: proto.Uint32(uint32(state)), | ||||
| 	})) | ||||
| } | ||||
|  | ||||
| // Sends a chat message to ether a room or friend | ||||
| func (s *Social) SendMessage(to SteamId, entryType EChatEntryType, message string) { | ||||
| 	//Friend | ||||
| 	if to.GetAccountType() == int32(EAccountType_Individual) || to.GetAccountType() == int32(EAccountType_ConsoleUser) { | ||||
| 		s.client.Write(NewClientMsgProtobuf(EMsg_ClientFriendMsg, &CMsgClientFriendMsg{ | ||||
| 			Steamid:       proto.Uint64(to.ToUint64()), | ||||
| 			ChatEntryType: proto.Int32(int32(entryType)), | ||||
| 			Message:       []byte(message), | ||||
| 		})) | ||||
| 		//Chat room | ||||
| 	} else if to.GetAccountType() == int32(EAccountType_Clan) || to.GetAccountType() == int32(EAccountType_Chat) { | ||||
| 		chatId := to.ClanToChat() | ||||
| 		s.client.Write(NewClientMsg(&MsgClientChatMsg{ | ||||
| 			ChatMsgType:     entryType, | ||||
| 			SteamIdChatRoom: chatId, | ||||
| 			SteamIdChatter:  s.client.SteamId(), | ||||
| 		}, []byte(message))) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Adds a friend to your friends list or accepts a friend. You'll receive a FriendStateEvent | ||||
| // for every new/changed friend | ||||
| func (s *Social) AddFriend(id SteamId) { | ||||
| 	s.client.Write(NewClientMsgProtobuf(EMsg_ClientAddFriend, &CMsgClientAddFriend{ | ||||
| 		SteamidToAdd: proto.Uint64(id.ToUint64()), | ||||
| 	})) | ||||
| } | ||||
|  | ||||
| // Removes a friend from your friends list | ||||
| func (s *Social) RemoveFriend(id SteamId) { | ||||
| 	s.client.Write(NewClientMsgProtobuf(EMsg_ClientRemoveFriend, &CMsgClientRemoveFriend{ | ||||
| 		Friendid: proto.Uint64(id.ToUint64()), | ||||
| 	})) | ||||
| } | ||||
|  | ||||
| // Ignores or unignores a friend on Steam | ||||
| func (s *Social) IgnoreFriend(id SteamId, setIgnore bool) { | ||||
| 	ignore := uint8(1) //True | ||||
| 	if !setIgnore { | ||||
| 		ignore = uint8(0) //False | ||||
| 	} | ||||
| 	s.client.Write(NewClientMsg(&MsgClientSetIgnoreFriend{ | ||||
| 		MySteamId:     s.client.SteamId(), | ||||
| 		SteamIdFriend: id, | ||||
| 		Ignore:        ignore, | ||||
| 	}, make([]byte, 0))) | ||||
| } | ||||
|  | ||||
| // Requests persona state for a list of specified SteamIds | ||||
| func (s *Social) RequestFriendListInfo(ids []SteamId, requestedInfo EClientPersonaStateFlag) { | ||||
| 	var friends []uint64 | ||||
| 	for _, id := range ids { | ||||
| 		friends = append(friends, id.ToUint64()) | ||||
| 	} | ||||
| 	s.client.Write(NewClientMsgProtobuf(EMsg_ClientRequestFriendData, &CMsgClientRequestFriendData{ | ||||
| 		PersonaStateRequested: proto.Uint32(uint32(requestedInfo)), | ||||
| 		Friends:               friends, | ||||
| 	})) | ||||
| } | ||||
|  | ||||
| // Requests persona state for a specified SteamId | ||||
| func (s *Social) RequestFriendInfo(id SteamId, requestedInfo EClientPersonaStateFlag) { | ||||
| 	s.RequestFriendListInfo([]SteamId{id}, requestedInfo) | ||||
| } | ||||
|  | ||||
| // Requests profile information for a specified SteamId | ||||
| func (s *Social) RequestProfileInfo(id SteamId) { | ||||
| 	s.client.Write(NewClientMsgProtobuf(EMsg_ClientFriendProfileInfo, &CMsgClientFriendProfileInfo{ | ||||
| 		SteamidFriend: proto.Uint64(id.ToUint64()), | ||||
| 	})) | ||||
| } | ||||
|  | ||||
| // Requests all offline messages and marks them as read | ||||
| func (s *Social) RequestOfflineMessages() { | ||||
| 	s.client.Write(NewClientMsgProtobuf(EMsg_ClientFSGetFriendMessageHistoryForOfflineMessages, &CMsgClientFSGetFriendMessageHistoryForOfflineMessages{})) | ||||
| } | ||||
|  | ||||
| // Attempts to join a chat room | ||||
| func (s *Social) JoinChat(id SteamId) { | ||||
| 	chatId := id.ClanToChat() | ||||
| 	s.client.Write(NewClientMsg(&MsgClientJoinChat{ | ||||
| 		SteamIdChat: chatId, | ||||
| 	}, make([]byte, 0))) | ||||
| } | ||||
|  | ||||
| // Attempts to leave a chat room | ||||
| func (s *Social) LeaveChat(id SteamId) { | ||||
| 	chatId := id.ClanToChat() | ||||
| 	payload := new(bytes.Buffer) | ||||
| 	binary.Write(payload, binary.LittleEndian, s.client.SteamId().ToUint64())       // ChatterActedOn | ||||
| 	binary.Write(payload, binary.LittleEndian, uint32(EChatMemberStateChange_Left)) // StateChange | ||||
| 	binary.Write(payload, binary.LittleEndian, s.client.SteamId().ToUint64())       // ChatterActedBy | ||||
| 	s.client.Write(NewClientMsg(&MsgClientChatMemberInfo{ | ||||
| 		SteamIdChat: chatId, | ||||
| 		Type:        EChatInfoType_StateChange, | ||||
| 	}, payload.Bytes())) | ||||
| } | ||||
|  | ||||
| // Kicks the specified chat member from the given chat room | ||||
| func (s *Social) KickChatMember(room SteamId, user SteamId) { | ||||
| 	chatId := room.ClanToChat() | ||||
| 	s.client.Write(NewClientMsg(&MsgClientChatAction{ | ||||
| 		SteamIdChat:        chatId, | ||||
| 		SteamIdUserToActOn: user, | ||||
| 		ChatAction:         EChatAction_Kick, | ||||
| 	}, make([]byte, 0))) | ||||
| } | ||||
|  | ||||
| // Bans the specified chat member from the given chat room | ||||
| func (s *Social) BanChatMember(room SteamId, user SteamId) { | ||||
| 	chatId := room.ClanToChat() | ||||
| 	s.client.Write(NewClientMsg(&MsgClientChatAction{ | ||||
| 		SteamIdChat:        chatId, | ||||
| 		SteamIdUserToActOn: user, | ||||
| 		ChatAction:         EChatAction_Ban, | ||||
| 	}, make([]byte, 0))) | ||||
| } | ||||
|  | ||||
| // Unbans the specified chat member from the given chat room | ||||
| func (s *Social) UnbanChatMember(room SteamId, user SteamId) { | ||||
| 	chatId := room.ClanToChat() | ||||
| 	s.client.Write(NewClientMsg(&MsgClientChatAction{ | ||||
| 		SteamIdChat:        chatId, | ||||
| 		SteamIdUserToActOn: user, | ||||
| 		ChatAction:         EChatAction_UnBan, | ||||
| 	}, make([]byte, 0))) | ||||
| } | ||||
|  | ||||
| func (s *Social) HandlePacket(packet *Packet) { | ||||
| 	switch packet.EMsg { | ||||
| 	case EMsg_ClientPersonaState: | ||||
| 		s.handlePersonaState(packet) | ||||
| 	case EMsg_ClientClanState: | ||||
| 		s.handleClanState(packet) | ||||
| 	case EMsg_ClientFriendsList: | ||||
| 		s.handleFriendsList(packet) | ||||
| 	case EMsg_ClientFriendMsgIncoming: | ||||
| 		s.handleFriendMsg(packet) | ||||
| 	case EMsg_ClientAccountInfo: | ||||
| 		s.handleAccountInfo(packet) | ||||
| 	case EMsg_ClientAddFriendResponse: | ||||
| 		s.handleFriendResponse(packet) | ||||
| 	case EMsg_ClientChatEnter: | ||||
| 		s.handleChatEnter(packet) | ||||
| 	case EMsg_ClientChatMsg: | ||||
| 		s.handleChatMsg(packet) | ||||
| 	case EMsg_ClientChatMemberInfo: | ||||
| 		s.handleChatMemberInfo(packet) | ||||
| 	case EMsg_ClientChatActionResult: | ||||
| 		s.handleChatActionResult(packet) | ||||
| 	case EMsg_ClientChatInvite: | ||||
| 		s.handleChatInvite(packet) | ||||
| 	case EMsg_ClientSetIgnoreFriendResponse: | ||||
| 		s.handleIgnoreFriendResponse(packet) | ||||
| 	case EMsg_ClientFriendProfileInfoResponse: | ||||
| 		s.handleProfileInfoResponse(packet) | ||||
| 	case EMsg_ClientFSGetFriendMessageHistoryResponse: | ||||
| 		s.handleFriendMessageHistoryResponse(packet) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *Social) handleAccountInfo(packet *Packet) { | ||||
| 	//Just fire the personainfo, Auth handles the callback | ||||
| 	flags := EClientPersonaStateFlag_PlayerName | EClientPersonaStateFlag_Presence | EClientPersonaStateFlag_SourceID | ||||
| 	s.RequestFriendInfo(s.client.SteamId(), EClientPersonaStateFlag(flags)) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleFriendsList(packet *Packet) { | ||||
| 	list := new(CMsgClientFriendsList) | ||||
| 	packet.ReadProtoMsg(list) | ||||
| 	var friends []SteamId | ||||
| 	for _, friend := range list.GetFriends() { | ||||
| 		steamId := SteamId(friend.GetUlfriendid()) | ||||
| 		isClan := steamId.GetAccountType() == int32(EAccountType_Clan) | ||||
|  | ||||
| 		if isClan { | ||||
| 			rel := EClanRelationship(friend.GetEfriendrelationship()) | ||||
| 			if rel == EClanRelationship_None { | ||||
| 				s.Groups.Remove(steamId) | ||||
| 			} else { | ||||
| 				s.Groups.Add(socialcache.Group{ | ||||
| 					SteamId:      steamId, | ||||
| 					Relationship: rel, | ||||
| 				}) | ||||
|  | ||||
| 			} | ||||
| 			if list.GetBincremental() { | ||||
| 				s.client.Emit(&GroupStateEvent{steamId, rel}) | ||||
| 			} | ||||
| 		} else { | ||||
| 			rel := EFriendRelationship(friend.GetEfriendrelationship()) | ||||
| 			if rel == EFriendRelationship_None { | ||||
| 				s.Friends.Remove(steamId) | ||||
| 			} else { | ||||
| 				s.Friends.Add(socialcache.Friend{ | ||||
| 					SteamId:      steamId, | ||||
| 					Relationship: rel, | ||||
| 				}) | ||||
|  | ||||
| 			} | ||||
| 			if list.GetBincremental() { | ||||
| 				s.client.Emit(&FriendStateEvent{steamId, rel}) | ||||
| 			} | ||||
| 		} | ||||
| 		if !list.GetBincremental() { | ||||
| 			friends = append(friends, steamId) | ||||
| 		} | ||||
| 	} | ||||
| 	if !list.GetBincremental() { | ||||
| 		s.RequestFriendListInfo(friends, EClientPersonaStateFlag_DefaultInfoRequest) | ||||
| 		s.client.Emit(&FriendsListEvent{}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *Social) handlePersonaState(packet *Packet) { | ||||
| 	list := new(CMsgClientPersonaState) | ||||
| 	packet.ReadProtoMsg(list) | ||||
| 	flags := EClientPersonaStateFlag(list.GetStatusFlags()) | ||||
| 	for _, friend := range list.GetFriends() { | ||||
| 		id := SteamId(friend.GetFriendid()) | ||||
| 		if id == s.client.SteamId() { //this is our client id | ||||
| 			s.mutex.Lock() | ||||
| 			if friend.GetPlayerName() != "" { | ||||
| 				s.name = friend.GetPlayerName() | ||||
| 			} | ||||
| 			avatar := hex.EncodeToString(friend.GetAvatarHash()) | ||||
| 			if ValidAvatar(avatar) { | ||||
| 				s.avatar = avatar | ||||
| 			} | ||||
| 			s.mutex.Unlock() | ||||
| 		} else if id.GetAccountType() == int32(EAccountType_Individual) { | ||||
| 			if (flags & EClientPersonaStateFlag_PlayerName) == EClientPersonaStateFlag_PlayerName { | ||||
| 				if friend.GetPlayerName() != "" { | ||||
| 					s.Friends.SetName(id, friend.GetPlayerName()) | ||||
| 				} | ||||
| 			} | ||||
| 			if (flags & EClientPersonaStateFlag_Presence) == EClientPersonaStateFlag_Presence { | ||||
| 				avatar := hex.EncodeToString(friend.GetAvatarHash()) | ||||
| 				if ValidAvatar(avatar) { | ||||
| 					s.Friends.SetAvatar(id, avatar) | ||||
| 				} | ||||
| 				s.Friends.SetPersonaState(id, EPersonaState(friend.GetPersonaState())) | ||||
| 				s.Friends.SetPersonaStateFlags(id, EPersonaStateFlag(friend.GetPersonaStateFlags())) | ||||
| 			} | ||||
| 			if (flags & EClientPersonaStateFlag_GameDataBlob) == EClientPersonaStateFlag_GameDataBlob { | ||||
| 				s.Friends.SetGameAppId(id, friend.GetGamePlayedAppId()) | ||||
| 				s.Friends.SetGameId(id, friend.GetGameid()) | ||||
| 				s.Friends.SetGameName(id, friend.GetGameName()) | ||||
| 			} | ||||
| 		} else if id.GetAccountType() == int32(EAccountType_Clan) { | ||||
| 			if (flags & EClientPersonaStateFlag_PlayerName) == EClientPersonaStateFlag_PlayerName { | ||||
| 				if friend.GetPlayerName() != "" { | ||||
| 					s.Groups.SetName(id, friend.GetPlayerName()) | ||||
| 				} | ||||
| 			} | ||||
| 			if (flags & EClientPersonaStateFlag_Presence) == EClientPersonaStateFlag_Presence { | ||||
| 				avatar := hex.EncodeToString(friend.GetAvatarHash()) | ||||
| 				if ValidAvatar(avatar) { | ||||
| 					s.Groups.SetAvatar(id, avatar) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 		s.client.Emit(&PersonaStateEvent{ | ||||
| 			StatusFlags:            flags, | ||||
| 			FriendId:               id, | ||||
| 			State:                  EPersonaState(friend.GetPersonaState()), | ||||
| 			StateFlags:             EPersonaStateFlag(friend.GetPersonaStateFlags()), | ||||
| 			GameAppId:              friend.GetGamePlayedAppId(), | ||||
| 			GameId:                 friend.GetGameid(), | ||||
| 			GameName:               friend.GetGameName(), | ||||
| 			GameServerIp:           friend.GetGameServerIp(), | ||||
| 			GameServerPort:         friend.GetGameServerPort(), | ||||
| 			QueryPort:              friend.GetQueryPort(), | ||||
| 			SourceSteamId:          SteamId(friend.GetSteamidSource()), | ||||
| 			GameDataBlob:           friend.GetGameDataBlob(), | ||||
| 			Name:                   friend.GetPlayerName(), | ||||
| 			Avatar:                 hex.EncodeToString(friend.GetAvatarHash()), | ||||
| 			LastLogOff:             friend.GetLastLogoff(), | ||||
| 			LastLogOn:              friend.GetLastLogon(), | ||||
| 			ClanRank:               friend.GetClanRank(), | ||||
| 			ClanTag:                friend.GetClanTag(), | ||||
| 			OnlineSessionInstances: friend.GetOnlineSessionInstances(), | ||||
| 			PublishedSessionId:     friend.GetPublishedInstanceId(), | ||||
| 			PersonaSetByUser:       friend.GetPersonaSetByUser(), | ||||
| 			FacebookName:           friend.GetFacebookName(), | ||||
| 			FacebookId:             friend.GetFacebookId(), | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s *Social) handleClanState(packet *Packet) { | ||||
| 	body := new(CMsgClientClanState) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	var name string | ||||
| 	var avatar string | ||||
| 	if body.GetNameInfo() != nil { | ||||
| 		name = body.GetNameInfo().GetClanName() | ||||
| 		avatar = hex.EncodeToString(body.GetNameInfo().GetShaAvatar()) | ||||
| 	} | ||||
| 	var totalCount, onlineCount, chattingCount, ingameCount uint32 | ||||
| 	if body.GetUserCounts() != nil { | ||||
| 		usercounts := body.GetUserCounts() | ||||
| 		totalCount = usercounts.GetMembers() | ||||
| 		onlineCount = usercounts.GetOnline() | ||||
| 		chattingCount = usercounts.GetChatting() | ||||
| 		ingameCount = usercounts.GetInGame() | ||||
| 	} | ||||
| 	var events, announcements []ClanEventDetails | ||||
| 	for _, event := range body.GetEvents() { | ||||
| 		events = append(events, ClanEventDetails{ | ||||
| 			Id:         event.GetGid(), | ||||
| 			EventTime:  event.GetEventTime(), | ||||
| 			Headline:   event.GetHeadline(), | ||||
| 			GameId:     event.GetGameId(), | ||||
| 			JustPosted: event.GetJustPosted(), | ||||
| 		}) | ||||
| 	} | ||||
| 	for _, announce := range body.GetAnnouncements() { | ||||
| 		announcements = append(announcements, ClanEventDetails{ | ||||
| 			Id:         announce.GetGid(), | ||||
| 			EventTime:  announce.GetEventTime(), | ||||
| 			Headline:   announce.GetHeadline(), | ||||
| 			GameId:     announce.GetGameId(), | ||||
| 			JustPosted: announce.GetJustPosted(), | ||||
| 		}) | ||||
| 	} | ||||
| 	flags := EClientPersonaStateFlag(body.GetMUnStatusFlags()) | ||||
| 	//Add stuff to group | ||||
| 	clanid := SteamId(body.GetSteamidClan()) | ||||
| 	if (flags & EClientPersonaStateFlag_PlayerName) == EClientPersonaStateFlag_PlayerName { | ||||
| 		if name != "" { | ||||
| 			s.Groups.SetName(clanid, name) | ||||
| 		} | ||||
| 	} | ||||
| 	if (flags & EClientPersonaStateFlag_Presence) == EClientPersonaStateFlag_Presence { | ||||
| 		if ValidAvatar(avatar) { | ||||
| 			s.Groups.SetAvatar(clanid, avatar) | ||||
| 		} | ||||
| 	} | ||||
| 	if body.GetUserCounts() != nil { | ||||
| 		s.Groups.SetMemberTotalCount(clanid, totalCount) | ||||
| 		s.Groups.SetMemberOnlineCount(clanid, onlineCount) | ||||
| 		s.Groups.SetMemberChattingCount(clanid, chattingCount) | ||||
| 		s.Groups.SetMemberInGameCount(clanid, ingameCount) | ||||
| 	} | ||||
| 	s.client.Emit(&ClanStateEvent{ | ||||
| 		ClandId:             clanid, | ||||
| 		StateFlags:          EClientPersonaStateFlag(body.GetMUnStatusFlags()), | ||||
| 		AccountFlags:        EAccountFlags(body.GetClanAccountFlags()), | ||||
| 		ClanName:            name, | ||||
| 		Avatar:              avatar, | ||||
| 		MemberTotalCount:    totalCount, | ||||
| 		MemberOnlineCount:   onlineCount, | ||||
| 		MemberChattingCount: chattingCount, | ||||
| 		MemberInGameCount:   ingameCount, | ||||
| 		Events:              events, | ||||
| 		Announcements:       announcements, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleFriendResponse(packet *Packet) { | ||||
| 	body := new(CMsgClientAddFriendResponse) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	s.client.Emit(&FriendAddedEvent{ | ||||
| 		Result:      EResult(body.GetEresult()), | ||||
| 		SteamId:     SteamId(body.GetSteamIdAdded()), | ||||
| 		PersonaName: body.GetPersonaNameAdded(), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleFriendMsg(packet *Packet) { | ||||
| 	body := new(CMsgClientFriendMsgIncoming) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	message := string(bytes.Split(body.GetMessage(), []byte{0x0})[0]) | ||||
| 	s.client.Emit(&ChatMsgEvent{ | ||||
| 		ChatterId: SteamId(body.GetSteamidFrom()), | ||||
| 		Message:   message, | ||||
| 		EntryType: EChatEntryType(body.GetChatEntryType()), | ||||
| 		Timestamp: time.Unix(int64(body.GetRtime32ServerTimestamp()), 0), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleChatMsg(packet *Packet) { | ||||
| 	body := new(MsgClientChatMsg) | ||||
| 	payload := packet.ReadClientMsg(body).Payload | ||||
| 	message := string(bytes.Split(payload, []byte{0x0})[0]) | ||||
| 	s.client.Emit(&ChatMsgEvent{ | ||||
| 		ChatRoomId: SteamId(body.SteamIdChatRoom), | ||||
| 		ChatterId:  SteamId(body.SteamIdChatter), | ||||
| 		Message:    message, | ||||
| 		EntryType:  EChatEntryType(body.ChatMsgType), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleChatEnter(packet *Packet) { | ||||
| 	body := new(MsgClientChatEnter) | ||||
| 	payload := packet.ReadClientMsg(body).Payload | ||||
| 	reader := bytes.NewBuffer(payload) | ||||
| 	name, _ := ReadString(reader) | ||||
| 	ReadByte(reader) //0 | ||||
| 	count := body.NumMembers | ||||
| 	chatId := SteamId(body.SteamIdChat) | ||||
| 	clanId := SteamId(body.SteamIdClan) | ||||
| 	s.Chats.Add(socialcache.Chat{SteamId: chatId, GroupId: clanId}) | ||||
| 	for i := 0; i < int(count); i++ { | ||||
| 		id, chatPerm, clanPerm := readChatMember(reader) | ||||
| 		ReadBytes(reader, 6) //No idea what this is | ||||
| 		s.Chats.AddChatMember(chatId, socialcache.ChatMember{ | ||||
| 			SteamId:         SteamId(id), | ||||
| 			ChatPermissions: chatPerm, | ||||
| 			ClanPermissions: clanPerm, | ||||
| 		}) | ||||
| 	} | ||||
| 	s.client.Emit(&ChatEnterEvent{ | ||||
| 		ChatRoomId:    SteamId(body.SteamIdChat), | ||||
| 		FriendId:      SteamId(body.SteamIdFriend), | ||||
| 		ChatRoomType:  EChatRoomType(body.ChatRoomType), | ||||
| 		OwnerId:       SteamId(body.SteamIdOwner), | ||||
| 		ClanId:        SteamId(body.SteamIdClan), | ||||
| 		ChatFlags:     byte(body.ChatFlags), | ||||
| 		EnterResponse: EChatRoomEnterResponse(body.EnterResponse), | ||||
| 		Name:          name, | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleChatMemberInfo(packet *Packet) { | ||||
| 	body := new(MsgClientChatMemberInfo) | ||||
| 	payload := packet.ReadClientMsg(body).Payload | ||||
| 	reader := bytes.NewBuffer(payload) | ||||
| 	chatId := SteamId(body.SteamIdChat) | ||||
| 	if body.Type == EChatInfoType_StateChange { | ||||
| 		actedOn, _ := ReadUint64(reader) | ||||
| 		state, _ := ReadInt32(reader) | ||||
| 		actedBy, _ := ReadUint64(reader) | ||||
| 		ReadByte(reader) //0 | ||||
| 		stateChange := EChatMemberStateChange(state) | ||||
| 		if stateChange == EChatMemberStateChange_Entered { | ||||
| 			_, chatPerm, clanPerm := readChatMember(reader) | ||||
| 			s.Chats.AddChatMember(chatId, socialcache.ChatMember{ | ||||
| 				SteamId:         SteamId(actedOn), | ||||
| 				ChatPermissions: chatPerm, | ||||
| 				ClanPermissions: clanPerm, | ||||
| 			}) | ||||
| 		} else if stateChange == EChatMemberStateChange_Banned || stateChange == EChatMemberStateChange_Kicked || | ||||
| 			stateChange == EChatMemberStateChange_Disconnected || stateChange == EChatMemberStateChange_Left { | ||||
| 			s.Chats.RemoveChatMember(chatId, SteamId(actedOn)) | ||||
| 		} | ||||
| 		stateInfo := StateChangeDetails{ | ||||
| 			ChatterActedOn: SteamId(actedOn), | ||||
| 			StateChange:    EChatMemberStateChange(stateChange), | ||||
| 			ChatterActedBy: SteamId(actedBy), | ||||
| 		} | ||||
| 		s.client.Emit(&ChatMemberInfoEvent{ | ||||
| 			ChatRoomId:      SteamId(body.SteamIdChat), | ||||
| 			Type:            EChatInfoType(body.Type), | ||||
| 			StateChangeInfo: stateInfo, | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func readChatMember(r io.Reader) (SteamId, EChatPermission, EClanPermission) { | ||||
| 	ReadString(r) // MessageObject | ||||
| 	ReadByte(r)   // 7 | ||||
| 	ReadString(r) //steamid | ||||
| 	id, _ := ReadUint64(r) | ||||
| 	ReadByte(r)   // 2 | ||||
| 	ReadString(r) //Permissions | ||||
| 	chat, _ := ReadInt32(r) | ||||
| 	ReadByte(r)   // 2 | ||||
| 	ReadString(r) //Details | ||||
| 	clan, _ := ReadInt32(r) | ||||
| 	return SteamId(id), EChatPermission(chat), EClanPermission(clan) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleChatActionResult(packet *Packet) { | ||||
| 	body := new(MsgClientChatActionResult) | ||||
| 	packet.ReadClientMsg(body) | ||||
| 	s.client.Emit(&ChatActionResultEvent{ | ||||
| 		ChatRoomId: SteamId(body.SteamIdChat), | ||||
| 		ChatterId:  SteamId(body.SteamIdUserActedOn), | ||||
| 		Action:     EChatAction(body.ChatAction), | ||||
| 		Result:     EChatActionResult(body.ActionResult), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleChatInvite(packet *Packet) { | ||||
| 	body := new(CMsgClientChatInvite) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	s.client.Emit(&ChatInviteEvent{ | ||||
| 		InvitedId:    SteamId(body.GetSteamIdInvited()), | ||||
| 		ChatRoomId:   SteamId(body.GetSteamIdChat()), | ||||
| 		PatronId:     SteamId(body.GetSteamIdPatron()), | ||||
| 		ChatRoomType: EChatRoomType(body.GetChatroomType()), | ||||
| 		FriendChatId: SteamId(body.GetSteamIdFriendChat()), | ||||
| 		ChatRoomName: body.GetChatName(), | ||||
| 		GameId:       body.GetGameId(), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleIgnoreFriendResponse(packet *Packet) { | ||||
| 	body := new(MsgClientSetIgnoreFriendResponse) | ||||
| 	packet.ReadClientMsg(body) | ||||
| 	s.client.Emit(&IgnoreFriendEvent{ | ||||
| 		Result: EResult(body.Result), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleProfileInfoResponse(packet *Packet) { | ||||
| 	body := new(CMsgClientFriendProfileInfoResponse) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	s.client.Emit(&ProfileInfoEvent{ | ||||
| 		Result:      EResult(body.GetEresult()), | ||||
| 		SteamId:     SteamId(body.GetSteamidFriend()), | ||||
| 		TimeCreated: body.GetTimeCreated(), | ||||
| 		RealName:    body.GetRealName(), | ||||
| 		CityName:    body.GetCityName(), | ||||
| 		StateName:   body.GetStateName(), | ||||
| 		CountryName: body.GetCountryName(), | ||||
| 		Headline:    body.GetHeadline(), | ||||
| 		Summary:     body.GetSummary(), | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func (s *Social) handleFriendMessageHistoryResponse(packet *Packet) { | ||||
| 	body := new(CMsgClientFSGetFriendMessageHistoryResponse) | ||||
| 	packet.ReadProtoMsg(body) | ||||
| 	steamid := SteamId(body.GetSteamid()) | ||||
| 	for _, message := range body.GetMessages() { | ||||
| 		if !message.GetUnread() { | ||||
| 			continue // Skip already read messages | ||||
| 		} | ||||
| 		s.client.Emit(&ChatMsgEvent{ | ||||
| 			ChatterId: steamid, | ||||
| 			Message:   message.GetMessage(), | ||||
| 			EntryType: EChatEntryType_ChatMsg, | ||||
| 			Timestamp: time.Unix(int64(message.GetTimestamp()), 0), | ||||
| 			Offline:   true, // GetUnread is true | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										161
									
								
								vendor/github.com/Philipp15b/go-steam/social_events.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								vendor/github.com/Philipp15b/go-steam/social_events.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,161 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| 	"time" | ||||
| ) | ||||
|  | ||||
| type FriendsListEvent struct{} | ||||
|  | ||||
| type FriendStateEvent struct { | ||||
| 	SteamId      SteamId `json:",string"` | ||||
| 	Relationship EFriendRelationship | ||||
| } | ||||
|  | ||||
| func (f *FriendStateEvent) IsFriend() bool { | ||||
| 	return f.Relationship == EFriendRelationship_Friend | ||||
| } | ||||
|  | ||||
| type GroupStateEvent struct { | ||||
| 	SteamId      SteamId `json:",string"` | ||||
| 	Relationship EClanRelationship | ||||
| } | ||||
|  | ||||
| func (g *GroupStateEvent) IsMember() bool { | ||||
| 	return g.Relationship == EClanRelationship_Member | ||||
| } | ||||
|  | ||||
| // Fired when someone changing their friend details | ||||
| type PersonaStateEvent struct { | ||||
| 	StatusFlags            EClientPersonaStateFlag | ||||
| 	FriendId               SteamId `json:",string"` | ||||
| 	State                  EPersonaState | ||||
| 	StateFlags             EPersonaStateFlag | ||||
| 	GameAppId              uint32 | ||||
| 	GameId                 uint64 `json:",string"` | ||||
| 	GameName               string | ||||
| 	GameServerIp           uint32 | ||||
| 	GameServerPort         uint32 | ||||
| 	QueryPort              uint32 | ||||
| 	SourceSteamId          SteamId `json:",string"` | ||||
| 	GameDataBlob           []byte | ||||
| 	Name                   string | ||||
| 	Avatar                 string | ||||
| 	LastLogOff             uint32 | ||||
| 	LastLogOn              uint32 | ||||
| 	ClanRank               uint32 | ||||
| 	ClanTag                string | ||||
| 	OnlineSessionInstances uint32 | ||||
| 	PublishedSessionId     uint32 | ||||
| 	PersonaSetByUser       bool | ||||
| 	FacebookName           string | ||||
| 	FacebookId             uint64 `json:",string"` | ||||
| } | ||||
|  | ||||
| // Fired when a clan's state has been changed | ||||
| type ClanStateEvent struct { | ||||
| 	ClandId             SteamId `json:",string"` | ||||
| 	StateFlags          EClientPersonaStateFlag | ||||
| 	AccountFlags        EAccountFlags | ||||
| 	ClanName            string | ||||
| 	Avatar              string | ||||
| 	MemberTotalCount    uint32 | ||||
| 	MemberOnlineCount   uint32 | ||||
| 	MemberChattingCount uint32 | ||||
| 	MemberInGameCount   uint32 | ||||
| 	Events              []ClanEventDetails | ||||
| 	Announcements       []ClanEventDetails | ||||
| } | ||||
|  | ||||
| type ClanEventDetails struct { | ||||
| 	Id         uint64 `json:",string"` | ||||
| 	EventTime  uint32 | ||||
| 	Headline   string | ||||
| 	GameId     uint64 `json:",string"` | ||||
| 	JustPosted bool | ||||
| } | ||||
|  | ||||
| // Fired in response to adding a friend to your friends list | ||||
| type FriendAddedEvent struct { | ||||
| 	Result      EResult | ||||
| 	SteamId     SteamId `json:",string"` | ||||
| 	PersonaName string | ||||
| } | ||||
|  | ||||
| // Fired when the client receives a message from either a friend or a chat room | ||||
| type ChatMsgEvent struct { | ||||
| 	ChatRoomId SteamId `json:",string"` // not set for friend messages | ||||
| 	ChatterId  SteamId `json:",string"` | ||||
| 	Message    string | ||||
| 	EntryType  EChatEntryType | ||||
| 	Timestamp  time.Time | ||||
| 	Offline    bool | ||||
| } | ||||
|  | ||||
| // Whether the type is ChatMsg | ||||
| func (c *ChatMsgEvent) IsMessage() bool { | ||||
| 	return c.EntryType == EChatEntryType_ChatMsg | ||||
| } | ||||
|  | ||||
| // Fired in response to joining a chat | ||||
| type ChatEnterEvent struct { | ||||
| 	ChatRoomId    SteamId `json:",string"` | ||||
| 	FriendId      SteamId `json:",string"` | ||||
| 	ChatRoomType  EChatRoomType | ||||
| 	OwnerId       SteamId `json:",string"` | ||||
| 	ClanId        SteamId `json:",string"` | ||||
| 	ChatFlags     byte | ||||
| 	EnterResponse EChatRoomEnterResponse | ||||
| 	Name          string | ||||
| } | ||||
|  | ||||
| // Fired in response to a chat member's info being received | ||||
| type ChatMemberInfoEvent struct { | ||||
| 	ChatRoomId      SteamId `json:",string"` | ||||
| 	Type            EChatInfoType | ||||
| 	StateChangeInfo StateChangeDetails | ||||
| } | ||||
|  | ||||
| type StateChangeDetails struct { | ||||
| 	ChatterActedOn SteamId `json:",string"` | ||||
| 	StateChange    EChatMemberStateChange | ||||
| 	ChatterActedBy SteamId `json:",string"` | ||||
| } | ||||
|  | ||||
| // Fired when a chat action has completed | ||||
| type ChatActionResultEvent struct { | ||||
| 	ChatRoomId SteamId `json:",string"` | ||||
| 	ChatterId  SteamId `json:",string"` | ||||
| 	Action     EChatAction | ||||
| 	Result     EChatActionResult | ||||
| } | ||||
|  | ||||
| // Fired when a chat invite is received | ||||
| type ChatInviteEvent struct { | ||||
| 	InvitedId    SteamId `json:",string"` | ||||
| 	ChatRoomId   SteamId `json:",string"` | ||||
| 	PatronId     SteamId `json:",string"` | ||||
| 	ChatRoomType EChatRoomType | ||||
| 	FriendChatId SteamId `json:",string"` | ||||
| 	ChatRoomName string | ||||
| 	GameId       uint64 `json:",string"` | ||||
| } | ||||
|  | ||||
| // Fired in response to ignoring a friend | ||||
| type IgnoreFriendEvent struct { | ||||
| 	Result EResult | ||||
| } | ||||
|  | ||||
| // Fired in response to requesting profile info for a user | ||||
| type ProfileInfoEvent struct { | ||||
| 	Result      EResult | ||||
| 	SteamId     SteamId `json:",string"` | ||||
| 	TimeCreated uint32 | ||||
| 	RealName    string | ||||
| 	CityName    string | ||||
| 	StateName   string | ||||
| 	CountryName string | ||||
| 	Headline    string | ||||
| 	Summary     string | ||||
| } | ||||
							
								
								
									
										111
									
								
								vendor/github.com/Philipp15b/go-steam/socialcache/chats.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								vendor/github.com/Philipp15b/go-steam/socialcache/chats.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| package socialcache | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| // Chats list is a thread safe map | ||||
| // They can be iterated over like so: | ||||
| // 	for id, chat := range client.Social.Chats.GetCopy() { | ||||
| // 		log.Println(id, chat.Name) | ||||
| // 	} | ||||
| type ChatsList struct { | ||||
| 	mutex sync.RWMutex | ||||
| 	byId  map[SteamId]*Chat | ||||
| } | ||||
|  | ||||
| // Returns a new chats list | ||||
| func NewChatsList() *ChatsList { | ||||
| 	return &ChatsList{byId: make(map[SteamId]*Chat)} | ||||
| } | ||||
|  | ||||
| // Adds a chat to the chat list | ||||
| func (list *ChatsList) Add(chat Chat) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	_, exists := list.byId[chat.SteamId] | ||||
| 	if !exists { //make sure this doesnt already exist | ||||
| 		list.byId[chat.SteamId] = &chat | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Removes a chat from the chat list | ||||
| func (list *ChatsList) Remove(id SteamId) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	delete(list.byId, id) | ||||
| } | ||||
|  | ||||
| // Adds a chat member to a given chat | ||||
| func (list *ChatsList) AddChatMember(id SteamId, member ChatMember) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	chat := list.byId[id] | ||||
| 	if chat == nil { //Chat doesn't exist | ||||
| 		chat = &Chat{SteamId: id} | ||||
| 		list.byId[id] = chat | ||||
| 	} | ||||
| 	if chat.ChatMembers == nil { //New chat | ||||
| 		chat.ChatMembers = make(map[SteamId]ChatMember) | ||||
| 	} | ||||
| 	chat.ChatMembers[member.SteamId] = member | ||||
| } | ||||
|  | ||||
| // Removes a chat member from a given chat | ||||
| func (list *ChatsList) RemoveChatMember(id SteamId, member SteamId) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	chat := list.byId[id] | ||||
| 	if chat == nil { //Chat doesn't exist | ||||
| 		return | ||||
| 	} | ||||
| 	if chat.ChatMembers == nil { //New chat | ||||
| 		return | ||||
| 	} | ||||
| 	delete(chat.ChatMembers, member) | ||||
| } | ||||
|  | ||||
| // Returns a copy of the chats map | ||||
| func (list *ChatsList) GetCopy() map[SteamId]Chat { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	glist := make(map[SteamId]Chat) | ||||
| 	for key, chat := range list.byId { | ||||
| 		glist[key] = *chat | ||||
| 	} | ||||
| 	return glist | ||||
| } | ||||
|  | ||||
| // Returns a copy of the chat of a given SteamId | ||||
| func (list *ChatsList) ById(id SteamId) (Chat, error) { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		return *val, nil | ||||
| 	} | ||||
| 	return Chat{}, errors.New("Chat not found") | ||||
| } | ||||
|  | ||||
| // Returns the number of chats | ||||
| func (list *ChatsList) Count() int { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	return len(list.byId) | ||||
| } | ||||
|  | ||||
| // A Chat | ||||
| type Chat struct { | ||||
| 	SteamId     SteamId `json:",string"` | ||||
| 	GroupId     SteamId `json:",string"` | ||||
| 	ChatMembers map[SteamId]ChatMember | ||||
| } | ||||
|  | ||||
| // A Chat Member | ||||
| type ChatMember struct { | ||||
| 	SteamId         SteamId `json:",string"` | ||||
| 	ChatPermissions EChatPermission | ||||
| 	ClanPermissions EClanPermission | ||||
| } | ||||
							
								
								
									
										146
									
								
								vendor/github.com/Philipp15b/go-steam/socialcache/friends.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										146
									
								
								vendor/github.com/Philipp15b/go-steam/socialcache/friends.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,146 @@ | ||||
| package socialcache | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| // Friends list is a thread safe map | ||||
| // They can be iterated over like so: | ||||
| // 	for id, friend := range client.Social.Friends.GetCopy() { | ||||
| // 		log.Println(id, friend.Name) | ||||
| // 	} | ||||
| type FriendsList struct { | ||||
| 	mutex sync.RWMutex | ||||
| 	byId  map[SteamId]*Friend | ||||
| } | ||||
|  | ||||
| // Returns a new friends list | ||||
| func NewFriendsList() *FriendsList { | ||||
| 	return &FriendsList{byId: make(map[SteamId]*Friend)} | ||||
| } | ||||
|  | ||||
| // Adds a friend to the friend list | ||||
| func (list *FriendsList) Add(friend Friend) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	_, exists := list.byId[friend.SteamId] | ||||
| 	if !exists { //make sure this doesnt already exist | ||||
| 		list.byId[friend.SteamId] = &friend | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Removes a friend from the friend list | ||||
| func (list *FriendsList) Remove(id SteamId) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	delete(list.byId, id) | ||||
| } | ||||
|  | ||||
| // Returns a copy of the friends map | ||||
| func (list *FriendsList) GetCopy() map[SteamId]Friend { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	flist := make(map[SteamId]Friend) | ||||
| 	for key, friend := range list.byId { | ||||
| 		flist[key] = *friend | ||||
| 	} | ||||
| 	return flist | ||||
| } | ||||
|  | ||||
| // Returns a copy of the friend of a given SteamId | ||||
| func (list *FriendsList) ById(id SteamId) (Friend, error) { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		return *val, nil | ||||
| 	} | ||||
| 	return Friend{}, errors.New("Friend not found") | ||||
| } | ||||
|  | ||||
| // Returns the number of friends | ||||
| func (list *FriendsList) Count() int { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	return len(list.byId) | ||||
| } | ||||
|  | ||||
| //Setter methods | ||||
| func (list *FriendsList) SetName(id SteamId, name string) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.Name = name | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *FriendsList) SetAvatar(id SteamId, hash string) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.Avatar = hash | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *FriendsList) SetRelationship(id SteamId, relationship EFriendRelationship) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.Relationship = relationship | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *FriendsList) SetPersonaState(id SteamId, state EPersonaState) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.PersonaState = state | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *FriendsList) SetPersonaStateFlags(id SteamId, flags EPersonaStateFlag) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.PersonaStateFlags = flags | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *FriendsList) SetGameAppId(id SteamId, gameappid uint32) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.GameAppId = gameappid | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *FriendsList) SetGameId(id SteamId, gameid uint64) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.GameId = gameid | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *FriendsList) SetGameName(id SteamId, name string) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.GameName = name | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // A Friend | ||||
| type Friend struct { | ||||
| 	SteamId           SteamId `json:",string"` | ||||
| 	Name              string | ||||
| 	Avatar            string | ||||
| 	Relationship      EFriendRelationship | ||||
| 	PersonaState      EPersonaState | ||||
| 	PersonaStateFlags EPersonaStateFlag | ||||
| 	GameAppId         uint32 | ||||
| 	GameId            uint64 `json:",string"` | ||||
| 	GameName          string | ||||
| } | ||||
							
								
								
									
										145
									
								
								vendor/github.com/Philipp15b/go-steam/socialcache/groups.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										145
									
								
								vendor/github.com/Philipp15b/go-steam/socialcache/groups.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,145 @@ | ||||
| package socialcache | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	. "github.com/Philipp15b/go-steam/protocol/steamlang" | ||||
| 	. "github.com/Philipp15b/go-steam/steamid" | ||||
| 	"sync" | ||||
| ) | ||||
|  | ||||
| // Groups list is a thread safe map | ||||
| // They can be iterated over like so: | ||||
| // 	for id, group := range client.Social.Groups.GetCopy() { | ||||
| // 		log.Println(id, group.Name) | ||||
| // 	} | ||||
| type GroupsList struct { | ||||
| 	mutex sync.RWMutex | ||||
| 	byId  map[SteamId]*Group | ||||
| } | ||||
|  | ||||
| // Returns a new groups list | ||||
| func NewGroupsList() *GroupsList { | ||||
| 	return &GroupsList{byId: make(map[SteamId]*Group)} | ||||
| } | ||||
|  | ||||
| // Adds a group to the group list | ||||
| func (list *GroupsList) Add(group Group) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	_, exists := list.byId[group.SteamId] | ||||
| 	if !exists { //make sure this doesnt already exist | ||||
| 		list.byId[group.SteamId] = &group | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // Removes a group from the group list | ||||
| func (list *GroupsList) Remove(id SteamId) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	delete(list.byId, id) | ||||
| } | ||||
|  | ||||
| // Returns a copy of the groups map | ||||
| func (list *GroupsList) GetCopy() map[SteamId]Group { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	glist := make(map[SteamId]Group) | ||||
| 	for key, group := range list.byId { | ||||
| 		glist[key] = *group | ||||
| 	} | ||||
| 	return glist | ||||
| } | ||||
|  | ||||
| // Returns a copy of the group of a given SteamId | ||||
| func (list *GroupsList) ById(id SteamId) (Group, error) { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	id = id.ChatToClan() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		return *val, nil | ||||
| 	} | ||||
| 	return Group{}, errors.New("Group not found") | ||||
| } | ||||
|  | ||||
| // Returns the number of groups | ||||
| func (list *GroupsList) Count() int { | ||||
| 	list.mutex.RLock() | ||||
| 	defer list.mutex.RUnlock() | ||||
| 	return len(list.byId) | ||||
| } | ||||
|  | ||||
| //Setter methods | ||||
| func (list *GroupsList) SetName(id SteamId, name string) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	id = id.ChatToClan() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.Name = name | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *GroupsList) SetAvatar(id SteamId, hash string) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	id = id.ChatToClan() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.Avatar = hash | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *GroupsList) SetRelationship(id SteamId, relationship EClanRelationship) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	id = id.ChatToClan() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.Relationship = relationship | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *GroupsList) SetMemberTotalCount(id SteamId, count uint32) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	id = id.ChatToClan() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.MemberTotalCount = count | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *GroupsList) SetMemberOnlineCount(id SteamId, count uint32) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	id = id.ChatToClan() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.MemberOnlineCount = count | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *GroupsList) SetMemberChattingCount(id SteamId, count uint32) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	id = id.ChatToClan() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.MemberChattingCount = count | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (list *GroupsList) SetMemberInGameCount(id SteamId, count uint32) { | ||||
| 	list.mutex.Lock() | ||||
| 	defer list.mutex.Unlock() | ||||
| 	id = id.ChatToClan() | ||||
| 	if val, ok := list.byId[id]; ok { | ||||
| 		val.MemberInGameCount = count | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // A Group | ||||
| type Group struct { | ||||
| 	SteamId             SteamId `json:",string"` | ||||
| 	Name                string | ||||
| 	Avatar              string | ||||
| 	Relationship        EClanRelationship | ||||
| 	MemberTotalCount    uint32 | ||||
| 	MemberOnlineCount   uint32 | ||||
| 	MemberChattingCount uint32 | ||||
| 	MemberInGameCount   uint32 | ||||
| } | ||||
							
								
								
									
										76
									
								
								vendor/github.com/Philipp15b/go-steam/steam_directory.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								vendor/github.com/Philipp15b/go-steam/steam_directory.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| package steam | ||||
|  | ||||
| import ( | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"math/rand" | ||||
| 	"net/http" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/Philipp15b/go-steam/netutil" | ||||
| ) | ||||
|  | ||||
| // Load initial server list from Steam Directory Web API. | ||||
| // Call InitializeSteamDirectory() before Connect() to use | ||||
| // steam directory server list instead of static one. | ||||
| func InitializeSteamDirectory() error { | ||||
| 	return steamDirectoryCache.Initialize() | ||||
| } | ||||
|  | ||||
| var steamDirectoryCache *steamDirectory = &steamDirectory{} | ||||
|  | ||||
| type steamDirectory struct { | ||||
| 	sync.RWMutex | ||||
| 	servers       []string | ||||
| 	isInitialized bool | ||||
| } | ||||
|  | ||||
| // Get server list from steam directory and save it for later | ||||
| func (sd *steamDirectory) Initialize() error { | ||||
| 	sd.Lock() | ||||
| 	defer sd.Unlock() | ||||
| 	client := new(http.Client) | ||||
| 	resp, err := client.Get(fmt.Sprintf("https://api.steampowered.com/ISteamDirectory/GetCMList/v1/?cellId=0")) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
| 	r := struct { | ||||
| 		Response struct { | ||||
| 			ServerList []string | ||||
| 			Result     uint32 | ||||
| 			Message    string | ||||
| 		} | ||||
| 	}{} | ||||
| 	if err = json.NewDecoder(resp.Body).Decode(&r); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	if r.Response.Result != 1 { | ||||
| 		return fmt.Errorf("Failed to get steam directory, result: %v, message: %v\n", r.Response.Result, r.Response.Message) | ||||
| 	} | ||||
| 	if len(r.Response.ServerList) == 0 { | ||||
| 		return fmt.Errorf("Steam returned zero servers for steam directory request\n") | ||||
| 	} | ||||
| 	sd.servers = r.Response.ServerList | ||||
| 	sd.isInitialized = true | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (sd *steamDirectory) GetRandomCM() *netutil.PortAddr { | ||||
| 	sd.RLock() | ||||
| 	defer sd.RUnlock() | ||||
| 	if !sd.isInitialized { | ||||
| 		panic("steam directory is not initialized") | ||||
| 	} | ||||
| 	rng := rand.New(rand.NewSource(time.Now().UnixNano())) | ||||
| 	addr := netutil.ParsePortAddr(sd.servers[rng.Int31n(int32(len(sd.servers)))]) | ||||
| 	return addr | ||||
| } | ||||
|  | ||||
| func (sd *steamDirectory) IsInitialized() bool { | ||||
| 	sd.RLock() | ||||
| 	defer sd.RUnlock() | ||||
| 	isInitialized := sd.isInitialized | ||||
| 	return isInitialized | ||||
| } | ||||
							
								
								
									
										136
									
								
								vendor/github.com/Philipp15b/go-steam/steamid/steamid.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								vendor/github.com/Philipp15b/go-steam/steamid/steamid.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,136 @@ | ||||
| package steamid | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"strconv" | ||||
| 	"errors" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
| ) | ||||
|  | ||||
| type ChatInstanceFlag uint64 | ||||
|  | ||||
| const ( | ||||
| 	Clan     ChatInstanceFlag = 0x100000 >> 1 | ||||
| 	Lobby    ChatInstanceFlag = 0x100000 >> 2 | ||||
| 	MMSLobby ChatInstanceFlag = 0x100000 >> 3 | ||||
| ) | ||||
|  | ||||
| type SteamId uint64 | ||||
|  | ||||
| func NewId(id string) (SteamId, error) { | ||||
| 	valid, err := regexp.MatchString(`STEAM_[0-5]:[01]:\d+`, id) | ||||
| 	if err != nil { | ||||
| 		return SteamId(0), err | ||||
| 	} | ||||
| 	if valid { | ||||
| 		id = strings.Replace(id, "STEAM_", "", -1) // remove STEAM_ | ||||
| 		splitid := strings.Split(id, ":")          // split 0:1:00000000 into 0 1 00000000 | ||||
| 		universe, _ := strconv.ParseInt(splitid[0], 10, 32) | ||||
| 		if universe == 0 { //EUniverse_Invalid | ||||
| 			universe = 1 //EUniverse_Public | ||||
| 		} | ||||
| 		authServer, _ := strconv.ParseUint(splitid[1], 10, 32) | ||||
| 		accId, _ := strconv.ParseUint(splitid[2], 10, 32) | ||||
| 		accountType := int32(1) //EAccountType_Individual | ||||
| 		accountId := (uint32(accId) << 1) | uint32(authServer) | ||||
| 		return NewIdAdv(uint32(accountId), 1, int32(universe), accountType), nil | ||||
| 	} else { | ||||
| 		newid, err := strconv.ParseUint(id, 10, 64) | ||||
| 		if err != nil { | ||||
| 			return SteamId(0), err | ||||
| 		} | ||||
| 		return SteamId(newid), nil | ||||
| 	} | ||||
| 	return SteamId(0), errors.New(fmt.Sprintf("Invalid SteamId: %s\n", id)) | ||||
| } | ||||
|  | ||||
| func NewIdAdv(accountId, instance uint32, universe int32, accountType int32) SteamId { | ||||
| 	s := SteamId(0) | ||||
| 	s = s.SetAccountId(accountId) | ||||
| 	s = s.SetAccountInstance(instance) | ||||
| 	s = s.SetAccountUniverse(universe) | ||||
| 	s = s.SetAccountType(accountType) | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| func (s SteamId) ToUint64() uint64 { | ||||
| 	return uint64(s) | ||||
| } | ||||
|  | ||||
| func (s SteamId) ToString() string { | ||||
| 	return strconv.FormatUint(uint64(s), 10) | ||||
| } | ||||
|  | ||||
| func (s SteamId) String() string { | ||||
| 	switch s.GetAccountType() { | ||||
| 	case 0: // EAccountType_Invalid | ||||
| 		fallthrough | ||||
| 	case 1: // EAccountType_Individual | ||||
| 		if s.GetAccountUniverse() <= 1 { // EUniverse_Public | ||||
| 			return fmt.Sprintf("STEAM_0:%d:%d", s.GetAccountId()&1, s.GetAccountId()>>1) | ||||
| 		} else { | ||||
| 			return fmt.Sprintf("STEAM_%d:%d:%d", s.GetAccountUniverse(), s.GetAccountId()&1, s.GetAccountId()>>1) | ||||
| 		} | ||||
| 	default: | ||||
| 		return strconv.FormatUint(uint64(s), 10) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (s SteamId) get(offset uint, mask uint64) uint64 { | ||||
| 	return (uint64(s) >> offset) & mask | ||||
| } | ||||
|  | ||||
| func (s SteamId) set(offset uint, mask, value uint64) SteamId { | ||||
| 	return SteamId((uint64(s) & ^(mask << offset)) | (value&mask)<<offset) | ||||
| } | ||||
|  | ||||
| func (s SteamId) GetAccountId() uint32 { | ||||
| 	return uint32(s.get(0, 0xFFFFFFFF)) | ||||
| } | ||||
|  | ||||
| func (s SteamId) SetAccountId(id uint32) SteamId { | ||||
| 	return s.set(0, 0xFFFFFFFF, uint64(id)) | ||||
| } | ||||
|  | ||||
| func (s SteamId) GetAccountInstance() uint32 { | ||||
| 	return uint32(s.get(32, 0xFFFFF)) | ||||
| } | ||||
|  | ||||
| func (s SteamId) SetAccountInstance(value uint32) SteamId { | ||||
| 	return s.set(32, 0xFFFFF, uint64(value)) | ||||
| } | ||||
|  | ||||
| func (s SteamId) GetAccountType() int32 { | ||||
| 	return int32(s.get(52, 0xF)) | ||||
| } | ||||
|  | ||||
| func (s SteamId) SetAccountType(t int32) SteamId { | ||||
| 	return s.set(52, 0xF, uint64(t)) | ||||
| } | ||||
|  | ||||
| func (s SteamId) GetAccountUniverse() int32 { | ||||
| 	return int32(s.get(56, 0xF)) | ||||
| } | ||||
|  | ||||
| func (s SteamId) SetAccountUniverse(universe int32) SteamId { | ||||
| 	return s.set(56, 0xF, uint64(universe)) | ||||
| } | ||||
|  | ||||
| //used to fix the Clan SteamId to a Chat SteamId | ||||
| func (s SteamId) ClanToChat() SteamId { | ||||
| 	if s.GetAccountType() == int32(7) { //EAccountType_Clan | ||||
| 		s = s.SetAccountInstance(uint32(Clan)) | ||||
| 		s = s.SetAccountType(8) //EAccountType_Chat | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| //used to fix the Chat SteamId to a Clan SteamId | ||||
| func (s SteamId) ChatToClan() SteamId { | ||||
| 	if s.GetAccountType() == int32(8) { //EAccountType_Chat | ||||
| 		s = s.SetAccountInstance(0) | ||||
| 		s = s.SetAccountType(int32(7)) //EAccountType_Clan | ||||
| 	} | ||||
| 	return s | ||||
| } | ||||
							
								
								
									
										51
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/econ.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/econ.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| package protocol | ||||
|  | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| type MsgGCSetItemPosition struct { | ||||
| 	AssetId, Position uint64 | ||||
| } | ||||
|  | ||||
| func (m *MsgGCSetItemPosition) Serialize(w io.Writer) error { | ||||
| 	return binary.Write(w, binary.LittleEndian, m) | ||||
| } | ||||
|  | ||||
| type MsgGCCraft struct { | ||||
| 	Recipe   int16 // -2 = wildcard | ||||
| 	numItems int16 | ||||
| 	Items    []uint64 | ||||
| } | ||||
|  | ||||
| func (m *MsgGCCraft) Serialize(w io.Writer) error { | ||||
| 	m.numItems = int16(len(m.Items)) | ||||
| 	return binary.Write(w, binary.LittleEndian, m) | ||||
| } | ||||
|  | ||||
| type MsgGCDeleteItem struct { | ||||
| 	ItemId uint64 | ||||
| } | ||||
|  | ||||
| func (m *MsgGCDeleteItem) Serialize(w io.Writer) error { | ||||
| 	return binary.Write(w, binary.LittleEndian, m.ItemId) | ||||
| } | ||||
|  | ||||
| type MsgGCNameItem struct { | ||||
| 	Tool, Target uint64 | ||||
| 	Name         string | ||||
| } | ||||
|  | ||||
| func (m *MsgGCNameItem) Serialize(w io.Writer) error { | ||||
| 	err := binary.Write(w, binary.LittleEndian, m.Tool) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	err = binary.Write(w, binary.LittleEndian, m.Target) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	_, err = w.Write([]byte(m.Name)) | ||||
| 	return err | ||||
| } | ||||
							
								
								
									
										3676
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3676
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/base.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1815
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/econ.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1815
									
								
								vendor/github.com/Philipp15b/go-steam/tf2/protocol/protobuf/econ.pb.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user