forked from lug/matterbridge
		
	Compare commits
	
		
			136 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | dc2aed698d | ||
|   | 37c350f19f | ||
|   | 9e03fcf162 | ||
|   | 8d4521c1df | ||
|   | 9226252336 | ||
|   | f4fb83e787 | ||
|   | e7fcb25107 | ||
|   | 5a85258f74 | ||
|   | 2f7df2df43 | ||
|   | ad3a753718 | ||
|   | e45c551880 | ||
|   | e59d338d4e | ||
|   | 7a86044f7a | ||
|   | 8b98f605bc | ||
|   | 7c773ebae0 | ||
|   | e84417430d | ||
|   | 5a8d7b5f6d | ||
|   | cfb8107138 | ||
|   | 43bd779fb7 | ||
|   | 7f9a400776 | ||
|   | ce1c5873ac | ||
|   | 85ff1995fd | ||
|   | b963f83c6a | ||
|   | f6297ebbb0 | ||
|   | a5259f56c5 | ||
|   | 3f75ed9c18 | ||
|   | 49ece51167 | ||
|   | e77c3eb20a | ||
|   | 59b2a5f8d0 | ||
|   | 28710d0bc7 | ||
|   | ad4d461606 | ||
|   | 67905089ba | ||
|   | f2483af561 | ||
|   | c28b87641e | ||
|   | f8e6a69d6e | ||
|   | 54216cec4b | ||
|   | 12989bbd99 | ||
|   | 38d09dba2e | ||
|   | fafd0c68e9 | ||
|   | 41195c8e48 | ||
|   | a97804548e | ||
|   | ba653c0841 | ||
|   | 5b191f78a0 | ||
|   | 83ef61287e | ||
|   | 3527e09bc5 | ||
|   | ddc5b3268f | ||
|   | 22307b1934 | ||
|   | bd97357f8d | ||
|   | 10dab1366e | ||
|   | 52fc94c1fe | ||
|   | c1c7961dd6 | ||
|   | d3eef051b1 | ||
|   | 57654df81e | ||
|   | 0f791d7a9a | ||
|   | 58779e0d65 | ||
|   | 4ac361b5fd | ||
|   | 1e2f27c061 | ||
|   | 0302e4da82 | ||
|   | dc8743e0c0 | ||
|   | cc5ce3d5ae | ||
|   | caaf6f3012 | ||
|   | c5de8fd1cc | ||
|   | c9f23869e3 | ||
|   | 61208c0e35 | ||
|   | dcffc74255 | ||
|   | 23e23be1a6 | ||
|   | 710427248a | ||
|   | a868042de2 | ||
|   | 15296cd8b4 | ||
|   | 717023245f | ||
|   | 320be5bffa | ||
|   | 778abea2d9 | ||
|   | 835a1ac3a6 | ||
|   | 20a7ef33f1 | ||
|   | e72612c7ff | ||
|   | 04e0f001b0 | ||
|   | 5db24aa901 | ||
|   | aec5e3d77b | ||
|   | 335ddf8db5 | ||
|   | 4abaf2b236 | ||
|   | 183d212431 | ||
|   | 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 | 
							
								
								
									
										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.  | Please answer the following questions.  | ||||||
|  |  | ||||||
| ### Which version of matterbridge are you using? | ### Which version of matterbridge are you using? | ||||||
|   | |||||||
							
								
								
									
										49
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | language: go | ||||||
|  | go: | ||||||
|  |     #- 1.7.x | ||||||
|  |     - 1.9.x | ||||||
|  |       # - tip | ||||||
|  |  | ||||||
|  | # we have everything vendored | ||||||
|  | install: true | ||||||
|  |  | ||||||
|  | env: | ||||||
|  |     - GOOS=linux GOARCH=amd64 | ||||||
|  |       #    - GOOS=windows GOARCH=amd64 | ||||||
|  |       #- GOOS=linux GOARCH=arm | ||||||
|  |  | ||||||
|  | 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: | ||||||
|  |   - MY_VERSION=$(git describe --tags) | ||||||
|  |   - 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: | ||||||
|  |   - 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 | ||||||
|  |   - /bin/bash ci/bintray.sh | ||||||
|  |   #- golint -set_exit_status $PKGS     # one last linter | ||||||
|  |  | ||||||
|  | deploy: | ||||||
|  |   provider: bintray | ||||||
|  |   file: ci/deploy.json | ||||||
|  |   user: 42wim | ||||||
|  |   key: | ||||||
|  |      secure: "CeXXe6JOmt7HYR81MdWLua0ltQHhDdkIeRGBFbgd7hkb1wi8eF9DgpAcQrTso8NIlHNZmSAP46uhFgsRvkuezzX0ygalZ7DCJyAyn3sAMEh+UQSHV1WGThRehTtidqRGjetzsIGSwdrJOWil+XTfbO1Z8DGzfakhSuAZka8CM4BAoe3YeP9rYK8h+84x0GHfczvsLtXZ3mWLvQuwe4pK6+ItBCUg0ae7O7ZUpWHy0xQQkkWztY/6RAzXfaG7DuGjIw+20fhx3WOXRNpHCtZ6Bc3qERCpk0s1HhlQWlrN9wDaFTBWYwlvSnNgvxxMbNXJ6RrRJ0l0bA7FUswYwyroxhzrGLdzWDg8dHaQkypocngdalfhpsnoO9j3ApJhomUFJ3UoEq5nOGRUrKn8MPi+dP0zE4kNQ3e4VNa1ufNrvfpWolMg3xh8OXuhQdD5wIM5zFAbRJLqWSCVAjPq4DDPecmvXBOlIial7oa312lN5qnBnUjvAcxszZ+FUyDHT1Grxzna4tMwxY9obPzZUzm7359AOCCwIQFVB8GLqD2nwIstcXS0zGRz+fhviPipHuBa02q5bGUZwmkvrSNab0s8Jo7pCrel2Rz3nWPKaiCfq2WjbW1CLheSMkOQrjsdUd1hhbqNWFPUjJPInTc77NAKCfm5runv5uyowRLh4NNd0sI=" | ||||||
							
								
								
									
										115
									
								
								README-0.6.md
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								README-0.6.md
									
									
									
									
									
								
							| @@ -1,115 +0,0 @@ | |||||||
| # matterbridge |  | ||||||
|  |  | ||||||
| Simple bridge between mattermost, IRC, XMPP, Gitter and Slack |  | ||||||
|  |  | ||||||
| * Relays public channel messages between mattermost, IRC, XMPP, Gitter and Slack. Pick and mix. |  | ||||||
| * Supports multiple channels. |  | ||||||
| * Matterbridge can also work with private groups on your mattermost. |  | ||||||
|  |  | ||||||
| Look at [matterbridge.conf.sample] (https://github.com/42wim/matterbridge/blob/master/matterbridge.conf.sample) for documentation and an example. |  | ||||||
|  |  | ||||||
| ## Changelog |  | ||||||
| Since v0.6.1 support for XMPP, Gitter and Slack is added. More details in [changelog.md] (https://github.com/42wim/matterbridge/blob/master/changelog.md) |  | ||||||
|  |  | ||||||
| ## Requirements: |  | ||||||
| Accounts to one of the supported bridges |  | ||||||
| * [Mattermost] (https://github.com/mattermost/platform/) |  | ||||||
| * [IRC] (http://www.mirc.com/servers.html) |  | ||||||
| * [XMPP] (https://jabber.org) |  | ||||||
| * [Gitter] (https://gitter.im) |  | ||||||
| * [Slack] (https://www.slack.com) |  | ||||||
|  |  | ||||||
| ## binaries |  | ||||||
| Binaries can be found [here] (https://github.com/42wim/matterbridge/releases/) |  | ||||||
| * For use with mattermost 3.3.0+ [v0.6.1](https://github.com/42wim/matterircd/releases/tag/v0.6.1) |  | ||||||
| * For use with mattermost 3.0.0-3.2.0 [v0.5.0](https://github.com/42wim/matterircd/releases/tag/v0.5.0) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Docker |  | ||||||
| Create your matterbridge.conf file locally eg in ```/tmp/matterbridge.conf``` |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| docker run -ti -v /tmp/matterbridge.conf:/matterbridge.conf 42wim/matterbridge:0.6.1 |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## Compatibility |  | ||||||
| ### Mattermost  |  | ||||||
| * Matterbridge v0.6.1 works with mattermost 3.3.0 and higher [3.3.0 release](https://github.com/mattermost/platform/releases/tag/v3.3.0) |  | ||||||
| * Matterbridge v0.5.0 works with mattermost 3.0.0 - 3.2.0 [3.2.0 release](https://github.com/mattermost/platform/releases/tag/v3.2.0) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| #### Webhooks version |  | ||||||
| * Configured incoming/outgoing [webhooks](https://www.mattermost.org/webhooks/) on your mattermost instance. |  | ||||||
|  |  | ||||||
| #### Plus (API) version |  | ||||||
| * A dedicated user(bot) on your mattermost instance. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## 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) |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| cd $GOPATH |  | ||||||
| go get github.com/42wim/matterbridge |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| You should now have matterbridge binary in the bin directory: |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| $ ls bin/ |  | ||||||
| matterbridge |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## running |  | ||||||
| 1) Copy the matterbridge.conf.sample to matterbridge.conf in the same directory as the matterbridge binary.   |  | ||||||
| 2) Edit matterbridge.conf with the settings for your environment. See below for more config information.   |  | ||||||
| 3) Now you can run matterbridge.  |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| Usage of ./matterbridge: |  | ||||||
|   -conf string |  | ||||||
|         config file (default "matterbridge.conf") |  | ||||||
|   -debug |  | ||||||
|         enable debug |  | ||||||
|   -plus |  | ||||||
|         running using API instead of webhooks (deprecated, set Plus flag in [general] config) |  | ||||||
|   -version |  | ||||||
|         show version |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ## config |  | ||||||
| ### matterbridge |  | ||||||
| matterbridge looks for matterbridge.conf in current directory. (use -conf to specify another file) |  | ||||||
|  |  | ||||||
| Look at [matterbridge.conf.sample] (https://github.com/42wim/matterbridge/blob/master/matterbridge.conf.sample) for an example. |  | ||||||
|  |  | ||||||
| ### mattermost |  | ||||||
| #### webhooks version |  | ||||||
| You'll have to configure the incoming and outgoing webhooks.  |  | ||||||
|  |  | ||||||
| * incoming webhooks |  | ||||||
| Go to "account settings" - integrations - "incoming webhooks".   |  | ||||||
| Choose a channel at "Add a new incoming webhook", this will create a webhook URL right below.   |  | ||||||
| This URL should be set in the matterbridge.conf in the [mattermost] section (see above)   |  | ||||||
|  |  | ||||||
| * outgoing webhooks |  | ||||||
| Go to "account settings" - integrations - "outgoing webhooks".   |  | ||||||
| Choose a channel (the same as the one from incoming webhooks) and fill in the address and port of the server matterbridge will run on.   |  | ||||||
|  |  | ||||||
| e.g. http://192.168.1.1:9999 (192.168.1.1:9999 is the BindAddress specified in [mattermost] section of matterbridge.conf) |  | ||||||
|  |  | ||||||
| #### plus version |  | ||||||
| You'll have to create a new dedicated user on your mattermost instance. |  | ||||||
| Specify the login and password in [mattermost] section of matterbridge.conf |  | ||||||
|  |  | ||||||
| ## FAQ |  | ||||||
| Please look at [matterbridge.conf.sample] (https://github.com/42wim/matterbridge/blob/master/matterbridge.conf.sample) for more information first.  |  | ||||||
| ### Mattermost doesn't show the IRC nicks |  | ||||||
| If you're running the webhooks version, this can be fixed by either: |  | ||||||
| * enabling "override usernames". See [mattermost documentation](http://docs.mattermost.com/developer/webhooks-incoming.html#enabling-incoming-webhooks) |  | ||||||
| * setting ```PrefixMessagesWithNick``` to ```true``` in ```mattermost``` section of your matterbridge.conf. |  | ||||||
|  |  | ||||||
| If you're running the plus version you'll need to: |  | ||||||
| * setting ```PrefixMessagesWithNick``` to ```true``` in ```mattermost``` section of your matterbridge.conf. |  | ||||||
|  |  | ||||||
| Also look at the ```RemoteNickFormat``` setting. |  | ||||||
							
								
								
									
										60
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,17 +1,24 @@ | |||||||
| # matterbridge | # matterbridge | ||||||
| [](https://gitter.im/42wim/matterbridge) [](https://webchat.freenode.net/?channels=matterbridgechat) [](https://discord.gg/AkKPtrQ) [](https://riot.im/app/#/room/#matterbridge:matrix.org) | 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) [](https://framateam.org/signup_user_complete/?id=tfqm33ggop8x3qgu4boeieta6e)  | ||||||
|  |  | ||||||
|  | [](https://github.com/42wim/matterbridge/releases/latest) [](https://bintray.com/42wim/nightly/Matterbridge/_latestVersion) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 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 | # Table of Contents | ||||||
|  * [Features](#features) |  * [Features](#features) | ||||||
|  * [Requirements](#requirements) |  * [Requirements](#requirements) | ||||||
|  |  * [Screenshots](https://github.com/42wim/matterbridge/wiki/) | ||||||
|  * [Installing](#installing) |  * [Installing](#installing) | ||||||
|    * [Binaries](#binaries) |    * [Binaries](#binaries) | ||||||
|    * [Building](#building) |    * [Building](#building) | ||||||
|  * [Configuration](#configuration) |  * [Configuration](#configuration) | ||||||
|  |    * [Howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) | ||||||
|    * [Examples](#examples)  |    * [Examples](#examples)  | ||||||
|  * [Running](#running) |  * [Running](#running) | ||||||
|    * [Docker](#docker) |    * [Docker](#docker) | ||||||
| @@ -20,7 +27,8 @@ Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, R | |||||||
|  * [Thanks](#thanks) |  * [Thanks](#thanks) | ||||||
|  |  | ||||||
| # Features | # 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. | * 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. | * 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). | * The bridge is now a gateway which has support multiple in and out bridges. (and supports multiple gateways). | ||||||
| @@ -28,7 +36,7 @@ Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, R | |||||||
|  |  | ||||||
| # Requirements | # Requirements | ||||||
| Accounts to one of the supported bridges | Accounts to one of the supported bridges | ||||||
| * [Mattermost](https://github.com/mattermost/platform/) 3.5.x - 3.10.x | * [Mattermost](https://github.com/mattermost/platform/) 3.8.x - 3.10.x, 4.0.x - 4.1.x | ||||||
| * [IRC](http://www.mirc.com/servers.html) | * [IRC](http://www.mirc.com/servers.html) | ||||||
| * [XMPP](https://jabber.org) | * [XMPP](https://jabber.org) | ||||||
| * [Gitter](https://gitter.im) | * [Gitter](https://gitter.im) | ||||||
| @@ -38,14 +46,18 @@ Accounts to one of the supported bridges | |||||||
| * [Hipchat](https://www.hipchat.com) | * [Hipchat](https://www.hipchat.com) | ||||||
| * [Rocket.chat](https://rocket.chat) | * [Rocket.chat](https://rocket.chat) | ||||||
| * [Matrix](https://matrix.org) | * [Matrix](https://matrix.org) | ||||||
|  | * [Steam](https://store.steampowered.com/) | ||||||
|  |  | ||||||
|  | # Screenshots | ||||||
|  | See https://github.com/42wim/matterbridge/wiki | ||||||
|  |  | ||||||
| # Installing | # Installing | ||||||
| ## Binaries | ## Binaries | ||||||
| Binaries can be found [here] (https://github.com/42wim/matterbridge/releases/) | * Latest stable release [v1.1.0](https://github.com/42wim/matterbridge/releases/latest) | ||||||
| * Latest stable release [v0.14.0](https://github.com/42wim/matterbridge/releases/latest) | * Development releases (follows master) can be downloaded [here](https://dl.bintray.com/42wim/nightly/)   | ||||||
|  |  | ||||||
| ## Building | ## 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) | Go 1.7+ 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) | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| cd $GOPATH | cd $GOPATH | ||||||
| @@ -60,10 +72,13 @@ matterbridge | |||||||
| ``` | ``` | ||||||
|  |  | ||||||
| # Configuration | # Configuration | ||||||
| * [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample) for documentation and an example. | ## Basic configuration | ||||||
| * [matterbridge.toml.simple](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.simple) for a simple example. | 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) | ### Bridge mattermost (off-topic) - irc (#testing) | ||||||
| ``` | ``` | ||||||
| [irc] | [irc] | ||||||
| @@ -73,12 +88,12 @@ matterbridge | |||||||
|  |  | ||||||
| [mattermost] | [mattermost] | ||||||
|     [mattermost.work] |     [mattermost.work] | ||||||
|     useAPI=true |  | ||||||
|     Server="yourmattermostserver.tld" |     Server="yourmattermostserver.tld" | ||||||
|     Team="yourteam" |     Team="yourteam" | ||||||
|     Login="yourlogin" |     Login="yourlogin" | ||||||
|     Password="yourpass" |     Password="yourpass" | ||||||
|     PrefixMessagesWithNick=true |     PrefixMessagesWithNick=true | ||||||
|  |     RemoteNickFormat="[{PROTOCOL}] <{NICK}> " | ||||||
|  |  | ||||||
| [[gateway]] | [[gateway]] | ||||||
| name="mygateway" | name="mygateway" | ||||||
| @@ -96,7 +111,6 @@ enable=true | |||||||
| ``` | ``` | ||||||
| [slack] | [slack] | ||||||
| [slack.test] | [slack.test] | ||||||
| useAPI=true |  | ||||||
| Token="yourslacktoken" | Token="yourslacktoken" | ||||||
| PrefixMessagesWithNick=true | PrefixMessagesWithNick=true | ||||||
|  |  | ||||||
| @@ -122,11 +136,8 @@ RemoteNickFormat="[{PROTOCOL}/{BRIDGE}] <{NICK}> " | |||||||
| ``` | ``` | ||||||
|  |  | ||||||
| # Running | # Running | ||||||
| 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```)    |  | ||||||
|  |  | ||||||
| (Matterbridge will only look for the config file in your current directory, if it isn't there specify -conf "/path/toyour/matterbridge.toml") | See [howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) for a step by step walkthrough for creating your configuration. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| Usage of ./matterbridge: | Usage of ./matterbridge: | ||||||
| @@ -151,18 +162,11 @@ See [changelog.md](https://github.com/42wim/matterbridge/blob/master/changelog.m | |||||||
|  |  | ||||||
| # FAQ | # FAQ | ||||||
|  |  | ||||||
| Please look at [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample) for more information first. | See [FAQ](https://github.com/42wim/matterbridge/wiki/FAQ) | ||||||
|  |  | ||||||
| ## Mattermost doesn't show the IRC nicks |  | ||||||
| If you're running the webhooks version, this can be fixed by either: |  | ||||||
| * enabling "override usernames". See [mattermost documentation](http://docs.mattermost.com/developer/webhooks-incoming.html#enabling-incoming-webhooks) |  | ||||||
| * setting ```PrefixMessagesWithNick``` to ```true``` in ```mattermost``` section of your matterbridge.toml. |  | ||||||
|  |  | ||||||
| If you're running the API version you'll need to: |  | ||||||
| * setting ```PrefixMessagesWithNick``` to ```true``` in ```mattermost``` section of your matterbridge.toml. |  | ||||||
|  |  | ||||||
| Also look at the ```RemoteNickFormat``` setting. |  | ||||||
|  |  | ||||||
|  | Want to tip ?  | ||||||
|  | * eth: 0xb3f9b5387c66ad6be892bcb7bbc67862f3abc16f | ||||||
|  | * btc: 1N7cKHj5SfqBHBzDJ6kad4BzeqUBBS2zhs | ||||||
|  |  | ||||||
| # Thanks | # Thanks | ||||||
| Matterbridge wouldn't exist without these libraries: | Matterbridge wouldn't exist without these libraries: | ||||||
| @@ -174,6 +178,6 @@ Matterbridge wouldn't exist without these libraries: | |||||||
| * mattermost - https://github.com/mattermost/platform | * mattermost - https://github.com/mattermost/platform | ||||||
| * matrix - https://github.com/matrix-org/gomatrix | * matrix - https://github.com/matrix-org/gomatrix | ||||||
| * slack - https://github.com/nlopes/slack | * slack - https://github.com/nlopes/slack | ||||||
|  | * steam - https://github.com/Philipp15b/go-steam | ||||||
| * telegram - https://github.com/go-telegram-bot-api/telegram-bot-api | * telegram - https://github.com/go-telegram-bot-api/telegram-bot-api | ||||||
| * xmpp - https://github.com/mattn/go-xmpp | * xmpp - https://github.com/mattn/go-xmpp | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ type Api struct { | |||||||
| type ApiMessage struct { | type ApiMessage struct { | ||||||
| 	Text     string `json:"text"` | 	Text     string `json:"text"` | ||||||
| 	Username string `json:"username"` | 	Username string `json:"username"` | ||||||
|  | 	UserID   string `json:"userid"` | ||||||
| 	Avatar   string `json:"avatar"` | 	Avatar   string `json:"avatar"` | ||||||
| 	Gateway  string `json:"gateway"` | 	Gateway  string `json:"gateway"` | ||||||
| } | } | ||||||
| @@ -60,16 +61,16 @@ func (b *Api) Disconnect() error { | |||||||
| 	return nil | 	return nil | ||||||
|  |  | ||||||
| } | } | ||||||
| func (b *Api) JoinChannel(channel string) error { | func (b *Api) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	return nil | 	return nil | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Api) Send(msg config.Message) error { | func (b *Api) Send(msg config.Message) (string, error) { | ||||||
| 	b.Lock() | 	b.Lock() | ||||||
| 	defer b.Unlock() | 	defer b.Unlock() | ||||||
| 	b.Messages.Enqueue(&msg) | 	b.Messages.Enqueue(&msg) | ||||||
| 	return nil | 	return "", nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Api) handlePostMessage(c echo.Context) error { | func (b *Api) handlePostMessage(c echo.Context) error { | ||||||
| @@ -81,6 +82,7 @@ func (b *Api) handlePostMessage(c echo.Context) error { | |||||||
| 	b.Remote <- config.Message{ | 	b.Remote <- config.Message{ | ||||||
| 		Text:     message.Text, | 		Text:     message.Text, | ||||||
| 		Username: message.Username, | 		Username: message.Username, | ||||||
|  | 		UserID:   message.UserID, | ||||||
| 		Channel:  "api", | 		Channel:  "api", | ||||||
| 		Avatar:   message.Avatar, | 		Avatar:   message.Avatar, | ||||||
| 		Account:  b.Account, | 		Account:  b.Account, | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ import ( | |||||||
| 	"github.com/42wim/matterbridge/bridge/mattermost" | 	"github.com/42wim/matterbridge/bridge/mattermost" | ||||||
| 	"github.com/42wim/matterbridge/bridge/rocketchat" | 	"github.com/42wim/matterbridge/bridge/rocketchat" | ||||||
| 	"github.com/42wim/matterbridge/bridge/slack" | 	"github.com/42wim/matterbridge/bridge/slack" | ||||||
|  | 	"github.com/42wim/matterbridge/bridge/steam" | ||||||
| 	"github.com/42wim/matterbridge/bridge/telegram" | 	"github.com/42wim/matterbridge/bridge/telegram" | ||||||
| 	"github.com/42wim/matterbridge/bridge/xmpp" | 	"github.com/42wim/matterbridge/bridge/xmpp" | ||||||
| 	log "github.com/Sirupsen/logrus" | 	log "github.com/Sirupsen/logrus" | ||||||
| @@ -18,9 +19,9 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type Bridger interface { | type Bridger interface { | ||||||
| 	Send(msg config.Message) error | 	Send(msg config.Message) (string, error) | ||||||
| 	Connect() error | 	Connect() error | ||||||
| 	JoinChannel(channel string) error | 	JoinChannel(channel config.ChannelInfo) error | ||||||
| 	Disconnect() error | 	Disconnect() error | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -75,6 +76,9 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid | |||||||
| 	case "matrix": | 	case "matrix": | ||||||
| 		b.Config = cfg.Matrix[name] | 		b.Config = cfg.Matrix[name] | ||||||
| 		b.Bridger = bmatrix.New(cfg.Matrix[name], bridge.Account, c) | 		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": | 	case "api": | ||||||
| 		b.Config = cfg.Api[name] | 		b.Config = cfg.Api[name] | ||||||
| 		b.Bridger = api.New(cfg.Api[name], bridge.Account, c) | 		b.Bridger = api.New(cfg.Api[name], bridge.Account, c) | ||||||
| @@ -84,23 +88,14 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid | |||||||
|  |  | ||||||
| func (b *Bridge) JoinChannels() error { | func (b *Bridge) JoinChannels() error { | ||||||
| 	err := b.joinChannels(b.Channels, b.Joined) | 	err := b.joinChannels(b.Channels, b.Joined) | ||||||
| 	if err != nil { | 	return err | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	return nil |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bridge) joinChannels(channels map[string]config.ChannelInfo, exists map[string]bool) error { | func (b *Bridge) joinChannels(channels map[string]config.ChannelInfo, exists map[string]bool) error { | ||||||
| 	mychannel := "" |  | ||||||
| 	for ID, channel := range channels { | 	for ID, channel := range channels { | ||||||
| 		if !exists[ID] { | 		if !exists[ID] { | ||||||
| 			mychannel = channel.Name |  | ||||||
| 			log.Infof("%s: joining %s (%s)", b.Account, channel.Name, ID) | 			log.Infof("%s: joining %s (%s)", b.Account, channel.Name, ID) | ||||||
| 			if b.Protocol == "irc" && channel.Options.Key != "" { | 			err := b.JoinChannel(channel) | ||||||
| 				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 { | 			if err != nil { | ||||||
| 				return err | 				return err | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -13,18 +13,21 @@ const ( | |||||||
| 	EVENT_JOIN_LEAVE      = "join_leave" | 	EVENT_JOIN_LEAVE      = "join_leave" | ||||||
| 	EVENT_FAILURE         = "failure" | 	EVENT_FAILURE         = "failure" | ||||||
| 	EVENT_REJOIN_CHANNELS = "rejoin_channels" | 	EVENT_REJOIN_CHANNELS = "rejoin_channels" | ||||||
|  | 	EVENT_USER_ACTION     = "user_action" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type Message struct { | type Message struct { | ||||||
| 	Text      string    `json:"text"` | 	Text      string    `json:"text"` | ||||||
| 	Channel   string    `json:"channel"` | 	Channel   string    `json:"channel"` | ||||||
| 	Username  string    `json:"username"` | 	Username  string    `json:"username"` | ||||||
|  | 	UserID    string    `json:"userid"` // userid on the bridge | ||||||
| 	Avatar    string    `json:"avatar"` | 	Avatar    string    `json:"avatar"` | ||||||
| 	Account   string    `json:"account"` | 	Account   string    `json:"account"` | ||||||
| 	Event     string    `json:"event"` | 	Event     string    `json:"event"` | ||||||
| 	Protocol  string    `json:"protocol"` | 	Protocol  string    `json:"protocol"` | ||||||
| 	Gateway   string    `json:"gateway"` | 	Gateway   string    `json:"gateway"` | ||||||
| 	Timestamp time.Time `json:"timestamp"` | 	Timestamp time.Time `json:"timestamp"` | ||||||
|  | 	ID        string    `json:"id"` | ||||||
| } | } | ||||||
|  |  | ||||||
| type ChannelInfo struct { | type ChannelInfo struct { | ||||||
| @@ -32,18 +35,20 @@ type ChannelInfo struct { | |||||||
| 	Account     string | 	Account     string | ||||||
| 	Direction   string | 	Direction   string | ||||||
| 	ID          string | 	ID          string | ||||||
| 	GID         map[string]bool |  | ||||||
| 	SameChannel map[string]bool | 	SameChannel map[string]bool | ||||||
| 	Options     ChannelOptions | 	Options     ChannelOptions | ||||||
| } | } | ||||||
|  |  | ||||||
| type Protocol struct { | type Protocol struct { | ||||||
| 	BindAddress            string // mattermost, slack | 	AuthCode               string // steam | ||||||
|  | 	BindAddress            string // mattermost, slack // DEPRECATED | ||||||
| 	Buffer                 int    // api | 	Buffer                 int    // api | ||||||
|  | 	Charset                string // irc | ||||||
| 	EditSuffix             string // mattermost, slack, discord, telegram, gitter | 	EditSuffix             string // mattermost, slack, discord, telegram, gitter | ||||||
| 	EditDisable            bool   // mattermost, slack, discord, telegram, gitter | 	EditDisable            bool   // mattermost, slack, discord, telegram, gitter | ||||||
| 	IconURL                string // mattermost, slack | 	IconURL                string // mattermost, slack | ||||||
| 	IgnoreNicks            string // all protocols | 	IgnoreNicks            string // all protocols | ||||||
|  | 	IgnoreMessages         string // all protocols | ||||||
| 	Jid                    string // xmpp | 	Jid                    string // xmpp | ||||||
| 	Login                  string // mattermost, matrix | 	Login                  string // mattermost, matrix | ||||||
| 	Muc                    string // xmpp | 	Muc                    string // xmpp | ||||||
| @@ -65,18 +70,25 @@ type Protocol struct { | |||||||
| 	RemoteNickFormat       string // all protocols | 	RemoteNickFormat       string // all protocols | ||||||
| 	Server                 string // IRC,mattermost,XMPP,discord | 	Server                 string // IRC,mattermost,XMPP,discord | ||||||
| 	ShowJoinPart           bool   // all protocols | 	ShowJoinPart           bool   // all protocols | ||||||
|  | 	ShowEmbeds             bool   // discord | ||||||
| 	SkipTLSVerify          bool   // IRC, mattermost | 	SkipTLSVerify          bool   // IRC, mattermost | ||||||
| 	Team                   string // mattermost | 	Team                   string // mattermost | ||||||
| 	Token                  string // gitter, slack, discord, api | 	Token                  string // gitter, slack, discord, api | ||||||
| 	URL                    string // mattermost, slack, matrix | 	URL                    string // mattermost, slack // DEPRECATED | ||||||
| 	UseAPI                 bool   // mattermost, slack | 	UseAPI                 bool   // mattermost, slack | ||||||
| 	UseSASL                bool   // IRC | 	UseSASL                bool   // IRC | ||||||
| 	UseTLS                 bool   // IRC | 	UseTLS                 bool   // IRC | ||||||
| 	UseFirstName           bool   // telegram | 	UseFirstName           bool   // telegram | ||||||
|  | 	UseUserName            bool   // discord | ||||||
|  | 	UseInsecureURL         bool   // telegram | ||||||
|  | 	WebhookBindAddress     string // mattermost, slack | ||||||
|  | 	WebhookURL             string // mattermost, slack | ||||||
|  | 	WebhookUse             string // mattermost, slack, discord | ||||||
| } | } | ||||||
|  |  | ||||||
| type ChannelOptions struct { | type ChannelOptions struct { | ||||||
| 	Key string // irc | 	Key        string // irc | ||||||
|  | 	WebhookURL string // discord | ||||||
| } | } | ||||||
|  |  | ||||||
| type Bridge struct { | type Bridge struct { | ||||||
| @@ -107,6 +119,7 @@ type Config struct { | |||||||
| 	Mattermost         map[string]Protocol | 	Mattermost         map[string]Protocol | ||||||
| 	Matrix             map[string]Protocol | 	Matrix             map[string]Protocol | ||||||
| 	Slack              map[string]Protocol | 	Slack              map[string]Protocol | ||||||
|  | 	Steam              map[string]Protocol | ||||||
| 	Gitter             map[string]Protocol | 	Gitter             map[string]Protocol | ||||||
| 	Xmpp               map[string]Protocol | 	Xmpp               map[string]Protocol | ||||||
| 	Discord            map[string]Protocol | 	Discord            map[string]Protocol | ||||||
| @@ -122,6 +135,28 @@ func NewConfig(cfgfile string) *Config { | |||||||
| 	if _, err := toml.DecodeFile(cfgfile, &cfg); err != nil { | 	if _, err := toml.DecodeFile(cfgfile, &cfg); err != nil { | ||||||
| 		log.Fatal(err) | 		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 | 	return &cfg | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -172,3 +207,17 @@ func GetIconURL(msg *Message, cfg *Protocol) string { | |||||||
| 	iconURL = strings.Replace(iconURL, "{PROTOCOL}", protocol, -1) | 	iconURL = strings.Replace(iconURL, "{PROTOCOL}", protocol, -1) | ||||||
| 	return iconURL | 	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) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -10,15 +10,18 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type bdiscord struct { | type bdiscord struct { | ||||||
| 	c             *discordgo.Session | 	c              *discordgo.Session | ||||||
| 	Config        *config.Protocol | 	Config         *config.Protocol | ||||||
| 	Remote        chan config.Message | 	Remote         chan config.Message | ||||||
| 	Account       string | 	Account        string | ||||||
| 	Channels      []*discordgo.Channel | 	Channels       []*discordgo.Channel | ||||||
| 	Nick          string | 	Nick           string | ||||||
| 	UseChannelID  bool | 	UseChannelID   bool | ||||||
| 	userMemberMap map[string]*discordgo.Member | 	userMemberMap  map[string]*discordgo.Member | ||||||
| 	guildID       string | 	guildID        string | ||||||
|  | 	webhookID      string | ||||||
|  | 	webhookToken   string | ||||||
|  | 	channelInfoMap map[string]*config.ChannelInfo | ||||||
| 	sync.RWMutex | 	sync.RWMutex | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -35,12 +38,22 @@ func New(cfg config.Protocol, account string, c chan config.Message) *bdiscord { | |||||||
| 	b.Remote = c | 	b.Remote = c | ||||||
| 	b.Account = account | 	b.Account = account | ||||||
| 	b.userMemberMap = make(map[string]*discordgo.Member) | 	b.userMemberMap = make(map[string]*discordgo.Member) | ||||||
|  | 	b.channelInfoMap = make(map[string]*config.ChannelInfo) | ||||||
|  | 	if b.Config.WebhookURL != "" { | ||||||
|  | 		flog.Debug("Configuring Discord Incoming Webhook") | ||||||
|  | 		b.webhookID, b.webhookToken = b.splitURL(b.Config.WebhookURL) | ||||||
|  | 	} | ||||||
| 	return b | 	return b | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *bdiscord) Connect() error { | func (b *bdiscord) Connect() error { | ||||||
| 	var err error | 	var err error | ||||||
| 	flog.Info("Connecting") | 	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 ") { | 	if !strings.HasPrefix(b.Config.Token, "Bot ") { | ||||||
| 		b.Config.Token = "Bot " + b.Config.Token | 		b.Config.Token = "Bot " + b.Config.Token | ||||||
| 	} | 	} | ||||||
| @@ -58,7 +71,7 @@ func (b *bdiscord) Connect() error { | |||||||
| 		flog.Debugf("%#v", err) | 		flog.Debugf("%#v", err) | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	guilds, err := b.c.UserGuilds() | 	guilds, err := b.c.UserGuilds(100, "", "") | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		flog.Debugf("%#v", err) | 		flog.Debugf("%#v", err) | ||||||
| 		return err | 		return err | ||||||
| @@ -86,23 +99,57 @@ func (b *bdiscord) Disconnect() error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *bdiscord) JoinChannel(channel string) error { | func (b *bdiscord) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	idcheck := strings.Split(channel, "ID:") | 	b.channelInfoMap[channel.ID] = &channel | ||||||
|  | 	idcheck := strings.Split(channel.Name, "ID:") | ||||||
| 	if len(idcheck) > 1 { | 	if len(idcheck) > 1 { | ||||||
| 		b.UseChannelID = true | 		b.UseChannelID = true | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *bdiscord) Send(msg config.Message) error { | func (b *bdiscord) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
| 	channelID := b.getChannelID(msg.Channel) | 	channelID := b.getChannelID(msg.Channel) | ||||||
| 	if channelID == "" { | 	if channelID == "" { | ||||||
| 		flog.Errorf("Could not find channelID for %v", msg.Channel) | 		flog.Errorf("Could not find channelID for %v", msg.Channel) | ||||||
| 		return nil | 		return "", nil | ||||||
| 	} | 	} | ||||||
| 	b.c.ChannelMessageSend(channelID, msg.Username+msg.Text) | 	if msg.Event == config.EVENT_USER_ACTION { | ||||||
| 	return nil | 		msg.Text = "_" + msg.Text + "_" | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	wID := b.webhookID | ||||||
|  | 	wToken := b.webhookToken | ||||||
|  | 	if ci, ok := b.channelInfoMap[msg.Channel+b.Account]; ok { | ||||||
|  | 		if ci.Options.WebhookURL != "" { | ||||||
|  | 			wID, wToken = b.splitURL(ci.Options.WebhookURL) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if wID == "" { | ||||||
|  | 		flog.Debugf("Broadcasting using token (API)") | ||||||
|  | 		if msg.ID != "" { | ||||||
|  | 			_, err := b.c.ChannelMessageEdit(channelID, msg.ID, msg.Username+msg.Text) | ||||||
|  | 			return msg.ID, err | ||||||
|  | 		} | ||||||
|  | 		res, err := b.c.ChannelMessageSend(channelID, msg.Username+msg.Text) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return "", err | ||||||
|  | 		} | ||||||
|  | 		return res.ID, err | ||||||
|  | 	} | ||||||
|  | 	flog.Debugf("Broadcasting using Webhook") | ||||||
|  | 	err := b.c.WebhookExecute( | ||||||
|  | 		wID, | ||||||
|  | 		wToken, | ||||||
|  | 		true, | ||||||
|  | 		&discordgo.WebhookParams{ | ||||||
|  | 			Content:   msg.Text, | ||||||
|  | 			Username:  msg.Username, | ||||||
|  | 			AvatarURL: msg.Avatar, | ||||||
|  | 		}) | ||||||
|  | 	return "", err | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdate) { | func (b *bdiscord) messageUpdate(s *discordgo.Session, m *discordgo.MessageUpdate) { | ||||||
| @@ -122,27 +169,61 @@ func (b *bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat | |||||||
| 	if m.Author.Username == b.Nick { | 	if m.Author.Username == b.Nick { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  | 	// if using webhooks, do not relay if it's ours | ||||||
|  | 	if b.useWebhook() && m.Author.Bot && b.isWebhookID(m.Author.ID) { | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if len(m.Attachments) > 0 { | 	if len(m.Attachments) > 0 { | ||||||
| 		for _, attach := range m.Attachments { | 		for _, attach := range m.Attachments { | ||||||
| 			m.Content = m.Content + "\n" + attach.URL | 			m.Content = m.Content + "\n" + attach.URL | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	if m.Content == "" { |  | ||||||
|  | 	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() | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	rmsg := config.Message{Account: b.Account, Avatar: "https://cdn.discordapp.com/avatars/" + m.Author.ID + "/" + m.Author.Avatar + ".jpg", | ||||||
|  | 		UserID: m.Author.ID, ID: m.ID} | ||||||
|  |  | ||||||
|  | 	rmsg.Channel = b.getChannelName(m.ChannelID) | ||||||
|  | 	if b.UseChannelID { | ||||||
|  | 		rmsg.Channel = "ID:" + m.ChannelID | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if !b.Config.UseUserName { | ||||||
|  | 		rmsg.Username = b.getNick(m.Author) | ||||||
|  | 	} else { | ||||||
|  | 		rmsg.Username = m.Author.Username | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if b.Config.ShowEmbeds && m.Message.Embeds != nil { | ||||||
|  | 		for _, embed := range m.Message.Embeds { | ||||||
|  | 			text = text + "embed: " + embed.Title + " - " + embed.Description + " - " + embed.URL + "\n" | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// no empty messages | ||||||
|  | 	if text == "" { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	text, ok := b.replaceAction(text) | ||||||
|  | 	if ok { | ||||||
|  | 		rmsg.Event = config.EVENT_USER_ACTION | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	rmsg.Text = text | ||||||
| 	flog.Debugf("Sending message from %s on %s to gateway", m.Author.Username, b.Account) | 	flog.Debugf("Sending message from %s on %s to gateway", m.Author.Username, b.Account) | ||||||
| 	channelName := b.getChannelName(m.ChannelID) | 	b.Remote <- rmsg | ||||||
| 	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) |  | ||||||
| 	} |  | ||||||
| 	m.Message.Content = b.stripCustomoji(m.Message.Content) |  | ||||||
| 	m.Message.Content = b.replaceChannelMentions(m.Message.Content) |  | ||||||
| 	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"} |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *bdiscord) memberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUpdate) { | func (b *bdiscord) memberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUpdate) { | ||||||
| @@ -169,10 +250,11 @@ func (b *bdiscord) getNick(user *discordgo.User) string { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	// if we didn't find nick, search for it | 	// 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 { | 	if err != nil { | ||||||
| 		return user.Username | 		return user.Username | ||||||
| 	} | 	} | ||||||
|  | 	b.userMemberMap[user.ID] = member | ||||||
| 	// only return if nick is set | 	// only return if nick is set | ||||||
| 	if b.userMemberMap[user.ID].Nick != "" { | 	if b.userMemberMap[user.ID].Nick != "" { | ||||||
| 		return b.userMemberMap[user.ID].Nick | 		return b.userMemberMap[user.ID].Nick | ||||||
| @@ -233,8 +315,53 @@ func (b *bdiscord) replaceChannelMentions(text string) string { | |||||||
| 	return text | 	return text | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (b *bdiscord) replaceAction(text string) (string, bool) { | ||||||
|  | 	if strings.HasPrefix(text, "_") && strings.HasSuffix(text, "_") { | ||||||
|  | 		return strings.Replace(text, "_", "", -1), true | ||||||
|  | 	} | ||||||
|  | 	return text, false | ||||||
|  | } | ||||||
|  |  | ||||||
| func (b *bdiscord) stripCustomoji(text string) string { | func (b *bdiscord) stripCustomoji(text string) string { | ||||||
| 	// <:doge:302803592035958784> | 	// <:doge:302803592035958784> | ||||||
| 	re := regexp.MustCompile("<(:.*?:)[0-9]+>") | 	re := regexp.MustCompile("<(:.*?:)[0-9]+>") | ||||||
| 	return re.ReplaceAllString(text, `$1`) | 	return re.ReplaceAllString(text, `$1`) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // splitURL splits a webhookURL and returns the id and token | ||||||
|  | func (b *bdiscord) splitURL(url string) (string, string) { | ||||||
|  | 	webhookURLSplit := strings.Split(url, "/") | ||||||
|  | 	return webhookURLSplit[len(webhookURLSplit)-2], webhookURLSplit[len(webhookURLSplit)-1] | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // useWebhook returns true if we have a webhook defined somewhere | ||||||
|  | func (b *bdiscord) useWebhook() bool { | ||||||
|  | 	if b.Config.WebhookURL != "" { | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
|  | 	for _, channel := range b.channelInfoMap { | ||||||
|  | 		if channel.Options.WebhookURL != "" { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // isWebhookID returns true if the specified id is used in a defined webhook | ||||||
|  | func (b *bdiscord) isWebhookID(id string) bool { | ||||||
|  | 	if b.Config.WebhookURL != "" { | ||||||
|  | 		wID, _ := b.splitURL(b.Config.WebhookURL) | ||||||
|  | 		if wID == id { | ||||||
|  | 			return true | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	for _, channel := range b.channelInfoMap { | ||||||
|  | 		if channel.Options.WebhookURL != "" { | ||||||
|  | 			wID, _ := b.splitURL(channel.Options.WebhookURL) | ||||||
|  | 			if wID == id { | ||||||
|  | 				return true | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return false | ||||||
|  | } | ||||||
|   | |||||||
| @@ -2,9 +2,9 @@ package bgitter | |||||||
|  |  | ||||||
| import ( | import ( | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"github.com/42wim/go-gitter" | ||||||
| 	"github.com/42wim/matterbridge/bridge/config" | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
| 	log "github.com/Sirupsen/logrus" | 	log "github.com/Sirupsen/logrus" | ||||||
| 	"github.com/sromku/go-gitter" |  | ||||||
| 	"strings" | 	"strings" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -13,6 +13,7 @@ type Bgitter struct { | |||||||
| 	Config  *config.Protocol | 	Config  *config.Protocol | ||||||
| 	Remote  chan config.Message | 	Remote  chan config.Message | ||||||
| 	Account string | 	Account string | ||||||
|  | 	User    *gitter.User | ||||||
| 	Users   []gitter.User | 	Users   []gitter.User | ||||||
| 	Rooms   []gitter.Room | 	Rooms   []gitter.Room | ||||||
| } | } | ||||||
| @@ -36,7 +37,7 @@ func (b *Bgitter) Connect() error { | |||||||
| 	var err error | 	var err error | ||||||
| 	flog.Info("Connecting") | 	flog.Info("Connecting") | ||||||
| 	b.c = gitter.New(b.Config.Token) | 	b.c = gitter.New(b.Config.Token) | ||||||
| 	_, err = b.c.GetUser() | 	b.User, err = b.c.GetUser() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		flog.Debugf("%#v", err) | 		flog.Debugf("%#v", err) | ||||||
| 		return err | 		return err | ||||||
| @@ -51,10 +52,10 @@ func (b *Bgitter) Disconnect() error { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bgitter) JoinChannel(channel string) error { | func (b *Bgitter) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	roomID, err := b.c.GetRoomId(channel) | 	roomID, err := b.c.GetRoomId(channel.Name) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("Could not find roomID for %v. Please create the room on gitter.im", channel) | 		return fmt.Errorf("Could not find roomID for %v. Please create the room on gitter.im", channel.Name) | ||||||
| 	} | 	} | ||||||
| 	room, err := b.c.GetRoom(roomID) | 	room, err := b.c.GetRoom(roomID) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -78,11 +79,16 @@ func (b *Bgitter) JoinChannel(channel string) error { | |||||||
| 		for event := range stream.Event { | 		for event := range stream.Event { | ||||||
| 			switch ev := event.Data.(type) { | 			switch ev := event.Data.(type) { | ||||||
| 			case *gitter.MessageReceived: | 			case *gitter.MessageReceived: | ||||||
| 				// check for ZWSP to see if it's not an echo | 				if ev.Message.From.ID != b.User.ID { | ||||||
| 				if !strings.HasSuffix(ev.Message.Text, "") { |  | ||||||
| 					flog.Debugf("Sending message from %s on %s to gateway", ev.Message.From.Username, b.Account) | 					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, | 					rmsg := 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, | ||||||
|  | 						ID: ev.Message.ID} | ||||||
|  | 					if strings.HasPrefix(ev.Message.Text, "@"+ev.Message.From.Username) { | ||||||
|  | 						rmsg.Event = config.EVENT_USER_ACTION | ||||||
|  | 						rmsg.Text = strings.Replace(rmsg.Text, "@"+ev.Message.From.Username+" ", "", -1) | ||||||
|  | 					} | ||||||
|  | 					b.Remote <- rmsg | ||||||
| 				} | 				} | ||||||
| 			case *gitter.GitterConnectionClosed: | 			case *gitter.GitterConnectionClosed: | ||||||
| 				flog.Errorf("connection with gitter closed for room %s", room) | 				flog.Errorf("connection with gitter closed for room %s", room) | ||||||
| @@ -92,15 +98,26 @@ func (b *Bgitter) JoinChannel(channel string) error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bgitter) Send(msg config.Message) error { | func (b *Bgitter) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
| 	roomID := b.getRoomID(msg.Channel) | 	roomID := b.getRoomID(msg.Channel) | ||||||
| 	if roomID == "" { | 	if roomID == "" { | ||||||
| 		flog.Errorf("Could not find roomID for %v", msg.Channel) | 		flog.Errorf("Could not find roomID for %v", msg.Channel) | ||||||
| 		return nil | 		return "", nil | ||||||
| 	} | 	} | ||||||
| 	// add ZWSP because gitter echoes our own messages | 	if msg.ID != "" { | ||||||
| 	return b.c.SendMessage(roomID, msg.Username+msg.Text+" ") | 		flog.Debugf("updating message with id %s", msg.ID) | ||||||
|  | 		_, err := b.c.UpdateMessage(roomID, msg.ID, msg.Username+msg.Text) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return "", err | ||||||
|  | 		} | ||||||
|  | 		return "", nil | ||||||
|  | 	} | ||||||
|  | 	resp, err := b.c.SendMessage(roomID, msg.Username+msg.Text) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", err | ||||||
|  | 	} | ||||||
|  | 	return resp.ID, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bgitter) getRoomID(channel string) string { | func (b *Bgitter) getRoomID(channel string) string { | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ import ( | |||||||
| 	"strings" | 	"strings" | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | /* | ||||||
| func tableformatter(nicks []string, nicksPerRow int, continued bool) string { | func tableformatter(nicks []string, nicksPerRow int, continued bool) string { | ||||||
| 	result := "|IRC users" | 	result := "|IRC users" | ||||||
| 	if continued { | 	if continued { | ||||||
| @@ -29,6 +30,7 @@ func tableformatter(nicks []string, nicksPerRow int, continued bool) string { | |||||||
| 	} | 	} | ||||||
| 	return result | 	return result | ||||||
| } | } | ||||||
|  | */ | ||||||
|  |  | ||||||
| func plainformatter(nicks []string, nicksPerRow int) string { | func plainformatter(nicks []string, nicksPerRow int) string { | ||||||
| 	return strings.Join(nicks, ", ") + " currently on IRC" | 	return strings.Join(nicks, ", ") + " currently on IRC" | ||||||
|   | |||||||
| @@ -1,12 +1,18 @@ | |||||||
| package birc | package birc | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"bytes" | ||||||
| 	"crypto/tls" | 	"crypto/tls" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"github.com/42wim/go-ircevent" | ||||||
| 	"github.com/42wim/matterbridge/bridge/config" | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
| 	log "github.com/Sirupsen/logrus" | 	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" | 	ircm "github.com/sorcix/irc" | ||||||
| 	"github.com/thoj/go-ircevent" | 	"io" | ||||||
|  | 	"io/ioutil" | ||||||
| 	"regexp" | 	"regexp" | ||||||
| 	"sort" | 	"sort" | ||||||
| 	"strconv" | 	"strconv" | ||||||
| @@ -15,14 +21,15 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type Birc struct { | type Birc struct { | ||||||
| 	i         *irc.Connection | 	i               *irc.Connection | ||||||
| 	Nick      string | 	Nick            string | ||||||
| 	names     map[string][]string | 	names           map[string][]string | ||||||
| 	Config    *config.Protocol | 	Config          *config.Protocol | ||||||
| 	Remote    chan config.Message | 	Remote          chan config.Message | ||||||
| 	connected chan struct{} | 	connected       chan struct{} | ||||||
| 	Local     chan config.Message // local queue for flood control | 	Local           chan config.Message // local queue for flood control | ||||||
| 	Account   string | 	Account         string | ||||||
|  | 	FirstConnection bool | ||||||
| } | } | ||||||
|  |  | ||||||
| var flog *log.Entry | var flog *log.Entry | ||||||
| @@ -49,6 +56,7 @@ func New(cfg config.Protocol, account string, c chan config.Message) *Birc { | |||||||
| 	if b.Config.MessageLength == 0 { | 	if b.Config.MessageLength == 0 { | ||||||
| 		b.Config.MessageLength = 400 | 		b.Config.MessageLength = 400 | ||||||
| 	} | 	} | ||||||
|  | 	b.FirstConnection = true | ||||||
| 	return b | 	return b | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -74,6 +82,8 @@ func (b *Birc) Connect() error { | |||||||
| 	i.SASLLogin = b.Config.NickServNick | 	i.SASLLogin = b.Config.NickServNick | ||||||
| 	i.SASLPassword = b.Config.NickServPassword | 	i.SASLPassword = b.Config.NickServPassword | ||||||
| 	i.TLSConfig = &tls.Config{InsecureSkipVerify: b.Config.SkipTLSVerify} | 	i.TLSConfig = &tls.Config{InsecureSkipVerify: b.Config.SkipTLSVerify} | ||||||
|  | 	i.KeepAlive = time.Minute | ||||||
|  | 	i.PingFreq = time.Minute | ||||||
| 	if b.Config.Password != "" { | 	if b.Config.Password != "" { | ||||||
| 		i.Password = b.Config.Password | 		i.Password = b.Config.Password | ||||||
| 	} | 	} | ||||||
| @@ -90,6 +100,14 @@ func (b *Birc) Connect() error { | |||||||
| 		return fmt.Errorf("connection timed out") | 		return fmt.Errorf("connection timed out") | ||||||
| 	} | 	} | ||||||
| 	i.Debug = false | 	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() | 	go b.doSend() | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| @@ -100,19 +118,34 @@ func (b *Birc) Disconnect() error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Birc) JoinChannel(channel string) error { | func (b *Birc) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	b.i.Join(channel) | 	if channel.Options.Key != "" { | ||||||
|  | 		flog.Debugf("using key %s for channel %s", channel.Options.Key, channel.Name) | ||||||
|  | 		b.i.Join(channel.Name + " " + channel.Options.Key) | ||||||
|  | 	} else { | ||||||
|  | 		b.i.Join(channel.Name) | ||||||
|  | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Birc) Send(msg config.Message) error { | func (b *Birc) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
| 	if msg.Account == b.Account { |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 	if strings.HasPrefix(msg.Text, "!") { | 	if strings.HasPrefix(msg.Text, "!") { | ||||||
| 		b.Command(&msg) | 		b.Command(&msg) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	if b.Config.Charset != "" { | ||||||
|  | 		buf := new(bytes.Buffer) | ||||||
|  | 		w, err := charset.NewWriter(b.Config.Charset, buf) | ||||||
|  | 		if err != nil { | ||||||
|  | 			flog.Errorf("charset from utf-8 conversion failed: %s", err) | ||||||
|  | 			return "", err | ||||||
|  | 		} | ||||||
|  | 		fmt.Fprintf(w, msg.Text) | ||||||
|  | 		w.Close() | ||||||
|  | 		msg.Text = buf.String() | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	for _, text := range strings.Split(msg.Text, "\n") { | 	for _, text := range strings.Split(msg.Text, "\n") { | ||||||
| 		if len(text) > b.Config.MessageLength { | 		if len(text) > b.Config.MessageLength { | ||||||
| 			text = text[:b.Config.MessageLength] + " <message clipped>" | 			text = text[:b.Config.MessageLength] + " <message clipped>" | ||||||
| @@ -121,20 +154,24 @@ func (b *Birc) Send(msg config.Message) error { | |||||||
| 			if len(b.Local) == b.Config.MessageQueue-1 { | 			if len(b.Local) == b.Config.MessageQueue-1 { | ||||||
| 				text = text + " <message clipped>" | 				text = text + " <message clipped>" | ||||||
| 			} | 			} | ||||||
| 			b.Local <- config.Message{Text: text, Username: msg.Username, Channel: msg.Channel} | 			b.Local <- config.Message{Text: text, Username: msg.Username, Channel: msg.Channel, Event: msg.Event} | ||||||
| 		} else { | 		} else { | ||||||
| 			flog.Debugf("flooding, dropping message (queue at %d)", len(b.Local)) | 			flog.Debugf("flooding, dropping message (queue at %d)", len(b.Local)) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return "", nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Birc) doSend() { | func (b *Birc) doSend() { | ||||||
| 	rate := time.Millisecond * time.Duration(b.Config.MessageDelay) | 	rate := time.Millisecond * time.Duration(b.Config.MessageDelay) | ||||||
| 	throttle := time.Tick(rate) | 	throttle := time.NewTicker(rate) | ||||||
| 	for msg := range b.Local { | 	for msg := range b.Local { | ||||||
| 		<-throttle | 		<-throttle.C | ||||||
| 		b.i.Privmsg(msg.Channel, msg.Username+msg.Text) | 		if msg.Event == config.EVENT_USER_ACTION { | ||||||
|  | 			b.i.Action(msg.Channel, msg.Username+msg.Text) | ||||||
|  | 		} else { | ||||||
|  | 			b.i.Privmsg(msg.Channel, msg.Username+msg.Text) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -192,8 +229,11 @@ func (b *Birc) handleJoinPart(event *irc.Event) { | |||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account) | 	if event.Nick != b.Nick { | ||||||
| 	b.Remote <- config.Message{Username: "system", Text: event.Nick + " " + strings.ToLower(event.Code) + "s", Channel: channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE} | 		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) | 	flog.Debugf("handle %#v", event) | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -214,6 +254,11 @@ func (b *Birc) handleOther(event *irc.Event) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Birc) handlePrivMsg(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 | 	// don't forward queries to the bot | ||||||
| 	if event.Arguments[0] == b.Nick { | 	if event.Arguments[0] == b.Nick { | ||||||
| 		return | 		return | ||||||
| @@ -222,17 +267,47 @@ func (b *Birc) handlePrivMsg(event *irc.Event) { | |||||||
| 	if event.Nick == b.Nick { | 	if event.Nick == b.Nick { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  | 	rmsg := config.Message{Username: event.Nick, Channel: event.Arguments[0], Account: b.Account, UserID: event.User + "@" + event.Host} | ||||||
| 	flog.Debugf("handlePrivMsg() %s %s %#v", event.Nick, event.Message(), event) | 	flog.Debugf("handlePrivMsg() %s %s %#v", event.Nick, event.Message(), event) | ||||||
| 	msg := "" | 	msg := "" | ||||||
| 	if event.Code == "CTCP_ACTION" { | 	if event.Code == "CTCP_ACTION" { | ||||||
| 		msg = event.Nick + " " | 		//	msg = event.Nick + " " | ||||||
|  | 		rmsg.Event = config.EVENT_USER_ACTION | ||||||
| 	} | 	} | ||||||
| 	msg += event.Message() | 	msg += event.Message() | ||||||
| 	// strip IRC colors | 	// strip IRC colors | ||||||
| 	re := regexp.MustCompile(`[[:cntrl:]](\d+,|)\d+`) | 	re := regexp.MustCompile(`[[:cntrl:]](\d+,|)\d+`) | ||||||
| 	msg = re.ReplaceAllString(msg, "") | 	msg = re.ReplaceAllString(msg, "") | ||||||
|  |  | ||||||
|  | 	var r io.Reader | ||||||
|  | 	var err error | ||||||
|  | 	mycharset := b.Config.Charset | ||||||
|  | 	if mycharset == "" { | ||||||
|  | 		// 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) | ||||||
|  | 		mycharset = result.Charset | ||||||
|  | 		// if we're not sure, just pick ISO-8859-1 | ||||||
|  | 		if result.Confidence < 80 { | ||||||
|  | 			mycharset = "ISO-8859-1" | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	r, err = charset.NewReader(mycharset, 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) | 	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} | 	rmsg.Text = msg | ||||||
|  | 	b.Remote <- rmsg | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Birc) handleTopicWhoTime(event *irc.Event) { | func (b *Birc) handleTopicWhoTime(event *irc.Event) { | ||||||
|   | |||||||
| @@ -63,23 +63,28 @@ func (b *Bmatrix) Disconnect() error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bmatrix) JoinChannel(channel string) error { | func (b *Bmatrix) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	resp, err := b.mc.JoinRoom(channel, "", nil) | 	resp, err := b.mc.JoinRoom(channel.Name, "", nil) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	b.Lock() | 	b.Lock() | ||||||
| 	b.RoomMap[resp.RoomID] = channel | 	b.RoomMap[resp.RoomID] = channel.Name | ||||||
| 	b.Unlock() | 	b.Unlock() | ||||||
| 	return err | 	return err | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bmatrix) Send(msg config.Message) error { | func (b *Bmatrix) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
| 	channel := b.getRoomID(msg.Channel) | 	channel := b.getRoomID(msg.Channel) | ||||||
| 	flog.Debugf("Sending to channel %s", channel) | 	flog.Debugf("Sending to channel %s", channel) | ||||||
|  | 	if msg.Event == config.EVENT_USER_ACTION { | ||||||
|  | 		b.mc.SendMessageEvent(channel, "m.room.message", | ||||||
|  | 			matrix.TextMessage{"m.emote", msg.Username + msg.Text}) | ||||||
|  | 		return "", nil | ||||||
|  | 	} | ||||||
| 	b.mc.SendText(channel, msg.Username+msg.Text) | 	b.mc.SendText(channel, msg.Username+msg.Text) | ||||||
| 	return nil | 	return "", nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bmatrix) getRoomID(channel string) string { | func (b *Bmatrix) getRoomID(channel string) string { | ||||||
| @@ -95,7 +100,7 @@ func (b *Bmatrix) getRoomID(channel string) string { | |||||||
| func (b *Bmatrix) handlematrix() error { | func (b *Bmatrix) handlematrix() error { | ||||||
| 	syncer := b.mc.Syncer.(*matrix.DefaultSyncer) | 	syncer := b.mc.Syncer.(*matrix.DefaultSyncer) | ||||||
| 	syncer.OnEventType("m.room.message", func(ev *matrix.Event) { | 	syncer.OnEventType("m.room.message", func(ev *matrix.Event) { | ||||||
| 		if ev.Content["msgtype"].(string) == "m.text" && ev.Sender != b.UserID { | 		if (ev.Content["msgtype"].(string) == "m.text" || ev.Content["msgtype"].(string) == "m.notice" || ev.Content["msgtype"].(string) == "m.emote") && ev.Sender != b.UserID { | ||||||
| 			b.RLock() | 			b.RLock() | ||||||
| 			channel, ok := b.RoomMap[ev.RoomID] | 			channel, ok := b.RoomMap[ev.RoomID] | ||||||
| 			b.RUnlock() | 			b.RUnlock() | ||||||
| @@ -108,8 +113,12 @@ func (b *Bmatrix) handlematrix() error { | |||||||
| 				re := regexp.MustCompile("(.*?):.*") | 				re := regexp.MustCompile("(.*?):.*") | ||||||
| 				username = re.ReplaceAllString(username, `$1`) | 				username = re.ReplaceAllString(username, `$1`) | ||||||
| 			} | 			} | ||||||
|  | 			rmsg := config.Message{Username: username, Text: ev.Content["body"].(string), Channel: channel, Account: b.Account, UserID: ev.Sender} | ||||||
|  | 			if ev.Content["msgtype"].(string) == "m.emote" { | ||||||
|  | 				rmsg.Event = config.EVENT_USER_ACTION | ||||||
|  | 			} | ||||||
| 			flog.Debugf("Sending message from %s on %s to gateway", ev.Sender, b.Account) | 			flog.Debugf("Sending message from %s on %s to gateway", ev.Sender, b.Account) | ||||||
| 			b.Remote <- config.Message{Username: username, Text: ev.Content["body"].(string), Channel: channel, Account: b.Account} | 			b.Remote <- rmsg | ||||||
| 		} | 		} | ||||||
| 		flog.Debugf("Received: %#v", ev) | 		flog.Debugf("Received: %#v", ev) | ||||||
| 	}) | 	}) | ||||||
|   | |||||||
| @@ -1,10 +1,13 @@ | |||||||
| package bmattermost | package bmattermost | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"errors" | ||||||
|  | 	"fmt" | ||||||
| 	"github.com/42wim/matterbridge/bridge/config" | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
| 	"github.com/42wim/matterbridge/matterclient" | 	"github.com/42wim/matterbridge/matterclient" | ||||||
| 	"github.com/42wim/matterbridge/matterhook" | 	"github.com/42wim/matterbridge/matterhook" | ||||||
| 	log "github.com/Sirupsen/logrus" | 	log "github.com/Sirupsen/logrus" | ||||||
|  | 	"strings" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type MMhook struct { | type MMhook struct { | ||||||
| @@ -12,15 +15,16 @@ type MMhook struct { | |||||||
| } | } | ||||||
|  |  | ||||||
| type MMapi struct { | type MMapi struct { | ||||||
| 	mc            *matterclient.MMClient | 	mc    *matterclient.MMClient | ||||||
| 	mmMap         map[string]string | 	mmMap map[string]string | ||||||
| 	mmIgnoreNicks []string |  | ||||||
| } | } | ||||||
|  |  | ||||||
| type MMMessage struct { | type MMMessage struct { | ||||||
| 	Text     string | 	Text     string | ||||||
| 	Channel  string | 	Channel  string | ||||||
| 	Username string | 	Username string | ||||||
|  | 	UserID   string | ||||||
|  | 	ID       string | ||||||
| } | } | ||||||
|  |  | ||||||
| type Bmattermost struct { | type Bmattermost struct { | ||||||
| @@ -28,7 +32,6 @@ type Bmattermost struct { | |||||||
| 	MMapi | 	MMapi | ||||||
| 	Config  *config.Protocol | 	Config  *config.Protocol | ||||||
| 	Remote  chan config.Message | 	Remote  chan config.Message | ||||||
| 	name    string |  | ||||||
| 	TeamId  string | 	TeamId  string | ||||||
| 	Account string | 	Account string | ||||||
| } | } | ||||||
| @@ -54,27 +57,72 @@ func (b *Bmattermost) Command(cmd string) string { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bmattermost) Connect() error { | func (b *Bmattermost) Connect() error { | ||||||
| 	if !b.Config.UseAPI { | 	if b.Config.WebhookBindAddress != "" { | ||||||
| 		flog.Info("Connecting webhooks") | 		if b.Config.WebhookURL != "" { | ||||||
| 		b.mh = matterhook.New(b.Config.URL, | 			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)") | ||||||
|  | 			err := b.apiLogin() | ||||||
|  | 			if err != nil { | ||||||
|  | 				return err | ||||||
|  | 			} | ||||||
|  | 		} 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, | 			matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||||
| 				BindAddress: b.Config.BindAddress}) | 				DisableServer: true}) | ||||||
| 	} else { | 		if b.Config.Token != "" { | ||||||
| 		b.mc = matterclient.New(b.Config.Login, b.Config.Password, | 			flog.Info("Connecting using token (receiving)") | ||||||
| 			b.Config.Team, b.Config.Server) | 			err := b.apiLogin() | ||||||
| 		b.mc.SkipTLSVerify = b.Config.SkipTLSVerify | 			if err != nil { | ||||||
| 		b.mc.NoTLS = b.Config.NoTLS | 				return err | ||||||
| 		flog.Infof("Connecting %s (team: %s) on %s", b.Config.Login, b.Config.Team, b.Config.Server) | 			} | ||||||
| 		err := b.mc.Login() | 			go b.handleMatter() | ||||||
|  | 		} else 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.Token != "" { | ||||||
|  | 		flog.Info("Connecting using token (sending and receiving)") | ||||||
|  | 		err := b.apiLogin() | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			return err | 			return err | ||||||
| 		} | 		} | ||||||
| 		flog.Info("Connection succeeded") | 		go b.handleMatter() | ||||||
| 		b.TeamId = b.mc.GetTeamId() | 	} else if b.Config.Login != "" { | ||||||
| 		go b.mc.WsReceiver() | 		flog.Info("Connecting using login/password (sending and receiving)") | ||||||
| 		go b.mc.StatusLoop() | 		err := b.apiLogin() | ||||||
|  | 		if err != nil { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 		go b.handleMatter() | ||||||
|  | 	} | ||||||
|  | 	if b.Config.WebhookBindAddress == "" && b.Config.WebhookURL == "" && b.Config.Login == "" && b.Config.Token == "" { | ||||||
|  | 		return errors.New("No connection method found. See that you have WebhookBindAddress, WebhookURL or Token/Login/Password/Server/Team configured.") | ||||||
| 	} | 	} | ||||||
| 	go b.handleMatter() |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -82,16 +130,23 @@ func (b *Bmattermost) Disconnect() error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bmattermost) JoinChannel(channel string) error { | func (b *Bmattermost) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	// we can only join channels using the API | 	// 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, "")) | 		id := b.mc.GetChannelId(channel.Name, "") | ||||||
|  | 		if id == "" { | ||||||
|  | 			return fmt.Errorf("Could not find channel ID for channel %s", channel.Name) | ||||||
|  | 		} | ||||||
|  | 		return b.mc.JoinChannel(id) | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bmattermost) Send(msg config.Message) error { | func (b *Bmattermost) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
|  | 	if msg.Event == config.EVENT_USER_ACTION { | ||||||
|  | 		msg.Text = "*" + msg.Text + "*" | ||||||
|  | 	} | ||||||
| 	nick := msg.Username | 	nick := msg.Username | ||||||
| 	message := msg.Text | 	message := msg.Text | ||||||
| 	channel := msg.Channel | 	channel := msg.Channel | ||||||
| @@ -99,7 +154,7 @@ func (b *Bmattermost) Send(msg config.Message) error { | |||||||
| 	if b.Config.PrefixMessagesWithNick { | 	if b.Config.PrefixMessagesWithNick { | ||||||
| 		message = nick + message | 		message = nick + message | ||||||
| 	} | 	} | ||||||
| 	if !b.Config.UseAPI { | 	if b.Config.WebhookURL != "" { | ||||||
| 		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} | 		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} | ||||||
| 		matterMessage.IconURL = msg.Avatar | 		matterMessage.IconURL = msg.Avatar | ||||||
| 		matterMessage.Channel = channel | 		matterMessage.Channel = channel | ||||||
| @@ -109,25 +164,38 @@ func (b *Bmattermost) Send(msg config.Message) error { | |||||||
| 		err := b.mh.Send(matterMessage) | 		err := b.mh.Send(matterMessage) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			flog.Info(err) | 			flog.Info(err) | ||||||
| 			return err | 			return "", err | ||||||
| 		} | 		} | ||||||
| 		return nil | 		return "", nil | ||||||
| 	} | 	} | ||||||
| 	b.mc.PostMessage(b.mc.GetChannelId(channel, ""), message) | 	if msg.ID != "" { | ||||||
| 	return nil | 		return b.mc.EditMessage(msg.ID, message) | ||||||
|  | 	} | ||||||
|  | 	return b.mc.PostMessage(b.mc.GetChannelId(channel, ""), message) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bmattermost) handleMatter() { | func (b *Bmattermost) handleMatter() { | ||||||
| 	flog.Debugf("Choosing API based Mattermost connection: %t", b.Config.UseAPI) |  | ||||||
| 	mchan := make(chan *MMMessage) | 	mchan := make(chan *MMMessage) | ||||||
| 	if b.Config.UseAPI { | 	if b.Config.WebhookBindAddress != "" { | ||||||
| 		go b.handleMatterClient(mchan) | 		flog.Debugf("Choosing webhooks based receiving") | ||||||
| 	} else { |  | ||||||
| 		go b.handleMatterHook(mchan) | 		go b.handleMatterHook(mchan) | ||||||
|  | 	} else { | ||||||
|  | 		if b.Config.Token != "" { | ||||||
|  | 			flog.Debugf("Choosing token based receiving") | ||||||
|  | 		} else { | ||||||
|  | 			flog.Debugf("Choosing login/password based receiving") | ||||||
|  | 		} | ||||||
|  | 		go b.handleMatterClient(mchan) | ||||||
| 	} | 	} | ||||||
| 	for message := range mchan { | 	for message := range mchan { | ||||||
|  | 		rmsg := config.Message{Username: message.Username, Channel: message.Channel, Account: b.Account, UserID: message.UserID, ID: message.ID} | ||||||
|  | 		text, ok := b.replaceAction(message.Text) | ||||||
|  | 		if ok { | ||||||
|  | 			rmsg.Event = config.EVENT_USER_ACTION | ||||||
|  | 		} | ||||||
|  | 		rmsg.Text = text | ||||||
| 		flog.Debugf("Sending message from %s on %s to gateway", message.Username, b.Account) | 		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 <- rmsg | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -141,20 +209,29 @@ func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) { | |||||||
| 			b.Remote <- config.Message{Username: "system", Text: message.Text, Channel: message.Channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE} | 			b.Remote <- config.Message{Username: "system", Text: message.Text, Channel: message.Channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE} | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  | 		if (message.Raw.Event == "post_edited") && b.Config.EditDisable { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
| 		// do not post our own messages back to irc | 		// do not post our own messages back to irc | ||||||
| 		// only listen to message from our team | 		// only listen to message from our team | ||||||
| 		if (message.Raw.Event == "posted" || message.Raw.Event == "post_edited") && | 		if (message.Raw.Event == "posted" || message.Raw.Event == "post_edited") && | ||||||
| 			b.mc.User.Username != message.Username && message.Raw.Data["team_id"].(string) == b.TeamId { | 			b.mc.User.Username != message.Username && message.Raw.Data["team_id"].(string) == b.TeamId { | ||||||
|  | 			// if the message has reactions don't repost it (for now, until we can correlate reaction with message) | ||||||
|  | 			if message.Post.HasReactions { | ||||||
|  | 				continue | ||||||
|  | 			} | ||||||
| 			flog.Debugf("Receiving from matterclient %#v", message) | 			flog.Debugf("Receiving from matterclient %#v", message) | ||||||
| 			m := &MMMessage{} | 			m := &MMMessage{} | ||||||
|  | 			m.UserID = message.UserID | ||||||
| 			m.Username = message.Username | 			m.Username = message.Username | ||||||
| 			m.Channel = message.Channel | 			m.Channel = message.Channel | ||||||
| 			m.Text = message.Text | 			m.Text = message.Text | ||||||
|  | 			m.ID = message.Post.Id | ||||||
| 			if message.Raw.Event == "post_edited" && !b.Config.EditDisable { | 			if message.Raw.Event == "post_edited" && !b.Config.EditDisable { | ||||||
| 				m.Text = message.Text + b.Config.EditSuffix | 				m.Text = message.Text + b.Config.EditSuffix | ||||||
| 			} | 			} | ||||||
| 			if len(message.Post.FileIds) > 0 { | 			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 | 					m.Text = m.Text + "\n" + link | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| @@ -168,9 +245,39 @@ func (b *Bmattermost) handleMatterHook(mchan chan *MMMessage) { | |||||||
| 		message := b.mh.Receive() | 		message := b.mh.Receive() | ||||||
| 		flog.Debugf("Receiving from matterhook %#v", message) | 		flog.Debugf("Receiving from matterhook %#v", message) | ||||||
| 		m := &MMMessage{} | 		m := &MMMessage{} | ||||||
|  | 		m.UserID = message.UserID | ||||||
| 		m.Username = message.UserName | 		m.Username = message.UserName | ||||||
| 		m.Text = message.Text | 		m.Text = message.Text | ||||||
| 		m.Channel = message.ChannelName | 		m.Channel = message.ChannelName | ||||||
| 		mchan <- m | 		mchan <- m | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (b *Bmattermost) apiLogin() error { | ||||||
|  | 	password := b.Config.Password | ||||||
|  | 	if b.Config.Token != "" { | ||||||
|  | 		password = "MMAUTHTOKEN=" + b.Config.Token | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	b.mc = matterclient.New(b.Config.Login, 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 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (b *Bmattermost) replaceAction(text string) (string, bool) { | ||||||
|  | 	if strings.HasPrefix(text, "*") && strings.HasSuffix(text, "*") { | ||||||
|  | 		return strings.Replace(text, "*", "", -1), true | ||||||
|  | 	} | ||||||
|  | 	return text, false | ||||||
|  | } | ||||||
|   | |||||||
| @@ -16,7 +16,6 @@ type Brocketchat struct { | |||||||
| 	MMhook | 	MMhook | ||||||
| 	Config  *config.Protocol | 	Config  *config.Protocol | ||||||
| 	Remote  chan config.Message | 	Remote  chan config.Message | ||||||
| 	name    string |  | ||||||
| 	Account string | 	Account string | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -41,10 +40,10 @@ func (b *Brocketchat) Command(cmd string) string { | |||||||
|  |  | ||||||
| func (b *Brocketchat) Connect() error { | func (b *Brocketchat) Connect() error { | ||||||
| 	flog.Info("Connecting webhooks") | 	flog.Info("Connecting webhooks") | ||||||
| 	b.mh = matterhook.New(b.Config.URL, | 	b.mh = matterhook.New(b.Config.WebhookURL, | ||||||
| 		matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | 		matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify, | ||||||
| 			DisableServer: true}) | 			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() | 	go b.handleRocketHook() | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| @@ -54,11 +53,11 @@ func (b *Brocketchat) Disconnect() error { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Brocketchat) JoinChannel(channel string) error { | func (b *Brocketchat) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Brocketchat) Send(msg config.Message) error { | func (b *Brocketchat) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
| 	matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} | 	matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} | ||||||
| 	matterMessage.Channel = msg.Channel | 	matterMessage.Channel = msg.Channel | ||||||
| @@ -68,9 +67,9 @@ func (b *Brocketchat) Send(msg config.Message) error { | |||||||
| 	err := b.mh.Send(matterMessage) | 	err := b.mh.Send(matterMessage) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		flog.Info(err) | 		flog.Info(err) | ||||||
| 		return err | 		return "", err | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return "", nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Brocketchat) handleRocketHook() { | func (b *Brocketchat) handleRocketHook() { | ||||||
| @@ -82,6 +81,6 @@ func (b *Brocketchat) handleRocketHook() { | |||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		flog.Debugf("Sending message from %s on %s to gateway", message.UserName, b.Account) | 		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 | package bslack | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"errors" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"github.com/42wim/matterbridge/bridge/config" | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
| 	"github.com/42wim/matterbridge/matterhook" | 	"github.com/42wim/matterbridge/matterhook" | ||||||
| 	log "github.com/Sirupsen/logrus" | 	log "github.com/Sirupsen/logrus" | ||||||
| 	"github.com/nlopes/slack" | 	"github.com/nlopes/slack" | ||||||
|  | 	"html" | ||||||
| 	"regexp" | 	"regexp" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| @@ -15,6 +17,7 @@ type MMMessage struct { | |||||||
| 	Text     string | 	Text     string | ||||||
| 	Channel  string | 	Channel  string | ||||||
| 	Username string | 	Username string | ||||||
|  | 	UserID   string | ||||||
| 	Raw      *slack.MessageEvent | 	Raw      *slack.MessageEvent | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -51,17 +54,52 @@ func (b *Bslack) Command(cmd string) string { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bslack) Connect() error { | func (b *Bslack) Connect() error { | ||||||
| 	flog.Info("Connecting") | 	if b.Config.WebhookBindAddress != "" { | ||||||
| 	if !b.Config.UseAPI { | 		if b.Config.WebhookURL != "" { | ||||||
| 		b.mh = matterhook.New(b.Config.URL, | 			flog.Info("Connecting using webhookurl (sending) and webhookbindaddress (receiving)") | ||||||
| 			matterhook.Config{BindAddress: b.Config.BindAddress}) | 			b.mh = matterhook.New(b.Config.WebhookURL, | ||||||
| 	} else { | 				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.sc = slack.New(b.Config.Token) | ||||||
| 		b.rtm = b.sc.NewRTM() | 		b.rtm = b.sc.NewRTM() | ||||||
| 		go b.rtm.ManageConnection() | 		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 | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -70,14 +108,14 @@ func (b *Bslack) Disconnect() error { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bslack) JoinChannel(channel string) error { | func (b *Bslack) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	// we can only join channels using the API | 	// 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") { | 		if strings.HasPrefix(b.Config.Token, "xoxb") { | ||||||
| 			// TODO check if bot has already joined channel | 			// TODO check if bot has already joined channel | ||||||
| 			return nil | 			return nil | ||||||
| 		} | 		} | ||||||
| 		_, err := b.sc.JoinChannel(channel) | 		_, err := b.sc.JoinChannel(channel.Name) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			if err.Error() != "name_taken" { | 			if err.Error() != "name_taken" { | ||||||
| 				return err | 				return err | ||||||
| @@ -87,15 +125,18 @@ func (b *Bslack) JoinChannel(channel string) error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bslack) Send(msg config.Message) error { | func (b *Bslack) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
|  | 	if msg.Event == config.EVENT_USER_ACTION { | ||||||
|  | 		msg.Text = "_" + msg.Text + "_" | ||||||
|  | 	} | ||||||
| 	nick := msg.Username | 	nick := msg.Username | ||||||
| 	message := msg.Text | 	message := msg.Text | ||||||
| 	channel := msg.Channel | 	channel := msg.Channel | ||||||
| 	if b.Config.PrefixMessagesWithNick { | 	if b.Config.PrefixMessagesWithNick { | ||||||
| 		message = nick + " " + message | 		message = nick + " " + message | ||||||
| 	} | 	} | ||||||
| 	if !b.Config.UseAPI { | 	if b.Config.WebhookURL != "" { | ||||||
| 		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} | 		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL} | ||||||
| 		matterMessage.Channel = channel | 		matterMessage.Channel = channel | ||||||
| 		matterMessage.UserName = nick | 		matterMessage.UserName = nick | ||||||
| @@ -104,16 +145,16 @@ func (b *Bslack) Send(msg config.Message) error { | |||||||
| 		err := b.mh.Send(matterMessage) | 		err := b.mh.Send(matterMessage) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			flog.Info(err) | 			flog.Info(err) | ||||||
| 			return err | 			return "", err | ||||||
| 		} | 		} | ||||||
| 		return nil | 		return "", nil | ||||||
| 	} | 	} | ||||||
| 	schannel, err := b.getChannelByName(channel) | 	schannel, err := b.getChannelByName(channel) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return "", err | ||||||
| 	} | 	} | ||||||
| 	np := slack.NewPostMessageParameters() | 	np := slack.NewPostMessageParameters() | ||||||
| 	if b.Config.PrefixMessagesWithNick == true { | 	if b.Config.PrefixMessagesWithNick { | ||||||
| 		np.AsUser = true | 		np.AsUser = true | ||||||
| 	} | 	} | ||||||
| 	np.Username = nick | 	np.Username = nick | ||||||
| @@ -121,14 +162,21 @@ func (b *Bslack) Send(msg config.Message) error { | |||||||
| 	if msg.Avatar != "" { | 	if msg.Avatar != "" { | ||||||
| 		np.IconURL = msg.Avatar | 		np.IconURL = msg.Avatar | ||||||
| 	} | 	} | ||||||
| 	b.sc.PostMessage(schannel.ID, message, np) | 	np.Attachments = append(np.Attachments, slack.Attachment{CallbackID: "matterbridge"}) | ||||||
|  | 	// replace mentions | ||||||
|  | 	np.LinkNames = 1 | ||||||
|  |  | ||||||
| 	/* | 	// if we have no ID it means we're creating a new message, not updating an existing one | ||||||
| 	   newmsg := b.rtm.NewOutgoingMessage(message, schannel.ID) | 	if msg.ID != "" { | ||||||
| 	   b.rtm.SendMessage(newmsg) | 		ts := strings.Fields(msg.ID) | ||||||
| 	*/ | 		b.sc.UpdateMessage(schannel.ID, ts[1], message) | ||||||
|  | 		return "", nil | ||||||
| 	return nil | 	} | ||||||
|  | 	_, id, err := b.sc.PostMessage(schannel.ID, message, np) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", err | ||||||
|  | 	} | ||||||
|  | 	return "slack " + id, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bslack) getAvatar(user string) string { | func (b *Bslack) getAvatar(user string) string { | ||||||
| @@ -168,24 +216,42 @@ func (b *Bslack) getChannelByID(ID string) (*slack.Channel, error) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bslack) handleSlack() { | func (b *Bslack) handleSlack() { | ||||||
| 	flog.Debugf("Choosing API based slack connection: %t", b.Config.UseAPI) |  | ||||||
| 	mchan := make(chan *MMMessage) | 	mchan := make(chan *MMMessage) | ||||||
| 	if b.Config.UseAPI { | 	if b.Config.WebhookBindAddress != "" { | ||||||
| 		go b.handleSlackClient(mchan) | 		flog.Debugf("Choosing webhooks based receiving") | ||||||
| 	} else { |  | ||||||
| 		go b.handleMatterHook(mchan) | 		go b.handleMatterHook(mchan) | ||||||
|  | 	} else { | ||||||
|  | 		flog.Debugf("Choosing token based receiving") | ||||||
|  | 		go b.handleSlackClient(mchan) | ||||||
| 	} | 	} | ||||||
| 	time.Sleep(time.Second) | 	time.Sleep(time.Second) | ||||||
| 	flog.Debug("Start listening for Slack messages") | 	flog.Debug("Start listening for Slack messages") | ||||||
| 	for message := range mchan { | 	for message := range mchan { | ||||||
| 		// do not send messages from ourself | 		// 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 | ||||||
|  | 		} | ||||||
|  | 		if message.Text == "" || message.Username == "" { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		texts := strings.Split(message.Text, "\n") | 		texts := strings.Split(message.Text, "\n") | ||||||
| 		for _, text := range texts { | 		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) | 			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)} | 			msg := config.Message{Text: text, Username: message.Username, Channel: message.Channel, Account: b.Account, Avatar: b.getAvatar(message.Username), UserID: message.UserID, ID: "slack " + message.Raw.Timestamp} | ||||||
|  | 			if message.Raw.SubType == "me_message" { | ||||||
|  | 				msg.Event = config.EVENT_USER_ACTION | ||||||
|  | 			} | ||||||
|  | 			if message.Raw.SubType == "channel_leave" || message.Raw.SubType == "channel_join" { | ||||||
|  | 				msg.Username = "system" | ||||||
|  | 				msg.Event = config.EVENT_JOIN_LEAVE | ||||||
|  | 			} | ||||||
|  | 			// edited messages have a submessage, use this timestamp | ||||||
|  | 			if message.Raw.SubMessage != nil { | ||||||
|  | 				msg.ID = "slack " + message.Raw.SubMessage.Timestamp | ||||||
|  | 			} | ||||||
|  | 			b.Remote <- msg | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @@ -198,7 +264,13 @@ func (b *Bslack) handleSlackClient(mchan chan *MMMessage) { | |||||||
| 			// ignore first message | 			// ignore first message | ||||||
| 			if count > 0 { | 			if count > 0 { | ||||||
| 				flog.Debugf("Receiving from slackclient %#v", ev) | 				flog.Debugf("Receiving from slackclient %#v", ev) | ||||||
| 				if !b.Config.EditDisable && ev.SubMessage != nil { | 				if len(ev.Attachments) > 0 { | ||||||
|  | 					// skip messages we made ourselves | ||||||
|  | 					if ev.Attachments[0].CallbackID == "matterbridge" { | ||||||
|  | 						continue | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				if !b.Config.EditDisable && ev.SubMessage != nil && ev.SubMessage.ThreadTimestamp != ev.SubMessage.Timestamp { | ||||||
| 					flog.Debugf("SubMessage %#v", ev.SubMessage) | 					flog.Debugf("SubMessage %#v", ev.SubMessage) | ||||||
| 					ev.User = ev.SubMessage.User | 					ev.User = ev.SubMessage.User | ||||||
| 					ev.Text = ev.SubMessage.Text + b.Config.EditSuffix | 					ev.Text = ev.SubMessage.Text + b.Config.EditSuffix | ||||||
| @@ -208,16 +280,39 @@ func (b *Bslack) handleSlackClient(mchan chan *MMMessage) { | |||||||
| 				if err != nil { | 				if err != nil { | ||||||
| 					continue | 					continue | ||||||
| 				} | 				} | ||||||
| 				user, err := b.rtm.GetUserInfo(ev.User) |  | ||||||
| 				if err != nil { |  | ||||||
| 					continue |  | ||||||
| 				} |  | ||||||
| 				m := &MMMessage{} | 				m := &MMMessage{} | ||||||
| 				m.Username = user.Name | 				if ev.BotID == "" { | ||||||
|  | 					user, err := b.rtm.GetUserInfo(ev.User) | ||||||
|  | 					if err != nil { | ||||||
|  | 						continue | ||||||
|  | 					} | ||||||
|  | 					m.UserID = user.ID | ||||||
|  | 					m.Username = user.Name | ||||||
|  | 				} | ||||||
| 				m.Channel = channel.Name | 				m.Channel = channel.Name | ||||||
| 				m.Text = ev.Text | 				m.Text = ev.Text | ||||||
|  | 				if m.Text == "" { | ||||||
|  | 					for _, attach := range ev.Attachments { | ||||||
|  | 						if attach.Text != "" { | ||||||
|  | 							m.Text = attach.Text | ||||||
|  | 						} else { | ||||||
|  | 							m.Text = attach.Fallback | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
| 				m.Raw = ev | 				m.Raw = ev | ||||||
| 				m.Text = b.replaceMention(m.Text) | 				m.Text = b.replaceMention(m.Text) | ||||||
|  | 				// when using webhookURL we can't check if it's our webhook or not for now | ||||||
|  | 				if ev.BotID != "" && b.Config.WebhookURL == "" { | ||||||
|  | 					bot, err := b.rtm.GetBotInfo(ev.BotID) | ||||||
|  | 					if err != nil { | ||||||
|  | 						continue | ||||||
|  | 					} | ||||||
|  | 					if bot.Name != "" { | ||||||
|  | 						m.Username = bot.Name | ||||||
|  | 						m.UserID = bot.ID | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
| 				mchan <- m | 				mchan <- m | ||||||
| 			} | 			} | ||||||
| 			count++ | 			count++ | ||||||
| @@ -277,3 +372,11 @@ func (b *Bslack) replaceMention(text string) string { | |||||||
| 	} | 	} | ||||||
| 	return text | 	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 config.ChannelInfo) error { | ||||||
|  | 	id, err := steamid.NewId(channel.Name) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	b.c.Social.JoinChat(id) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (b *Bsteam) Send(msg config.Message) (string, 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) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -53,30 +53,50 @@ func (b *Btelegram) Disconnect() error { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Btelegram) JoinChannel(channel string) error { | func (b *Btelegram) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Btelegram) Send(msg config.Message) error { | func (b *Btelegram) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
| 	chatid, err := strconv.ParseInt(msg.Channel, 10, 64) | 	chatid, err := strconv.ParseInt(msg.Channel, 10, 64) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return "", err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if b.Config.MessageFormat == "HTML" { | 	if b.Config.MessageFormat == "HTML" { | ||||||
| 		msg.Text = makeHTML(msg.Text) | 		msg.Text = makeHTML(msg.Text) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	// edit the message if we have a msg ID | ||||||
|  | 	if msg.ID != "" { | ||||||
|  | 		msgid, err := strconv.Atoi(msg.ID) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return "", err | ||||||
|  | 		} | ||||||
|  | 		m := tgbotapi.NewEditMessageText(chatid, msgid, msg.Username+msg.Text) | ||||||
|  | 		_, err = b.c.Send(m) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return "", err | ||||||
|  | 		} | ||||||
|  | 		return "", nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	m := tgbotapi.NewMessage(chatid, msg.Username+msg.Text) | 	m := tgbotapi.NewMessage(chatid, msg.Username+msg.Text) | ||||||
| 	if b.Config.MessageFormat == "HTML" { | 	if b.Config.MessageFormat == "HTML" { | ||||||
| 		m.ParseMode = tgbotapi.ModeHTML | 		m.ParseMode = tgbotapi.ModeHTML | ||||||
| 	} | 	} | ||||||
| 	_, err = b.c.Send(m) | 	res, err := b.c.Send(m) | ||||||
| 	return err | 	if err != nil { | ||||||
|  | 		return "", err | ||||||
|  | 	} | ||||||
|  | 	return strconv.Itoa(res.MessageID), nil | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) { | func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) { | ||||||
| 	for update := range updates { | 	for update := range updates { | ||||||
|  | 		flog.Debugf("Receiving from telegram: %#v", update.Message) | ||||||
| 		var message *tgbotapi.Message | 		var message *tgbotapi.Message | ||||||
| 		username := "" | 		username := "" | ||||||
| 		channel := "" | 		channel := "" | ||||||
| @@ -114,9 +134,31 @@ func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) { | |||||||
| 		if username == "" { | 		if username == "" { | ||||||
| 			username = "unknown" | 			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 != "" { | 		if text != "" { | ||||||
| 			flog.Debugf("Sending message from %s on %s to gateway", username, b.Account) | 			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), ID: strconv.Itoa(message.MessageID)} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (b *Btelegram) getFileDirectURL(id string) string { | ||||||
|  | 	res, err := b.c.GetFileDirectURL(id) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "" | ||||||
|  | 	} | ||||||
|  | 	return res | ||||||
|  | } | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ import ( | |||||||
| 	"crypto/tls" | 	"crypto/tls" | ||||||
| 	"github.com/42wim/matterbridge/bridge/config" | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
| 	log "github.com/Sirupsen/logrus" | 	log "github.com/Sirupsen/logrus" | ||||||
|  | 	"github.com/jpillora/backoff" | ||||||
| 	"github.com/mattn/go-xmpp" | 	"github.com/mattn/go-xmpp" | ||||||
|  |  | ||||||
| 	"strings" | 	"strings" | ||||||
| @@ -43,7 +44,29 @@ func (b *Bxmpp) Connect() error { | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	flog.Info("Connection succeeded") | 	flog.Info("Connection succeeded") | ||||||
| 	go b.handleXmpp() | 	go func() { | ||||||
|  | 		initial := true | ||||||
|  | 		bf := &backoff.Backoff{ | ||||||
|  | 			Min:    time.Second, | ||||||
|  | 			Max:    5 * time.Minute, | ||||||
|  | 			Jitter: true, | ||||||
|  | 		} | ||||||
|  | 		for { | ||||||
|  | 			if initial { | ||||||
|  | 				b.handleXmpp() | ||||||
|  | 				initial = false | ||||||
|  | 			} | ||||||
|  | 			d := bf.Duration() | ||||||
|  | 			flog.Infof("Disconnected. Reconnecting in %s", d) | ||||||
|  | 			time.Sleep(d) | ||||||
|  | 			b.xc, err = b.createXMPP() | ||||||
|  | 			if err == nil { | ||||||
|  | 				b.Remote <- config.Message{Username: "system", Text: "rejoin", Channel: "", Account: b.Account, Event: config.EVENT_REJOIN_CHANNELS} | ||||||
|  | 				b.handleXmpp() | ||||||
|  | 				bf.Reset() | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -51,15 +74,15 @@ func (b *Bxmpp) Disconnect() error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bxmpp) JoinChannel(channel string) error { | func (b *Bxmpp) JoinChannel(channel config.ChannelInfo) error { | ||||||
| 	b.xc.JoinMUCNoHistory(channel+"@"+b.Config.Muc, b.Config.Nick) | 	b.xc.JoinMUCNoHistory(channel.Name+"@"+b.Config.Muc, b.Config.Nick) | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bxmpp) Send(msg config.Message) error { | func (b *Bxmpp) Send(msg config.Message) (string, error) { | ||||||
| 	flog.Debugf("Receiving %#v", msg) | 	flog.Debugf("Receiving %#v", msg) | ||||||
| 	b.xc.Send(xmpp.Chat{Type: "groupchat", Remote: msg.Channel + "@" + b.Config.Muc, Text: msg.Username + msg.Text}) | 	b.xc.Send(xmpp.Chat{Type: "groupchat", Remote: msg.Channel + "@" + b.Config.Muc, Text: msg.Username + msg.Text}) | ||||||
| 	return nil | 	return "", nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bxmpp) createXMPP() (*xmpp.Client, error) { | func (b *Bxmpp) createXMPP() (*xmpp.Client, error) { | ||||||
| @@ -96,7 +119,11 @@ func (b *Bxmpp) xmppKeepAlive() chan bool { | |||||||
| 		for { | 		for { | ||||||
| 			select { | 			select { | ||||||
| 			case <-ticker.C: | 			case <-ticker.C: | ||||||
| 				b.xc.PingC2S("", "") | 				flog.Debugf("PING") | ||||||
|  | 				err := b.xc.PingC2S("", "") | ||||||
|  | 				if err != nil { | ||||||
|  | 					flog.Debugf("PING failed %#v", err) | ||||||
|  | 				} | ||||||
| 			case <-done: | 			case <-done: | ||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
| @@ -106,6 +133,7 @@ func (b *Bxmpp) xmppKeepAlive() chan bool { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (b *Bxmpp) handleXmpp() error { | func (b *Bxmpp) handleXmpp() error { | ||||||
|  | 	var ok bool | ||||||
| 	done := b.xmppKeepAlive() | 	done := b.xmppKeepAlive() | ||||||
| 	defer close(done) | 	defer close(done) | ||||||
| 	nodelay := time.Time{} | 	nodelay := time.Time{} | ||||||
| @@ -127,8 +155,13 @@ func (b *Bxmpp) handleXmpp() error { | |||||||
| 					nick = s[1] | 					nick = s[1] | ||||||
| 				} | 				} | ||||||
| 				if nick != b.Config.Nick && v.Stamp == nodelay && v.Text != "" { | 				if nick != b.Config.Nick && v.Stamp == nodelay && v.Text != "" { | ||||||
|  | 					rmsg := config.Message{Username: nick, Text: v.Text, Channel: channel, Account: b.Account, UserID: v.Remote} | ||||||
|  | 					rmsg.Text, ok = b.replaceAction(rmsg.Text) | ||||||
|  | 					if ok { | ||||||
|  | 						rmsg.Event = config.EVENT_USER_ACTION | ||||||
|  | 					} | ||||||
| 					flog.Debugf("Sending message from %s on %s to gateway", nick, b.Account) | 					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 <- rmsg | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		case xmpp.Presence: | 		case xmpp.Presence: | ||||||
| @@ -136,3 +169,10 @@ func (b *Bxmpp) handleXmpp() error { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (b *Bxmpp) replaceAction(text string) (string, bool) { | ||||||
|  | 	if strings.HasPrefix(text, "/me ") { | ||||||
|  | 		return strings.Replace(text, "/me ", "", -1), true | ||||||
|  | 	} | ||||||
|  | 	return text, false | ||||||
|  | } | ||||||
|   | |||||||
							
								
								
									
										154
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										154
									
								
								changelog.md
									
									
									
									
									
								
							| @@ -1,3 +1,157 @@ | |||||||
|  | # v1.1.0 | ||||||
|  | ## New features | ||||||
|  | * general: Add better editing support. (actually edit the messages on bridges that support it) | ||||||
|  | 	(mattermost,discord,gitter,slack,telegram) | ||||||
|  | * mattermost: use API v4 (removes support for mattermost < 3.8) | ||||||
|  | * mattermost: add support for personal access tokens (since mattermost 4.1) | ||||||
|  | 	Use ```Token="yourtoken"``` in mattermost config | ||||||
|  | 	See https://docs.mattermost.com/developer/personal-access-tokens.html for more info | ||||||
|  | * matrix: Relay notices (matrix). Closes #243 | ||||||
|  | * irc: Add a charset option. Closes #247 | ||||||
|  |  | ||||||
|  | ## Bugfix | ||||||
|  | * slack: Handle leave/join events (slack). Closes #246 | ||||||
|  | * slack: Replace mentions from other bridges. (slack). Closes #233 | ||||||
|  | * gitter: remove ZWSP after messages | ||||||
|  |  | ||||||
|  | # v1.0.1 | ||||||
|  | ## New features | ||||||
|  | * mattermost: add support for mattermost 4.1.x | ||||||
|  | * discord: allow a webhookURL per channel #239 | ||||||
|  |  | ||||||
|  | # v1.0.0 | ||||||
|  | ## New features | ||||||
|  | * general: Add action support for slack,mattermost,irc,gitter,matrix,xmpp,discord. #199 | ||||||
|  | * discord: Shows the username instead of the server nickname #234 | ||||||
|  |  | ||||||
|  | # v1.0.0-rc1 | ||||||
|  | ## New features | ||||||
|  | * general: Add action support for slack,mattermost,irc,gitter,matrix,xmpp,discord. #199 | ||||||
|  |  | ||||||
|  | ## Bugfix | ||||||
|  | * general: Handle same account in multiple gateways better | ||||||
|  | * mattermost: ignore edited messages with reactions | ||||||
|  | * mattermost: Fix double posting of edited messages by using lru cache | ||||||
|  | * irc: update vendor | ||||||
|  |  | ||||||
|  | # v0.16.3 | ||||||
|  | ## Bugfix | ||||||
|  | * general: Fix in/out logic. Closes #224  | ||||||
|  | * general: Fix message modification | ||||||
|  | * slack: Disable message from other bots when using webhooks (slack) | ||||||
|  | * mattermost: Return better error messages on mattermost connect | ||||||
|  |  | ||||||
|  | # v0.16.2 | ||||||
|  | ## New features | ||||||
|  | * general: binary builds against latest commit are now available on https://bintray.com/42wim/nightly/Matterbridge/_latestVersion | ||||||
|  |  | ||||||
|  | ## Bugfix | ||||||
|  | * slack: fix loop introduced by relaying message of other bots #219 | ||||||
|  | * slack: Suppress parent message when child message is received #218 | ||||||
|  | * mattermost: fix regression when using webhookurl and webhookbindaddress #221 | ||||||
|  |  | ||||||
|  | # 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 | # v0.14.0 | ||||||
| ## New features | ## New features | ||||||
| * api: add token authentication | * api: add token authentication | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								ci/bintray.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								ci/bintray.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | go version |grep go1.9 || exit | ||||||
|  | VERSION=$(git describe --tags) | ||||||
|  | mkdir ci/binaries | ||||||
|  | GOOS=windows GOARCH=amd64 go build -ldflags "-s -w -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o ci/binaries/matterbridge-$VERSION-win64.exe | ||||||
|  | GOOS=linux GOARCH=amd64 go build -ldflags "-s -w -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o ci/binaries/matterbridge-$VERSION-linux64 | ||||||
|  | GOOS=linux GOARCH=arm go build -ldflags "-s -w -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o ci/binaries/matterbridge-$VERSION-linux-arm | ||||||
|  | cd ci | ||||||
|  | cat > deploy.json <<EOF | ||||||
|  | { | ||||||
|  |     "package": { | ||||||
|  |         "name": "Matterbridge", | ||||||
|  |         "repo": "nightly", | ||||||
|  |         "subject": "42wim" | ||||||
|  |     }, | ||||||
|  |     "version": { | ||||||
|  |         "name": "$VERSION" | ||||||
|  |     }, | ||||||
|  |     "files": | ||||||
|  |         [ | ||||||
|  |         {"includePattern": "ci/binaries/(.*)", "uploadPattern":"\$1"} | ||||||
|  |         ], | ||||||
|  |     "publish": true | ||||||
|  | } | ||||||
|  | EOF | ||||||
|  |  | ||||||
| @@ -5,68 +5,51 @@ import ( | |||||||
| 	"github.com/42wim/matterbridge/bridge" | 	"github.com/42wim/matterbridge/bridge" | ||||||
| 	"github.com/42wim/matterbridge/bridge/config" | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
| 	log "github.com/Sirupsen/logrus" | 	log "github.com/Sirupsen/logrus" | ||||||
|  | 	//	"github.com/davecgh/go-spew/spew" | ||||||
|  | 	"github.com/hashicorp/golang-lru" | ||||||
|  | 	"github.com/peterhellberg/emojilib" | ||||||
|  | 	"regexp" | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type Gateway struct { | type Gateway struct { | ||||||
| 	*config.Config | 	*config.Config | ||||||
| 	MyConfig        *config.Gateway | 	Router         *Router | ||||||
| 	Bridges         map[string]*bridge.Bridge | 	MyConfig       *config.Gateway | ||||||
| 	Channels        map[string]*config.ChannelInfo | 	Bridges        map[string]*bridge.Bridge | ||||||
| 	ChannelOptions  map[string]config.ChannelOptions | 	Channels       map[string]*config.ChannelInfo | ||||||
| 	Names           map[string]bool | 	ChannelOptions map[string]config.ChannelOptions | ||||||
| 	Name            string | 	Message        chan config.Message | ||||||
| 	Message         chan config.Message | 	Name           string | ||||||
| 	DestChannelFunc func(msg *config.Message, dest bridge.Bridge) []config.ChannelInfo | 	Messages       *lru.Cache | ||||||
| } | } | ||||||
|  |  | ||||||
| func New(cfg *config.Config) *Gateway { | type BrMsgID struct { | ||||||
| 	gw := &Gateway{} | 	br *bridge.Bridge | ||||||
| 	gw.Config = cfg | 	ID string | ||||||
| 	gw.Channels = make(map[string]*config.ChannelInfo) | } | ||||||
| 	gw.Message = make(chan config.Message) |  | ||||||
| 	gw.Bridges = make(map[string]*bridge.Bridge) | func New(cfg config.Gateway, r *Router) *Gateway { | ||||||
| 	gw.Names = make(map[string]bool) | 	gw := &Gateway{Channels: make(map[string]*config.ChannelInfo), Message: r.Message, | ||||||
| 	gw.DestChannelFunc = gw.getDestChannel | 		Router: r, Bridges: make(map[string]*bridge.Bridge), Config: r.Config} | ||||||
|  | 	cache, _ := lru.New(5000) | ||||||
|  | 	gw.Messages = cache | ||||||
|  | 	gw.AddConfig(&cfg) | ||||||
| 	return gw | 	return gw | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) AddBridge(cfg *config.Bridge) error { | func (gw *Gateway) AddBridge(cfg *config.Bridge) error { | ||||||
| 	for _, br := range gw.Bridges { | 	br := gw.Router.getBridge(cfg.Account) | ||||||
| 		if br.Account == cfg.Account { | 	if br == nil { | ||||||
| 			gw.mapChannelsToBridge(br) | 		br = bridge.New(gw.Config, cfg, gw.Message) | ||||||
| 			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.mapChannelsToBridge(br) | ||||||
| 	gw.Bridges[cfg.Account] = br | 	gw.Bridges[cfg.Account] = br | ||||||
| 	err := br.Connect() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("Bridge %s failed to start: %v", br.Account, err) |  | ||||||
| 	} |  | ||||||
| 	err = br.JoinChannels() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return fmt.Errorf("Bridge %s failed to join channel: %v", br.Account, err) |  | ||||||
| 	} |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) AddConfig(cfg *config.Gateway) error { | func (gw *Gateway) AddConfig(cfg *config.Gateway) error { | ||||||
| 	if gw.Names[cfg.Name] { |  | ||||||
| 		return fmt.Errorf("Gateway with name %s already exists", cfg.Name) |  | ||||||
| 	} |  | ||||||
| 	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.Name = cfg.Name | ||||||
| 	gw.MyConfig = cfg | 	gw.MyConfig = cfg | ||||||
| 	gw.mapChannels() | 	gw.mapChannels() | ||||||
| @@ -87,41 +70,6 @@ func (gw *Gateway) mapChannelsToBridge(br *bridge.Bridge) { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| 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) |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			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() |  | ||||||
| 				for _, br := range gw.Bridges { |  | ||||||
| 					gw.handleMessage(msg, br) |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (gw *Gateway) reconnectBridge(br *bridge.Bridge) { | func (gw *Gateway) reconnectBridge(br *bridge.Bridge) { | ||||||
| 	br.Disconnect() | 	br.Disconnect() | ||||||
| 	time.Sleep(time.Second * 5) | 	time.Sleep(time.Second * 5) | ||||||
| @@ -137,89 +85,119 @@ RECONNECT: | |||||||
| 	br.JoinChannels() | 	br.JoinChannels() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) mapChannels() error { | func (gw *Gateway) mapChannelConfig(cfg []config.Bridge, direction string) { | ||||||
| 	for _, br := range append(gw.MyConfig.Out, gw.MyConfig.InOut...) { | 	for _, br := range cfg { | ||||||
| 		if isApi(br.Account) { | 		if isApi(br.Account) { | ||||||
| 			br.Channel = "api" | 			br.Channel = "api" | ||||||
| 		} | 		} | ||||||
| 		ID := br.Channel + br.Account | 		ID := br.Channel + br.Account | ||||||
| 		_, ok := gw.Channels[ID] | 		if _, ok := gw.Channels[ID]; !ok { | ||||||
| 		if !ok { | 			channel := &config.ChannelInfo{Name: br.Channel, Direction: direction, ID: ID, Options: br.Options, Account: br.Account, | ||||||
| 			channel := &config.ChannelInfo{Name: br.Channel, Direction: "out", ID: ID, Options: br.Options, Account: br.Account, | 				SameChannel: make(map[string]bool)} | ||||||
| 				GID: make(map[string]bool), SameChannel: make(map[string]bool)} |  | ||||||
| 			channel.GID[gw.Name] = true |  | ||||||
| 			channel.SameChannel[gw.Name] = br.SameChannel | 			channel.SameChannel[gw.Name] = br.SameChannel | ||||||
| 			gw.Channels[channel.ID] = channel | 			gw.Channels[channel.ID] = channel | ||||||
|  | 		} else { | ||||||
|  | 			// if we already have a key and it's not our current direction it means we have a bidirectional inout | ||||||
|  | 			if gw.Channels[ID].Direction != direction { | ||||||
|  | 				gw.Channels[ID].Direction = "inout" | ||||||
|  | 			} | ||||||
| 		} | 		} | ||||||
| 		gw.Channels[ID].GID[gw.Name] = true |  | ||||||
| 		gw.Channels[ID].SameChannel[gw.Name] = br.SameChannel | 		gw.Channels[ID].SameChannel[gw.Name] = br.SameChannel | ||||||
| 	} | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| 	for _, br := range append(gw.MyConfig.In, gw.MyConfig.InOut...) { | func (gw *Gateway) mapChannels() error { | ||||||
| 		if isApi(br.Account) { | 	gw.mapChannelConfig(gw.MyConfig.In, "in") | ||||||
| 			br.Channel = "api" | 	gw.mapChannelConfig(gw.MyConfig.Out, "out") | ||||||
| 		} | 	gw.mapChannelConfig(gw.MyConfig.InOut, "inout") | ||||||
| 		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 |  | ||||||
| 	} |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) getDestChannel(msg *config.Message, dest bridge.Bridge) []config.ChannelInfo { | func (gw *Gateway) getDestChannel(msg *config.Message, dest bridge.Bridge) []config.ChannelInfo { | ||||||
| 	var channels []config.ChannelInfo | 	var channels []config.ChannelInfo | ||||||
|  | 	// if source channel is in only, do nothing | ||||||
|  | 	for _, channel := range gw.Channels { | ||||||
|  | 		// lookup the channel from the message | ||||||
|  | 		if channel.ID == getChannelID(*msg) { | ||||||
|  | 			// we only have destinations if the original message is from an "in" (sending) channel | ||||||
|  | 			if !strings.Contains(channel.Direction, "in") { | ||||||
|  | 				return channels | ||||||
|  | 			} | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	for _, channel := range gw.Channels { | 	for _, channel := range gw.Channels { | ||||||
| 		if _, ok := gw.Channels[getChannelID(*msg)]; !ok { | 		if _, ok := gw.Channels[getChannelID(*msg)]; !ok { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		if channel.Direction == "out" && channel.Account == dest.Account && 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 strings.Contains(channel.Direction, "out") && channel.Account == dest.Account && gw.validGatewayDest(msg, channel) { | ||||||
| 			channels = append(channels, *channel) | 			channels = append(channels, *channel) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return channels | 	return channels | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) { | func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) []*BrMsgID { | ||||||
|  | 	var brMsgIDs []*BrMsgID | ||||||
| 	// only relay join/part when configged | 	// only relay join/part when configged | ||||||
| 	if msg.Event == config.EVENT_JOIN_LEAVE && !gw.Bridges[dest.Account].Config.ShowJoinPart { | 	if msg.Event == config.EVENT_JOIN_LEAVE && !gw.Bridges[dest.Account].Config.ShowJoinPart { | ||||||
| 		return | 		return brMsgIDs | ||||||
| 	} | 	} | ||||||
| 	// broadcast to every out channel (irc QUIT) | 	// broadcast to every out channel (irc QUIT) | ||||||
| 	if msg.Channel == "" && msg.Event != config.EVENT_JOIN_LEAVE { | 	if msg.Channel == "" && msg.Event != config.EVENT_JOIN_LEAVE { | ||||||
| 		log.Debug("empty channel") | 		log.Debug("empty channel") | ||||||
| 		return | 		return brMsgIDs | ||||||
| 	} | 	} | ||||||
| 	originchannel := msg.Channel | 	originchannel := msg.Channel | ||||||
| 	origmsg := msg | 	origmsg := msg | ||||||
| 	for _, channel := range gw.DestChannelFunc(&msg, *dest) { | 	channels := gw.getDestChannel(&msg, *dest) | ||||||
|  | 	for _, channel := range channels { | ||||||
| 		// do not send to ourself | 		// do not send to ourself | ||||||
| 		if channel.ID == getChannelID(origmsg) { | 		if channel.ID == getChannelID(origmsg) { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| 		log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, originchannel, dest.Account, channel.Name) | 		log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, originchannel, dest.Account, channel.Name) | ||||||
| 		msg.Channel = channel.Name | 		msg.Channel = channel.Name | ||||||
| 		gw.modifyAvatar(&msg, dest) | 		msg.Avatar = gw.modifyAvatar(origmsg, dest) | ||||||
| 		gw.modifyUsername(&msg, dest) | 		msg.Username = gw.modifyUsername(origmsg, dest) | ||||||
|  | 		msg.ID = "" | ||||||
|  | 		if res, ok := gw.Messages.Get(origmsg.ID); ok { | ||||||
|  | 			IDs := res.([]*BrMsgID) | ||||||
|  | 			for _, id := range IDs { | ||||||
|  | 				if dest.Protocol == id.br.Protocol { | ||||||
|  | 					msg.ID = id.ID | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
| 		// for api we need originchannel as channel | 		// for api we need originchannel as channel | ||||||
| 		if dest.Protocol == "api" { | 		if dest.Protocol == "api" { | ||||||
| 			msg.Channel = originchannel | 			msg.Channel = originchannel | ||||||
| 		} | 		} | ||||||
| 		err := dest.Send(msg) | 		mID, err := dest.Send(msg) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			fmt.Println(err) | 			fmt.Println(err) | ||||||
| 		} | 		} | ||||||
|  | 		// append the message ID (mID) from this bridge (dest) to our brMsgIDs slice | ||||||
|  | 		if mID != "" { | ||||||
|  | 			brMsgIDs = append(brMsgIDs, &BrMsgID{dest, mID}) | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  | 	return brMsgIDs | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) ignoreMessage(msg *config.Message) bool { | func (gw *Gateway) ignoreMessage(msg *config.Message) bool { | ||||||
|  | 	// if we don't have the bridge, ignore it | ||||||
|  | 	if _, ok := gw.Bridges[msg.Account]; !ok { | ||||||
|  | 		return true | ||||||
|  | 	} | ||||||
| 	if msg.Text == "" { | 	if msg.Text == "" { | ||||||
| 		log.Debugf("ignoring empty message %#v from %s", msg, msg.Account) | 		log.Debugf("ignoring empty message %#v from %s", msg, msg.Account) | ||||||
| 		return true | 		return true | ||||||
| @@ -230,10 +208,24 @@ func (gw *Gateway) ignoreMessage(msg *config.Message) bool { | |||||||
| 			return true | 			return true | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | 	// 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 | 	return false | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) { | func (gw *Gateway) modifyUsername(msg config.Message, dest *bridge.Bridge) string { | ||||||
| 	br := gw.Bridges[msg.Account] | 	br := gw.Bridges[msg.Account] | ||||||
| 	msg.Protocol = br.Protocol | 	msg.Protocol = br.Protocol | ||||||
| 	nick := gw.Config.General.RemoteNickFormat | 	nick := gw.Config.General.RemoteNickFormat | ||||||
| @@ -255,10 +247,10 @@ func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) { | |||||||
| 	nick = strings.Replace(nick, "{NICK}", msg.Username, -1) | 	nick = strings.Replace(nick, "{NICK}", msg.Username, -1) | ||||||
| 	nick = strings.Replace(nick, "{BRIDGE}", br.Name, -1) | 	nick = strings.Replace(nick, "{BRIDGE}", br.Name, -1) | ||||||
| 	nick = strings.Replace(nick, "{PROTOCOL}", br.Protocol, -1) | 	nick = strings.Replace(nick, "{PROTOCOL}", br.Protocol, -1) | ||||||
| 	msg.Username = nick | 	return nick | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) modifyAvatar(msg *config.Message, dest *bridge.Bridge) { | func (gw *Gateway) modifyAvatar(msg config.Message, dest *bridge.Bridge) string { | ||||||
| 	iconurl := gw.Config.General.IconURL | 	iconurl := gw.Config.General.IconURL | ||||||
| 	if iconurl == "" { | 	if iconurl == "" { | ||||||
| 		iconurl = dest.Config.IconURL | 		iconurl = dest.Config.IconURL | ||||||
| @@ -267,6 +259,13 @@ func (gw *Gateway) modifyAvatar(msg *config.Message, dest *bridge.Bridge) { | |||||||
| 	if msg.Avatar == "" { | 	if msg.Avatar == "" { | ||||||
| 		msg.Avatar = iconurl | 		msg.Avatar = iconurl | ||||||
| 	} | 	} | ||||||
|  | 	return msg.Avatar | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (gw *Gateway) modifyMessage(msg *config.Message) { | ||||||
|  | 	// replace :emoji: to unicode | ||||||
|  | 	msg.Text = emojilib.Replace(msg.Text) | ||||||
|  | 	msg.Gateway = gw.Name | ||||||
| } | } | ||||||
|  |  | ||||||
| func getChannelID(msg config.Message) string { | func getChannelID(msg config.Message) string { | ||||||
| @@ -274,40 +273,9 @@ func getChannelID(msg config.Message) string { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (gw *Gateway) validGatewayDest(msg *config.Message, channel *config.ChannelInfo) bool { | func (gw *Gateway) validGatewayDest(msg *config.Message, channel *config.ChannelInfo) bool { | ||||||
| 	GIDmap := gw.Channels[getChannelID(*msg)].GID | 	return msg.Gateway == gw.Name | ||||||
|  |  | ||||||
| 	// 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] == true { |  | ||||||
| 			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] == true { |  | ||||||
| 			// add the gateway to our message |  | ||||||
| 			msg.Gateway = k |  | ||||||
| 			return true |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func isApi(account string) bool { | func isApi(account string) bool { | ||||||
| 	if strings.HasPrefix(account, "api.") { | 	return strings.HasPrefix(account, "api.") | ||||||
| 		return true |  | ||||||
| 	} |  | ||||||
| 	return false |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										288
									
								
								gateway/gateway_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										288
									
								
								gateway/gateway_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,288 @@ | |||||||
|  | package gateway | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
|  | 	"github.com/BurntSushi/toml" | ||||||
|  | 	"github.com/stretchr/testify/assert" | ||||||
|  | 	"strconv" | ||||||
|  |  | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var testconfig = ` | ||||||
|  | [irc.freenode] | ||||||
|  | [mattermost.test] | ||||||
|  | [gitter.42wim] | ||||||
|  | [discord.test] | ||||||
|  | [slack.test] | ||||||
|  |  | ||||||
|  | [[gateway]] | ||||||
|  |     name = "bridge1" | ||||||
|  |     enable=true | ||||||
|  |      | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account = "irc.freenode" | ||||||
|  |     channel = "#wimtesting" | ||||||
|  |      | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="gitter.42wim" | ||||||
|  |     channel="42wim/testroom" | ||||||
|  |     #channel="matterbridge/Lobby" | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account = "discord.test" | ||||||
|  |     channel = "general" | ||||||
|  |      | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="slack.test" | ||||||
|  |     channel="testing" | ||||||
|  | 	` | ||||||
|  |  | ||||||
|  | var testconfig2 = ` | ||||||
|  | [irc.freenode] | ||||||
|  | [mattermost.test] | ||||||
|  | [gitter.42wim] | ||||||
|  | [discord.test] | ||||||
|  | [slack.test] | ||||||
|  |  | ||||||
|  | [[gateway]] | ||||||
|  |     name = "bridge1" | ||||||
|  |     enable=true | ||||||
|  |      | ||||||
|  |     [[gateway.in]] | ||||||
|  |     account = "irc.freenode" | ||||||
|  |     channel = "#wimtesting" | ||||||
|  |      | ||||||
|  |     [[gateway.in]] | ||||||
|  |     account="gitter.42wim" | ||||||
|  |     channel="42wim/testroom" | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account = "discord.test" | ||||||
|  |     channel = "general" | ||||||
|  |      | ||||||
|  |     [[gateway.out]] | ||||||
|  |     account="slack.test" | ||||||
|  |     channel="testing" | ||||||
|  | [[gateway]] | ||||||
|  |     name = "bridge2" | ||||||
|  |     enable=true | ||||||
|  |      | ||||||
|  |     [[gateway.in]] | ||||||
|  |     account = "irc.freenode" | ||||||
|  |     channel = "#wimtesting2" | ||||||
|  |      | ||||||
|  |     [[gateway.out]] | ||||||
|  |     account="gitter.42wim" | ||||||
|  |     channel="42wim/testroom" | ||||||
|  |  | ||||||
|  |     [[gateway.out]] | ||||||
|  |     account = "discord.test" | ||||||
|  |     channel = "general2" | ||||||
|  | 	` | ||||||
|  | var testconfig3 = ` | ||||||
|  | [irc.zzz] | ||||||
|  | [telegram.zzz] | ||||||
|  | [slack.zzz] | ||||||
|  | [[gateway]] | ||||||
|  | name="bridge" | ||||||
|  | enable=true | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="irc.zzz" | ||||||
|  |     channel="#main"		 | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="telegram.zzz" | ||||||
|  |     channel="-1111111111111" | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="slack.zzz" | ||||||
|  |     channel="irc"	 | ||||||
|  | 	 | ||||||
|  | [[gateway]] | ||||||
|  | name="announcements" | ||||||
|  | enable=true | ||||||
|  | 	 | ||||||
|  |     [[gateway.in]] | ||||||
|  |     account="telegram.zzz" | ||||||
|  |     channel="-2222222222222"	 | ||||||
|  | 	 | ||||||
|  |     [[gateway.out]] | ||||||
|  |     account="irc.zzz" | ||||||
|  |     channel="#main"		 | ||||||
|  | 	 | ||||||
|  |     [[gateway.out]] | ||||||
|  |     account="irc.zzz" | ||||||
|  |     channel="#main-help"	 | ||||||
|  |  | ||||||
|  |     [[gateway.out]] | ||||||
|  |     account="telegram.zzz" | ||||||
|  |     channel="--333333333333"	 | ||||||
|  |  | ||||||
|  |     [[gateway.out]] | ||||||
|  |     account="slack.zzz" | ||||||
|  |     channel="general"		 | ||||||
|  | 	 | ||||||
|  | [[gateway]] | ||||||
|  | name="bridge2" | ||||||
|  | enable=true | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="irc.zzz" | ||||||
|  |     channel="#main-help"	 | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="telegram.zzz" | ||||||
|  |     channel="--444444444444"	 | ||||||
|  |  | ||||||
|  | 	 | ||||||
|  | [[gateway]] | ||||||
|  | name="bridge3" | ||||||
|  | enable=true | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="irc.zzz" | ||||||
|  |     channel="#main-telegram"	 | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="telegram.zzz" | ||||||
|  |     channel="--333333333333" | ||||||
|  | ` | ||||||
|  |  | ||||||
|  | func maketestRouter(input string) *Router { | ||||||
|  | 	var cfg *config.Config | ||||||
|  | 	if _, err := toml.Decode(input, &cfg); err != nil { | ||||||
|  | 		fmt.Println(err) | ||||||
|  | 	} | ||||||
|  | 	r, err := NewRouter(cfg) | ||||||
|  | 	if err != nil { | ||||||
|  | 		fmt.Println(err) | ||||||
|  | 	} | ||||||
|  | 	return r | ||||||
|  | } | ||||||
|  | func TestNewRouter(t *testing.T) { | ||||||
|  | 	var cfg *config.Config | ||||||
|  | 	if _, err := toml.Decode(testconfig, &cfg); err != nil { | ||||||
|  | 		fmt.Println(err) | ||||||
|  | 	} | ||||||
|  | 	r, err := NewRouter(cfg) | ||||||
|  | 	if err != nil { | ||||||
|  | 		fmt.Println(err) | ||||||
|  | 	} | ||||||
|  | 	assert.Equal(t, 1, len(r.Gateways)) | ||||||
|  | 	assert.Equal(t, 4, len(r.Gateways["bridge1"].Bridges)) | ||||||
|  | 	assert.Equal(t, 4, len(r.Gateways["bridge1"].Channels)) | ||||||
|  |  | ||||||
|  | 	r = maketestRouter(testconfig2) | ||||||
|  | 	assert.Equal(t, 2, len(r.Gateways)) | ||||||
|  | 	assert.Equal(t, 4, len(r.Gateways["bridge1"].Bridges)) | ||||||
|  | 	assert.Equal(t, 3, len(r.Gateways["bridge2"].Bridges)) | ||||||
|  | 	assert.Equal(t, 4, len(r.Gateways["bridge1"].Channels)) | ||||||
|  | 	assert.Equal(t, 3, len(r.Gateways["bridge2"].Channels)) | ||||||
|  | 	assert.Equal(t, &config.ChannelInfo{Name: "42wim/testroom", Direction: "out", | ||||||
|  | 		ID: "42wim/testroomgitter.42wim", Account: "gitter.42wim", | ||||||
|  | 		SameChannel: map[string]bool{"bridge2": false}}, | ||||||
|  | 		r.Gateways["bridge2"].Channels["42wim/testroomgitter.42wim"]) | ||||||
|  | 	assert.Equal(t, &config.ChannelInfo{Name: "42wim/testroom", Direction: "in", | ||||||
|  | 		ID: "42wim/testroomgitter.42wim", Account: "gitter.42wim", | ||||||
|  | 		SameChannel: map[string]bool{"bridge1": false}}, | ||||||
|  | 		r.Gateways["bridge1"].Channels["42wim/testroomgitter.42wim"]) | ||||||
|  | 	assert.Equal(t, &config.ChannelInfo{Name: "general", Direction: "inout", | ||||||
|  | 		ID: "generaldiscord.test", Account: "discord.test", | ||||||
|  | 		SameChannel: map[string]bool{"bridge1": false}}, | ||||||
|  | 		r.Gateways["bridge1"].Channels["generaldiscord.test"]) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestGetDestChannel(t *testing.T) { | ||||||
|  | 	r := maketestRouter(testconfig2) | ||||||
|  | 	msg := &config.Message{Text: "test", Channel: "general", Account: "discord.test", Gateway: "bridge1", Protocol: "discord", Username: "test"} | ||||||
|  | 	for _, br := range r.Gateways["bridge1"].Bridges { | ||||||
|  | 		switch br.Account { | ||||||
|  | 		case "discord.test": | ||||||
|  | 			assert.Equal(t, []config.ChannelInfo{{Name: "general", Account: "discord.test", Direction: "inout", ID: "generaldiscord.test", SameChannel: map[string]bool{"bridge1": false}, Options: config.ChannelOptions{Key: ""}}}, | ||||||
|  | 				r.Gateways["bridge1"].getDestChannel(msg, *br)) | ||||||
|  | 		case "slack.test": | ||||||
|  | 			assert.Equal(t, []config.ChannelInfo{{Name: "testing", Account: "slack.test", Direction: "out", ID: "testingslack.test", SameChannel: map[string]bool{"bridge1": false}, Options: config.ChannelOptions{Key: ""}}}, | ||||||
|  | 				r.Gateways["bridge1"].getDestChannel(msg, *br)) | ||||||
|  | 		case "gitter.42wim": | ||||||
|  | 			assert.Equal(t, []config.ChannelInfo(nil), r.Gateways["bridge1"].getDestChannel(msg, *br)) | ||||||
|  | 		case "irc.freenode": | ||||||
|  | 			assert.Equal(t, []config.ChannelInfo(nil), r.Gateways["bridge1"].getDestChannel(msg, *br)) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestGetDestChannelAdvanced(t *testing.T) { | ||||||
|  | 	r := maketestRouter(testconfig3) | ||||||
|  | 	var msgs []*config.Message | ||||||
|  | 	i := 0 | ||||||
|  | 	for _, gw := range r.Gateways { | ||||||
|  | 		for _, channel := range gw.Channels { | ||||||
|  | 			msgs = append(msgs, &config.Message{Text: "text" + strconv.Itoa(i), Channel: channel.Name, Account: channel.Account, Gateway: gw.Name, Username: "user" + strconv.Itoa(i)}) | ||||||
|  | 			i++ | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	hits := make(map[string]int) | ||||||
|  | 	for _, gw := range r.Gateways { | ||||||
|  | 		for _, br := range gw.Bridges { | ||||||
|  | 			for _, msg := range msgs { | ||||||
|  | 				channels := gw.getDestChannel(msg, *br) | ||||||
|  | 				if gw.Name != msg.Gateway { | ||||||
|  | 					assert.Equal(t, []config.ChannelInfo(nil), channels) | ||||||
|  | 					continue | ||||||
|  | 				} | ||||||
|  | 				switch gw.Name { | ||||||
|  | 				case "bridge": | ||||||
|  | 					if (msg.Channel == "#main" || msg.Channel == "-1111111111111" || msg.Channel == "irc") && (msg.Account == "irc.zzz" || msg.Account == "telegram.zzz" || msg.Account == "slack.zzz") { | ||||||
|  | 						hits[gw.Name]++ | ||||||
|  | 						switch br.Account { | ||||||
|  | 						case "irc.zzz": | ||||||
|  | 							assert.Equal(t, []config.ChannelInfo{{Name: "#main", Account: "irc.zzz", Direction: "inout", ID: "#mainirc.zzz", SameChannel: map[string]bool{"bridge": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 						case "telegram.zzz": | ||||||
|  | 							assert.Equal(t, []config.ChannelInfo{{Name: "-1111111111111", Account: "telegram.zzz", Direction: "inout", ID: "-1111111111111telegram.zzz", SameChannel: map[string]bool{"bridge": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 						case "slack.zzz": | ||||||
|  | 							assert.Equal(t, []config.ChannelInfo{{Name: "irc", Account: "slack.zzz", Direction: "inout", ID: "ircslack.zzz", SameChannel: map[string]bool{"bridge": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				case "bridge2": | ||||||
|  | 					if (msg.Channel == "#main-help" || msg.Channel == "--444444444444") && (msg.Account == "irc.zzz" || msg.Account == "telegram.zzz") { | ||||||
|  | 						hits[gw.Name]++ | ||||||
|  | 						switch br.Account { | ||||||
|  | 						case "irc.zzz": | ||||||
|  | 							assert.Equal(t, []config.ChannelInfo{{Name: "#main-help", Account: "irc.zzz", Direction: "inout", ID: "#main-helpirc.zzz", SameChannel: map[string]bool{"bridge2": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 						case "telegram.zzz": | ||||||
|  | 							assert.Equal(t, []config.ChannelInfo{{Name: "--444444444444", Account: "telegram.zzz", Direction: "inout", ID: "--444444444444telegram.zzz", SameChannel: map[string]bool{"bridge2": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				case "bridge3": | ||||||
|  | 					if (msg.Channel == "#main-telegram" || msg.Channel == "--333333333333") && (msg.Account == "irc.zzz" || msg.Account == "telegram.zzz") { | ||||||
|  | 						hits[gw.Name]++ | ||||||
|  | 						switch br.Account { | ||||||
|  | 						case "irc.zzz": | ||||||
|  | 							assert.Equal(t, []config.ChannelInfo{{Name: "#main-telegram", Account: "irc.zzz", Direction: "inout", ID: "#main-telegramirc.zzz", SameChannel: map[string]bool{"bridge3": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 						case "telegram.zzz": | ||||||
|  | 							assert.Equal(t, []config.ChannelInfo{{Name: "--333333333333", Account: "telegram.zzz", Direction: "inout", ID: "--333333333333telegram.zzz", SameChannel: map[string]bool{"bridge3": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 						} | ||||||
|  | 					} | ||||||
|  | 				case "announcements": | ||||||
|  | 					if msg.Channel != "-2222222222222" && msg.Account != "telegram" { | ||||||
|  | 						assert.Equal(t, []config.ChannelInfo(nil), channels) | ||||||
|  | 						continue | ||||||
|  | 					} | ||||||
|  | 					hits[gw.Name]++ | ||||||
|  | 					switch br.Account { | ||||||
|  | 					case "irc.zzz": | ||||||
|  | 						assert.Equal(t, []config.ChannelInfo{{Name: "#main", Account: "irc.zzz", Direction: "out", ID: "#mainirc.zzz", SameChannel: map[string]bool{"announcements": false}, Options: config.ChannelOptions{Key: ""}}, {Name: "#main-help", Account: "irc.zzz", Direction: "out", ID: "#main-helpirc.zzz", SameChannel: map[string]bool{"announcements": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 					case "slack.zzz": | ||||||
|  | 						assert.Equal(t, []config.ChannelInfo{{Name: "general", Account: "slack.zzz", Direction: "out", ID: "generalslack.zzz", SameChannel: map[string]bool{"announcements": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 					case "telegram.zzz": | ||||||
|  | 						assert.Equal(t, []config.ChannelInfo{{Name: "--333333333333", Account: "telegram.zzz", Direction: "out", ID: "--333333333333telegram.zzz", SameChannel: map[string]bool{"announcements": false}, Options: config.ChannelOptions{Key: ""}}}, channels) | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	assert.Equal(t, map[string]int{"bridge3": 4, "bridge": 9, "announcements": 3, "bridge2": 4}, hits) | ||||||
|  | } | ||||||
							
								
								
									
										112
									
								
								gateway/router.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								gateway/router.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,112 @@ | |||||||
|  | package gateway | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/42wim/matterbridge/bridge" | ||||||
|  | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
|  | 	"github.com/42wim/matterbridge/gateway/samechannel" | ||||||
|  | 	log "github.com/Sirupsen/logrus" | ||||||
|  | 	//	"github.com/davecgh/go-spew/spew" | ||||||
|  | 	"time" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | type Router struct { | ||||||
|  | 	Gateways map[string]*Gateway | ||||||
|  | 	Message  chan config.Message | ||||||
|  | 	*config.Config | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func NewRouter(cfg *config.Config) (*Router, error) { | ||||||
|  | 	r := &Router{} | ||||||
|  | 	r.Config = cfg | ||||||
|  | 	r.Message = make(chan config.Message) | ||||||
|  | 	r.Gateways = make(map[string]*Gateway) | ||||||
|  | 	sgw := samechannelgateway.New(cfg) | ||||||
|  | 	gwconfigs := sgw.GetConfig() | ||||||
|  |  | ||||||
|  | 	for _, entry := range append(gwconfigs, cfg.Gateway...) { | ||||||
|  | 		if !entry.Enable { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		if entry.Name == "" { | ||||||
|  | 			return nil, fmt.Errorf("%s", "Gateway without name found") | ||||||
|  | 		} | ||||||
|  | 		if _, ok := r.Gateways[entry.Name]; ok { | ||||||
|  | 			return nil, fmt.Errorf("Gateway with name %s already exists", entry.Name) | ||||||
|  | 		} | ||||||
|  | 		r.Gateways[entry.Name] = New(entry, r) | ||||||
|  | 	} | ||||||
|  | 	return r, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *Router) Start() error { | ||||||
|  | 	m := make(map[string]*bridge.Bridge) | ||||||
|  | 	for _, gw := range r.Gateways { | ||||||
|  | 		for _, br := range gw.Bridges { | ||||||
|  | 			m[br.Account] = br | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	for _, br := range m { | ||||||
|  | 		log.Infof("Starting bridge: %s ", br.Account) | ||||||
|  | 		err := br.Connect() | ||||||
|  | 		if err != nil { | ||||||
|  | 			return fmt.Errorf("Bridge %s failed to start: %v", br.Account, err) | ||||||
|  | 		} | ||||||
|  | 		err = br.JoinChannels() | ||||||
|  | 		if err != nil { | ||||||
|  | 			return fmt.Errorf("Bridge %s failed to join channel: %v", br.Account, err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	go r.handleReceive() | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *Router) getBridge(account string) *bridge.Bridge { | ||||||
|  | 	for _, gw := range r.Gateways { | ||||||
|  | 		if br, ok := gw.Bridges[account]; ok { | ||||||
|  | 			return br | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (r *Router) handleReceive() { | ||||||
|  | 	for msg := range r.Message { | ||||||
|  | 		if msg.Event == config.EVENT_FAILURE { | ||||||
|  | 		Loop: | ||||||
|  | 			for _, gw := range r.Gateways { | ||||||
|  | 				for _, br := range gw.Bridges { | ||||||
|  | 					if msg.Account == br.Account { | ||||||
|  | 						go gw.reconnectBridge(br) | ||||||
|  | 						break Loop | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if msg.Event == config.EVENT_REJOIN_CHANNELS { | ||||||
|  | 			for _, gw := range r.Gateways { | ||||||
|  | 				for _, br := range gw.Bridges { | ||||||
|  | 					if msg.Account == br.Account { | ||||||
|  | 						br.Joined = make(map[string]bool) | ||||||
|  | 						br.JoinChannels() | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		for _, gw := range r.Gateways { | ||||||
|  | 			// record all the message ID's of the different bridges | ||||||
|  | 			var msgIDs []*BrMsgID | ||||||
|  | 			if !gw.ignoreMessage(&msg) { | ||||||
|  | 				msg.Timestamp = time.Now() | ||||||
|  | 				gw.modifyMessage(&msg) | ||||||
|  | 				for _, br := range gw.Bridges { | ||||||
|  | 					msgIDs = append(msgIDs, gw.handleMessage(msg, br)...) | ||||||
|  | 				} | ||||||
|  | 				// only add the message ID if it doesn't already exists | ||||||
|  | 				if _, ok := gw.Messages.Get(msg.ID); !ok && msg.ID != "" { | ||||||
|  | 					gw.Messages.Add(msg.ID, msgIDs) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										31
									
								
								gateway/samechannel/samechannel_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								gateway/samechannel/samechannel_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | package samechannelgateway | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"fmt" | ||||||
|  | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
|  | 	"github.com/BurntSushi/toml" | ||||||
|  | 	"github.com/stretchr/testify/assert" | ||||||
|  |  | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var testconfig = ` | ||||||
|  | [mattermost.test] | ||||||
|  | [slack.test] | ||||||
|  |  | ||||||
|  | [[samechannelgateway]] | ||||||
|  |    enable = true | ||||||
|  |    name = "blah" | ||||||
|  |       accounts = [ "mattermost.test","slack.test" ] | ||||||
|  |       channels = [ "testing","testing2","testing10"] | ||||||
|  | ` | ||||||
|  |  | ||||||
|  | func TestGetConfig(t *testing.T) { | ||||||
|  | 	var cfg *config.Config | ||||||
|  | 	if _, err := toml.Decode(testconfig, &cfg); err != nil { | ||||||
|  | 		fmt.Println(err) | ||||||
|  | 	} | ||||||
|  | 	sgw := New(cfg) | ||||||
|  | 	configs := sgw.GetConfig() | ||||||
|  | 	assert.Equal(t, []config.Gateway{{Name: "blah", Enable: true, In: []config.Bridge(nil), Out: []config.Bridge(nil), InOut: []config.Bridge{{Account: "mattermost.test", Channel: "testing", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "mattermost.test", Channel: "testing2", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "mattermost.test", Channel: "testing10", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "slack.test", Channel: "testing", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "slack.test", Channel: "testing2", Options: config.ChannelOptions{Key: ""}, SameChannel: true}, {Account: "slack.test", Channel: "testing10", Options: config.ChannelOptions{Key: ""}, SameChannel: true}}}}, configs) | ||||||
|  | } | ||||||
| @@ -99,10 +99,9 @@ func (c *Client) ServeHTTP(w http.ResponseWriter, r *http.Request) { | |||||||
|  |  | ||||||
| // Receive returns an incoming message from mattermost outgoing webhooks URL. | // Receive returns an incoming message from mattermost outgoing webhooks URL. | ||||||
| func (c *Client) Receive() Message { | func (c *Client) Receive() Message { | ||||||
| 	for { | 	var msg Message | ||||||
| 		select { | 	for msg = range c.In { | ||||||
| 		case msg := <-c.In: | 		return msg | ||||||
| 			return msg |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
|  | 	return msg | ||||||
| } | } | ||||||
|   | |||||||
| @@ -5,14 +5,13 @@ import ( | |||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"github.com/42wim/matterbridge/bridge/config" | 	"github.com/42wim/matterbridge/bridge/config" | ||||||
| 	"github.com/42wim/matterbridge/gateway" | 	"github.com/42wim/matterbridge/gateway" | ||||||
| 	"github.com/42wim/matterbridge/gateway/samechannel" |  | ||||||
| 	log "github.com/Sirupsen/logrus" | 	log "github.com/Sirupsen/logrus" | ||||||
| 	"github.com/google/gops/agent" | 	"github.com/google/gops/agent" | ||||||
| 	"strings" | 	"strings" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| var ( | var ( | ||||||
| 	version = "0.14.0" | 	version = "1.1.0" | ||||||
| 	githash string | 	githash string | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -43,20 +42,11 @@ func main() { | |||||||
| 		log.Println("WARNING: THIS IS A DEVELOPMENT VERSION. Things may break.") | 		log.Println("WARNING: THIS IS A DEVELOPMENT VERSION. Things may break.") | ||||||
| 	} | 	} | ||||||
| 	cfg := config.NewConfig(*flagConfig) | 	cfg := config.NewConfig(*flagConfig) | ||||||
|  | 	r, err := gateway.NewRouter(cfg) | ||||||
| 	g := gateway.New(cfg) | 	if err != nil { | ||||||
| 	sgw := samechannelgateway.New(cfg) | 		log.Fatalf("Starting gateway failed: %s", err) | ||||||
| 	gwconfigs := sgw.GetConfig() |  | ||||||
| 	for _, gw := range append(gwconfigs, cfg.Gateway...) { |  | ||||||
| 		if !gw.Enable { |  | ||||||
| 			continue |  | ||||||
| 		} |  | ||||||
| 		err := g.AddConfig(&gw) |  | ||||||
| 		if err != nil { |  | ||||||
| 			log.Fatalf("Starting gateway failed: %s", err) |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 	err := g.Start() | 	err = r.Start() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Fatalf("Starting gateway failed: %s", err) | 		log.Fatalf("Starting gateway failed: %s", err) | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -32,6 +32,23 @@ UseSASL=false | |||||||
| #OPTIONAL (default false) | #OPTIONAL (default false) | ||||||
| SkipTLSVerify=true | SkipTLSVerify=true | ||||||
|  |  | ||||||
|  | #If you know your charset, you can specify it manually.  | ||||||
|  | #Otherwise it tries to detect this automatically. Select one below | ||||||
|  | # "iso-8859-2:1987", "iso-8859-9:1989", "866", "latin9", "iso-8859-10:1992", "iso-ir-109", "hebrew",  | ||||||
|  | # "cp932", "iso-8859-15", "cp437", "utf-16be", "iso-8859-3:1988", "windows-1251", "utf16", "latin6",  | ||||||
|  | # "latin3", "iso-8859-1:1987", "iso-8859-9", "utf-16le", "big5", "cp819", "asmo-708", "utf-8",  | ||||||
|  | # "ibm437", "iso-ir-157", "iso-ir-144", "latin4", "850", "iso-8859-5", "iso-8859-5:1988", "l3",  | ||||||
|  | # "windows-31j", "utf8", "iso-8859-3", "437", "greek", "iso-8859-8", "l6", "l9-iso-8859-15",  | ||||||
|  | # "iso-8859-2", "latin2", "iso-ir-100", "iso-8859-6", "arabic", "iso-ir-148", "us-ascii", "x-sjis",  | ||||||
|  | # "utf16be", "iso-8859-8:1988", "utf16le", "l4", "utf-16", "iso-ir-138", "iso-8859-7", "iso-8859-7:1987",  | ||||||
|  | # "windows-1252", "l2", "koi8-r", "iso8859-1", "latin1", "ecma-114", "iso-ir-110", "elot-928",  | ||||||
|  | # "iso-ir-126", "iso-8859-1", "iso-ir-127", "cp850", "cyrillic", "greek8", "windows-1250", "iso-latin-1",  | ||||||
|  | # "l5", "ibm866", "cp866", "ms-kanji", "ibm850", "ecma-118", "iso-ir-101", "ibm819", "l1", "iso-8859-6:1987",  | ||||||
|  | # "latin5", "ascii", "sjis", "iso-8859-10", "iso-8859-4", "iso-8859-4:1988", "shift-jis | ||||||
|  | # The select charset will be converted to utf-8 when sent to other bridges. | ||||||
|  | #OPTIONAL (default "") | ||||||
|  | Charset="" | ||||||
|  |  | ||||||
| #Your nick on irc.  | #Your nick on irc.  | ||||||
| #REQUIRED | #REQUIRED | ||||||
| Nick="matterbot" | Nick="matterbot" | ||||||
| @@ -63,6 +80,12 @@ MessageLength=400 | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="ircspammer1 ircspammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -115,6 +138,12 @@ SkipTLSVerify=true | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="ircspammer1 ircspammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -159,6 +188,12 @@ Nick="yourlogin" | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="spammer1 spammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -181,51 +216,53 @@ ShowJoinPart=false | |||||||
| #REQUIRED | #REQUIRED | ||||||
|  |  | ||||||
| [mattermost.work] | [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. (do not prefix it with http or https) | #The mattermost hostname. (do not prefix it with http or https) | ||||||
| #REQUIRED (when useAPI=true) | #REQUIRED (when not using webhooks) | ||||||
| Server="yourmattermostserver.domain"  | Server="yourmattermostserver.domain"  | ||||||
|  |  | ||||||
| #Your team on mattermost.  | #Your team on mattermost.  | ||||||
| #REQUIRED (when useAPI=true) | #REQUIRED (when not using webhooks) | ||||||
| Team="yourteam" | Team="yourteam" | ||||||
|  |  | ||||||
| #login/pass of your bot.  | #login/pass of your bot.  | ||||||
| #Use a dedicated user for this and not your own!  | #Use a dedicated user for this and not your own!  | ||||||
| #REQUIRED (when useAPI=true) | #REQUIRED (when not using webhooks) | ||||||
| Login="yourlogin" | Login="yourlogin" | ||||||
| Password="yourpass" | Password="yourpass" | ||||||
|  |  | ||||||
|  | #personal access token of the bot. | ||||||
|  | #new feature since mattermost 4.1. See https://docs.mattermost.com/developer/personal-access-tokens.html | ||||||
|  | #OPTIONAL (you can use token instead of login/password) | ||||||
|  | #Token="abcdefghijklm" | ||||||
|  |  | ||||||
| #Enable this to make a http connection (instead of https) to your mattermost.  | #Enable this to make a http connection (instead of https) to your mattermost.  | ||||||
| #OPTIONAL (default false) | #OPTIONAL (default false) | ||||||
| NoTLS=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.  | #Enable to not verify the certificate on your mattermost server.  | ||||||
| #e.g. when using selfsigned certificates | #e.g. when using selfsigned certificates | ||||||
| @@ -261,6 +298,12 @@ EditSuffix=" (edited)" | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="ircspammer1 ircspammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -294,6 +337,12 @@ Token="Yourtokenhere" | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="ircspammer1 ircspammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -315,15 +364,20 @@ ShowJoinPart=false | |||||||
| #In this example we use [slack.hobby] | #In this example we use [slack.hobby] | ||||||
| #REQUIRED | #REQUIRED | ||||||
| [slack.hobby] | [slack.hobby] | ||||||
| #### Settings for webhook matterbridge. | #Token to connect with the Slack API | ||||||
| #### These settings will not be used when useAPI is enabled | #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 | #NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API | ||||||
| #AND DEDICATED BOT USER WHEN POSSIBLE! | #AND DEDICATED BOT USER WHEN POSSIBLE! | ||||||
| #Url is your incoming webhook url as specified in slack | #Url is your incoming webhook url as specified in slack | ||||||
| #See account settings - integrations - incoming webhooks on slack | #See account settings - integrations - incoming webhooks on slack | ||||||
| #REQUIRED (unless useAPI=true) | #OPTIONAL | ||||||
| URL="https://hooks.slack.com/services/yourhook" | WebhookURL="https://hooks.slack.com/services/yourhook" | ||||||
|  |  | ||||||
| #NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API | #NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API | ||||||
| #AND DEDICATED BOT USER WHEN POSSIBLE! | #AND DEDICATED BOT USER WHEN POSSIBLE! | ||||||
| @@ -331,21 +385,8 @@ URL="https://hooks.slack.com/services/yourhook" | |||||||
| #See account settings - integrations - outgoing webhooks on slack | #See account settings - integrations - outgoing webhooks on slack | ||||||
| #This setting will not be used when useAPI is eanbled | #This setting will not be used when useAPI is eanbled | ||||||
| #webhooks | #webhooks | ||||||
| #REQUIRED (unless useAPI=true) |  | ||||||
| BindAddress="0.0.0.0:9999" |  | ||||||
|  |  | ||||||
| #### Settings for using slack API (RECOMMENDED) |  | ||||||
| #OPTIONAL | #OPTIONAL | ||||||
| useAPI=false | WebhookBindAddress="0.0.0.0:9999" | ||||||
|  |  | ||||||
| #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 useAPI=true) |  | ||||||
| Token="yourslacktoken" |  | ||||||
|  |  | ||||||
| #### Shared settings for webhooks and API |  | ||||||
|  |  | ||||||
| #Icon that will be showed in slack | #Icon that will be showed in slack | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | ||||||
| @@ -383,6 +424,12 @@ PrefixMessagesWithNick=false | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="ircspammer1 ircspammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -414,6 +461,19 @@ Token="Yourtokenhere" | |||||||
| #REQUIRED | #REQUIRED | ||||||
| Server="yourservername" | Server="yourservername" | ||||||
|  |  | ||||||
|  | #Shows title, description and URL of embedded messages (sent by other bots) | ||||||
|  | #OPTIONAL (default false) | ||||||
|  | ShowEmbeds=false | ||||||
|  |  | ||||||
|  | #Shows the username (minus the discriminator) instead of the server nickname | ||||||
|  | #OPTIONAL (default false) | ||||||
|  | UseUserName=false | ||||||
|  |  | ||||||
|  | #Specify WebhookURL. If given, will relay messages using the Webhook, which gives a better look to messages. | ||||||
|  | #This only works if you have one discord channel, if you have multiple discord channels you'll have to specify it in the gateway config | ||||||
|  | #OPTIONAL (default empty) | ||||||
|  | WebhookURL="Yourwebhooktokenhere" | ||||||
|  |  | ||||||
| #Disable sending of edits to other bridges | #Disable sending of edits to other bridges | ||||||
| #OPTIONAL (default false) | #OPTIONAL (default false) | ||||||
| EditDisable=false | EditDisable=false | ||||||
| @@ -427,6 +487,12 @@ EditSuffix=" (edited)" | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="ircspammer1 ircspammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -464,6 +530,12 @@ MessageFormat="" | |||||||
| #OPTIONAL (default false) | #OPTIONAL (default false) | ||||||
| UseFirstName=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 | #Disable sending of edits to other bridges | ||||||
| #OPTIONAL (default false) | #OPTIONAL (default false) | ||||||
| EditDisable=false | EditDisable=false | ||||||
| @@ -477,6 +549,12 @@ EditSuffix=" (edited)" | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="spammer1 spammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -503,12 +581,12 @@ ShowJoinPart=false | |||||||
| #Read #https://rocket.chat/docs/administrator-guides/integrations/#how-to-create-a-new-incoming-webhook | #Read #https://rocket.chat/docs/administrator-guides/integrations/#how-to-create-a-new-incoming-webhook | ||||||
| #See administration - integrations - new integration - incoming webhook | #See administration - integrations - new integration - incoming webhook | ||||||
| #REQUIRED | #REQUIRED | ||||||
| URL="https://yourdomain/hooks/yourhookkey" | WebhookURL="https://yourdomain/hooks/yourhookkey" | ||||||
|  |  | ||||||
| #Address to listen on for outgoing webhook requests from rocketchat. | #Address to listen on for outgoing webhook requests from rocketchat. | ||||||
| #See administration - integrations - new integration - outgoing webhook | #See administration - integrations - new integration - outgoing webhook | ||||||
| #REQUIRED  | #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 | #Your nick/username as specified in your incoming webhook "Post as" setting | ||||||
| #REQUIRED | #REQUIRED | ||||||
| @@ -535,6 +613,12 @@ PrefixMessagesWithNick=false | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="ircspammer1 ircspammer2" | 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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -584,6 +668,61 @@ PrefixMessagesWithNick=false | |||||||
| #OPTIONAL | #OPTIONAL | ||||||
| IgnoreNicks="spammer1 spammer2" | 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 | ||||||
|  |  | ||||||
|  | ################################################################### | ||||||
|  | #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  | #RemoteNickFormat defines how remote users appear on this bridge  | ||||||
| #The string "{NICK}" (case sensitive) will be replaced by the actual nick / username. | #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 "{BRIDGE}" (case sensitive) will be replaced by the sending bridge | ||||||
| @@ -681,9 +820,12 @@ enable=true | |||||||
|     #telegram   - chatid (a large negative number, eg -123456789) |     #telegram   - chatid (a large negative number, eg -123456789) | ||||||
|     #             see (https://www.linkedin.com/pulse/telegram-bots-beginners-marco-frau) |     #             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) |     #hipchat    - id_channel (see https://www.hipchat.com/account/xmpp for the correct channel) | ||||||
|     #rocketchat - #channel (# is required) |     #rocketchat - #channel (# is required (also needed for private channels!) | ||||||
|     #matrix     - #channel:server (eg #yourchannel:matrix.org)  |     #matrix     - #channel:server (eg #yourchannel:matrix.org)  | ||||||
|     #           - encrypted rooms are not supported in matrix |     #           - 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 |     #REQUIRED | ||||||
|     channel="#testing" |     channel="#testing" | ||||||
|  |  | ||||||
| @@ -714,6 +856,14 @@ enable=true | |||||||
|         #OPTIONAL - your irc channel key |         #OPTIONAL - your irc channel key | ||||||
|         key="yourkey" |         key="yourkey" | ||||||
|  |  | ||||||
|  |     [[gateway.inout]] | ||||||
|  |     account="discord.game" | ||||||
|  |     channel="mygreatgame" | ||||||
|  |  | ||||||
|  |         #OPTIONAL - webhookurl only works for discord (it needs a different URL for each cahnnel) | ||||||
|  |         [gateway.inout.options] | ||||||
|  |         webhookurl=""https://discordapp.com/api/webhooks/123456789123456789/C9WPqExYWONPDZabcdef-def1434FGFjstasJX9pYht73y" | ||||||
|  |  | ||||||
|     #API example |     #API example | ||||||
|     #[[gateway.inout]] |     #[[gateway.inout]] | ||||||
|     #account="api.local" |     #account="api.local" | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package matterclient | package matterclient | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"crypto/md5" | ||||||
| 	"crypto/tls" | 	"crypto/tls" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"errors" | 	"errors" | ||||||
| @@ -8,7 +9,6 @@ import ( | |||||||
| 	"net/http" | 	"net/http" | ||||||
| 	"net/http/cookiejar" | 	"net/http/cookiejar" | ||||||
| 	"net/url" | 	"net/url" | ||||||
| 	"strconv" |  | ||||||
| 	"strings" | 	"strings" | ||||||
| 	"sync" | 	"sync" | ||||||
| 	"time" | 	"time" | ||||||
| @@ -16,6 +16,7 @@ import ( | |||||||
| 	log "github.com/Sirupsen/logrus" | 	log "github.com/Sirupsen/logrus" | ||||||
|  |  | ||||||
| 	"github.com/gorilla/websocket" | 	"github.com/gorilla/websocket" | ||||||
|  | 	"github.com/hashicorp/golang-lru" | ||||||
| 	"github.com/jpillora/backoff" | 	"github.com/jpillora/backoff" | ||||||
| 	"github.com/mattermost/platform/model" | 	"github.com/mattermost/platform/model" | ||||||
| ) | ) | ||||||
| @@ -37,13 +38,14 @@ type Message struct { | |||||||
| 	Username string | 	Username string | ||||||
| 	Text     string | 	Text     string | ||||||
| 	Type     string | 	Type     string | ||||||
|  | 	UserID   string | ||||||
| } | } | ||||||
|  |  | ||||||
| type Team struct { | type Team struct { | ||||||
| 	Team         *model.Team | 	Team         *model.Team | ||||||
| 	Id           string | 	Id           string | ||||||
| 	Channels     *model.ChannelList | 	Channels     []*model.Channel | ||||||
| 	MoreChannels *model.ChannelList | 	MoreChannels []*model.Channel | ||||||
| 	Users        map[string]*model.User | 	Users        map[string]*model.User | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -52,7 +54,7 @@ type MMClient struct { | |||||||
| 	*Credentials | 	*Credentials | ||||||
| 	Team          *Team | 	Team          *Team | ||||||
| 	OtherTeams    []*Team | 	OtherTeams    []*Team | ||||||
| 	Client        *model.Client | 	Client        *model.Client4 | ||||||
| 	User          *model.User | 	User          *model.User | ||||||
| 	Users         map[string]*model.User | 	Users         map[string]*model.User | ||||||
| 	MessageChan   chan *Message | 	MessageChan   chan *Message | ||||||
| @@ -64,6 +66,8 @@ type MMClient struct { | |||||||
| 	WsSequence    int64 | 	WsSequence    int64 | ||||||
| 	WsPingChan    chan *model.WebSocketResponse | 	WsPingChan    chan *model.WebSocketResponse | ||||||
| 	ServerVersion string | 	ServerVersion string | ||||||
|  | 	OnWsConnect   func() | ||||||
|  | 	lruCache      *lru.Cache | ||||||
| } | } | ||||||
|  |  | ||||||
| func New(login, pass, team, server string) *MMClient { | func New(login, pass, team, server string) *MMClient { | ||||||
| @@ -71,6 +75,7 @@ func New(login, pass, team, server string) *MMClient { | |||||||
| 	mmclient := &MMClient{Credentials: cred, MessageChan: make(chan *Message, 100), Users: make(map[string]*model.User)} | 	mmclient := &MMClient{Credentials: cred, MessageChan: make(chan *Message, 100), Users: make(map[string]*model.User)} | ||||||
| 	mmclient.log = log.WithFields(log.Fields{"module": "matterclient"}) | 	mmclient.log = log.WithFields(log.Fields{"module": "matterclient"}) | ||||||
| 	log.SetFormatter(&log.TextFormatter{FullTimestamp: true}) | 	log.SetFormatter(&log.TextFormatter{FullTimestamp: true}) | ||||||
|  | 	mmclient.lruCache, _ = lru.New(500) | ||||||
| 	return mmclient | 	return mmclient | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -86,7 +91,7 @@ func (m *MMClient) SetLogLevel(level string) { | |||||||
| func (m *MMClient) Login() error { | func (m *MMClient) Login() error { | ||||||
| 	// check if this is a first connect or a reconnection | 	// check if this is a first connect or a reconnection | ||||||
| 	firstConnection := true | 	firstConnection := true | ||||||
| 	if m.WsConnected == true { | 	if m.WsConnected { | ||||||
| 		firstConnection = false | 		firstConnection = false | ||||||
| 	} | 	} | ||||||
| 	m.WsConnected = false | 	m.WsConnected = false | ||||||
| @@ -99,24 +104,25 @@ func (m *MMClient) Login() error { | |||||||
| 		Jitter: true, | 		Jitter: true, | ||||||
| 	} | 	} | ||||||
| 	uriScheme := "https://" | 	uriScheme := "https://" | ||||||
| 	wsScheme := "wss://" |  | ||||||
| 	if m.NoTLS { | 	if m.NoTLS { | ||||||
| 		uriScheme = "http://" | 		uriScheme = "http://" | ||||||
| 		wsScheme = "ws://" |  | ||||||
| 	} | 	} | ||||||
| 	// login to mattermost | 	// login to mattermost | ||||||
| 	m.Client = model.NewClient(uriScheme + m.Credentials.Server) | 	m.Client = model.NewAPIv4Client(uriScheme + m.Credentials.Server) | ||||||
| 	m.Client.HttpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}, Proxy: http.ProxyFromEnvironment} | 	m.Client.HttpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}, Proxy: http.ProxyFromEnvironment} | ||||||
| 	m.Client.HttpClient.Timeout = time.Second * 10 | 	m.Client.HttpClient.Timeout = time.Second * 10 | ||||||
|  |  | ||||||
| 	for { | 	for { | ||||||
| 		d := b.Duration() | 		d := b.Duration() | ||||||
| 		// bogus call to get the serverversion | 		// bogus call to get the serverversion | ||||||
| 		m.Client.GetClientProperties() | 		_, resp := m.Client.Logout() | ||||||
| 		if firstConnection && !supportedVersion(m.Client.ServerVersion) { | 		if resp.Error != nil { | ||||||
| 			return fmt.Errorf("unsupported mattermost version: %s", m.Client.ServerVersion) | 			return fmt.Errorf("%#v", resp.Error.Error()) | ||||||
| 		} | 		} | ||||||
| 		m.ServerVersion = m.Client.ServerVersion | 		if firstConnection && !supportedVersion(resp.ServerVersion) { | ||||||
|  | 			return fmt.Errorf("unsupported mattermost version: %s", resp.ServerVersion) | ||||||
|  | 		} | ||||||
|  | 		m.ServerVersion = resp.ServerVersion | ||||||
| 		if m.ServerVersion == "" { | 		if m.ServerVersion == "" { | ||||||
| 			m.log.Debugf("Server not up yet, reconnecting in %s", d) | 			m.log.Debugf("Server not up yet, reconnecting in %s", d) | ||||||
| 			time.Sleep(d) | 			time.Sleep(d) | ||||||
| @@ -127,30 +133,33 @@ func (m *MMClient) Login() error { | |||||||
| 	} | 	} | ||||||
| 	b.Reset() | 	b.Reset() | ||||||
|  |  | ||||||
| 	var myinfo *model.Result | 	var resp *model.Response | ||||||
|  | 	//var myinfo *model.Result | ||||||
| 	var appErr *model.AppError | 	var appErr *model.AppError | ||||||
| 	var logmsg = "trying login" | 	var logmsg = "trying login" | ||||||
| 	for { | 	for { | ||||||
| 		m.log.Debugf("%s %s %s %s", logmsg, m.Credentials.Team, m.Credentials.Login, m.Credentials.Server) | 		m.log.Debugf("%s %s %s %s", logmsg, m.Credentials.Team, m.Credentials.Login, m.Credentials.Server) | ||||||
| 		if strings.Contains(m.Credentials.Pass, model.SESSION_COOKIE_TOKEN) { | 		if strings.Contains(m.Credentials.Pass, model.SESSION_COOKIE_TOKEN) { | ||||||
| 			m.log.Debugf(logmsg+" with %s", model.SESSION_COOKIE_TOKEN) | 			m.log.Debugf(logmsg + " with token") | ||||||
| 			token := strings.Split(m.Credentials.Pass, model.SESSION_COOKIE_TOKEN+"=") | 			token := strings.Split(m.Credentials.Pass, model.SESSION_COOKIE_TOKEN+"=") | ||||||
| 			if len(token) != 2 { | 			if len(token) != 2 { | ||||||
| 				return errors.New("incorrect MMAUTHTOKEN. valid input is MMAUTHTOKEN=yourtoken") | 				return errors.New("incorrect MMAUTHTOKEN. valid input is MMAUTHTOKEN=yourtoken") | ||||||
| 			} | 			} | ||||||
| 			m.Client.HttpClient.Jar = m.createCookieJar(token[1]) | 			m.Client.HttpClient.Jar = m.createCookieJar(token[1]) | ||||||
| 			m.Client.MockSession(token[1]) | 			m.Client.AuthToken = token[1] | ||||||
| 			myinfo, appErr = m.Client.GetMe("") | 			m.Client.AuthType = model.HEADER_BEARER | ||||||
| 			if appErr != nil { | 			m.User, resp = m.Client.GetMe("") | ||||||
| 				return errors.New(appErr.DetailedError) | 			if resp.Error != nil { | ||||||
|  | 				return resp.Error | ||||||
| 			} | 			} | ||||||
| 			if myinfo.Data.(*model.User) == nil { | 			if m.User == nil { | ||||||
| 				m.log.Errorf("LOGIN TOKEN: %s is invalid", m.Credentials.Pass) | 				m.log.Errorf("LOGIN TOKEN: %s is invalid", m.Credentials.Pass) | ||||||
| 				return errors.New("invalid " + model.SESSION_COOKIE_TOKEN) | 				return errors.New("invalid " + model.SESSION_COOKIE_TOKEN) | ||||||
| 			} | 			} | ||||||
| 		} else { | 		} else { | ||||||
| 			myinfo, appErr = m.Client.Login(m.Credentials.Login, m.Credentials.Pass) | 			m.User, resp = m.Client.Login(m.Credentials.Login, m.Credentials.Pass) | ||||||
| 		} | 		} | ||||||
|  | 		appErr = resp.Error | ||||||
| 		if appErr != nil { | 		if appErr != nil { | ||||||
| 			d := b.Duration() | 			d := b.Duration() | ||||||
| 			m.log.Debug(appErr.DetailedError) | 			m.log.Debug(appErr.DetailedError) | ||||||
| @@ -178,17 +187,34 @@ func (m *MMClient) Login() error { | |||||||
| 	if m.Team == nil { | 	if m.Team == nil { | ||||||
| 		return errors.New("team not found") | 		return errors.New("team not found") | ||||||
| 	} | 	} | ||||||
| 	// 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 | 	// setup websocket connection | ||||||
| 	wsurl := wsScheme + m.Credentials.Server + model.API_URL_SUFFIX_V3 + "/users/websocket" | 	wsurl := wsScheme + m.Credentials.Server + model.API_URL_SUFFIX_V4 + "/websocket" | ||||||
| 	header := http.Header{} | 	header := http.Header{} | ||||||
| 	header.Set(model.HEADER_AUTH, "BEARER "+m.Client.AuthToken) | 	header.Set(model.HEADER_AUTH, "BEARER "+m.Client.AuthToken) | ||||||
|  |  | ||||||
| 	m.log.Debugf("WsClient: making connection: %s", wsurl) | 	m.log.Debugf("WsClient: making connection: %s", wsurl) | ||||||
| 	for { | 	for { | ||||||
| 		wsDialer := &websocket.Dialer{Proxy: http.ProxyFromEnvironment, TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}} | 		wsDialer := &websocket.Dialer{Proxy: http.ProxyFromEnvironment, TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}} | ||||||
|  | 		var err error | ||||||
| 		m.WsClient, _, err = wsDialer.Dial(wsurl, header) | 		m.WsClient, _, err = wsDialer.Dial(wsurl, header) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			d := b.Duration() | 			d := b.Duration() | ||||||
| @@ -198,15 +224,12 @@ func (m *MMClient) Login() error { | |||||||
| 		} | 		} | ||||||
| 		break | 		break | ||||||
| 	} | 	} | ||||||
| 	b.Reset() |  | ||||||
|  |  | ||||||
| 	m.log.Debug("WsClient: connected") | 	m.log.Debug("WsClient: connected") | ||||||
| 	m.WsSequence = 1 | 	m.WsSequence = 1 | ||||||
| 	m.WsPingChan = make(chan *model.WebSocketResponse) | 	m.WsPingChan = make(chan *model.WebSocketResponse) | ||||||
| 	// only start to parse WS messages when login is completely done | 	// only start to parse WS messages when login is completely done | ||||||
| 	m.WsConnected = true | 	m.WsConnected = true | ||||||
|  |  | ||||||
| 	return nil |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) Logout() error { | func (m *MMClient) Logout() error { | ||||||
| @@ -214,9 +237,13 @@ func (m *MMClient) Logout() error { | |||||||
| 	m.WsQuit = true | 	m.WsQuit = true | ||||||
| 	m.WsClient.Close() | 	m.WsClient.Close() | ||||||
| 	m.WsClient.UnderlyingConn().Close() | 	m.WsClient.UnderlyingConn().Close() | ||||||
| 	_, err := m.Client.Logout() | 	if strings.Contains(m.Credentials.Pass, model.SESSION_COOKIE_TOKEN) { | ||||||
| 	if err != nil { | 		m.log.Debug("Not invalidating session in logout, credential is a token") | ||||||
| 		return err | 		return nil | ||||||
|  | 	} | ||||||
|  | 	_, resp := m.Client.Logout() | ||||||
|  | 	if resp.Error != nil { | ||||||
|  | 		return resp.Error | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| @@ -239,21 +266,24 @@ func (m *MMClient) WsReceiver() { | |||||||
| 		if _, rawMsg, err = m.WsClient.ReadMessage(); err != nil { | 		if _, rawMsg, err = m.WsClient.ReadMessage(); err != nil { | ||||||
| 			m.log.Error("error:", err) | 			m.log.Error("error:", err) | ||||||
| 			// reconnect | 			// reconnect | ||||||
| 			m.Login() | 			m.wsConnect() | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		var event model.WebSocketEvent | 		var event model.WebSocketEvent | ||||||
| 		if err := json.Unmarshal(rawMsg, &event); err == nil && event.IsValid() { | 		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} | 			msg := &Message{Raw: &event, Team: m.Credentials.Team} | ||||||
| 			m.parseMessage(msg) | 			m.parseMessage(msg) | ||||||
| 			m.MessageChan <- msg | 			// check if we didn't empty the message | ||||||
|  | 			if msg.Text != "" { | ||||||
|  | 				m.MessageChan <- msg | ||||||
|  | 			} | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		var response model.WebSocketResponse | 		var response model.WebSocketResponse | ||||||
| 		if err := json.Unmarshal(rawMsg, &response); err == nil && response.IsValid() { | 		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) | 			m.parseResponse(response) | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| @@ -283,13 +313,22 @@ func (m *MMClient) parseResponse(rmsg model.WebSocketResponse) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) parseActionPost(rmsg *Message) { | func (m *MMClient) parseActionPost(rmsg *Message) { | ||||||
|  | 	// add post to cache, if it already exists don't relay this again. | ||||||
|  | 	// this should fix reposts | ||||||
|  | 	if ok, _ := m.lruCache.ContainsOrAdd(digestString(rmsg.Raw.Data["post"].(string)), true); ok { | ||||||
|  | 		m.log.Debugf("message %#v in cache, not processing again", rmsg.Raw.Data["post"].(string)) | ||||||
|  | 		rmsg.Text = "" | ||||||
|  | 		return | ||||||
|  | 	} | ||||||
| 	data := model.PostFromJson(strings.NewReader(rmsg.Raw.Data["post"].(string))) | 	data := model.PostFromJson(strings.NewReader(rmsg.Raw.Data["post"].(string))) | ||||||
| 	// we don't have the user, refresh the userlist | 	// we don't have the user, refresh the userlist | ||||||
| 	if m.GetUser(data.UserId) == nil { | 	if m.GetUser(data.UserId) == nil { | ||||||
| 		m.UpdateUsers() | 		m.log.Infof("User %s is not known, ignoring message %s", data) | ||||||
|  | 		return | ||||||
| 	} | 	} | ||||||
| 	rmsg.Username = m.GetUserName(data.UserId) | 	rmsg.Username = m.GetUserName(data.UserId) | ||||||
| 	rmsg.Channel = m.GetChannelName(data.ChannelId) | 	rmsg.Channel = m.GetChannelName(data.ChannelId) | ||||||
|  | 	rmsg.UserID = data.UserId | ||||||
| 	rmsg.Type = data.Type | 	rmsg.Type = data.Type | ||||||
| 	teamid, _ := rmsg.Raw.Data["team_id"].(string) | 	teamid, _ := rmsg.Raw.Data["team_id"].(string) | ||||||
| 	// edit messsages have no team_id for some reason | 	// edit messsages have no team_id for some reason | ||||||
| @@ -307,37 +346,37 @@ func (m *MMClient) parseActionPost(rmsg *Message) { | |||||||
| 	} | 	} | ||||||
| 	rmsg.Text = data.Message | 	rmsg.Text = data.Message | ||||||
| 	rmsg.Post = data | 	rmsg.Post = data | ||||||
| 	return |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) UpdateUsers() error { | func (m *MMClient) UpdateUsers() error { | ||||||
| 	mmusers, err := m.Client.GetProfiles(0, 50000, "") | 	mmusers, resp := m.Client.GetUsers(0, 50000, "") | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		return errors.New(err.DetailedError) | 		return errors.New(resp.Error.DetailedError) | ||||||
| 	} | 	} | ||||||
| 	m.Lock() | 	m.Lock() | ||||||
| 	m.Users = mmusers.Data.(map[string]*model.User) | 	for _, user := range mmusers { | ||||||
|  | 		m.Users[user.Id] = user | ||||||
|  | 	} | ||||||
| 	m.Unlock() | 	m.Unlock() | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) UpdateChannels() error { | func (m *MMClient) UpdateChannels() error { | ||||||
| 	mmchannels, err := m.Client.GetChannels("") | 	mmchannels, resp := m.Client.GetChannelsForTeamForUser(m.Team.Id, m.User.Id, "") | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		return errors.New(err.DetailedError) | 		return errors.New(resp.Error.DetailedError) | ||||||
| 	} |  | ||||||
| 	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) |  | ||||||
| 	} | 	} | ||||||
| 	m.Lock() | 	m.Lock() | ||||||
| 	m.Team.Channels = mmchannels.Data.(*model.ChannelList) | 	m.Team.Channels = mmchannels | ||||||
| 	m.Team.MoreChannels = mmchannels2.Data.(*model.ChannelList) | 	m.Unlock() | ||||||
|  |  | ||||||
|  | 	mmchannels, resp = m.Client.GetPublicChannelsForTeam(m.Team.Id, 0, 5000, "") | ||||||
|  | 	if resp.Error != nil { | ||||||
|  | 		return errors.New(resp.Error.DetailedError) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	m.Lock() | ||||||
|  | 	m.Team.MoreChannels = mmchannels | ||||||
| 	m.Unlock() | 	m.Unlock() | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| @@ -346,9 +385,21 @@ func (m *MMClient) GetChannelName(channelId string) string { | |||||||
| 	m.RLock() | 	m.RLock() | ||||||
| 	defer m.RUnlock() | 	defer m.RUnlock() | ||||||
| 	for _, t := range m.OtherTeams { | 	for _, t := range m.OtherTeams { | ||||||
| 		for _, channel := range append(*t.Channels, *t.MoreChannels...) { | 		if t == nil { | ||||||
| 			if channel.Id == channelId { | 			continue | ||||||
| 				return channel.Name | 		} | ||||||
|  | 		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 | ||||||
|  | 				} | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -363,7 +414,7 @@ func (m *MMClient) GetChannelId(name string, teamId string) string { | |||||||
| 	} | 	} | ||||||
| 	for _, t := range m.OtherTeams { | 	for _, t := range m.OtherTeams { | ||||||
| 		if t.Id == teamId { | 		if t.Id == teamId { | ||||||
| 			for _, channel := range append(*t.Channels, *t.MoreChannels...) { | 			for _, channel := range append(t.Channels, t.MoreChannels...) { | ||||||
| 				if channel.Name == name { | 				if channel.Name == name { | ||||||
| 					return channel.Id | 					return channel.Id | ||||||
| 				} | 				} | ||||||
| @@ -377,7 +428,7 @@ func (m *MMClient) GetChannelTeamId(id string) string { | |||||||
| 	m.RLock() | 	m.RLock() | ||||||
| 	defer m.RUnlock() | 	defer m.RUnlock() | ||||||
| 	for _, t := range append(m.OtherTeams, m.Team) { | 	for _, t := range append(m.OtherTeams, m.Team) { | ||||||
| 		for _, channel := range append(*t.Channels, *t.MoreChannels...) { | 		for _, channel := range append(t.Channels, t.MoreChannels...) { | ||||||
| 			if channel.Id == id { | 			if channel.Id == id { | ||||||
| 				return channel.TeamId | 				return channel.TeamId | ||||||
| 			} | 			} | ||||||
| @@ -390,7 +441,7 @@ func (m *MMClient) GetChannelHeader(channelId string) string { | |||||||
| 	m.RLock() | 	m.RLock() | ||||||
| 	defer m.RUnlock() | 	defer m.RUnlock() | ||||||
| 	for _, t := range m.OtherTeams { | 	for _, t := range m.OtherTeams { | ||||||
| 		for _, channel := range append(*t.Channels, *t.MoreChannels...) { | 		for _, channel := range append(t.Channels, t.MoreChannels...) { | ||||||
| 			if channel.Id == channelId { | 			if channel.Id == channelId { | ||||||
| 				return channel.Header | 				return channel.Header | ||||||
| 			} | 			} | ||||||
| @@ -400,54 +451,67 @@ func (m *MMClient) GetChannelHeader(channelId string) string { | |||||||
| 	return "" | 	return "" | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) PostMessage(channelId string, text string) { | func (m *MMClient) PostMessage(channelId string, text string) (string, error) { | ||||||
| 	post := &model.Post{ChannelId: channelId, Message: text} | 	post := &model.Post{ChannelId: channelId, Message: text} | ||||||
| 	m.Client.CreatePost(post) | 	res, resp := m.Client.CreatePost(post) | ||||||
|  | 	if resp.Error != nil { | ||||||
|  | 		return "", resp.Error | ||||||
|  | 	} | ||||||
|  | 	return res.Id, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (m *MMClient) EditMessage(postId string, text string) (string, error) { | ||||||
|  | 	post := &model.Post{Message: text} | ||||||
|  | 	res, resp := m.Client.UpdatePost(postId, post) | ||||||
|  | 	if resp.Error != nil { | ||||||
|  | 		return "", resp.Error | ||||||
|  | 	} | ||||||
|  | 	return res.Id, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) JoinChannel(channelId string) error { | func (m *MMClient) JoinChannel(channelId string) error { | ||||||
| 	m.RLock() | 	m.RLock() | ||||||
| 	defer m.RUnlock() | 	defer m.RUnlock() | ||||||
| 	for _, c := range *m.Team.Channels { | 	for _, c := range m.Team.Channels { | ||||||
| 		if c.Id == channelId { | 		if c.Id == channelId { | ||||||
| 			m.log.Debug("Not joining ", channelId, " already joined.") | 			m.log.Debug("Not joining ", channelId, " already joined.") | ||||||
| 			return nil | 			return nil | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	m.log.Debug("Joining ", channelId) | 	m.log.Debug("Joining ", channelId) | ||||||
| 	_, err := m.Client.JoinChannel(channelId) | 	_, resp := m.Client.AddChannelMember(channelId, m.User.Id) | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		return errors.New("failed to join") | 		return resp.Error | ||||||
| 	} | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) GetPostsSince(channelId string, time int64) *model.PostList { | func (m *MMClient) GetPostsSince(channelId string, time int64) *model.PostList { | ||||||
| 	res, err := m.Client.GetPostsSince(channelId, time) | 	res, resp := m.Client.GetPostsSince(channelId, time) | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 	return res.Data.(*model.PostList) | 	return res | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) SearchPosts(query string) *model.PostList { | func (m *MMClient) SearchPosts(query string) *model.PostList { | ||||||
| 	res, err := m.Client.SearchPosts(query, false) | 	res, resp := m.Client.SearchPosts(m.Team.Id, query, false) | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 	return res.Data.(*model.PostList) | 	return res | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) GetPosts(channelId string, limit int) *model.PostList { | func (m *MMClient) GetPosts(channelId string, limit int) *model.PostList { | ||||||
| 	res, err := m.Client.GetPosts(channelId, 0, limit, "") | 	res, resp := m.Client.GetPostsForChannel(channelId, 0, limit, "") | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		return nil | 		return nil | ||||||
| 	} | 	} | ||||||
| 	return res.Data.(*model.PostList) | 	return res | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) GetPublicLink(filename string) string { | func (m *MMClient) GetPublicLink(filename string) string { | ||||||
| 	res, err := m.Client.GetPublicLink(filename) | 	res, err := m.Client.GetFileLink(filename) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return "" | 		return "" | ||||||
| 	} | 	} | ||||||
| @@ -457,7 +521,7 @@ func (m *MMClient) GetPublicLink(filename string) string { | |||||||
| func (m *MMClient) GetPublicLinks(filenames []string) []string { | func (m *MMClient) GetPublicLinks(filenames []string) []string { | ||||||
| 	var output []string | 	var output []string | ||||||
| 	for _, f := range filenames { | 	for _, f := range filenames { | ||||||
| 		res, err := m.Client.GetPublicLink(f) | 		res, err := m.Client.GetFileLink(f) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			continue | 			continue | ||||||
| 		} | 		} | ||||||
| @@ -466,45 +530,53 @@ func (m *MMClient) GetPublicLinks(filenames []string) []string { | |||||||
| 	return output | 	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.GetFileLink(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) { | func (m *MMClient) UpdateChannelHeader(channelId string, header string) { | ||||||
| 	data := make(map[string]string) | 	channel := &model.Channel{Id: channelId, Header: header} | ||||||
| 	data["channel_id"] = channelId |  | ||||||
| 	data["channel_header"] = header |  | ||||||
| 	m.log.Debugf("updating channelheader %#v, %#v", channelId, header) | 	m.log.Debugf("updating channelheader %#v, %#v", channelId, header) | ||||||
| 	_, err := m.Client.UpdateChannelHeader(data) | 	_, resp := m.Client.UpdateChannel(channel) | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		log.Error(err) | 		log.Error(resp.Error) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) UpdateLastViewed(channelId string) { | func (m *MMClient) UpdateLastViewed(channelId string) { | ||||||
| 	m.log.Debugf("posting lastview %#v", channelId) | 	m.log.Debugf("posting lastview %#v", channelId) | ||||||
| 	if m.mmVersion() >= 3.08 { | 	view := &model.ChannelView{ChannelId: channelId} | ||||||
| 		view := model.ChannelView{ChannelId: channelId} | 	res, _ := m.Client.ViewChannel(m.User.Id, view) | ||||||
| 		res, _ := m.Client.ViewChannel(view) | 	if !res { | ||||||
| 		if res == false { | 		m.log.Errorf("ChannelView update for %s failed", channelId) | ||||||
| 			m.log.Errorf("ChannelView update for %s failed", channelId) |  | ||||||
| 		} |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	_, err := m.Client.UpdateLastViewedAt(channelId, true) |  | ||||||
| 	if err != nil { |  | ||||||
| 		m.log.Error(err) |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) UsernamesInChannel(channelId string) []string { | func (m *MMClient) UsernamesInChannel(channelId string) []string { | ||||||
| 	res, err := m.Client.GetMyChannelMembers() | 	res, resp := m.Client.GetChannelMembers(channelId, 0, 50000, "") | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		m.log.Errorf("UsernamesInChannel(%s) failed: %s", channelId, err) | 		m.log.Errorf("UsernamesInChannel(%s) failed: %s", channelId, resp.Error) | ||||||
| 		return []string{} | 		return []string{} | ||||||
| 	} | 	} | ||||||
| 	members := res.Data.(*model.ChannelMembers) | 	allusers := m.GetUsers() | ||||||
| 	result := []string{} | 	result := []string{} | ||||||
| 	for _, channel := range *members { | 	for _, member := range *res { | ||||||
| 		if channel.ChannelId == channelId { | 		result = append(result, allusers[member.UserId].Nickname) | ||||||
| 			result = append(result, m.GetUser(channel.UserId).Username) |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 	return result | 	return result | ||||||
| } | } | ||||||
| @@ -528,7 +600,7 @@ func (m *MMClient) createCookieJar(token string) *cookiejar.Jar { | |||||||
| func (m *MMClient) SendDirectMessage(toUserId string, msg string) { | func (m *MMClient) SendDirectMessage(toUserId string, msg string) { | ||||||
| 	m.log.Debugf("SendDirectMessage to %s, msg %s", toUserId, msg) | 	m.log.Debugf("SendDirectMessage to %s, msg %s", toUserId, msg) | ||||||
| 	// create DM channel (only happens on first message) | 	// create DM channel (only happens on first message) | ||||||
| 	_, err := m.Client.CreateDirectChannel(toUserId) | 	_, err := m.Client.CreateDirectChannel(m.User.Id, toUserId) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		m.log.Debugf("SendDirectMessage to %#v failed: %s", toUserId, err) | 		m.log.Debugf("SendDirectMessage to %#v failed: %s", toUserId, err) | ||||||
| 		return | 		return | ||||||
| @@ -536,14 +608,7 @@ func (m *MMClient) SendDirectMessage(toUserId string, msg string) { | |||||||
| 	channelName := model.GetDMNameFromIds(toUserId, m.User.Id) | 	channelName := model.GetDMNameFromIds(toUserId, m.User.Id) | ||||||
|  |  | ||||||
| 	// update our channels | 	// update our channels | ||||||
| 	mmchannels, err := m.Client.GetChannels("") | 	m.UpdateChannels() | ||||||
| 	if err != nil { |  | ||||||
| 		m.log.Debug("SendDirectMessage: Couldn't update channels") |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
| 	m.Lock() |  | ||||||
| 	m.Team.Channels = mmchannels.Data.(*model.ChannelList) |  | ||||||
| 	m.Unlock() |  | ||||||
|  |  | ||||||
| 	// build & send the message | 	// build & send the message | ||||||
| 	msg = strings.Replace(msg, "\r", "", -1) | 	msg = strings.Replace(msg, "\r", "", -1) | ||||||
| @@ -569,10 +634,10 @@ func (m *MMClient) GetChannels() []*model.Channel { | |||||||
| 	defer m.RUnlock() | 	defer m.RUnlock() | ||||||
| 	var channels []*model.Channel | 	var channels []*model.Channel | ||||||
| 	// our primary team channels first | 	// our primary team channels first | ||||||
| 	channels = append(channels, *m.Team.Channels...) | 	channels = append(channels, m.Team.Channels...) | ||||||
| 	for _, t := range m.OtherTeams { | 	for _, t := range m.OtherTeams { | ||||||
| 		if t.Id != m.Team.Id { | 		if t.Id != m.Team.Id { | ||||||
| 			channels = append(channels, *t.Channels...) | 			channels = append(channels, t.Channels...) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return channels | 	return channels | ||||||
| @@ -584,7 +649,7 @@ func (m *MMClient) GetMoreChannels() []*model.Channel { | |||||||
| 	defer m.RUnlock() | 	defer m.RUnlock() | ||||||
| 	var channels []*model.Channel | 	var channels []*model.Channel | ||||||
| 	for _, t := range m.OtherTeams { | 	for _, t := range m.OtherTeams { | ||||||
| 		channels = append(channels, *t.MoreChannels...) | 		channels = append(channels, t.MoreChannels...) | ||||||
| 	} | 	} | ||||||
| 	return channels | 	return channels | ||||||
| } | } | ||||||
| @@ -595,8 +660,10 @@ func (m *MMClient) GetTeamFromChannel(channelId string) string { | |||||||
| 	defer m.RUnlock() | 	defer m.RUnlock() | ||||||
| 	var channels []*model.Channel | 	var channels []*model.Channel | ||||||
| 	for _, t := range m.OtherTeams { | 	for _, t := range m.OtherTeams { | ||||||
| 		channels = append(channels, *t.Channels...) | 		channels = append(channels, t.Channels...) | ||||||
| 		channels = append(channels, *t.MoreChannels...) | 		if t.MoreChannels != nil { | ||||||
|  | 			channels = append(channels, t.MoreChannels...) | ||||||
|  | 		} | ||||||
| 		for _, c := range channels { | 		for _, c := range channels { | ||||||
| 			if c.Id == channelId { | 			if c.Id == channelId { | ||||||
| 				return t.Id | 				return t.Id | ||||||
| @@ -609,12 +676,11 @@ func (m *MMClient) GetTeamFromChannel(channelId string) string { | |||||||
| func (m *MMClient) GetLastViewedAt(channelId string) int64 { | func (m *MMClient) GetLastViewedAt(channelId string) int64 { | ||||||
| 	m.RLock() | 	m.RLock() | ||||||
| 	defer m.RUnlock() | 	defer m.RUnlock() | ||||||
| 	res, err := m.Client.GetChannel(channelId, "") | 	res, resp := m.Client.GetChannelMember(channelId, m.User.Id, "") | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		return model.GetMillis() | 		return model.GetMillis() | ||||||
| 	} | 	} | ||||||
| 	data := res.Data.(*model.ChannelData) | 	return res.LastViewedAt | ||||||
| 	return data.Member.LastViewedAt |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) GetUsers() map[string]*model.User { | func (m *MMClient) GetUsers() map[string]*model.User { | ||||||
| @@ -628,8 +694,16 @@ func (m *MMClient) GetUsers() map[string]*model.User { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) GetUser(userId string) *model.User { | func (m *MMClient) GetUser(userId string) *model.User { | ||||||
| 	m.RLock() | 	m.Lock() | ||||||
| 	defer m.RUnlock() | 	defer m.Unlock() | ||||||
|  | 	_, ok := m.Users[userId] | ||||||
|  | 	if !ok { | ||||||
|  | 		res, resp := m.Client.GetUser(userId, "") | ||||||
|  | 		if resp.Error != nil { | ||||||
|  | 			return nil | ||||||
|  | 		} | ||||||
|  | 		m.Users[userId] = res | ||||||
|  | 	} | ||||||
| 	return m.Users[userId] | 	return m.Users[userId] | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -642,36 +716,36 @@ func (m *MMClient) GetUserName(userId string) string { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) GetStatus(userId string) string { | func (m *MMClient) GetStatus(userId string) string { | ||||||
| 	res, err := m.Client.GetStatuses() | 	res, resp := m.Client.GetUserStatus(userId, "") | ||||||
| 	if err != nil { | 	if resp.Error != nil { | ||||||
| 		return "" | 		return "" | ||||||
| 	} | 	} | ||||||
| 	status := res.Data.(map[string]string) | 	if res.Status == model.STATUS_AWAY { | ||||||
| 	if status[userId] == model.STATUS_AWAY { |  | ||||||
| 		return "away" | 		return "away" | ||||||
| 	} | 	} | ||||||
| 	if status[userId] == model.STATUS_ONLINE { | 	if res.Status == model.STATUS_ONLINE { | ||||||
| 		return "online" | 		return "online" | ||||||
| 	} | 	} | ||||||
| 	return "offline" | 	return "offline" | ||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) GetStatuses() map[string]string { | func (m *MMClient) GetStatuses() map[string]string { | ||||||
| 	var ok bool | 	var ids []string | ||||||
| 	statuses := make(map[string]string) | 	statuses := make(map[string]string) | ||||||
| 	res, err := m.Client.GetStatuses() | 	for id := range m.Users { | ||||||
| 	if err != nil { | 		ids = append(ids, id) | ||||||
|  | 	} | ||||||
|  | 	res, resp := m.Client.GetUsersStatusesByIds(ids) | ||||||
|  | 	if resp.Error != nil { | ||||||
| 		return statuses | 		return statuses | ||||||
| 	} | 	} | ||||||
| 	if statuses, ok = res.Data.(map[string]string); ok { | 	for _, status := range res { | ||||||
| 		for userId, status := range statuses { | 		statuses[status.UserId] = "offline" | ||||||
| 			statuses[userId] = "offline" | 		if status.Status == model.STATUS_AWAY { | ||||||
| 			if status == model.STATUS_AWAY { | 			statuses[status.UserId] = "away" | ||||||
| 				statuses[userId] = "away" | 		} | ||||||
| 			} | 		if status.Status == model.STATUS_ONLINE { | ||||||
| 			if status == model.STATUS_ONLINE { | 			statuses[status.UserId] = "online" | ||||||
| 				statuses[userId] = "online" |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	return statuses | 	return statuses | ||||||
| @@ -682,6 +756,12 @@ func (m *MMClient) GetTeamId() string { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *MMClient) StatusLoop() { | func (m *MMClient) StatusLoop() { | ||||||
|  | 	retries := 0 | ||||||
|  | 	backoff := time.Second * 60 | ||||||
|  | 	if m.OnWsConnect != nil { | ||||||
|  | 		m.OnWsConnect() | ||||||
|  | 	} | ||||||
|  | 	m.log.Debug("StatusLoop:", m.OnWsConnect) | ||||||
| 	for { | 	for { | ||||||
| 		if m.WsQuit { | 		if m.WsQuit { | ||||||
| 			return | 			return | ||||||
| @@ -692,14 +772,23 @@ func (m *MMClient) StatusLoop() { | |||||||
| 			select { | 			select { | ||||||
| 			case <-m.WsPingChan: | 			case <-m.WsPingChan: | ||||||
| 				m.log.Debug("WS PONG received") | 				m.log.Debug("WS PONG received") | ||||||
|  | 				backoff = time.Second * 60 | ||||||
| 			case <-time.After(time.Second * 5): | 			case <-time.After(time.Second * 5): | ||||||
| 				m.Logout() | 				if retries > 3 { | ||||||
| 				m.WsQuit = false | 					m.Logout() | ||||||
| 				m.Login() | 					m.WsQuit = false | ||||||
| 				go m.WsReceiver() | 					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) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -707,40 +796,39 @@ func (m *MMClient) StatusLoop() { | |||||||
| func (m *MMClient) initUser() error { | func (m *MMClient) initUser() error { | ||||||
| 	m.Lock() | 	m.Lock() | ||||||
| 	defer m.Unlock() | 	defer m.Unlock() | ||||||
| 	initLoad, err := m.Client.GetInitialLoad() |  | ||||||
| 	if err != nil { |  | ||||||
| 		return err |  | ||||||
| 	} |  | ||||||
| 	initData := initLoad.Data.(*model.InitialLoad) |  | ||||||
| 	m.User = initData.User |  | ||||||
| 	// we only load all team data on initial login. | 	// we only load all team data on initial login. | ||||||
| 	// all other updates are for channels from our (primary) team only. | 	// all other updates are for channels from our (primary) team only. | ||||||
| 	//m.log.Debug("initUser(): loading all team data") | 	//m.log.Debug("initUser(): loading all team data") | ||||||
| 	for _, v := range initData.Teams { | 	teams, resp := m.Client.GetTeamsForUser(m.User.Id, "") | ||||||
| 		m.Client.SetTeamId(v.Id) | 	if resp.Error != nil { | ||||||
| 		mmusers, err := m.Client.GetProfiles(0, 50000, "") | 		return resp.Error | ||||||
| 		if err != nil { | 	} | ||||||
| 			return errors.New(err.DetailedError) | 	for _, team := range teams { | ||||||
|  | 		mmusers, resp := m.Client.GetUsersInTeam(team.Id, 0, 50000, "") | ||||||
|  | 		if resp.Error != nil { | ||||||
|  | 			return errors.New(resp.Error.DetailedError) | ||||||
| 		} | 		} | ||||||
| 		t := &Team{Team: v, Users: mmusers.Data.(map[string]*model.User), Id: v.Id} | 		usermap := make(map[string]*model.User) | ||||||
| 		mmchannels, err := m.Client.GetChannels("") | 		for _, user := range mmusers { | ||||||
| 		if err != nil { | 			usermap[user.Id] = user | ||||||
| 			return errors.New(err.DetailedError) |  | ||||||
| 		} | 		} | ||||||
| 		t.Channels = mmchannels.Data.(*model.ChannelList) |  | ||||||
| 		if m.mmVersion() >= 3.08 { | 		t := &Team{Team: team, Users: usermap, Id: team.Id} | ||||||
| 			mmchannels, err = m.Client.GetMoreChannelsPage(0, 5000) |  | ||||||
| 		} else { | 		mmchannels, resp := m.Client.GetChannelsForTeamForUser(team.Id, m.User.Id, "") | ||||||
| 			mmchannels, err = m.Client.GetMoreChannels("") | 		if resp.Error != nil { | ||||||
|  | 			return resp.Error | ||||||
| 		} | 		} | ||||||
| 		if err != nil { | 		t.Channels = mmchannels | ||||||
| 			return errors.New(err.DetailedError) | 		mmchannels, resp = m.Client.GetPublicChannelsForTeam(team.Id, 0, 5000, "") | ||||||
|  | 		if resp.Error != nil { | ||||||
|  | 			return resp.Error | ||||||
| 		} | 		} | ||||||
| 		t.MoreChannels = mmchannels.Data.(*model.ChannelList) | 		t.MoreChannels = mmchannels | ||||||
| 		m.OtherTeams = append(m.OtherTeams, t) | 		m.OtherTeams = append(m.OtherTeams, t) | ||||||
| 		if v.Name == m.Credentials.Team { | 		if team.Name == m.Credentials.Team { | ||||||
| 			m.Team = t | 			m.Team = t | ||||||
| 			m.log.Debugf("initUser(): found our team %s (id: %s)", v.Name, v.Id) | 			m.log.Debugf("initUser(): found our team %s (id: %s)", team.Name, team.Id) | ||||||
| 		} | 		} | ||||||
| 		// add all users | 		// add all users | ||||||
| 		for k, v := range t.Users { | 		for k, v := range t.Users { | ||||||
| @@ -761,22 +849,17 @@ func (m *MMClient) sendWSRequest(action string, data map[string]interface{}) err | |||||||
| 	return nil | 	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 { | func supportedVersion(version string) bool { | ||||||
| 	if strings.HasPrefix(version, "3.5.0") || | 	if strings.HasPrefix(version, "3.8.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.9.0") || | ||||||
| 		strings.HasPrefix(version, "3.10.0") { | 		strings.HasPrefix(version, "3.10.0") || | ||||||
|  | 		strings.HasPrefix(version, "4.0") || | ||||||
|  | 		strings.HasPrefix(version, "4.1") { | ||||||
| 		return true | 		return true | ||||||
| 	} | 	} | ||||||
| 	return false | 	return false | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func digestString(s string) string { | ||||||
|  | 	return fmt.Sprintf("%x", md5.Sum([]byte(s))) | ||||||
|  | } | ||||||
|   | |||||||
| @@ -43,6 +43,7 @@ type IMessage struct { | |||||||
| 	ServiceId   string `schema:"service_id"` | 	ServiceId   string `schema:"service_id"` | ||||||
| 	Text        string `schema:"text"` | 	Text        string `schema:"text"` | ||||||
| 	TriggerWord string `schema:"trigger_word"` | 	TriggerWord string `schema:"trigger_word"` | ||||||
|  | 	FileIDs     string `schema:"file_ids"` | ||||||
| } | } | ||||||
|  |  | ||||||
| // Client for Mattermost. | // Client for Mattermost. | ||||||
| @@ -134,12 +135,11 @@ func (c *Client) ServeHTTP(w http.ResponseWriter, r *http.Request) { | |||||||
|  |  | ||||||
| // Receive returns an incoming message from mattermost outgoing webhooks URL. | // Receive returns an incoming message from mattermost outgoing webhooks URL. | ||||||
| func (c *Client) Receive() IMessage { | func (c *Client) Receive() IMessage { | ||||||
| 	for { | 	var msg IMessage | ||||||
| 		select { | 	for msg := range c.In { | ||||||
| 		case msg := <-c.In: | 		return msg | ||||||
| 			return msg |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
|  | 	return msg | ||||||
| } | } | ||||||
|  |  | ||||||
| // Send sends a msg to mattermost incoming webhooks URL. | // Send sends a msg to mattermost incoming webhooks URL. | ||||||
|   | |||||||
							
								
								
									
										50
									
								
								migration.md
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								migration.md
									
									
									
									
									
								
							| @@ -1,50 +0,0 @@ | |||||||
| # Breaking changes from 0.4 to 0.5 for matterbridge (webhooks version) |  | ||||||
| ## IRC section |  | ||||||
| ### Server |  | ||||||
| Port removed, added to server |  | ||||||
| ``` |  | ||||||
| server="irc.freenode.net" |  | ||||||
| port=6667 |  | ||||||
| ``` |  | ||||||
| changed to |  | ||||||
| ``` |  | ||||||
| server="irc.freenode.net:6667" |  | ||||||
| ``` |  | ||||||
| ### Channel |  | ||||||
| Removed see Channels section below |  | ||||||
|  |  | ||||||
| ### UseSlackCircumfix=true |  | ||||||
| Removed, can be done by using ```RemoteNickFormat="<{NICK}> "``` |  | ||||||
|  |  | ||||||
| ## Mattermost section |  | ||||||
| ### BindAddress |  | ||||||
| Port removed, added to BindAddress |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| BindAddress="0.0.0.0" |  | ||||||
| port=9999 |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| changed to |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| BindAddress="0.0.0.0:9999" |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ### Token |  | ||||||
| Removed |  | ||||||
|  |  | ||||||
| ## Channels section |  | ||||||
| ``` |  | ||||||
| [Token "outgoingwebhooktoken1"]  |  | ||||||
| IRCChannel="#off-topic" |  | ||||||
| MMChannel="off-topic" |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| changed to |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| [Channel "channelnameofchoice"]  |  | ||||||
| IRC="#off-topic" |  | ||||||
| Mattermost="off-topic" |  | ||||||
| ``` |  | ||||||
| @@ -205,17 +205,43 @@ func (gitter *Gitter) GetMessage(roomID, messageID string) (*Message, error) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // SendMessage sends a message to a room | // SendMessage sends a message to a room | ||||||
| func (gitter *Gitter) SendMessage(roomID, text string) error { | func (gitter *Gitter) SendMessage(roomID, text string) (*Message, error) { | ||||||
| 
 | 
 | ||||||
| 	message := Message{Text: text} | 	message := Message{Text: text} | ||||||
| 	body, _ := json.Marshal(message) | 	body, _ := json.Marshal(message) | ||||||
| 	_, err := gitter.post(gitter.config.apiBaseURL+"rooms/"+roomID+"/chatMessages", body) | 	response, err := gitter.post(gitter.config.apiBaseURL+"rooms/"+roomID+"/chatMessages", body) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		gitter.log(err) | 		gitter.log(err) | ||||||
| 		return err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return nil | 	err = json.Unmarshal(response, &message) | ||||||
|  | 	if err != nil { | ||||||
|  | 		gitter.log(err) | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return &message, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // UpdateMessage updates a message in a room | ||||||
|  | func (gitter *Gitter) UpdateMessage(roomID, msgID, text string) (*Message, error) { | ||||||
|  | 
 | ||||||
|  | 	message := Message{Text: text} | ||||||
|  | 	body, _ := json.Marshal(message) | ||||||
|  | 	response, err := gitter.put(gitter.config.apiBaseURL+"rooms/"+roomID+"/chatMessages/"+msgID, body) | ||||||
|  | 	if err != nil { | ||||||
|  | 		gitter.log(err) | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err = json.Unmarshal(response, &message) | ||||||
|  | 	if err != nil { | ||||||
|  | 		gitter.log(err) | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return &message, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // JoinRoom joins a room | // JoinRoom joins a room | ||||||
| @@ -265,7 +291,7 @@ func (gitter *Gitter) SearchRooms(room string) ([]Room, error) { | |||||||
| 		Results []Room `json:"results"` | 		Results []Room `json:"results"` | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	response, err := gitter.get(gitter.config.apiBaseURL + "rooms?q=" + room ) | 	response, err := gitter.get(gitter.config.apiBaseURL + "rooms?q=" + room) | ||||||
| 
 | 
 | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		gitter.log(err) | 		gitter.log(err) | ||||||
| @@ -414,6 +440,39 @@ func (gitter *Gitter) post(url string, body []byte) ([]byte, error) { | |||||||
| 	return result, nil | 	return result, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (gitter *Gitter) put(url string, body []byte) ([]byte, error) { | ||||||
|  | 	r, err := http.NewRequest("PUT", url, bytes.NewBuffer(body)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		gitter.log(err) | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	r.Header.Set("Content-Type", "application/json") | ||||||
|  | 	r.Header.Set("Accept", "application/json") | ||||||
|  | 	r.Header.Set("Authorization", "Bearer "+gitter.config.token) | ||||||
|  | 
 | ||||||
|  | 	resp, err := gitter.config.client.Do(r) | ||||||
|  | 	if err != nil { | ||||||
|  | 		gitter.log(err) | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	defer resp.Body.Close() | ||||||
|  | 
 | ||||||
|  | 	if resp.StatusCode != http.StatusOK { | ||||||
|  | 		err = APIError{What: fmt.Sprintf("Status code: %v", resp.StatusCode)} | ||||||
|  | 		gitter.log(err) | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	result, err := ioutil.ReadAll(resp.Body) | ||||||
|  | 	if err != nil { | ||||||
|  | 		gitter.log(err) | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return result, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (gitter *Gitter) delete(url string) ([]byte, error) { | func (gitter *Gitter) delete(url string) ([]byte, error) { | ||||||
| 	r, err := http.NewRequest("delete", url, nil) | 	r, err := http.NewRequest("delete", url, nil) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -137,7 +137,10 @@ func (stream *Stream) connect() { | |||||||
| 
 | 
 | ||||||
| 	res, err := stream.gitter.getResponse(stream.url, stream) | 	res, err := stream.gitter.getResponse(stream.url, stream) | ||||||
| 	if err != nil || res.StatusCode != 200 { | 	if err != nil || res.StatusCode != 200 { | ||||||
| 		stream.gitter.log(fmt.Sprintf("Failed to get response, trying reconnect (Status code: %v)", res.StatusCode)) | 		stream.gitter.log("Failed to get response, trying reconnect") | ||||||
|  | 		if res != nil { | ||||||
|  | 			stream.gitter.log(fmt.Sprintf("Status code: %v", res.StatusCode)) | ||||||
|  | 		} | ||||||
| 		stream.gitter.log(err) | 		stream.gitter.log(err) | ||||||
| 
 | 
 | ||||||
| 		// sleep and wait | 		// sleep and wait | ||||||
							
								
								
									
										111
									
								
								vendor/github.com/thoj/go-ircevent/irc.go → vendor/github.com/42wim/go-ircevent/irc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										111
									
								
								vendor/github.com/thoj/go-ircevent/irc.go → vendor/github.com/42wim/go-ircevent/irc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -87,6 +87,17 @@ func (irc *Connection) readLoop() { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Unescape tag values as defined in the IRCv3.2 message tags spec | ||||||
|  | // http://ircv3.net/specs/core/message-tags-3.2.html | ||||||
|  | func unescapeTagValue(value string) string { | ||||||
|  | 	value = strings.Replace(value, "\\:", ";", -1) | ||||||
|  | 	value = strings.Replace(value, "\\s", " ", -1) | ||||||
|  | 	value = strings.Replace(value, "\\\\", "\\", -1) | ||||||
|  | 	value = strings.Replace(value, "\\r", "\r", -1) | ||||||
|  | 	value = strings.Replace(value, "\\n", "\n", -1) | ||||||
|  | 	return value | ||||||
|  | } | ||||||
|  | 
 | ||||||
| //Parse raw irc messages | //Parse raw irc messages | ||||||
| func parseToEvent(msg string) (*Event, error) { | func parseToEvent(msg string) (*Event, error) { | ||||||
| 	msg = strings.TrimSuffix(msg, "\n") //Remove \r\n | 	msg = strings.TrimSuffix(msg, "\n") //Remove \r\n | ||||||
| @@ -95,6 +106,26 @@ func parseToEvent(msg string) (*Event, error) { | |||||||
| 	if len(msg) < 5 { | 	if len(msg) < 5 { | ||||||
| 		return nil, errors.New("Malformed msg from server") | 		return nil, errors.New("Malformed msg from server") | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	if msg[0] == '@' { | ||||||
|  | 		// IRCv3 Message Tags | ||||||
|  | 		if i := strings.Index(msg, " "); i > -1 { | ||||||
|  | 			event.Tags = make(map[string]string) | ||||||
|  | 			tags := strings.Split(msg[1:i], ";") | ||||||
|  | 			for _, data := range tags { | ||||||
|  | 				parts := strings.SplitN(data, "=", 2) | ||||||
|  | 				if len(parts) == 1 { | ||||||
|  | 					event.Tags[parts[0]] = "" | ||||||
|  | 				} else { | ||||||
|  | 					event.Tags[parts[0]] = unescapeTagValue(parts[1]) | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			msg = msg[i+1 : len(msg)] | ||||||
|  | 		} else { | ||||||
|  | 			return nil, errors.New("Malformed msg from server") | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if msg[0] == ':' { | 	if msg[0] == ':' { | ||||||
| 		if i := strings.Index(msg, " "); i > -1 { | 		if i := strings.Index(msg, " "); i > -1 { | ||||||
| 			event.Source = msg[1:i] | 			event.Source = msg[1:i] | ||||||
| @@ -430,26 +461,84 @@ func (irc *Connection) Connect(server string) error { | |||||||
| 		irc.pwrite <- fmt.Sprintf("PASS %s\r\n", irc.Password) | 		irc.pwrite <- fmt.Sprintf("PASS %s\r\n", irc.Password) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	resChan := make(chan *SASLResult) | 	err = irc.negotiateCaps() | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	irc.pwrite <- fmt.Sprintf("NICK %s\r\n", irc.nick) | ||||||
|  | 	irc.pwrite <- fmt.Sprintf("USER %s 0.0.0.0 0.0.0.0 :%s\r\n", irc.user, irc.user) | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Negotiate IRCv3 capabilities | ||||||
|  | func (irc *Connection) negotiateCaps() error { | ||||||
|  | 	saslResChan := make(chan *SASLResult) | ||||||
|  | 	if irc.UseSASL { | ||||||
|  | 		irc.RequestCaps = append(irc.RequestCaps, "sasl") | ||||||
|  | 		irc.setupSASLCallbacks(saslResChan) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if len(irc.RequestCaps) == 0 { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	cap_chan := make(chan bool, len(irc.RequestCaps)) | ||||||
|  | 	irc.AddCallback("CAP", func(e *Event) { | ||||||
|  | 		if len(e.Arguments) != 3 { | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		command := e.Arguments[1] | ||||||
|  | 
 | ||||||
|  | 		if command == "LS" { | ||||||
|  | 			missing_caps := len(irc.RequestCaps) | ||||||
|  | 			for _, cap_name := range strings.Split(e.Arguments[2], " ") { | ||||||
|  | 				for _, req_cap := range irc.RequestCaps { | ||||||
|  | 					if cap_name == req_cap { | ||||||
|  | 						irc.pwrite <- fmt.Sprintf("CAP REQ :%s\r\n", cap_name) | ||||||
|  | 						missing_caps-- | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			for i := 0; i < missing_caps; i++ { | ||||||
|  | 				cap_chan <- true | ||||||
|  | 			} | ||||||
|  | 		} else if command == "ACK" || command == "NAK" { | ||||||
|  | 			for _, cap_name := range strings.Split(strings.TrimSpace(e.Arguments[2]), " ") { | ||||||
|  | 				if cap_name == "" { | ||||||
|  | 					continue | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				if command == "ACK" { | ||||||
|  | 					irc.AcknowledgedCaps = append(irc.AcknowledgedCaps, cap_name) | ||||||
|  | 				} | ||||||
|  | 				cap_chan <- true | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	irc.pwrite <- "CAP LS\r\n" | ||||||
|  | 
 | ||||||
| 	if irc.UseSASL { | 	if irc.UseSASL { | ||||||
| 		irc.setupSASLCallbacks(resChan) |  | ||||||
| 		irc.pwrite <- fmt.Sprintf("CAP LS\r\n") |  | ||||||
| 		// request SASL |  | ||||||
| 		irc.pwrite <- fmt.Sprintf("CAP REQ :sasl\r\n") |  | ||||||
| 		// if sasl request doesn't complete in 15 seconds, close chan and timeout |  | ||||||
| 		select { | 		select { | ||||||
| 		case res := <-resChan: | 		case res := <-saslResChan: | ||||||
| 			if res.Failed { | 			if res.Failed { | ||||||
| 				close(resChan) | 				close(saslResChan) | ||||||
| 				return res.Err | 				return res.Err | ||||||
| 			} | 			} | ||||||
| 		case <-time.After(time.Second * 15): | 		case <-time.After(time.Second * 15): | ||||||
| 			close(resChan) | 			close(saslResChan) | ||||||
| 			return errors.New("SASL setup timed out. This shouldn't happen.") | 			return errors.New("SASL setup timed out. This shouldn't happen.") | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	irc.pwrite <- fmt.Sprintf("NICK %s\r\n", irc.nick) | 
 | ||||||
| 	irc.pwrite <- fmt.Sprintf("USER %s 0.0.0.0 0.0.0.0 :%s\r\n", irc.user, irc.user) | 	// Wait for all capabilities to be ACKed or NAKed before ending negotiation | ||||||
|  | 	for i := 0; i < len(irc.RequestCaps); i++ { | ||||||
|  | 		<-cap_chan | ||||||
|  | 	} | ||||||
|  | 	irc.pwrite <- fmt.Sprintf("CAP END\r\n") | ||||||
|  | 
 | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -43,7 +43,6 @@ func (irc *Connection) setupSASLCallbacks(result chan<- *SASLResult) { | |||||||
| 		result <- &SASLResult{true, errors.New(e.Arguments[1])} | 		result <- &SASLResult{true, errors.New(e.Arguments[1])} | ||||||
| 	}) | 	}) | ||||||
| 	irc.AddCallback("903", func(e *Event) { | 	irc.AddCallback("903", func(e *Event) { | ||||||
| 		irc.SendRaw("CAP END") |  | ||||||
| 		result <- &SASLResult{false, nil} | 		result <- &SASLResult{false, nil} | ||||||
| 	}) | 	}) | ||||||
| 	irc.AddCallback("904", func(e *Event) { | 	irc.AddCallback("904", func(e *Event) { | ||||||
| @@ -15,20 +15,22 @@ import ( | |||||||
| type Connection struct { | type Connection struct { | ||||||
| 	sync.Mutex | 	sync.Mutex | ||||||
| 	sync.WaitGroup | 	sync.WaitGroup | ||||||
| 	Debug        bool | 	Debug            bool | ||||||
| 	Error        chan error | 	Error            chan error | ||||||
| 	Password     string | 	Password         string | ||||||
| 	UseTLS       bool | 	UseTLS           bool | ||||||
| 	UseSASL      bool | 	UseSASL          bool | ||||||
| 	SASLLogin    string | 	RequestCaps      []string | ||||||
| 	SASLPassword string | 	AcknowledgedCaps []string | ||||||
| 	SASLMech     string | 	SASLLogin        string | ||||||
| 	TLSConfig    *tls.Config | 	SASLPassword     string | ||||||
| 	Version      string | 	SASLMech         string | ||||||
| 	Timeout      time.Duration | 	TLSConfig        *tls.Config | ||||||
| 	PingFreq     time.Duration | 	Version          string | ||||||
| 	KeepAlive    time.Duration | 	Timeout          time.Duration | ||||||
| 	Server       string | 	PingFreq         time.Duration | ||||||
|  | 	KeepAlive        time.Duration | ||||||
|  | 	Server           string | ||||||
| 
 | 
 | ||||||
| 	socket net.Conn | 	socket net.Conn | ||||||
| 	pwrite chan string | 	pwrite chan string | ||||||
| @@ -59,6 +61,7 @@ type Event struct { | |||||||
| 	Source     string //<host> | 	Source     string //<host> | ||||||
| 	User       string //<usr> | 	User       string //<usr> | ||||||
| 	Arguments  []string | 	Arguments  []string | ||||||
|  | 	Tags       map[string]string | ||||||
| 	Connection *Connection | 	Connection *Connection | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
							
								
								
									
										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 | ||||||
|  | } | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user