forked from lug/matterbridge
Compare commits
219 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d6ee55e35f | ||
|
|
aef64eec32 | ||
|
|
c4193d5ccd | ||
|
|
0c94186818 | ||
|
|
9039720013 | ||
|
|
a3470f8aec | ||
|
|
01badde21d | ||
|
|
a37b232dd9 | ||
|
|
579ee48385 | ||
|
|
dd985d1dad | ||
|
|
d2caea70a2 | ||
|
|
21143cf5ee | ||
|
|
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 | ||
|
|
3f79da84d5 | ||
|
|
d540638223 | ||
|
|
4ec9b6dd4e | ||
|
|
3bc219167a | ||
|
|
8a55c97b4e | ||
|
|
9e34162a09 | ||
|
|
860a371eeb | ||
|
|
41a46526a1 | ||
|
|
46b798ac1b | ||
|
|
359d0f2910 | ||
|
|
ad3cb0386b | ||
|
|
3a183cb218 | ||
|
|
2eecaccd1c | ||
|
|
5f30a98bc1 | ||
|
|
b8a2fcbaff | ||
|
|
01496cd080 | ||
|
|
6a968ab82a | ||
|
|
c0c4890887 | ||
|
|
171a53592d | ||
|
|
7811c330db | ||
|
|
9bcd131e66 | ||
|
|
c791423dd5 | ||
|
|
80bdf38388 | ||
|
|
9d9cb32f4e | ||
|
|
87229bab13 | ||
|
|
f065e9e4d5 | ||
|
|
3812693111 | ||
|
|
dd3c572256 | ||
|
|
c5dfe40326 | ||
|
|
ef278301e3 | ||
|
|
2888fd64b0 | ||
|
|
27c0f37e49 | ||
|
|
0774f6a5e7 | ||
|
|
4036d4459b | ||
|
|
ee643de5b6 | ||
|
|
8c7549a09e | ||
|
|
7a16146304 | ||
|
|
3d3809a21b | ||
|
|
29465397dd | ||
|
|
d300bb1735 | ||
|
|
2e703472f1 | ||
|
|
8fede90b9e | ||
|
|
d128f157c4 | ||
|
|
4fcedabfd0 | ||
|
|
246c8e4f74 | ||
|
|
4d2207aba7 | ||
|
|
17b8b86d68 | ||
|
|
fdb57230a3 | ||
|
|
7469732bbc | ||
|
|
d1dd6c3440 | ||
|
|
02612c0061 | ||
|
|
a4db63a773 | ||
|
|
035c2b906a | ||
|
|
6ea8be5749 | ||
|
|
36024d5439 | ||
|
|
8d52c98373 | ||
|
|
b4a4eb0057 | ||
|
|
b469c8ddbd | ||
|
|
eee0036c7f | ||
|
|
89c66b9430 | ||
|
|
bd38319d83 | ||
|
|
33dffd5ea8 | ||
|
|
57176dadd4 | ||
|
|
dd449a8705 | ||
|
|
587ad9f41d | ||
|
|
a16ad8bf3b | ||
|
|
1e0490bd36 | ||
|
|
8afc641f0c | ||
|
|
2e4d58cb92 | ||
|
|
02d7e2db65 | ||
|
|
f935c573e9 |
2
.github/ISSUE_TEMPLATE.md
vendored
2
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,3 +1,5 @@
|
||||
If you have a configuration problem, please first try to create a basic configuration following the instructions on [the wiki](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) before filing an issue.
|
||||
|
||||
Please answer the following questions.
|
||||
|
||||
### Which version of matterbridge are you using?
|
||||
|
||||
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
|
||||
[](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
|
||||
* [Features](#features)
|
||||
* [Requirements](#requirements)
|
||||
* [Screenshots](https://github.com/42wim/matterbridge/wiki/)
|
||||
* [Installing](#installing)
|
||||
* [Binaries](#binaries)
|
||||
* [Building](#building)
|
||||
* [Configuration](#configuration)
|
||||
* [Howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config)
|
||||
* [Examples](#examples)
|
||||
* [Running](#running)
|
||||
* [Docker](#docker)
|
||||
@@ -20,7 +27,8 @@ Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, R
|
||||
* [Thanks](#thanks)
|
||||
|
||||
# Features
|
||||
* Relays public channel messages between multiple mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, Rocket.Chat, Hipchat (via xmpp) and Matrix. Pick and mix.
|
||||
* Relays public channel messages between multiple mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, Rocket.Chat, Hipchat (via xmpp), Matrix and Steam.
|
||||
Pick and mix.
|
||||
* Matterbridge can also work with private groups on your mattermost/slack.
|
||||
* Allow for bridging the same bridges, which means you can eg bridge between multiple mattermosts.
|
||||
* The bridge is now a gateway which has support multiple in and out bridges. (and supports multiple gateways).
|
||||
@@ -28,7 +36,7 @@ Simple bridge between Mattermost, IRC, XMPP, Gitter, Slack, Discord, Telegram, R
|
||||
|
||||
# Requirements
|
||||
Accounts to one of the supported bridges
|
||||
* [Mattermost](https://github.com/mattermost/platform/) 3.5.x - 3.7.x
|
||||
* [Mattermost](https://github.com/mattermost/platform/) 3.8.x - 3.10.x, 4.0.x - 4.2.x
|
||||
* [IRC](http://www.mirc.com/servers.html)
|
||||
* [XMPP](https://jabber.org)
|
||||
* [Gitter](https://gitter.im)
|
||||
@@ -38,14 +46,18 @@ Accounts to one of the supported bridges
|
||||
* [Hipchat](https://www.hipchat.com)
|
||||
* [Rocket.chat](https://rocket.chat)
|
||||
* [Matrix](https://matrix.org)
|
||||
* [Steam](https://store.steampowered.com/)
|
||||
|
||||
# Screenshots
|
||||
See https://github.com/42wim/matterbridge/wiki
|
||||
|
||||
# Installing
|
||||
## Binaries
|
||||
Binaries can be found [here] (https://github.com/42wim/matterbridge/releases/)
|
||||
* Latest release [v0.10.2](https://github.com/42wim/matterbridge/releases/latest)
|
||||
* Latest stable release [v1.1.2](https://github.com/42wim/matterbridge/releases/latest)
|
||||
* Development releases (follows master) can be downloaded [here](https://dl.bintray.com/42wim/nightly/)
|
||||
|
||||
## 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
|
||||
@@ -60,10 +72,13 @@ matterbridge
|
||||
```
|
||||
|
||||
# Configuration
|
||||
* [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample) for documentation and an example.
|
||||
* [matterbridge.toml.simple](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.simple) for a simple example.
|
||||
## Basic configuration
|
||||
See [howto](https://github.com/42wim/matterbridge/wiki/How-to-create-your-config) for a step by step walkthrough for creating your configuration.
|
||||
|
||||
## Examples
|
||||
## Advanced configuration
|
||||
* [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.sample) for documentation and an example.
|
||||
|
||||
## Examples
|
||||
### Bridge mattermost (off-topic) - irc (#testing)
|
||||
```
|
||||
[irc]
|
||||
@@ -73,12 +88,12 @@ matterbridge
|
||||
|
||||
[mattermost]
|
||||
[mattermost.work]
|
||||
useAPI=true
|
||||
Server="yourmattermostserver.tld"
|
||||
Team="yourteam"
|
||||
Login="yourlogin"
|
||||
Password="yourpass"
|
||||
PrefixMessagesWithNick=true
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
[[gateway]]
|
||||
name="mygateway"
|
||||
@@ -96,7 +111,6 @@ enable=true
|
||||
```
|
||||
[slack]
|
||||
[slack.test]
|
||||
useAPI=true
|
||||
Token="yourslacktoken"
|
||||
PrefixMessagesWithNick=true
|
||||
|
||||
@@ -122,11 +136,8 @@ RemoteNickFormat="[{PROTOCOL}/{BRIDGE}] <{NICK}> "
|
||||
```
|
||||
|
||||
# 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:
|
||||
@@ -151,18 +162,11 @@ See [changelog.md](https://github.com/42wim/matterbridge/blob/master/changelog.m
|
||||
|
||||
# FAQ
|
||||
|
||||
Please look at [matterbridge.toml.sample](https://github.com/42wim/matterbridge/blob/master/matterbridge.toml.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.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.
|
||||
See [FAQ](https://github.com/42wim/matterbridge/wiki/FAQ)
|
||||
|
||||
Want to tip ?
|
||||
* eth: 0xb3f9b5387c66ad6be892bcb7bbc67862f3abc16f
|
||||
* btc: 1N7cKHj5SfqBHBzDJ6kad4BzeqUBBS2zhs
|
||||
|
||||
# Thanks
|
||||
Matterbridge wouldn't exist without these libraries:
|
||||
@@ -174,6 +178,6 @@ Matterbridge wouldn't exist without these libraries:
|
||||
* mattermost - https://github.com/mattermost/platform
|
||||
* matrix - https://github.com/matrix-org/gomatrix
|
||||
* slack - https://github.com/nlopes/slack
|
||||
* steam - https://github.com/Philipp15b/go-steam
|
||||
* telegram - https://github.com/go-telegram-bot-api/telegram-bot-api
|
||||
* xmpp - https://github.com/mattn/go-xmpp
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/labstack/echo"
|
||||
"github.com/labstack/echo/middleware"
|
||||
"github.com/zfjagann/golang-ring"
|
||||
"net/http"
|
||||
"sync"
|
||||
@@ -20,7 +21,9 @@ type Api struct {
|
||||
type ApiMessage struct {
|
||||
Text string `json:"text"`
|
||||
Username string `json:"username"`
|
||||
UserID string `json:"userid"`
|
||||
Avatar string `json:"avatar"`
|
||||
Gateway string `json:"gateway"`
|
||||
}
|
||||
|
||||
var flog *log.Entry
|
||||
@@ -38,6 +41,11 @@ func New(cfg config.Protocol, account string, c chan config.Message) *Api {
|
||||
b.Config = &cfg
|
||||
b.Account = account
|
||||
b.Remote = c
|
||||
if b.Config.Token != "" {
|
||||
e.Use(middleware.KeyAuth(func(key string, c echo.Context) (bool, error) {
|
||||
return key == b.Config.Token, nil
|
||||
}))
|
||||
}
|
||||
e.GET("/api/messages", b.handleMessages)
|
||||
e.POST("/api/message", b.handlePostMessage)
|
||||
go func() {
|
||||
@@ -53,16 +61,16 @@ func (b *Api) Disconnect() error {
|
||||
return nil
|
||||
|
||||
}
|
||||
func (b *Api) JoinChannel(channel string) error {
|
||||
func (b *Api) JoinChannel(channel config.ChannelInfo) error {
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (b *Api) Send(msg config.Message) error {
|
||||
func (b *Api) Send(msg config.Message) (string, error) {
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
b.Messages.Enqueue(&msg)
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (b *Api) handlePostMessage(c echo.Context) error {
|
||||
@@ -70,12 +78,16 @@ func (b *Api) handlePostMessage(c echo.Context) error {
|
||||
if err := c.Bind(message); err != nil {
|
||||
return err
|
||||
}
|
||||
flog.Debugf("Sending message from %s on %s to gateway", message.Username, "api")
|
||||
b.Remote <- config.Message{
|
||||
Text: message.Text,
|
||||
Username: message.Username,
|
||||
UserID: message.UserID,
|
||||
Channel: "api",
|
||||
Avatar: message.Avatar,
|
||||
Account: b.Account,
|
||||
Gateway: message.Gateway,
|
||||
Protocol: "api",
|
||||
}
|
||||
return c.JSON(http.StatusOK, message)
|
||||
}
|
||||
@@ -83,9 +95,7 @@ func (b *Api) handlePostMessage(c echo.Context) error {
|
||||
func (b *Api) handleMessages(c echo.Context) error {
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
for _, msg := range b.Messages.Values() {
|
||||
c.JSONPretty(http.StatusOK, msg, " ")
|
||||
}
|
||||
c.JSONPretty(http.StatusOK, b.Messages.Values(), " ")
|
||||
b.Messages = ring.Ring{}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"github.com/42wim/matterbridge/bridge/mattermost"
|
||||
"github.com/42wim/matterbridge/bridge/rocketchat"
|
||||
"github.com/42wim/matterbridge/bridge/slack"
|
||||
"github.com/42wim/matterbridge/bridge/steam"
|
||||
"github.com/42wim/matterbridge/bridge/telegram"
|
||||
"github.com/42wim/matterbridge/bridge/xmpp"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
@@ -18,32 +19,32 @@ import (
|
||||
)
|
||||
|
||||
type Bridger interface {
|
||||
Send(msg config.Message) error
|
||||
Send(msg config.Message) (string, error)
|
||||
Connect() error
|
||||
JoinChannel(channel string) error
|
||||
JoinChannel(channel config.ChannelInfo) error
|
||||
Disconnect() error
|
||||
}
|
||||
|
||||
type Bridge struct {
|
||||
Config config.Protocol
|
||||
Bridger
|
||||
Name string
|
||||
Account string
|
||||
Protocol string
|
||||
ChannelsIn map[string]config.ChannelOptions
|
||||
ChannelsOut map[string]config.ChannelOptions
|
||||
Name string
|
||||
Account string
|
||||
Protocol string
|
||||
Channels map[string]config.ChannelInfo
|
||||
Joined map[string]bool
|
||||
}
|
||||
|
||||
func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Bridge {
|
||||
b := new(Bridge)
|
||||
b.ChannelsIn = make(map[string]config.ChannelOptions)
|
||||
b.ChannelsOut = make(map[string]config.ChannelOptions)
|
||||
b.Channels = make(map[string]config.ChannelInfo)
|
||||
accInfo := strings.Split(bridge.Account, ".")
|
||||
protocol := accInfo[0]
|
||||
name := accInfo[1]
|
||||
b.Name = name
|
||||
b.Protocol = protocol
|
||||
b.Account = bridge.Account
|
||||
b.Joined = make(map[string]bool)
|
||||
|
||||
// override config from environment
|
||||
config.OverrideCfgFromEnv(cfg, protocol, name)
|
||||
@@ -75,6 +76,9 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid
|
||||
case "matrix":
|
||||
b.Config = cfg.Matrix[name]
|
||||
b.Bridger = bmatrix.New(cfg.Matrix[name], bridge.Account, c)
|
||||
case "steam":
|
||||
b.Config = cfg.Steam[name]
|
||||
b.Bridger = bsteam.New(cfg.Steam[name], bridge.Account, c)
|
||||
case "api":
|
||||
b.Config = cfg.Api[name]
|
||||
b.Bridger = api.New(cfg.Api[name], bridge.Account, c)
|
||||
@@ -83,33 +87,19 @@ func New(cfg *config.Config, bridge *config.Bridge, c chan config.Message) *Brid
|
||||
}
|
||||
|
||||
func (b *Bridge) JoinChannels() error {
|
||||
exists := make(map[string]bool)
|
||||
err := b.joinChannels(b.ChannelsIn, exists)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = b.joinChannels(b.ChannelsOut, exists)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
err := b.joinChannels(b.Channels, b.Joined)
|
||||
return err
|
||||
}
|
||||
|
||||
func (b *Bridge) joinChannels(cMap map[string]config.ChannelOptions, exists map[string]bool) error {
|
||||
mychannel := ""
|
||||
for channel, info := range cMap {
|
||||
if !exists[channel] {
|
||||
mychannel = channel
|
||||
log.Infof("%s: joining %s", b.Account, channel)
|
||||
if b.Protocol == "irc" && info.Key != "" {
|
||||
log.Debugf("using key %s for channel %s", info.Key, channel)
|
||||
mychannel = mychannel + " " + info.Key
|
||||
}
|
||||
err := b.JoinChannel(mychannel)
|
||||
func (b *Bridge) joinChannels(channels map[string]config.ChannelInfo, exists map[string]bool) error {
|
||||
for ID, channel := range channels {
|
||||
if !exists[ID] {
|
||||
log.Infof("%s: joining %s (%s)", b.Account, channel.Name, ID)
|
||||
err := b.JoinChannel(channel)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
exists[channel] = true
|
||||
exists[ID] = true
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -10,26 +10,45 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
EVENT_JOIN_LEAVE = "join_leave"
|
||||
EVENT_FAILURE = "failure"
|
||||
EVENT_JOIN_LEAVE = "join_leave"
|
||||
EVENT_FAILURE = "failure"
|
||||
EVENT_REJOIN_CHANNELS = "rejoin_channels"
|
||||
EVENT_USER_ACTION = "user_action"
|
||||
)
|
||||
|
||||
type Message struct {
|
||||
Text string
|
||||
Channel string
|
||||
Username string
|
||||
Avatar string
|
||||
Account string
|
||||
Event string
|
||||
Protocol string
|
||||
Timestamp time.Time
|
||||
Text string `json:"text"`
|
||||
Channel string `json:"channel"`
|
||||
Username string `json:"username"`
|
||||
UserID string `json:"userid"` // userid on the bridge
|
||||
Avatar string `json:"avatar"`
|
||||
Account string `json:"account"`
|
||||
Event string `json:"event"`
|
||||
Protocol string `json:"protocol"`
|
||||
Gateway string `json:"gateway"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
ID string `json:"id"`
|
||||
}
|
||||
|
||||
type ChannelInfo struct {
|
||||
Name string
|
||||
Account string
|
||||
Direction string
|
||||
ID string
|
||||
SameChannel map[string]bool
|
||||
Options ChannelOptions
|
||||
}
|
||||
|
||||
type Protocol struct {
|
||||
BindAddress string // mattermost, slack
|
||||
AuthCode string // steam
|
||||
BindAddress string // mattermost, slack // DEPRECATED
|
||||
Buffer int // api
|
||||
Charset string // irc
|
||||
EditSuffix string // mattermost, slack, discord, telegram, gitter
|
||||
EditDisable bool // mattermost, slack, discord, telegram, gitter
|
||||
IconURL string // mattermost, slack
|
||||
IgnoreNicks string // all protocols
|
||||
IgnoreMessages string // all protocols
|
||||
Jid string // xmpp
|
||||
Login string // mattermost, matrix
|
||||
Muc string // xmpp
|
||||
@@ -39,33 +58,44 @@ type Protocol struct {
|
||||
NickServNick string // IRC
|
||||
NickServPassword string // IRC
|
||||
NicksPerRow int // mattermost, slack
|
||||
NoHomeServerSuffix bool // matrix
|
||||
NoTLS bool // mattermost
|
||||
Password string // IRC,mattermost,XMPP,matrix
|
||||
PrefixMessagesWithNick bool // mattemost, slack
|
||||
Protocol string //all protocols
|
||||
MessageQueue int // IRC, size of message queue for flood control
|
||||
MessageDelay int // IRC, time in millisecond to wait between messages
|
||||
MessageLength int // IRC, max length of a message allowed
|
||||
MessageFormat string // telegram
|
||||
RemoteNickFormat string // all protocols
|
||||
Server string // IRC,mattermost,XMPP,discord
|
||||
ShowJoinPart bool // all protocols
|
||||
ShowEmbeds bool // discord
|
||||
SkipTLSVerify bool // IRC, mattermost
|
||||
Team string // mattermost
|
||||
Token string // gitter, slack, discord
|
||||
URL string // mattermost, slack, matrix
|
||||
Token string // gitter, slack, discord, api
|
||||
URL string // mattermost, slack // DEPRECATED
|
||||
UseAPI bool // mattermost, slack
|
||||
UseSASL bool // IRC
|
||||
UseTLS bool // IRC
|
||||
UseFirstName bool // telegram
|
||||
UseUserName bool // discord
|
||||
UseInsecureURL bool // telegram
|
||||
WebhookBindAddress string // mattermost, slack
|
||||
WebhookURL string // mattermost, slack
|
||||
WebhookUse string // mattermost, slack, discord
|
||||
}
|
||||
|
||||
type ChannelOptions struct {
|
||||
Key string // irc
|
||||
Key string // irc
|
||||
WebhookURL string // discord
|
||||
}
|
||||
|
||||
type Bridge struct {
|
||||
Account string
|
||||
Channel string
|
||||
Options ChannelOptions
|
||||
Account string
|
||||
Channel string
|
||||
Options ChannelOptions
|
||||
SameChannel bool
|
||||
}
|
||||
|
||||
type Gateway struct {
|
||||
@@ -89,6 +119,7 @@ type Config struct {
|
||||
Mattermost map[string]Protocol
|
||||
Matrix map[string]Protocol
|
||||
Slack map[string]Protocol
|
||||
Steam map[string]Protocol
|
||||
Gitter map[string]Protocol
|
||||
Xmpp map[string]Protocol
|
||||
Discord map[string]Protocol
|
||||
@@ -104,6 +135,28 @@ func NewConfig(cfgfile string) *Config {
|
||||
if _, err := toml.DecodeFile(cfgfile, &cfg); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fail := false
|
||||
for k, v := range cfg.Mattermost {
|
||||
res := Deprecated(v, "mattermost."+k)
|
||||
if res {
|
||||
fail = res
|
||||
}
|
||||
}
|
||||
for k, v := range cfg.Slack {
|
||||
res := Deprecated(v, "slack."+k)
|
||||
if res {
|
||||
fail = res
|
||||
}
|
||||
}
|
||||
for k, v := range cfg.Rocketchat {
|
||||
res := Deprecated(v, "rocketchat."+k)
|
||||
if res {
|
||||
fail = res
|
||||
}
|
||||
}
|
||||
if fail {
|
||||
log.Fatalf("Fix your config. Please see changelog for more information")
|
||||
}
|
||||
return &cfg
|
||||
}
|
||||
|
||||
@@ -154,3 +207,17 @@ func GetIconURL(msg *Message, cfg *Protocol) string {
|
||||
iconURL = strings.Replace(iconURL, "{PROTOCOL}", protocol, -1)
|
||||
return iconURL
|
||||
}
|
||||
|
||||
func Deprecated(cfg Protocol, account string) bool {
|
||||
if cfg.BindAddress != "" {
|
||||
log.Printf("ERROR: %s BindAddress is deprecated, you need to change it to WebhookBindAddress.", account)
|
||||
} else if cfg.URL != "" {
|
||||
log.Printf("ERROR: %s URL is deprecated, you need to change it to WebhookURL.", account)
|
||||
} else if cfg.UseAPI {
|
||||
log.Printf("ERROR: %s UseAPI is deprecated, it's enabled by default, please remove it from your config file.", account)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
//log.Fatalf("ERROR: Fix your config: %s", account)
|
||||
}
|
||||
|
||||
@@ -4,20 +4,24 @@ import (
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/bwmarrin/discordgo"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type bdiscord struct {
|
||||
c *discordgo.Session
|
||||
Config *config.Protocol
|
||||
Remote chan config.Message
|
||||
Account string
|
||||
Channels []*discordgo.Channel
|
||||
Nick string
|
||||
UseChannelID bool
|
||||
userMemberMap map[string]*discordgo.Member
|
||||
guildID string
|
||||
c *discordgo.Session
|
||||
Config *config.Protocol
|
||||
Remote chan config.Message
|
||||
Account string
|
||||
Channels []*discordgo.Channel
|
||||
Nick string
|
||||
UseChannelID bool
|
||||
userMemberMap map[string]*discordgo.Member
|
||||
guildID string
|
||||
webhookID string
|
||||
webhookToken string
|
||||
channelInfoMap map[string]*config.ChannelInfo
|
||||
sync.RWMutex
|
||||
}
|
||||
|
||||
@@ -34,12 +38,22 @@ func New(cfg config.Protocol, account string, c chan config.Message) *bdiscord {
|
||||
b.Remote = c
|
||||
b.Account = account
|
||||
b.userMemberMap = make(map[string]*discordgo.Member)
|
||||
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
|
||||
}
|
||||
|
||||
func (b *bdiscord) Connect() error {
|
||||
var err error
|
||||
flog.Info("Connecting")
|
||||
if b.Config.WebhookURL == "" {
|
||||
flog.Info("Connecting using token")
|
||||
} else {
|
||||
flog.Info("Connecting using webhookurl (for posting) and token")
|
||||
}
|
||||
if !strings.HasPrefix(b.Config.Token, "Bot ") {
|
||||
b.Config.Token = "Bot " + b.Config.Token
|
||||
}
|
||||
@@ -51,12 +65,13 @@ func (b *bdiscord) Connect() error {
|
||||
flog.Info("Connection succeeded")
|
||||
b.c.AddHandler(b.messageCreate)
|
||||
b.c.AddHandler(b.memberUpdate)
|
||||
b.c.AddHandler(b.messageUpdate)
|
||||
err = b.c.Open()
|
||||
if err != nil {
|
||||
flog.Debugf("%#v", err)
|
||||
return err
|
||||
}
|
||||
guilds, err := b.c.UserGuilds()
|
||||
guilds, err := b.c.UserGuilds(100, "", "")
|
||||
if err != nil {
|
||||
flog.Debugf("%#v", err)
|
||||
return err
|
||||
@@ -84,23 +99,69 @@ func (b *bdiscord) Disconnect() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *bdiscord) JoinChannel(channel string) error {
|
||||
idcheck := strings.Split(channel, "ID:")
|
||||
func (b *bdiscord) JoinChannel(channel config.ChannelInfo) error {
|
||||
b.channelInfoMap[channel.ID] = &channel
|
||||
idcheck := strings.Split(channel.Name, "ID:")
|
||||
if len(idcheck) > 1 {
|
||||
b.UseChannelID = true
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *bdiscord) Send(msg config.Message) error {
|
||||
func (b *bdiscord) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
channelID := b.getChannelID(msg.Channel)
|
||||
if channelID == "" {
|
||||
flog.Errorf("Could not find channelID for %v", msg.Channel)
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
if msg.Event == config.EVENT_USER_ACTION {
|
||||
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) {
|
||||
if b.Config.EditDisable {
|
||||
return
|
||||
}
|
||||
// only when message is actually edited
|
||||
if m.Message.EditedTimestamp != "" {
|
||||
flog.Debugf("Sending edit message")
|
||||
m.Content = m.Content + b.Config.EditSuffix
|
||||
b.messageCreate(s, (*discordgo.MessageCreate)(m))
|
||||
}
|
||||
b.c.ChannelMessageSend(channelID, msg.Username+msg.Text)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreate) {
|
||||
@@ -108,25 +169,61 @@ func (b *bdiscord) messageCreate(s *discordgo.Session, m *discordgo.MessageCreat
|
||||
if m.Author.Username == b.Nick {
|
||||
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 {
|
||||
for _, attach := range m.Attachments {
|
||||
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
|
||||
}
|
||||
|
||||
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)
|
||||
channelName := b.getChannelName(m.ChannelID)
|
||||
if b.UseChannelID {
|
||||
channelName = "ID:" + m.ChannelID
|
||||
}
|
||||
username := b.getNick(m.Author)
|
||||
if len(m.MentionRoles) > 0 {
|
||||
m.Message.Content = b.replaceRoleMentions(m.Message.Content)
|
||||
}
|
||||
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"}
|
||||
b.Remote <- rmsg
|
||||
}
|
||||
|
||||
func (b *bdiscord) memberUpdate(s *discordgo.Session, m *discordgo.GuildMemberUpdate) {
|
||||
@@ -143,18 +240,21 @@ func (b *bdiscord) getNick(user *discordgo.User) string {
|
||||
b.Lock()
|
||||
defer b.Unlock()
|
||||
if _, ok := b.userMemberMap[user.ID]; ok {
|
||||
if b.userMemberMap[user.ID].Nick != "" {
|
||||
// only return if nick is set
|
||||
return b.userMemberMap[user.ID].Nick
|
||||
if b.userMemberMap[user.ID] != nil {
|
||||
if b.userMemberMap[user.ID].Nick != "" {
|
||||
// only return if nick is set
|
||||
return b.userMemberMap[user.ID].Nick
|
||||
}
|
||||
// otherwise return username
|
||||
return user.Username
|
||||
}
|
||||
// otherwise return username
|
||||
return user.Username
|
||||
}
|
||||
// if we didn't find nick, search for it
|
||||
b.userMemberMap[user.ID], err = b.c.GuildMember(b.guildID, user.ID)
|
||||
member, err := b.c.GuildMember(b.guildID, user.ID)
|
||||
if err != nil {
|
||||
return user.Username
|
||||
}
|
||||
b.userMemberMap[user.ID] = member
|
||||
// only return if nick is set
|
||||
if b.userMemberMap[user.ID].Nick != "" {
|
||||
return b.userMemberMap[user.ID].Nick
|
||||
@@ -195,3 +295,73 @@ func (b *bdiscord) replaceRoleMentions(text string) string {
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (b *bdiscord) replaceChannelMentions(text string) string {
|
||||
var err error
|
||||
re := regexp.MustCompile("<#[0-9]+>")
|
||||
text = re.ReplaceAllStringFunc(text, func(m string) string {
|
||||
channel := b.getChannelName(m[2 : len(m)-1])
|
||||
// if at first don't succeed, try again
|
||||
if channel == "" {
|
||||
b.Channels, err = b.c.GuildChannels(b.guildID)
|
||||
if err != nil {
|
||||
return "#unknownchannel"
|
||||
}
|
||||
channel = b.getChannelName(m[2 : len(m)-1])
|
||||
return "#" + channel
|
||||
}
|
||||
return "#" + channel
|
||||
})
|
||||
return text
|
||||
}
|
||||
|
||||
func (b *bdiscord) 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 {
|
||||
// <:doge:302803592035958784>
|
||||
re := regexp.MustCompile("<(:.*?:)[0-9]+>")
|
||||
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 (
|
||||
"fmt"
|
||||
"github.com/42wim/go-gitter"
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/sromku/go-gitter"
|
||||
"strings"
|
||||
)
|
||||
|
||||
@@ -13,6 +13,7 @@ type Bgitter struct {
|
||||
Config *config.Protocol
|
||||
Remote chan config.Message
|
||||
Account string
|
||||
User *gitter.User
|
||||
Users []gitter.User
|
||||
Rooms []gitter.Room
|
||||
}
|
||||
@@ -36,7 +37,7 @@ func (b *Bgitter) Connect() error {
|
||||
var err error
|
||||
flog.Info("Connecting")
|
||||
b.c = gitter.New(b.Config.Token)
|
||||
_, err = b.c.GetUser()
|
||||
b.User, err = b.c.GetUser()
|
||||
if err != nil {
|
||||
flog.Debugf("%#v", err)
|
||||
return err
|
||||
@@ -51,10 +52,10 @@ func (b *Bgitter) Disconnect() error {
|
||||
|
||||
}
|
||||
|
||||
func (b *Bgitter) JoinChannel(channel string) error {
|
||||
roomID, err := b.c.GetRoomId(channel)
|
||||
func (b *Bgitter) JoinChannel(channel config.ChannelInfo) error {
|
||||
roomID, err := b.c.GetRoomId(channel.Name)
|
||||
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)
|
||||
if err != nil {
|
||||
@@ -78,11 +79,17 @@ func (b *Bgitter) JoinChannel(channel string) error {
|
||||
for event := range stream.Event {
|
||||
switch ev := event.Data.(type) {
|
||||
case *gitter.MessageReceived:
|
||||
// check for ZWSP to see if it's not an echo
|
||||
if !strings.HasSuffix(ev.Message.Text, "") {
|
||||
if ev.Message.From.ID != b.User.ID {
|
||||
flog.Debugf("Sending message from %s on %s to gateway", ev.Message.From.Username, b.Account)
|
||||
b.Remote <- config.Message{Username: ev.Message.From.Username, Text: ev.Message.Text, Channel: room,
|
||||
Account: b.Account, Avatar: b.getAvatar(ev.Message.From.Username)}
|
||||
rmsg := config.Message{Username: ev.Message.From.Username, Text: ev.Message.Text, Channel: room,
|
||||
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)
|
||||
}
|
||||
flog.Debugf("Message is %#v", rmsg)
|
||||
b.Remote <- rmsg
|
||||
}
|
||||
case *gitter.GitterConnectionClosed:
|
||||
flog.Errorf("connection with gitter closed for room %s", room)
|
||||
@@ -92,15 +99,26 @@ func (b *Bgitter) JoinChannel(channel string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bgitter) Send(msg config.Message) error {
|
||||
func (b *Bgitter) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
roomID := b.getRoomID(msg.Channel)
|
||||
if roomID == "" {
|
||||
flog.Errorf("Could not find roomID for %v", msg.Channel)
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
// add ZWSP because gitter echoes our own messages
|
||||
return b.c.SendMessage(roomID, msg.Username+msg.Text+" ")
|
||||
if msg.ID != "" {
|
||||
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 {
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
/*
|
||||
func tableformatter(nicks []string, nicksPerRow int, continued bool) string {
|
||||
result := "|IRC users"
|
||||
if continued {
|
||||
@@ -29,6 +30,7 @@ func tableformatter(nicks []string, nicksPerRow int, continued bool) string {
|
||||
}
|
||||
return result
|
||||
}
|
||||
*/
|
||||
|
||||
func plainformatter(nicks []string, nicksPerRow int) string {
|
||||
return strings.Join(nicks, ", ") + " currently on IRC"
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
package birc
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"github.com/42wim/go-ircevent"
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/paulrosania/go-charset/charset"
|
||||
_ "github.com/paulrosania/go-charset/data"
|
||||
"github.com/saintfish/chardet"
|
||||
ircm "github.com/sorcix/irc"
|
||||
"github.com/thoj/go-ircevent"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"regexp"
|
||||
"sort"
|
||||
"strconv"
|
||||
@@ -15,14 +21,15 @@ import (
|
||||
)
|
||||
|
||||
type Birc struct {
|
||||
i *irc.Connection
|
||||
Nick string
|
||||
names map[string][]string
|
||||
Config *config.Protocol
|
||||
Remote chan config.Message
|
||||
connected chan struct{}
|
||||
Local chan config.Message // local queue for flood control
|
||||
Account string
|
||||
i *irc.Connection
|
||||
Nick string
|
||||
names map[string][]string
|
||||
Config *config.Protocol
|
||||
Remote chan config.Message
|
||||
connected chan struct{}
|
||||
Local chan config.Message // local queue for flood control
|
||||
Account string
|
||||
FirstConnection bool
|
||||
}
|
||||
|
||||
var flog *log.Entry
|
||||
@@ -46,6 +53,10 @@ func New(cfg config.Protocol, account string, c chan config.Message) *Birc {
|
||||
if b.Config.MessageQueue == 0 {
|
||||
b.Config.MessageQueue = 30
|
||||
}
|
||||
if b.Config.MessageLength == 0 {
|
||||
b.Config.MessageLength = 400
|
||||
}
|
||||
b.FirstConnection = true
|
||||
return b
|
||||
}
|
||||
|
||||
@@ -71,6 +82,8 @@ func (b *Birc) Connect() error {
|
||||
i.SASLLogin = b.Config.NickServNick
|
||||
i.SASLPassword = b.Config.NickServPassword
|
||||
i.TLSConfig = &tls.Config{InsecureSkipVerify: b.Config.SkipTLSVerify}
|
||||
i.KeepAlive = time.Minute
|
||||
i.PingFreq = time.Minute
|
||||
if b.Config.Password != "" {
|
||||
i.Password = b.Config.Password
|
||||
}
|
||||
@@ -87,49 +100,78 @@ func (b *Birc) Connect() error {
|
||||
return fmt.Errorf("connection timed out")
|
||||
}
|
||||
i.Debug = false
|
||||
// clear on reconnects
|
||||
i.ClearCallback(ircm.RPL_WELCOME)
|
||||
i.AddCallback(ircm.RPL_WELCOME, func(event *irc.Event) {
|
||||
b.Remote <- config.Message{Username: "system", Text: "rejoin", Channel: "", Account: b.Account, Event: config.EVENT_REJOIN_CHANNELS}
|
||||
// set our correct nick on reconnect if necessary
|
||||
b.Nick = event.Nick
|
||||
})
|
||||
go i.Loop()
|
||||
go b.doSend()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Birc) Disconnect() error {
|
||||
b.i.Disconnect()
|
||||
//b.i.Disconnect()
|
||||
close(b.Local)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Birc) JoinChannel(channel string) error {
|
||||
b.i.Join(channel)
|
||||
func (b *Birc) JoinChannel(channel config.ChannelInfo) error {
|
||||
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
|
||||
}
|
||||
|
||||
func (b *Birc) Send(msg config.Message) error {
|
||||
func (b *Birc) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
if msg.Account == b.Account {
|
||||
return nil
|
||||
}
|
||||
if strings.HasPrefix(msg.Text, "!") {
|
||||
b.Command(&msg)
|
||||
return nil
|
||||
}
|
||||
|
||||
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") {
|
||||
if len(text) > b.Config.MessageLength {
|
||||
text = text[:b.Config.MessageLength] + " <message clipped>"
|
||||
}
|
||||
if len(b.Local) < b.Config.MessageQueue {
|
||||
if len(b.Local) == b.Config.MessageQueue-1 {
|
||||
text = text + " <message clipped>"
|
||||
}
|
||||
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 {
|
||||
flog.Debugf("flooding, dropping message (queue at %d)", len(b.Local))
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (b *Birc) doSend() {
|
||||
rate := time.Millisecond * time.Duration(b.Config.MessageDelay)
|
||||
throttle := time.Tick(rate)
|
||||
throttle := time.NewTicker(rate)
|
||||
for msg := range b.Local {
|
||||
<-throttle
|
||||
b.i.Privmsg(msg.Channel, msg.Username+msg.Text)
|
||||
<-throttle.C
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,14 +209,19 @@ func (b *Birc) handleNewConnection(event *irc.Event) {
|
||||
i.AddCallback("JOIN", b.handleJoinPart)
|
||||
i.AddCallback("PART", b.handleJoinPart)
|
||||
i.AddCallback("QUIT", b.handleJoinPart)
|
||||
i.AddCallback("KICK", b.handleJoinPart)
|
||||
i.AddCallback("*", b.handleOther)
|
||||
// we are now fully connected
|
||||
b.connected <- struct{}{}
|
||||
}
|
||||
|
||||
func (b *Birc) handleJoinPart(event *irc.Event) {
|
||||
flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account)
|
||||
channel := event.Arguments[0]
|
||||
if event.Code == "KICK" {
|
||||
flog.Infof("Got kicked from %s by %s", channel, event.Nick)
|
||||
b.Remote <- config.Message{Username: "system", Text: "rejoin", Channel: channel, Account: b.Account, Event: config.EVENT_REJOIN_CHANNELS}
|
||||
return
|
||||
}
|
||||
if event.Code == "QUIT" {
|
||||
if event.Nick == b.Nick && strings.Contains(event.Raw, "Ping timeout") {
|
||||
flog.Infof("%s reconnecting ..", b.Account)
|
||||
@@ -182,7 +229,11 @@ func (b *Birc) handleJoinPart(event *irc.Event) {
|
||||
return
|
||||
}
|
||||
}
|
||||
b.Remote <- config.Message{Username: "system", Text: event.Nick + " " + strings.ToLower(event.Code) + "s", Channel: channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE}
|
||||
if event.Nick != b.Nick {
|
||||
flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account)
|
||||
b.Remote <- config.Message{Username: "system", Text: event.Nick + " " + strings.ToLower(event.Code) + "s", Channel: channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE}
|
||||
return
|
||||
}
|
||||
flog.Debugf("handle %#v", event)
|
||||
}
|
||||
|
||||
@@ -203,6 +254,11 @@ func (b *Birc) handleOther(event *irc.Event) {
|
||||
}
|
||||
|
||||
func (b *Birc) handlePrivMsg(event *irc.Event) {
|
||||
b.Nick = b.i.GetNick()
|
||||
// freenode doesn't send 001 as first reply
|
||||
if event.Code == "NOTICE" {
|
||||
return
|
||||
}
|
||||
// don't forward queries to the bot
|
||||
if event.Arguments[0] == b.Nick {
|
||||
return
|
||||
@@ -211,17 +267,47 @@ func (b *Birc) handlePrivMsg(event *irc.Event) {
|
||||
if event.Nick == b.Nick {
|
||||
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)
|
||||
msg := ""
|
||||
if event.Code == "CTCP_ACTION" {
|
||||
msg = event.Nick + " "
|
||||
// msg = event.Nick + " "
|
||||
rmsg.Event = config.EVENT_USER_ACTION
|
||||
}
|
||||
msg += event.Message()
|
||||
// strip IRC colors
|
||||
re := regexp.MustCompile(`[[:cntrl:]](\d+,|)\d+`)
|
||||
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)
|
||||
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) {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package bmatrix
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"sync"
|
||||
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
matrix "github.com/matrix-org/gomatrix"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type Bmatrix struct {
|
||||
@@ -61,23 +63,28 @@ func (b *Bmatrix) Disconnect() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bmatrix) JoinChannel(channel string) error {
|
||||
resp, err := b.mc.JoinRoom(channel, "", nil)
|
||||
func (b *Bmatrix) JoinChannel(channel config.ChannelInfo) error {
|
||||
resp, err := b.mc.JoinRoom(channel.Name, "", nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
b.Lock()
|
||||
b.RoomMap[resp.RoomID] = channel
|
||||
b.RoomMap[resp.RoomID] = channel.Name
|
||||
b.Unlock()
|
||||
return err
|
||||
}
|
||||
|
||||
func (b *Bmatrix) Send(msg config.Message) error {
|
||||
func (b *Bmatrix) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
channel := b.getRoomID(msg.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)
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (b *Bmatrix) getRoomID(channel string) string {
|
||||
@@ -93,7 +100,7 @@ func (b *Bmatrix) getRoomID(channel string) string {
|
||||
func (b *Bmatrix) handlematrix() error {
|
||||
syncer := b.mc.Syncer.(*matrix.DefaultSyncer)
|
||||
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()
|
||||
channel, ok := b.RoomMap[ev.RoomID]
|
||||
b.RUnlock()
|
||||
@@ -101,8 +108,17 @@ func (b *Bmatrix) handlematrix() error {
|
||||
flog.Debugf("Unknown room %s", ev.RoomID)
|
||||
return
|
||||
}
|
||||
username := ev.Sender[1:]
|
||||
if b.Config.NoHomeServerSuffix {
|
||||
re := regexp.MustCompile("(.*?):.*")
|
||||
username = re.ReplaceAllString(username, `$1`)
|
||||
}
|
||||
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)
|
||||
b.Remote <- config.Message{Username: ev.Sender, Text: ev.Content["body"].(string), Channel: channel, Account: b.Account}
|
||||
b.Remote <- rmsg
|
||||
}
|
||||
flog.Debugf("Received: %#v", ev)
|
||||
})
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
package bmattermost
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
"github.com/42wim/matterbridge/matterclient"
|
||||
"github.com/42wim/matterbridge/matterhook"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type MMhook struct {
|
||||
@@ -12,15 +15,16 @@ type MMhook struct {
|
||||
}
|
||||
|
||||
type MMapi struct {
|
||||
mc *matterclient.MMClient
|
||||
mmMap map[string]string
|
||||
mmIgnoreNicks []string
|
||||
mc *matterclient.MMClient
|
||||
mmMap map[string]string
|
||||
}
|
||||
|
||||
type MMMessage struct {
|
||||
Text string
|
||||
Channel string
|
||||
Username string
|
||||
UserID string
|
||||
ID string
|
||||
}
|
||||
|
||||
type Bmattermost struct {
|
||||
@@ -28,7 +32,6 @@ type Bmattermost struct {
|
||||
MMapi
|
||||
Config *config.Protocol
|
||||
Remote chan config.Message
|
||||
name string
|
||||
TeamId string
|
||||
Account string
|
||||
}
|
||||
@@ -54,26 +57,72 @@ func (b *Bmattermost) Command(cmd string) string {
|
||||
}
|
||||
|
||||
func (b *Bmattermost) Connect() error {
|
||||
if !b.Config.UseAPI {
|
||||
flog.Info("Connecting webhooks")
|
||||
b.mh = matterhook.New(b.Config.URL,
|
||||
if b.Config.WebhookBindAddress != "" {
|
||||
if b.Config.WebhookURL != "" {
|
||||
flog.Info("Connecting using webhookurl (sending) and webhookbindaddress (receiving)")
|
||||
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,
|
||||
BindAddress: b.Config.BindAddress})
|
||||
} else {
|
||||
b.mc = matterclient.New(b.Config.Login, b.Config.Password,
|
||||
b.Config.Team, b.Config.Server)
|
||||
b.mc.SkipTLSVerify = b.Config.SkipTLSVerify
|
||||
b.mc.NoTLS = b.Config.NoTLS
|
||||
flog.Infof("Connecting %s (team: %s) on %s", b.Config.Login, b.Config.Team, b.Config.Server)
|
||||
err := b.mc.Login()
|
||||
DisableServer: true})
|
||||
if b.Config.Token != "" {
|
||||
flog.Info("Connecting using token (receiving)")
|
||||
err := b.apiLogin()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
flog.Info("Connection succeeded")
|
||||
b.TeamId = b.mc.GetTeamId()
|
||||
go b.mc.WsReceiver()
|
||||
go b.handleMatter()
|
||||
} else if b.Config.Login != "" {
|
||||
flog.Info("Connecting using login/password (sending and receiving)")
|
||||
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
|
||||
}
|
||||
|
||||
@@ -81,30 +130,33 @@ func (b *Bmattermost) Disconnect() error {
|
||||
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
|
||||
if b.Config.UseAPI {
|
||||
return b.mc.JoinChannel(b.mc.GetChannelId(channel, ""))
|
||||
if b.Config.WebhookURL == "" && b.Config.WebhookBindAddress == "" {
|
||||
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
|
||||
}
|
||||
|
||||
func (b *Bmattermost) Send(msg config.Message) error {
|
||||
func (b *Bmattermost) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
if msg.Event == config.EVENT_USER_ACTION {
|
||||
msg.Text = "*" + msg.Text + "*"
|
||||
}
|
||||
nick := msg.Username
|
||||
message := msg.Text
|
||||
channel := msg.Channel
|
||||
|
||||
if b.Config.PrefixMessagesWithNick {
|
||||
/*if IsMarkup(message) {
|
||||
message = nick + "\n\n" + message
|
||||
} else {
|
||||
*/
|
||||
message = nick + " " + message
|
||||
//}
|
||||
message = nick + message
|
||||
}
|
||||
if !b.Config.UseAPI {
|
||||
if b.Config.WebhookURL != "" {
|
||||
matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL}
|
||||
matterMessage.IconURL = msg.Avatar
|
||||
matterMessage.Channel = channel
|
||||
matterMessage.UserName = nick
|
||||
matterMessage.Type = ""
|
||||
@@ -112,40 +164,75 @@ func (b *Bmattermost) Send(msg config.Message) error {
|
||||
err := b.mh.Send(matterMessage)
|
||||
if err != nil {
|
||||
flog.Info(err)
|
||||
return err
|
||||
return "", err
|
||||
}
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
b.mc.PostMessage(b.mc.GetChannelId(channel, ""), message)
|
||||
return nil
|
||||
if msg.ID != "" {
|
||||
return b.mc.EditMessage(msg.ID, message)
|
||||
}
|
||||
return b.mc.PostMessage(b.mc.GetChannelId(channel, ""), message)
|
||||
}
|
||||
|
||||
func (b *Bmattermost) handleMatter() {
|
||||
flog.Debugf("Choosing API based Mattermost connection: %t", b.Config.UseAPI)
|
||||
mchan := make(chan *MMMessage)
|
||||
if b.Config.UseAPI {
|
||||
go b.handleMatterClient(mchan)
|
||||
} else {
|
||||
if b.Config.WebhookBindAddress != "" {
|
||||
flog.Debugf("Choosing webhooks based receiving")
|
||||
go b.handleMatterHook(mchan)
|
||||
} else {
|
||||
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 {
|
||||
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)
|
||||
b.Remote <- config.Message{Text: message.Text, Username: message.Username, Channel: message.Channel, Account: b.Account}
|
||||
flog.Debugf("Message is %#v", rmsg)
|
||||
b.Remote <- rmsg
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Bmattermost) handleMatterClient(mchan chan *MMMessage) {
|
||||
for message := range b.mc.MessageChan {
|
||||
flog.Debugf("%#v", message.Raw.Data)
|
||||
if message.Type == "system_join_leave" ||
|
||||
message.Type == "system_join_channel" ||
|
||||
message.Type == "system_leave_channel" {
|
||||
flog.Debugf("Sending JOIN_LEAVE event from %s to gateway", b.Account)
|
||||
b.Remote <- config.Message{Username: "system", Text: message.Text, Channel: message.Channel, Account: b.Account, Event: config.EVENT_JOIN_LEAVE}
|
||||
continue
|
||||
}
|
||||
if (message.Raw.Event == "post_edited") && b.Config.EditDisable {
|
||||
continue
|
||||
}
|
||||
// do not post our own messages back to irc
|
||||
// only listen to message from our team
|
||||
if message.Raw.Event == "posted" && b.mc.User.Username != message.Username && message.Raw.Data["team_id"].(string) == b.TeamId {
|
||||
if (message.Raw.Event == "posted" || message.Raw.Event == "post_edited") &&
|
||||
b.mc.User.Username != message.Username && message.Raw.Data["team_id"].(string) == b.TeamId {
|
||||
// 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)
|
||||
m := &MMMessage{}
|
||||
m.UserID = message.UserID
|
||||
m.Username = message.Username
|
||||
m.Channel = message.Channel
|
||||
m.Text = message.Text
|
||||
m.ID = message.Post.Id
|
||||
if message.Raw.Event == "post_edited" && !b.Config.EditDisable {
|
||||
m.Text = message.Text + b.Config.EditSuffix
|
||||
}
|
||||
if len(message.Post.FileIds) > 0 {
|
||||
for _, link := range b.mc.GetPublicLinks(message.Post.FileIds) {
|
||||
for _, link := range b.mc.GetFileLinks(message.Post.FileIds) {
|
||||
m.Text = m.Text + "\n" + link
|
||||
}
|
||||
}
|
||||
@@ -159,9 +246,39 @@ func (b *Bmattermost) handleMatterHook(mchan chan *MMMessage) {
|
||||
message := b.mh.Receive()
|
||||
flog.Debugf("Receiving from matterhook %#v", message)
|
||||
m := &MMMessage{}
|
||||
m.UserID = message.UserID
|
||||
m.Username = message.UserName
|
||||
m.Text = message.Text
|
||||
m.Channel = message.ChannelName
|
||||
mchan <- m
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Bmattermost) apiLogin() error {
|
||||
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
|
||||
Config *config.Protocol
|
||||
Remote chan config.Message
|
||||
name string
|
||||
Account string
|
||||
}
|
||||
|
||||
@@ -41,10 +40,10 @@ func (b *Brocketchat) Command(cmd string) string {
|
||||
|
||||
func (b *Brocketchat) Connect() error {
|
||||
flog.Info("Connecting webhooks")
|
||||
b.mh = matterhook.New(b.Config.URL,
|
||||
b.mh = matterhook.New(b.Config.WebhookURL,
|
||||
matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify,
|
||||
DisableServer: true})
|
||||
b.rh = rockethook.New(b.Config.URL, rockethook.Config{BindAddress: b.Config.BindAddress})
|
||||
b.rh = rockethook.New(b.Config.WebhookURL, rockethook.Config{BindAddress: b.Config.WebhookBindAddress})
|
||||
go b.handleRocketHook()
|
||||
return nil
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
func (b *Brocketchat) Send(msg config.Message) error {
|
||||
func (b *Brocketchat) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL}
|
||||
matterMessage.Channel = msg.Channel
|
||||
@@ -68,9 +67,9 @@ func (b *Brocketchat) Send(msg config.Message) error {
|
||||
err := b.mh.Send(matterMessage)
|
||||
if err != nil {
|
||||
flog.Info(err)
|
||||
return err
|
||||
return "", err
|
||||
}
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
|
||||
func (b *Brocketchat) handleRocketHook() {
|
||||
@@ -82,6 +81,6 @@ func (b *Brocketchat) handleRocketHook() {
|
||||
continue
|
||||
}
|
||||
flog.Debugf("Sending message from %s on %s to gateway", message.UserName, b.Account)
|
||||
b.Remote <- config.Message{Text: message.Text, Username: message.UserName, Channel: message.ChannelName, Account: b.Account}
|
||||
b.Remote <- config.Message{Text: message.Text, Username: message.UserName, Channel: message.ChannelName, Account: b.Account, UserID: message.UserID}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package bslack
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
"github.com/42wim/matterbridge/matterhook"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/nlopes/slack"
|
||||
"html"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -15,6 +17,7 @@ type MMMessage struct {
|
||||
Text string
|
||||
Channel string
|
||||
Username string
|
||||
UserID string
|
||||
Raw *slack.MessageEvent
|
||||
}
|
||||
|
||||
@@ -51,17 +54,52 @@ func (b *Bslack) Command(cmd string) string {
|
||||
}
|
||||
|
||||
func (b *Bslack) Connect() error {
|
||||
flog.Info("Connecting")
|
||||
if !b.Config.UseAPI {
|
||||
b.mh = matterhook.New(b.Config.URL,
|
||||
matterhook.Config{BindAddress: b.Config.BindAddress})
|
||||
} else {
|
||||
if b.Config.WebhookBindAddress != "" {
|
||||
if b.Config.WebhookURL != "" {
|
||||
flog.Info("Connecting using webhookurl (sending) and webhookbindaddress (receiving)")
|
||||
b.mh = matterhook.New(b.Config.WebhookURL,
|
||||
matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify,
|
||||
BindAddress: b.Config.WebhookBindAddress})
|
||||
} else if b.Config.Token != "" {
|
||||
flog.Info("Connecting using token (sending)")
|
||||
b.sc = slack.New(b.Config.Token)
|
||||
b.rtm = b.sc.NewRTM()
|
||||
go b.rtm.ManageConnection()
|
||||
flog.Info("Connecting using webhookbindaddress (receiving)")
|
||||
b.mh = matterhook.New(b.Config.WebhookURL,
|
||||
matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify,
|
||||
BindAddress: b.Config.WebhookBindAddress})
|
||||
} else {
|
||||
flog.Info("Connecting using webhookbindaddress (receiving)")
|
||||
b.mh = matterhook.New(b.Config.WebhookURL,
|
||||
matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify,
|
||||
BindAddress: b.Config.WebhookBindAddress})
|
||||
}
|
||||
go b.handleSlack()
|
||||
return nil
|
||||
}
|
||||
if b.Config.WebhookURL != "" {
|
||||
flog.Info("Connecting using webhookurl (sending)")
|
||||
b.mh = matterhook.New(b.Config.WebhookURL,
|
||||
matterhook.Config{InsecureSkipVerify: b.Config.SkipTLSVerify,
|
||||
DisableServer: true})
|
||||
if b.Config.Token != "" {
|
||||
flog.Info("Connecting using token (receiving)")
|
||||
b.sc = slack.New(b.Config.Token)
|
||||
b.rtm = b.sc.NewRTM()
|
||||
go b.rtm.ManageConnection()
|
||||
go b.handleSlack()
|
||||
}
|
||||
} else if b.Config.Token != "" {
|
||||
flog.Info("Connecting using token (sending and receiving)")
|
||||
b.sc = slack.New(b.Config.Token)
|
||||
b.rtm = b.sc.NewRTM()
|
||||
go b.rtm.ManageConnection()
|
||||
go b.handleSlack()
|
||||
}
|
||||
if b.Config.WebhookBindAddress == "" && b.Config.WebhookURL == "" && b.Config.Token == "" {
|
||||
return errors.New("No connection method found. See that you have WebhookBindAddress, WebhookURL or Token configured.")
|
||||
}
|
||||
flog.Info("Connection succeeded")
|
||||
go b.handleSlack()
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -70,21 +108,27 @@ 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
|
||||
if b.Config.UseAPI {
|
||||
_, err := b.sc.JoinChannel(channel)
|
||||
if b.Config.WebhookURL == "" && b.Config.WebhookBindAddress == "" {
|
||||
if strings.HasPrefix(b.Config.Token, "xoxb") {
|
||||
// TODO check if bot has already joined channel
|
||||
return nil
|
||||
}
|
||||
_, err := b.sc.JoinChannel(channel.Name)
|
||||
if err != nil {
|
||||
return err
|
||||
if err.Error() != "name_taken" {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bslack) Send(msg config.Message) error {
|
||||
func (b *Bslack) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
if msg.Account == b.Account {
|
||||
return nil
|
||||
if msg.Event == config.EVENT_USER_ACTION {
|
||||
msg.Text = "_" + msg.Text + "_"
|
||||
}
|
||||
nick := msg.Username
|
||||
message := msg.Text
|
||||
@@ -92,7 +136,7 @@ func (b *Bslack) Send(msg config.Message) error {
|
||||
if b.Config.PrefixMessagesWithNick {
|
||||
message = nick + " " + message
|
||||
}
|
||||
if !b.Config.UseAPI {
|
||||
if b.Config.WebhookURL != "" {
|
||||
matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL}
|
||||
matterMessage.Channel = channel
|
||||
matterMessage.UserName = nick
|
||||
@@ -101,16 +145,16 @@ func (b *Bslack) Send(msg config.Message) error {
|
||||
err := b.mh.Send(matterMessage)
|
||||
if err != nil {
|
||||
flog.Info(err)
|
||||
return err
|
||||
return "", err
|
||||
}
|
||||
return nil
|
||||
return "", nil
|
||||
}
|
||||
schannel, err := b.getChannelByName(channel)
|
||||
if err != nil {
|
||||
return err
|
||||
return "", err
|
||||
}
|
||||
np := slack.NewPostMessageParameters()
|
||||
if b.Config.PrefixMessagesWithNick == true {
|
||||
if b.Config.PrefixMessagesWithNick {
|
||||
np.AsUser = true
|
||||
}
|
||||
np.Username = nick
|
||||
@@ -118,14 +162,21 @@ func (b *Bslack) Send(msg config.Message) error {
|
||||
if 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
|
||||
|
||||
/*
|
||||
newmsg := b.rtm.NewOutgoingMessage(message, schannel.ID)
|
||||
b.rtm.SendMessage(newmsg)
|
||||
*/
|
||||
|
||||
return nil
|
||||
// if we have no ID it means we're creating a new message, not updating an existing one
|
||||
if msg.ID != "" {
|
||||
ts := strings.Fields(msg.ID)
|
||||
b.sc.UpdateMessage(schannel.ID, ts[1], message)
|
||||
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 {
|
||||
@@ -165,54 +216,101 @@ func (b *Bslack) getChannelByID(ID string) (*slack.Channel, error) {
|
||||
}
|
||||
|
||||
func (b *Bslack) handleSlack() {
|
||||
flog.Debugf("Choosing API based slack connection: %t", b.Config.UseAPI)
|
||||
mchan := make(chan *MMMessage)
|
||||
if b.Config.UseAPI {
|
||||
go b.handleSlackClient(mchan)
|
||||
} else {
|
||||
if b.Config.WebhookBindAddress != "" {
|
||||
flog.Debugf("Choosing webhooks based receiving")
|
||||
go b.handleMatterHook(mchan)
|
||||
} else {
|
||||
flog.Debugf("Choosing token based receiving")
|
||||
go b.handleSlackClient(mchan)
|
||||
}
|
||||
time.Sleep(time.Second)
|
||||
flog.Debug("Start listening for Slack messages")
|
||||
for message := range mchan {
|
||||
// do not send messages from ourself
|
||||
if b.Config.UseAPI && message.Username == b.si.User.Name {
|
||||
if b.Config.WebhookURL == "" && b.Config.WebhookBindAddress == "" && message.Username == b.si.User.Name {
|
||||
continue
|
||||
}
|
||||
if message.Text == "" || message.Username == "" {
|
||||
continue
|
||||
}
|
||||
texts := strings.Split(message.Text, "\n")
|
||||
for _, text := range texts {
|
||||
text = b.replaceURL(text)
|
||||
text = html.UnescapeString(text)
|
||||
flog.Debugf("Sending message from %s on %s to gateway", message.Username, b.Account)
|
||||
b.Remote <- config.Message{Text: text, Username: message.Username, Channel: message.Channel, Account: b.Account, Avatar: b.getAvatar(message.Username)}
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Bslack) handleSlackClient(mchan chan *MMMessage) {
|
||||
count := 0
|
||||
for msg := range b.rtm.IncomingEvents {
|
||||
switch ev := msg.Data.(type) {
|
||||
case *slack.MessageEvent:
|
||||
// ignore first message
|
||||
if count > 0 {
|
||||
flog.Debugf("Receiving from slackclient %#v", ev)
|
||||
// use our own func because rtm.GetChannelInfo doesn't work for private channels
|
||||
channel, err := b.getChannelByID(ev.Channel)
|
||||
if err != nil {
|
||||
flog.Debugf("Receiving from slackclient %#v", ev)
|
||||
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)
|
||||
ev.User = ev.SubMessage.User
|
||||
ev.Text = ev.SubMessage.Text + b.Config.EditSuffix
|
||||
}
|
||||
// use our own func because rtm.GetChannelInfo doesn't work for private channels
|
||||
channel, err := b.getChannelByID(ev.Channel)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
m := &MMMessage{}
|
||||
if ev.BotID == "" {
|
||||
user, err := b.rtm.GetUserInfo(ev.User)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
m := &MMMessage{}
|
||||
m.UserID = user.ID
|
||||
m.Username = user.Name
|
||||
m.Channel = channel.Name
|
||||
m.Text = ev.Text
|
||||
m.Raw = ev
|
||||
m.Text = b.replaceMention(m.Text)
|
||||
mchan <- m
|
||||
}
|
||||
count++
|
||||
m.Channel = channel.Name
|
||||
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.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
|
||||
case *slack.OutgoingErrorEvent:
|
||||
flog.Debugf("%#v", ev.Error())
|
||||
case *slack.ChannelJoinedEvent:
|
||||
@@ -269,3 +367,11 @@ func (b *Bslack) replaceMention(text string) string {
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
func (b *Bslack) replaceURL(text string) string {
|
||||
results := regexp.MustCompile(`<(.*?)\|.*?>`).FindAllStringSubmatch(text, -1)
|
||||
for _, r := range results {
|
||||
text = strings.Replace(text, r[0], r[1], -1)
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
160
bridge/steam/steam.go
Normal file
160
bridge/steam/steam.go
Normal file
@@ -0,0 +1,160 @@
|
||||
package bsteam
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
"github.com/Philipp15b/go-steam"
|
||||
"github.com/Philipp15b/go-steam/protocol/steamlang"
|
||||
"github.com/Philipp15b/go-steam/steamid"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
//"io/ioutil"
|
||||
"strconv"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Bsteam struct {
|
||||
c *steam.Client
|
||||
connected chan struct{}
|
||||
Config *config.Protocol
|
||||
Remote chan config.Message
|
||||
Account string
|
||||
userMap map[steamid.SteamId]string
|
||||
sync.RWMutex
|
||||
}
|
||||
|
||||
var flog *log.Entry
|
||||
var protocol = "steam"
|
||||
|
||||
func init() {
|
||||
flog = log.WithFields(log.Fields{"module": protocol})
|
||||
}
|
||||
|
||||
func New(cfg config.Protocol, account string, c chan config.Message) *Bsteam {
|
||||
b := &Bsteam{}
|
||||
b.Config = &cfg
|
||||
b.Remote = c
|
||||
b.Account = account
|
||||
b.userMap = make(map[steamid.SteamId]string)
|
||||
b.connected = make(chan struct{})
|
||||
return b
|
||||
}
|
||||
|
||||
func (b *Bsteam) Connect() error {
|
||||
flog.Info("Connecting")
|
||||
b.c = steam.NewClient()
|
||||
go b.handleEvents()
|
||||
go b.c.Connect()
|
||||
select {
|
||||
case <-b.connected:
|
||||
flog.Info("Connection succeeded")
|
||||
case <-time.After(time.Second * 30):
|
||||
return fmt.Errorf("connection timed out")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bsteam) Disconnect() error {
|
||||
b.c.Disconnect()
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (b *Bsteam) JoinChannel(channel 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,61 +53,112 @@ func (b *Btelegram) Disconnect() error {
|
||||
|
||||
}
|
||||
|
||||
func (b *Btelegram) JoinChannel(channel string) error {
|
||||
func (b *Btelegram) JoinChannel(channel config.ChannelInfo) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Btelegram) Send(msg config.Message) error {
|
||||
func (b *Btelegram) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
chatid, err := strconv.ParseInt(msg.Channel, 10, 64)
|
||||
if err != nil {
|
||||
return err
|
||||
return "", err
|
||||
}
|
||||
|
||||
if b.Config.MessageFormat == "HTML" {
|
||||
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)
|
||||
if b.Config.MessageFormat == "HTML" {
|
||||
m.ParseMode = tgbotapi.ModeHTML
|
||||
}
|
||||
_, err = b.c.Send(m)
|
||||
return err
|
||||
res, err := b.c.Send(m)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return strconv.Itoa(res.MessageID), nil
|
||||
|
||||
}
|
||||
|
||||
func (b *Btelegram) handleRecv(updates <-chan tgbotapi.Update) {
|
||||
username := ""
|
||||
text := ""
|
||||
channel := ""
|
||||
for update := range updates {
|
||||
flog.Debugf("Receiving from telegram: %#v", update.Message)
|
||||
var message *tgbotapi.Message
|
||||
username := ""
|
||||
channel := ""
|
||||
text := ""
|
||||
// handle channels
|
||||
if update.ChannelPost != nil {
|
||||
if update.ChannelPost.From != nil {
|
||||
username = update.ChannelPost.From.FirstName
|
||||
if username == "" {
|
||||
username = update.ChannelPost.From.UserName
|
||||
}
|
||||
}
|
||||
text = update.ChannelPost.Text
|
||||
channel = strconv.FormatInt(update.ChannelPost.Chat.ID, 10)
|
||||
message = update.ChannelPost
|
||||
}
|
||||
if update.EditedChannelPost != nil && !b.Config.EditDisable {
|
||||
message = update.EditedChannelPost
|
||||
message.Text = message.Text + b.Config.EditSuffix
|
||||
}
|
||||
// handle groups
|
||||
if update.Message != nil {
|
||||
if update.Message.From != nil {
|
||||
username = update.Message.From.FirstName
|
||||
message = update.Message
|
||||
}
|
||||
if update.EditedMessage != nil && !b.Config.EditDisable {
|
||||
message = update.EditedMessage
|
||||
message.Text = message.Text + b.Config.EditSuffix
|
||||
}
|
||||
if message.From != nil {
|
||||
if b.Config.UseFirstName {
|
||||
username = message.From.FirstName
|
||||
}
|
||||
if username == "" {
|
||||
username = message.From.UserName
|
||||
if username == "" {
|
||||
username = update.Message.From.UserName
|
||||
username = message.From.FirstName
|
||||
}
|
||||
}
|
||||
text = update.Message.Text
|
||||
channel = strconv.FormatInt(update.Message.Chat.ID, 10)
|
||||
text = message.Text
|
||||
channel = strconv.FormatInt(message.Chat.ID, 10)
|
||||
}
|
||||
|
||||
if username == "" {
|
||||
username = "unknown"
|
||||
}
|
||||
if message.Sticker != nil && b.Config.UseInsecureURL {
|
||||
text = text + " " + b.getFileDirectURL(message.Sticker.FileID)
|
||||
}
|
||||
if message.Video != nil && b.Config.UseInsecureURL {
|
||||
text = text + " " + b.getFileDirectURL(message.Video.FileID)
|
||||
}
|
||||
if message.Photo != nil && b.Config.UseInsecureURL {
|
||||
photos := *message.Photo
|
||||
// last photo is the biggest
|
||||
text = text + " " + b.getFileDirectURL(photos[len(photos)-1].FileID)
|
||||
}
|
||||
if message.Document != nil && b.Config.UseInsecureURL {
|
||||
text = text + " " + message.Document.FileName + " : " + b.getFileDirectURL(message.Document.FileID)
|
||||
}
|
||||
if text != "" {
|
||||
flog.Debugf("Sending message from %s on %s to gateway", username, b.Account)
|
||||
b.Remote <- config.Message{Username: username, Text: text, Channel: channel, Account: b.Account}
|
||||
b.Remote <- config.Message{Username: username, Text: text, Channel: channel, Account: b.Account, UserID: strconv.Itoa(message.From.ID), 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"
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/jpillora/backoff"
|
||||
"github.com/mattn/go-xmpp"
|
||||
|
||||
"strings"
|
||||
@@ -43,7 +44,29 @@ func (b *Bxmpp) Connect() error {
|
||||
return err
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
@@ -51,15 +74,15 @@ func (b *Bxmpp) Disconnect() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bxmpp) JoinChannel(channel string) error {
|
||||
b.xc.JoinMUCNoHistory(channel+"@"+b.Config.Muc, b.Config.Nick)
|
||||
func (b *Bxmpp) JoinChannel(channel config.ChannelInfo) error {
|
||||
b.xc.JoinMUCNoHistory(channel.Name+"@"+b.Config.Muc, b.Config.Nick)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (b *Bxmpp) Send(msg config.Message) error {
|
||||
func (b *Bxmpp) Send(msg config.Message) (string, error) {
|
||||
flog.Debugf("Receiving %#v", msg)
|
||||
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) {
|
||||
@@ -96,7 +119,11 @@ func (b *Bxmpp) xmppKeepAlive() chan bool {
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
b.xc.PingC2S("", "")
|
||||
flog.Debugf("PING")
|
||||
err := b.xc.PingC2S("", "")
|
||||
if err != nil {
|
||||
flog.Debugf("PING failed %#v", err)
|
||||
}
|
||||
case <-done:
|
||||
return
|
||||
}
|
||||
@@ -106,6 +133,7 @@ func (b *Bxmpp) xmppKeepAlive() chan bool {
|
||||
}
|
||||
|
||||
func (b *Bxmpp) handleXmpp() error {
|
||||
var ok bool
|
||||
done := b.xmppKeepAlive()
|
||||
defer close(done)
|
||||
nodelay := time.Time{}
|
||||
@@ -119,7 +147,7 @@ func (b *Bxmpp) handleXmpp() error {
|
||||
var channel, nick string
|
||||
if v.Type == "groupchat" {
|
||||
s := strings.Split(v.Remote, "@")
|
||||
if len(s) == 2 {
|
||||
if len(s) >= 2 {
|
||||
channel = s[0]
|
||||
}
|
||||
s = strings.Split(s[1], "/")
|
||||
@@ -127,8 +155,13 @@ func (b *Bxmpp) handleXmpp() error {
|
||||
nick = s[1]
|
||||
}
|
||||
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)
|
||||
b.Remote <- config.Message{Username: nick, Text: v.Text, Channel: channel, Account: b.Account}
|
||||
b.Remote <- rmsg
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
243
changelog.md
243
changelog.md
@@ -1,3 +1,246 @@
|
||||
# v1.1.2
|
||||
* general: also build darwin binaries
|
||||
* mattermost: add support for mattermost 4.2.x
|
||||
* mattermost: Send images when text is empty regression. (mattermost). Closes #254
|
||||
* slack: also send the first messsage after connect. #252
|
||||
|
||||
# v1.1.1
|
||||
## Bugfix
|
||||
* mattermost: fix public links
|
||||
|
||||
# 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
|
||||
## New features
|
||||
* api: add token authentication
|
||||
* mattermost: add support for mattermost 3.10.0
|
||||
|
||||
## Changes
|
||||
* api: gateway name is added in JSON messages
|
||||
* api: lowercase JSON keys
|
||||
* api: channel name isn't needed in config #195
|
||||
|
||||
## Bugfix
|
||||
* discord: Add hashtag to channelname (when translating from id) (discord)
|
||||
* mattermost: Fix a panic. #186
|
||||
* mattermost: use teamid cache if possible. Fixes a panic
|
||||
* api: post valid json. #185
|
||||
* api: allow reuse of api in different gateways. #189
|
||||
* general: Fix utf-8 issues for {NOPINGNICK}. #193
|
||||
|
||||
# v0.13.0
|
||||
## New features
|
||||
* irc: Limit message length. ```MessageLength=400```
|
||||
Maximum length of message sent to irc server. If it exceeds <message clipped> will be add to the message.
|
||||
* irc: Add NOPINGNICK option.
|
||||
The string "{NOPINGNICK}" (case sensitive) will be replaced by the actual nick / username, but with a ZWSP inside the nick, so the irc user with the same nick won't get pinged.
|
||||
See https://github.com/42wim/matterbridge/issues/175 for more information
|
||||
|
||||
## Bugfix
|
||||
* slack: Fix sending to different channels on same account (slack). Closes #177
|
||||
* telegram: Fix incorrect usernames being sent. Closes #181
|
||||
|
||||
|
||||
# v0.12.1
|
||||
## New features
|
||||
* telegram: Add UseFirstName option (telegram). Closes #144
|
||||
* matrix: Add NoHomeServerSuffix. Option to disable homeserver on username (matrix). Closes #160.
|
||||
|
||||
## Bugfix
|
||||
* xmpp: Add Compatibility for Cisco Jabber (xmpp) (#166)
|
||||
* irc: Fix JoinChannel argument to use IRC channel key (#172)
|
||||
* discord: Fix possible crash on nil (discord)
|
||||
* discord: Replace long ids in channel metions (discord). Fixes #174
|
||||
|
||||
# v0.12.0
|
||||
## Changes
|
||||
* general: edited messages are now being sent by default on discord/mattermost/telegram/slack. See "New Features"
|
||||
|
||||
## New features
|
||||
* general: add support for edited messages.
|
||||
Add new keyword EditDisable (false/true), default false. Which means by default edited messages will be sent to other bridges.
|
||||
Add new keyword EditSuffix , default "". You can change this eg to "(edited)", this will be appended to every edit message.
|
||||
* mattermost: support mattermost v3.9.x
|
||||
* general: Add support for HTTP{S}_PROXY env variables (#162)
|
||||
* discord: Strip custom emoji metadata (discord). Closes #148
|
||||
|
||||
## Bugfix
|
||||
* slack: Ignore error on private channel join (slack) Fixes #150
|
||||
* mattermost: fix crash on reconnects when server is down. Closes #163
|
||||
* irc: Relay messages starting with ! (irc). Closes #164
|
||||
|
||||
# v0.11.0
|
||||
## New features
|
||||
* general: reusing the same account on multiple gateways now also reuses the connection.
|
||||
This is particuarly useful for irc. See #87
|
||||
* general: the Name is now REQUIRED and needs to be UNIQUE for each gateway configuration
|
||||
* telegram: Support edited messages (telegram). See #141
|
||||
* mattermost: Add support for showing/hiding join/leave messages from mattermost. Closes #147
|
||||
* mattermost: Reconnect on session removal/timeout (mattermost)
|
||||
* mattermost: Support mattermost v3.8.x
|
||||
* irc: Rejoin channel when kicked (irc).
|
||||
|
||||
## Bugfix
|
||||
* mattermost: Remove space after nick (mattermost). Closes #142
|
||||
* mattermost: Modify iconurl correctly (mattermost).
|
||||
* irc: Fix join/leave regression (irc)
|
||||
|
||||
# v0.10.3
|
||||
## Bugfix
|
||||
* slack: Allow bot tokens for now without warning (slack). Closes #140 (fixes user_is_bot message on channel join)
|
||||
|
||||
# v0.10.2
|
||||
## New features
|
||||
* general: gops agent added. Allows for more debugging. See #134
|
||||
|
||||
27
ci/bintray.sh
Executable file
27
ci/bintray.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/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-windows-amd64.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-linux-amd64
|
||||
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
|
||||
GOOS=darwin GOARCH=amd64 go build -ldflags "-s -w -X main.githash=$(git log --pretty=format:'%h' -n 1)" -o ci/binaries/matterbridge-$VERSION-darwin-amd64
|
||||
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,67 +5,53 @@ import (
|
||||
"github.com/42wim/matterbridge/bridge"
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"reflect"
|
||||
// "github.com/davecgh/go-spew/spew"
|
||||
"github.com/hashicorp/golang-lru"
|
||||
"github.com/peterhellberg/emojilib"
|
||||
"regexp"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Gateway struct {
|
||||
*config.Config
|
||||
MyConfig *config.Gateway
|
||||
Bridges map[string]*bridge.Bridge
|
||||
ChannelsOut map[string][]string
|
||||
ChannelsIn map[string][]string
|
||||
ChannelOptions map[string]config.ChannelOptions
|
||||
Name string
|
||||
Message chan config.Message
|
||||
DestChannelFunc func(msg *config.Message, dest string) []string
|
||||
Router *Router
|
||||
MyConfig *config.Gateway
|
||||
Bridges map[string]*bridge.Bridge
|
||||
Channels map[string]*config.ChannelInfo
|
||||
ChannelOptions map[string]config.ChannelOptions
|
||||
Message chan config.Message
|
||||
Name string
|
||||
Messages *lru.Cache
|
||||
}
|
||||
|
||||
func New(cfg *config.Config, gateway *config.Gateway) *Gateway {
|
||||
gw := &Gateway{}
|
||||
gw.Name = gateway.Name
|
||||
gw.Config = cfg
|
||||
gw.MyConfig = gateway
|
||||
gw.Message = make(chan config.Message)
|
||||
gw.Bridges = make(map[string]*bridge.Bridge)
|
||||
gw.DestChannelFunc = gw.getDestChannel
|
||||
type BrMsgID struct {
|
||||
br *bridge.Bridge
|
||||
ID string
|
||||
}
|
||||
|
||||
func New(cfg config.Gateway, r *Router) *Gateway {
|
||||
gw := &Gateway{Channels: make(map[string]*config.ChannelInfo), Message: r.Message,
|
||||
Router: r, Bridges: make(map[string]*bridge.Bridge), Config: r.Config}
|
||||
cache, _ := lru.New(5000)
|
||||
gw.Messages = cache
|
||||
gw.AddConfig(&cfg)
|
||||
return gw
|
||||
}
|
||||
|
||||
func (gw *Gateway) AddBridge(cfg *config.Bridge) error {
|
||||
for _, br := range gw.Bridges {
|
||||
if br.Account == cfg.Account {
|
||||
return nil
|
||||
}
|
||||
br := gw.Router.getBridge(cfg.Account)
|
||||
if br == nil {
|
||||
br = bridge.New(gw.Config, cfg, gw.Message)
|
||||
}
|
||||
log.Infof("Starting bridge: %s ", cfg.Account)
|
||||
br := bridge.New(gw.Config, cfg, gw.Message)
|
||||
gw.mapChannelsToBridge(br, gw.ChannelsOut)
|
||||
gw.mapChannelsToBridge(br, gw.ChannelsIn)
|
||||
gw.mapChannelsToBridge(br)
|
||||
gw.Bridges[cfg.Account] = br
|
||||
err := br.Connect()
|
||||
if err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
func (gw *Gateway) mapChannelsToBridge(br *bridge.Bridge, cMap map[string][]string) {
|
||||
for _, channel := range cMap[br.Account] {
|
||||
if _, ok := gw.ChannelOptions[br.Account+channel]; ok {
|
||||
br.ChannelsOut[channel] = gw.ChannelOptions[br.Account+channel]
|
||||
} else {
|
||||
br.ChannelsOut[channel] = config.ChannelOptions{}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (gw *Gateway) Start() error {
|
||||
func (gw *Gateway) AddConfig(cfg *config.Gateway) error {
|
||||
gw.Name = cfg.Name
|
||||
gw.MyConfig = cfg
|
||||
gw.mapChannels()
|
||||
for _, br := range append(gw.MyConfig.In, append(gw.MyConfig.InOut, gw.MyConfig.Out...)...) {
|
||||
err := gw.AddBridge(&br)
|
||||
@@ -73,27 +59,13 @@ func (gw *Gateway) Start() error {
|
||||
return err
|
||||
}
|
||||
}
|
||||
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 !gw.ignoreMessage(&msg) {
|
||||
msg.Timestamp = time.Now()
|
||||
for _, br := range gw.Bridges {
|
||||
gw.handleMessage(msg, br)
|
||||
}
|
||||
}
|
||||
func (gw *Gateway) mapChannelsToBridge(br *bridge.Bridge) {
|
||||
for ID, channel := range gw.Channels {
|
||||
if br.Account == channel.Account {
|
||||
br.Channels[ID] = *channel
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -109,78 +81,123 @@ RECONNECT:
|
||||
time.Sleep(time.Second * 60)
|
||||
goto RECONNECT
|
||||
}
|
||||
br.Joined = make(map[string]bool)
|
||||
br.JoinChannels()
|
||||
}
|
||||
|
||||
func (gw *Gateway) mapChannelConfig(cfg []config.Bridge, direction string) {
|
||||
for _, br := range cfg {
|
||||
if isApi(br.Account) {
|
||||
br.Channel = "api"
|
||||
}
|
||||
ID := br.Channel + br.Account
|
||||
if _, ok := gw.Channels[ID]; !ok {
|
||||
channel := &config.ChannelInfo{Name: br.Channel, Direction: direction, ID: ID, Options: br.Options, Account: br.Account,
|
||||
SameChannel: make(map[string]bool)}
|
||||
channel.SameChannel[gw.Name] = br.SameChannel
|
||||
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].SameChannel[gw.Name] = br.SameChannel
|
||||
}
|
||||
}
|
||||
|
||||
func (gw *Gateway) mapChannels() error {
|
||||
options := make(map[string]config.ChannelOptions)
|
||||
m := make(map[string][]string)
|
||||
for _, br := range gw.MyConfig.Out {
|
||||
m[br.Account] = append(m[br.Account], br.Channel)
|
||||
options[br.Account+br.Channel] = br.Options
|
||||
}
|
||||
gw.ChannelsOut = m
|
||||
m = nil
|
||||
m = make(map[string][]string)
|
||||
for _, br := range gw.MyConfig.In {
|
||||
m[br.Account] = append(m[br.Account], br.Channel)
|
||||
options[br.Account+br.Channel] = br.Options
|
||||
}
|
||||
gw.ChannelsIn = m
|
||||
for _, br := range gw.MyConfig.InOut {
|
||||
gw.ChannelsIn[br.Account] = append(gw.ChannelsIn[br.Account], br.Channel)
|
||||
gw.ChannelsOut[br.Account] = append(gw.ChannelsOut[br.Account], br.Channel)
|
||||
options[br.Account+br.Channel] = br.Options
|
||||
}
|
||||
gw.ChannelOptions = options
|
||||
gw.mapChannelConfig(gw.MyConfig.In, "in")
|
||||
gw.mapChannelConfig(gw.MyConfig.Out, "out")
|
||||
gw.mapChannelConfig(gw.MyConfig.InOut, "inout")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (gw *Gateway) getDestChannel(msg *config.Message, dest string) []string {
|
||||
channels := gw.ChannelsIn[msg.Account]
|
||||
// broadcast to every out channel (irc QUIT)
|
||||
if msg.Event == config.EVENT_JOIN_LEAVE && msg.Channel == "" {
|
||||
return gw.ChannelsOut[dest]
|
||||
}
|
||||
for _, channel := range channels {
|
||||
if channel == msg.Channel {
|
||||
return gw.ChannelsOut[dest]
|
||||
}
|
||||
}
|
||||
return []string{}
|
||||
}
|
||||
|
||||
func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) {
|
||||
// only relay join/part when configged
|
||||
if msg.Event == config.EVENT_JOIN_LEAVE && !gw.Bridges[dest.Account].Config.ShowJoinPart {
|
||||
return
|
||||
}
|
||||
originchannel := msg.Channel
|
||||
channels := gw.DestChannelFunc(&msg, dest.Account)
|
||||
for _, channel := range channels {
|
||||
// do not send the message to the bridge we come from if also the channel is the same
|
||||
if msg.Account == dest.Account && channel == originchannel {
|
||||
func (gw *Gateway) getDestChannel(msg *config.Message, dest bridge.Bridge) []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
|
||||
}
|
||||
msg.Channel = channel
|
||||
if msg.Channel == "" {
|
||||
log.Debug("empty channel")
|
||||
return
|
||||
}
|
||||
for _, channel := range gw.Channels {
|
||||
if _, ok := gw.Channels[getChannelID(*msg)]; !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
return channels
|
||||
}
|
||||
|
||||
func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) []*BrMsgID {
|
||||
var brMsgIDs []*BrMsgID
|
||||
// only relay join/part when configged
|
||||
if msg.Event == config.EVENT_JOIN_LEAVE && !gw.Bridges[dest.Account].Config.ShowJoinPart {
|
||||
return brMsgIDs
|
||||
}
|
||||
// broadcast to every out channel (irc QUIT)
|
||||
if msg.Channel == "" && msg.Event != config.EVENT_JOIN_LEAVE {
|
||||
log.Debug("empty channel")
|
||||
return brMsgIDs
|
||||
}
|
||||
originchannel := msg.Channel
|
||||
origmsg := msg
|
||||
channels := gw.getDestChannel(&msg, *dest)
|
||||
for _, channel := range channels {
|
||||
// do not send to ourself
|
||||
if channel.ID == getChannelID(origmsg) {
|
||||
continue
|
||||
}
|
||||
log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, originchannel, dest.Account, channel.Name)
|
||||
msg.Channel = channel.Name
|
||||
msg.Avatar = gw.modifyAvatar(origmsg, 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
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, originchannel, dest.Account, channel)
|
||||
gw.modifyUsername(&msg, dest)
|
||||
// for api we need originchannel as channel
|
||||
if dest.Protocol == "api" {
|
||||
msg.Channel = originchannel
|
||||
}
|
||||
err := dest.Send(msg)
|
||||
mID, err := dest.Send(msg)
|
||||
if err != nil {
|
||||
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 {
|
||||
// if we don't have the bridge, ignore it
|
||||
if _, ok := gw.Bridges[msg.Account]; !ok {
|
||||
return true
|
||||
}
|
||||
if msg.Text == "" {
|
||||
log.Debugf("ignoring empty message %#v from %s", msg, msg.Account)
|
||||
return true
|
||||
@@ -191,33 +208,74 @@ func (gw *Gateway) ignoreMessage(msg *config.Message) bool {
|
||||
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
|
||||
}
|
||||
|
||||
func (gw *Gateway) modifyMessage(msg *config.Message, dest *bridge.Bridge) {
|
||||
val := reflect.ValueOf(gw.Config).Elem()
|
||||
for i := 0; i < val.NumField(); i++ {
|
||||
typeField := val.Type().Field(i)
|
||||
// look for the protocol map (both lowercase)
|
||||
if strings.ToLower(typeField.Name) == dest.Protocol {
|
||||
// get the Protocol struct from the map
|
||||
protoCfg := val.Field(i).MapIndex(reflect.ValueOf(dest.Name))
|
||||
//config.SetNickFormat(msg, protoCfg.Interface().(config.Protocol))
|
||||
val.Field(i).SetMapIndex(reflect.ValueOf(dest.Name), protoCfg)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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]
|
||||
msg.Protocol = br.Protocol
|
||||
nick := gw.Config.General.RemoteNickFormat
|
||||
if nick == "" {
|
||||
nick = dest.Config.RemoteNickFormat
|
||||
}
|
||||
if len(msg.Username) > 0 {
|
||||
// fix utf-8 issue #193
|
||||
i := 0
|
||||
for index := range msg.Username {
|
||||
if i == 1 {
|
||||
i = index
|
||||
break
|
||||
}
|
||||
i++
|
||||
}
|
||||
nick = strings.Replace(nick, "{NOPINGNICK}", msg.Username[:i]+""+msg.Username[i:], -1)
|
||||
}
|
||||
nick = strings.Replace(nick, "{NICK}", msg.Username, -1)
|
||||
nick = strings.Replace(nick, "{BRIDGE}", br.Name, -1)
|
||||
nick = strings.Replace(nick, "{PROTOCOL}", br.Protocol, -1)
|
||||
msg.Username = nick
|
||||
return nick
|
||||
}
|
||||
|
||||
func (gw *Gateway) modifyAvatar(msg config.Message, dest *bridge.Bridge) string {
|
||||
iconurl := gw.Config.General.IconURL
|
||||
if iconurl == "" {
|
||||
iconurl = dest.Config.IconURL
|
||||
}
|
||||
iconurl = strings.Replace(iconurl, "{NICK}", msg.Username, -1)
|
||||
if msg.Avatar == "" {
|
||||
msg.Avatar = iconurl
|
||||
}
|
||||
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 {
|
||||
return msg.Channel + msg.Account
|
||||
}
|
||||
|
||||
func (gw *Gateway) validGatewayDest(msg *config.Message, channel *config.ChannelInfo) bool {
|
||||
return msg.Gateway == gw.Name
|
||||
}
|
||||
|
||||
func isApi(account string) bool {
|
||||
return strings.HasPrefix(account, "api.")
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,48 +2,27 @@ package samechannelgateway
|
||||
|
||||
import (
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
"github.com/42wim/matterbridge/gateway"
|
||||
)
|
||||
|
||||
type SameChannelGateway struct {
|
||||
*config.Config
|
||||
MyConfig *config.SameChannelGateway
|
||||
Channels []string
|
||||
Name string
|
||||
}
|
||||
|
||||
func New(cfg *config.Config, gatewayCfg *config.SameChannelGateway) *SameChannelGateway {
|
||||
return &SameChannelGateway{
|
||||
MyConfig: gatewayCfg,
|
||||
Channels: gatewayCfg.Channels,
|
||||
Name: gatewayCfg.Name,
|
||||
Config: cfg}
|
||||
func New(cfg *config.Config) *SameChannelGateway {
|
||||
return &SameChannelGateway{Config: cfg}
|
||||
}
|
||||
|
||||
func (sgw *SameChannelGateway) Start() error {
|
||||
gw := gateway.New(sgw.Config, &config.Gateway{Name: sgw.Name})
|
||||
gw.DestChannelFunc = sgw.getDestChannel
|
||||
for _, account := range sgw.MyConfig.Accounts {
|
||||
for _, channel := range sgw.Channels {
|
||||
br := config.Bridge{Account: account, Channel: channel}
|
||||
gw.MyConfig.InOut = append(gw.MyConfig.InOut, br)
|
||||
func (sgw *SameChannelGateway) GetConfig() []config.Gateway {
|
||||
var gwconfigs []config.Gateway
|
||||
cfg := sgw.Config
|
||||
for _, gw := range cfg.SameChannelGateway {
|
||||
gwconfig := config.Gateway{Name: gw.Name, Enable: gw.Enable}
|
||||
for _, account := range gw.Accounts {
|
||||
for _, channel := range gw.Channels {
|
||||
gwconfig.InOut = append(gwconfig.InOut, config.Bridge{Account: account, Channel: channel, SameChannel: true})
|
||||
}
|
||||
}
|
||||
gwconfigs = append(gwconfigs, gwconfig)
|
||||
}
|
||||
return gw.Start()
|
||||
}
|
||||
|
||||
func (sgw *SameChannelGateway) validChannel(channel string) bool {
|
||||
for _, c := range sgw.Channels {
|
||||
if c == channel {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (sgw *SameChannelGateway) getDestChannel(msg *config.Message, dest string) []string {
|
||||
if sgw.validChannel(msg.Channel) {
|
||||
return []string{msg.Channel}
|
||||
}
|
||||
return []string{}
|
||||
return gwconfigs
|
||||
}
|
||||
|
||||
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.
|
||||
func (c *Client) Receive() Message {
|
||||
for {
|
||||
select {
|
||||
case msg := <-c.In:
|
||||
return msg
|
||||
}
|
||||
var msg Message
|
||||
for msg = range c.In {
|
||||
return msg
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
@@ -5,13 +5,13 @@ import (
|
||||
"fmt"
|
||||
"github.com/42wim/matterbridge/bridge/config"
|
||||
"github.com/42wim/matterbridge/gateway"
|
||||
"github.com/42wim/matterbridge/gateway/samechannel"
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/google/gops/agent"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var (
|
||||
version = "0.10.2"
|
||||
version = "1.1.2"
|
||||
githash string
|
||||
)
|
||||
|
||||
@@ -33,37 +33,22 @@ func main() {
|
||||
fmt.Printf("version: %s %s\n", version, githash)
|
||||
return
|
||||
}
|
||||
flag.Parse()
|
||||
if *flagDebug {
|
||||
log.Info("Enabling debug")
|
||||
log.SetLevel(log.DebugLevel)
|
||||
}
|
||||
log.Printf("Running version %s %s", version, githash)
|
||||
cfg := config.NewConfig(*flagConfig)
|
||||
for _, gw := range cfg.SameChannelGateway {
|
||||
if !gw.Enable {
|
||||
continue
|
||||
}
|
||||
log.Printf("Starting samechannel gateway %#v", gw.Name)
|
||||
g := samechannelgateway.New(cfg, &gw)
|
||||
err := g.Start()
|
||||
if err != nil {
|
||||
log.Fatalf("Starting gateway failed %#v", err)
|
||||
}
|
||||
log.Printf("Started samechannel gateway %#v", gw.Name)
|
||||
if strings.Contains(version, "-dev") {
|
||||
log.Println("WARNING: THIS IS A DEVELOPMENT VERSION. Things may break.")
|
||||
}
|
||||
|
||||
for _, gw := range cfg.Gateway {
|
||||
if !gw.Enable {
|
||||
continue
|
||||
}
|
||||
log.Printf("Starting gateway %#v", gw.Name)
|
||||
g := gateway.New(cfg, &gw)
|
||||
err := g.Start()
|
||||
if err != nil {
|
||||
log.Fatalf("Starting gateway failed %#v", err)
|
||||
}
|
||||
log.Printf("Started gateway %#v", gw.Name)
|
||||
cfg := config.NewConfig(*flagConfig)
|
||||
r, err := gateway.NewRouter(cfg)
|
||||
if err != nil {
|
||||
log.Fatalf("Starting gateway failed: %s", err)
|
||||
}
|
||||
err = r.Start()
|
||||
if err != nil {
|
||||
log.Fatalf("Starting gateway failed: %s", err)
|
||||
}
|
||||
log.Printf("Gateway(s) started succesfully. Now relaying messages")
|
||||
select {}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#This is configuration for matterbridge.
|
||||
#WARNING: as this file contains credentials, be sure to set correct file permissions
|
||||
###################################################################
|
||||
#IRC section
|
||||
###################################################################
|
||||
@@ -31,6 +32,23 @@ UseSASL=false
|
||||
#OPTIONAL (default false)
|
||||
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.
|
||||
#REQUIRED
|
||||
Nick="matterbot"
|
||||
@@ -48,23 +66,36 @@ MessageDelay=1300
|
||||
|
||||
#Maximum amount of messages to hold in queue. If queue is full
|
||||
#messages will be dropped.
|
||||
#<clipped> will be add to the message that fills the queue.
|
||||
#<message clipped> will be add to the message that fills the queue.
|
||||
#OPTIONAL (default 30)
|
||||
MessageQueue=30
|
||||
|
||||
#Maximum length of message sent to irc server. If it exceeds
|
||||
#<message clipped> will be add to the message.
|
||||
#OPTIONAL (default 400)
|
||||
MessageLength=400
|
||||
|
||||
#Nicks you want to ignore.
|
||||
#Messages from those users will not be sent to other bridges.
|
||||
#OPTIONAL
|
||||
IgnoreNicks="ircspammer1 ircspammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
|
||||
#The string "{NOPINGNICK}" (case sensitive) will be replaced by the actual nick / username, but with a ZWSP inside the nick, so the irc user with the same nick won't get pinged. See https://github.com/42wim/matterbridge/issues/175 for more information
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -107,6 +138,12 @@ SkipTLSVerify=true
|
||||
#OPTIONAL
|
||||
IgnoreNicks="ircspammer1 ircspammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -114,7 +151,8 @@ IgnoreNicks="ircspammer1 ircspammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -150,6 +188,12 @@ Nick="yourlogin"
|
||||
#OPTIONAL
|
||||
IgnoreNicks="spammer1 spammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -157,7 +201,8 @@ IgnoreNicks="spammer1 spammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}/{BRIDGE}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -171,51 +216,53 @@ ShowJoinPart=false
|
||||
#REQUIRED
|
||||
|
||||
[mattermost.work]
|
||||
#### Settings for webhook matterbridge.
|
||||
#### These settings will not be used when useAPI is enabled
|
||||
|
||||
#Url is your incoming webhook url as specified in mattermost.
|
||||
#See account settings - integrations - incoming webhooks on mattermost.
|
||||
#REQUIRED (unless useAPI=true)
|
||||
URL="https://yourdomain/hooks/yourhookkey"
|
||||
|
||||
#Address to listen on for outgoing webhook requests from mattermost.
|
||||
#See account settings - integrations - outgoing webhooks on mattermost.
|
||||
#This setting will not be used when using -plus switch which doesn't use
|
||||
#webhooks
|
||||
#REQUIRED (unless useAPI=true)
|
||||
BindAddress="0.0.0.0:9999"
|
||||
|
||||
#Icon that will be showed in mattermost.
|
||||
#OPTIONAL
|
||||
IconURL="http://youricon.png"
|
||||
|
||||
#### Settings for matterbridge -plus
|
||||
#### Thse settings will only be used when using the -plus switch.
|
||||
|
||||
#### Settings for using matterbridge API
|
||||
#OPTIONAL
|
||||
useAPI=false
|
||||
|
||||
#The mattermost hostname.
|
||||
#REQUIRED (when useAPI=true)
|
||||
Server="yourmattermostserver.domain"
|
||||
#The mattermost hostname. (do not prefix it with http or https)
|
||||
#REQUIRED (when not using webhooks)
|
||||
Server="yourmattermostserver.domain"
|
||||
|
||||
#Your team on mattermost.
|
||||
#REQUIRED (when useAPI=true)
|
||||
#REQUIRED (when not using webhooks)
|
||||
Team="yourteam"
|
||||
|
||||
#login/pass of your bot.
|
||||
#Use a dedicated user for this and not your own!
|
||||
#REQUIRED (when useAPI=true)
|
||||
#REQUIRED (when not using webhooks)
|
||||
Login="yourlogin"
|
||||
Password="yourpass"
|
||||
|
||||
#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.
|
||||
#OPTIONAL (default false)
|
||||
NoTLS=false
|
||||
|
||||
#### Shared settings for matterbridge and -plus
|
||||
#### Settings for webhook matterbridge.
|
||||
#NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE DEDICATED BOT USER WHEN POSSIBLE!
|
||||
#You don't need to configure this, if you have configured the settings
|
||||
#above.
|
||||
|
||||
#Url is your incoming webhook url as specified in mattermost.
|
||||
#See account settings - integrations - incoming webhooks on mattermost.
|
||||
#If specified, messages will be sent to mattermost using this URL
|
||||
#OPTIONAL
|
||||
WebhookURL="https://yourdomain/hooks/yourhookkey"
|
||||
|
||||
#Address to listen on for outgoing webhook requests from mattermost.
|
||||
#See account settings - integrations - outgoing webhooks on mattermost.
|
||||
#If specified, messages will be received from mattermost on this ip:port
|
||||
#(this will only work if WebhookURL above is also configured)
|
||||
#OPTIONAL
|
||||
WebhookBindAddress="0.0.0.0:9999"
|
||||
|
||||
#Icon that will be showed in mattermost.
|
||||
#This only works when WebhookURL is configured
|
||||
#OPTIONAL
|
||||
IconURL="http://youricon.png"
|
||||
|
||||
#### End settings for webhook matterbridge.
|
||||
|
||||
#Enable to not verify the certificate on your mattermost server.
|
||||
#e.g. when using selfsigned certificates
|
||||
@@ -238,11 +285,25 @@ NicksPerRow=4
|
||||
#OPTIONAL (default false)
|
||||
PrefixMessagesWithNick=false
|
||||
|
||||
#Disable sending of edits to other bridges
|
||||
#OPTIONAL (default false)
|
||||
EditDisable=false
|
||||
|
||||
#Message to be appended to every edited message
|
||||
#OPTIONAL (default empty)
|
||||
EditSuffix=" (edited)"
|
||||
|
||||
#Nicks you want to ignore.
|
||||
#Messages from those users will not be sent to other bridges.
|
||||
#OPTIONAL
|
||||
IgnoreNicks="ircspammer1 ircspammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -250,7 +311,8 @@ IgnoreNicks="ircspammer1 ircspammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -275,6 +337,12 @@ Token="Yourtokenhere"
|
||||
#OPTIONAL
|
||||
IgnoreNicks="ircspammer1 ircspammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -282,7 +350,8 @@ IgnoreNicks="ircspammer1 ircspammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -295,37 +364,28 @@ ShowJoinPart=false
|
||||
#In this example we use [slack.hobby]
|
||||
#REQUIRED
|
||||
[slack.hobby]
|
||||
#### Settings for webhook matterbridge.
|
||||
#### These settings will not be used when useAPI is enabled
|
||||
#Token to connect with the Slack API
|
||||
#You'll have to use a test/api-token using a dedicated user and not a bot token.
|
||||
#See https://github.com/42wim/matterbridge/issues/75 for more info.
|
||||
#Use https://api.slack.com/custom-integrations/legacy-tokens
|
||||
#REQUIRED (when not using webhooks)
|
||||
Token="yourslacktoken"
|
||||
|
||||
#### Settings for webhook matterbridge.
|
||||
#NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API
|
||||
#AND DEDICATED BOT USER WHEN POSSIBLE!
|
||||
#Url is your incoming webhook url as specified in slack
|
||||
#See account settings - integrations - incoming webhooks on slack
|
||||
#REQUIRED (unless useAPI=true)
|
||||
URL="https://hooks.slack.com/services/yourhook"
|
||||
#OPTIONAL
|
||||
WebhookURL="https://hooks.slack.com/services/yourhook"
|
||||
|
||||
#NOT RECOMMENDED TO USE INCOMING/OUTGOING WEBHOOK. USE SLACK API
|
||||
#AND DEDICATED BOT USER WHEN POSSIBLE!
|
||||
#Address to listen on for outgoing webhook requests from slack
|
||||
#See account settings - integrations - outgoing webhooks on slack
|
||||
#This setting will not be used when useAPI is eanbled
|
||||
#webhooks
|
||||
#REQUIRED (unless useAPI=true)
|
||||
BindAddress="0.0.0.0:9999"
|
||||
|
||||
#### Settings for using slack API (RECOMMENDED)
|
||||
#OPTIONAL
|
||||
useAPI=false
|
||||
|
||||
#Token to connect with the Slack API
|
||||
#You'll have to use a test/api-token using a dedicated user and not a bot token.
|
||||
#See https://github.com/42wim/matterbridge/issues/75 for more info.
|
||||
#Use https://api.slack.com/custom-integrations/legacy-tokens
|
||||
#REQUIRED (when useAPI=true)
|
||||
Token="yourslacktoken"
|
||||
|
||||
#### Shared settings for webhooks and API
|
||||
WebhookBindAddress="0.0.0.0:9999"
|
||||
|
||||
#Icon that will be showed in slack
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
@@ -342,6 +402,14 @@ NickFormatter="plain"
|
||||
#OPTIONAL (default 4)
|
||||
NicksPerRow=4
|
||||
|
||||
#Disable sending of edits to other bridges
|
||||
#OPTIONAL (default false)
|
||||
EditDisable=true
|
||||
|
||||
#Message to be appended to every edited message
|
||||
#OPTIONAL (default empty)
|
||||
EditSuffix=" (edited)"
|
||||
|
||||
#Whether to prefix messages from other bridges to mattermost with RemoteNickFormat
|
||||
#Useful if username overrides for incoming webhooks isn't enabled on the
|
||||
#slack server. If you set PrefixMessagesWithNick to true, each message
|
||||
@@ -355,6 +423,12 @@ PrefixMessagesWithNick=false
|
||||
#OPTIONAL
|
||||
IgnoreNicks="ircspammer1 ircspammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -362,7 +436,8 @@ IgnoreNicks="ircspammer1 ircspammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -385,11 +460,38 @@ Token="Yourtokenhere"
|
||||
#REQUIRED
|
||||
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
|
||||
#OPTIONAL (default false)
|
||||
EditDisable=false
|
||||
|
||||
#Message to be appended to every edited message
|
||||
#OPTIONAL (default empty)
|
||||
EditSuffix=" (edited)"
|
||||
|
||||
#Nicks you want to ignore.
|
||||
#Messages from those users will not be sent to other bridges.
|
||||
#OPTIONAL
|
||||
IgnoreNicks="ircspammer1 ircspammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -397,7 +499,8 @@ IgnoreNicks="ircspammer1 ircspammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -420,11 +523,37 @@ Token="Yourtokenhere"
|
||||
#See https://core.telegram.org/bots/api#html-style
|
||||
MessageFormat=""
|
||||
|
||||
#If enabled use the "First Name" as username. If this is empty use the Username
|
||||
#If disabled use the "Username" as username. If this is empty use the First Name
|
||||
#If all names are empty, username will be "unknown"
|
||||
#OPTIONAL (default false)
|
||||
UseFirstName=false
|
||||
|
||||
#WARNING! If enabled this will relay GIF/stickers/documents and other attachments as URLs
|
||||
#Those URLs will contain your bot-token. This may not be what you want.
|
||||
#For now there is no secure way to relay GIF/stickers/documents without seeing your token.
|
||||
#OPTIONAL (default false)
|
||||
UseInsecureURL=false
|
||||
|
||||
#Disable sending of edits to other bridges
|
||||
#OPTIONAL (default false)
|
||||
EditDisable=false
|
||||
|
||||
#Message to be appended to every edited message
|
||||
#OPTIONAL (default empty)
|
||||
EditSuffix=" (edited)"
|
||||
|
||||
#Nicks you want to ignore.
|
||||
#Messages from those users will not be sent to other bridges.
|
||||
#OPTIONAL
|
||||
IgnoreNicks="spammer1 spammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -432,7 +561,8 @@ IgnoreNicks="spammer1 spammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -450,12 +580,12 @@ ShowJoinPart=false
|
||||
#Read #https://rocket.chat/docs/administrator-guides/integrations/#how-to-create-a-new-incoming-webhook
|
||||
#See administration - integrations - new integration - incoming webhook
|
||||
#REQUIRED
|
||||
URL="https://yourdomain/hooks/yourhookkey"
|
||||
WebhookURL="https://yourdomain/hooks/yourhookkey"
|
||||
|
||||
#Address to listen on for outgoing webhook requests from rocketchat.
|
||||
#See administration - integrations - new integration - outgoing webhook
|
||||
#REQUIRED
|
||||
BindAddress="0.0.0.0:9999"
|
||||
WebhookBindAddress="0.0.0.0:9999"
|
||||
|
||||
#Your nick/username as specified in your incoming webhook "Post as" setting
|
||||
#REQUIRED
|
||||
@@ -482,6 +612,12 @@ PrefixMessagesWithNick=false
|
||||
#OPTIONAL
|
||||
IgnoreNicks="ircspammer1 ircspammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -489,7 +625,8 @@ IgnoreNicks="ircspammer1 ircspammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -513,6 +650,11 @@ Server="https://matrix.org"
|
||||
Login="yourlogin"
|
||||
Password="yourpass"
|
||||
|
||||
#Whether to send the homeserver suffix. eg ":matrix.org" in @username:matrix.org
|
||||
#to other bridges, or only send "username".(true only sends username)
|
||||
#OPTIONAL (default false)
|
||||
NoHomeServerSuffix=false
|
||||
|
||||
#Whether to prefix messages from other bridges to matrix with the sender's nick.
|
||||
#Useful if username overrides for incoming webhooks isn't enabled on the
|
||||
#matrix server. If you set PrefixMessagesWithNick to true, each message
|
||||
@@ -525,6 +667,12 @@ PrefixMessagesWithNick=false
|
||||
#OPTIONAL
|
||||
IgnoreNicks="spammer1 spammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -532,7 +680,57 @@ IgnoreNicks="spammer1 spammer2"
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges (only from irc-bridge at the moment)
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
###################################################################
|
||||
#steam section
|
||||
###################################################################
|
||||
[steam]
|
||||
#You can configure multiple servers "[steam.name]" or "[steam.name2]"
|
||||
#In this example we use [steam.gamechat]
|
||||
#REQUIRED
|
||||
|
||||
[steam.gamechat]
|
||||
#login/pass of your bot.
|
||||
#Use a dedicated user for this and not your own account!
|
||||
#REQUIRED
|
||||
Login="yourlogin"
|
||||
Password="yourpass"
|
||||
|
||||
#steamguard mail authcode (not the 2FA code)
|
||||
#OPTIONAL
|
||||
Authcode="ABCE12"
|
||||
|
||||
#Whether to prefix messages from other bridges to matrix with the sender's nick.
|
||||
#Useful if username overrides for incoming webhooks isn't enabled on the
|
||||
#matrix server. If you set PrefixMessagesWithNick to true, each message
|
||||
#from bridge to matrix will by default be prefixed by the RemoteNickFormat setting. i
|
||||
#OPTIONAL (default false)
|
||||
PrefixMessagesWithNick=false
|
||||
|
||||
#Nicks you want to ignore.
|
||||
#Messages from those users will not be sent to other bridges.
|
||||
#OPTIONAL
|
||||
IgnoreNicks="spammer1 spammer2"
|
||||
|
||||
#Messages you want to ignore.
|
||||
#Messages matching these regexp will be ignored and not sent to other bridges
|
||||
#See https://regex-golang.appspot.com/assets/html/index.html for more regex info
|
||||
#OPTIONAL (example below ignores messages starting with ~~ or messages containing badword
|
||||
IgnoreMessages="^~~ badword"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
#The string "{PROTOCOL}" (case sensitive) will be replaced by the protocol used by the bridge
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
|
||||
#Enable to show users joins/parts from other bridges
|
||||
#Only works hiding/show messages from irc and mattermost bridge for now
|
||||
#OPTIONAL (default false)
|
||||
ShowJoinPart=false
|
||||
|
||||
@@ -553,6 +751,11 @@ BindAddress="127.0.0.1:4242"
|
||||
#Amount of messages to keep in memory
|
||||
Buffer=1000
|
||||
|
||||
#Bearer token used for authentication
|
||||
#curl -H "Authorization: Bearer token" http://localhost:4242/api/messages
|
||||
#OPTIONAL (no authorization if token is empty)
|
||||
Token="mytoken"
|
||||
|
||||
#RemoteNickFormat defines how remote users appear on this bridge
|
||||
#The string "{NICK}" (case sensitive) will be replaced by the actual nick / username.
|
||||
#The string "{BRIDGE}" (case sensitive) will be replaced by the sending bridge
|
||||
@@ -560,6 +763,8 @@ Buffer=1000
|
||||
#OPTIONAL (default empty)
|
||||
RemoteNickFormat="{NICK}"
|
||||
|
||||
|
||||
|
||||
###################################################################
|
||||
#General configuration
|
||||
###################################################################
|
||||
@@ -587,7 +792,7 @@ RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
|
||||
#
|
||||
|
||||
[[gateway]]
|
||||
#OPTIONAL (not used for now)
|
||||
#REQUIRED and UNIQUE
|
||||
name="gateway1"
|
||||
#Enable enables this gateway
|
||||
##OPTIONAL (default false)
|
||||
@@ -603,7 +808,7 @@ enable=true
|
||||
#channel to connect on that account
|
||||
#How to specify them for the different bridges:
|
||||
#
|
||||
#irc - #channel (# is required)
|
||||
#irc - #channel (# is required) (this needs to be lowercase!)
|
||||
#mattermost - channel (the channel name as seen in the URL, not the displayname)
|
||||
#gitter - username/room
|
||||
#xmpp - channel
|
||||
@@ -614,8 +819,12 @@ enable=true
|
||||
#telegram - chatid (a large negative number, eg -123456789)
|
||||
# see (https://www.linkedin.com/pulse/telegram-bots-beginners-marco-frau)
|
||||
#hipchat - id_channel (see https://www.hipchat.com/account/xmpp for the correct channel)
|
||||
#rocketchat - #channel (# is required)
|
||||
#matrix - #channel:server (eg #yourchannel:matrix.org)
|
||||
#rocketchat - #channel (# is required (also needed for private channels!)
|
||||
#matrix - #channel:server (eg #yourchannel:matrix.org)
|
||||
# - encrypted rooms are not supported in matrix
|
||||
#steam - chatid (a large number).
|
||||
# The number in the URL when you click "enter chat room" in the browser
|
||||
#
|
||||
#REQUIRED
|
||||
channel="#testing"
|
||||
|
||||
@@ -646,12 +855,22 @@ enable=true
|
||||
#OPTIONAL - your irc channel key
|
||||
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
|
||||
#[[gateway.inout]]
|
||||
#account="api.local"
|
||||
#channel="api"
|
||||
#To send data to the api:
|
||||
#curl -XPOST -H 'Content-Type: application/json' -d '{"text":"test","username":"randomuser"}' http://localhost:4242/api/message
|
||||
#curl -XPOST -H 'Content-Type: application/json' -d '{"text":"test","username":"randomuser","gateway":"gateway1"}' http://localhost:4242/api/message
|
||||
#To read from the api:
|
||||
#curl http://localhost:4242/api/messages
|
||||
|
||||
#If you want to do a 1:1 mapping between protocols where the channelnames are the same
|
||||
#e.g. slack and mattermost you can use the samechannelgateway configuration
|
||||
@@ -659,6 +878,7 @@ enable=true
|
||||
#channel testing on slack and vice versa. (and for the channel testing2 and testing3)
|
||||
|
||||
[[samechannelgateway]]
|
||||
name="samechannel1"
|
||||
enable = false
|
||||
accounts = [ "mattermost.work","slack.hobby" ]
|
||||
channels = [ "testing","testing2","testing3"]
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#WARNING: as this file contains credentials, be sure to set correct file permissions
|
||||
[irc]
|
||||
[irc.freenode]
|
||||
Server="irc.freenode.net:6667"
|
||||
@@ -5,8 +6,8 @@
|
||||
|
||||
[mattermost]
|
||||
[mattermost.work]
|
||||
useAPI=true
|
||||
Server="yourmattermostserver.domain"
|
||||
#do not prefix it wit http:// or https://
|
||||
Server="yourmattermostserver.domain"
|
||||
Team="yourteam"
|
||||
Login="yourlogin"
|
||||
Password="yourpass"
|
||||
@@ -15,22 +16,14 @@
|
||||
[[gateway]]
|
||||
name="gateway1"
|
||||
enable=true
|
||||
[[gateway.in]]
|
||||
[[gateway.inout]]
|
||||
account="irc.freenode"
|
||||
channel="#testing"
|
||||
|
||||
[[gateway.out]]
|
||||
account="irc.freenode"
|
||||
channel="#testing"
|
||||
|
||||
[[gateway.in]]
|
||||
[[gateway.inout]]
|
||||
account="mattermost.work"
|
||||
channel="off-topic"
|
||||
|
||||
[[gateway.out]]
|
||||
account="mattermost.work"
|
||||
channel="off-topic"
|
||||
|
||||
#simpler config possible since v0.10.2
|
||||
#[[gateway]]
|
||||
#name="gateway2"
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package matterclient
|
||||
|
||||
import (
|
||||
"crypto/md5"
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/cookiejar"
|
||||
"net/url"
|
||||
@@ -14,6 +16,7 @@ import (
|
||||
log "github.com/Sirupsen/logrus"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/hashicorp/golang-lru"
|
||||
"github.com/jpillora/backoff"
|
||||
"github.com/mattermost/platform/model"
|
||||
)
|
||||
@@ -34,32 +37,37 @@ type Message struct {
|
||||
Channel string
|
||||
Username string
|
||||
Text string
|
||||
Type string
|
||||
UserID string
|
||||
}
|
||||
|
||||
type Team struct {
|
||||
Team *model.Team
|
||||
Id string
|
||||
Channels *model.ChannelList
|
||||
MoreChannels *model.ChannelList
|
||||
Channels []*model.Channel
|
||||
MoreChannels []*model.Channel
|
||||
Users map[string]*model.User
|
||||
}
|
||||
|
||||
type MMClient struct {
|
||||
sync.RWMutex
|
||||
*Credentials
|
||||
Team *Team
|
||||
OtherTeams []*Team
|
||||
Client *model.Client
|
||||
User *model.User
|
||||
Users map[string]*model.User
|
||||
MessageChan chan *Message
|
||||
log *log.Entry
|
||||
WsClient *websocket.Conn
|
||||
WsQuit bool
|
||||
WsAway bool
|
||||
WsConnected bool
|
||||
WsSequence int64
|
||||
WsPingChan chan *model.WebSocketResponse
|
||||
Team *Team
|
||||
OtherTeams []*Team
|
||||
Client *model.Client4
|
||||
User *model.User
|
||||
Users map[string]*model.User
|
||||
MessageChan chan *Message
|
||||
log *log.Entry
|
||||
WsClient *websocket.Conn
|
||||
WsQuit bool
|
||||
WsAway bool
|
||||
WsConnected bool
|
||||
WsSequence int64
|
||||
WsPingChan chan *model.WebSocketResponse
|
||||
ServerVersion string
|
||||
OnWsConnect func()
|
||||
lruCache *lru.Cache
|
||||
}
|
||||
|
||||
func New(login, pass, team, server string) *MMClient {
|
||||
@@ -67,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.log = log.WithFields(log.Fields{"module": "matterclient"})
|
||||
log.SetFormatter(&log.TextFormatter{FullTimestamp: true})
|
||||
mmclient.lruCache, _ = lru.New(500)
|
||||
return mmclient
|
||||
}
|
||||
|
||||
@@ -82,7 +91,7 @@ func (m *MMClient) SetLogLevel(level string) {
|
||||
func (m *MMClient) Login() error {
|
||||
// check if this is a first connect or a reconnection
|
||||
firstConnection := true
|
||||
if m.WsConnected == true {
|
||||
if m.WsConnected {
|
||||
firstConnection = false
|
||||
}
|
||||
m.WsConnected = false
|
||||
@@ -95,39 +104,62 @@ func (m *MMClient) Login() error {
|
||||
Jitter: true,
|
||||
}
|
||||
uriScheme := "https://"
|
||||
wsScheme := "wss://"
|
||||
if m.NoTLS {
|
||||
uriScheme = "http://"
|
||||
wsScheme = "ws://"
|
||||
}
|
||||
// login to mattermost
|
||||
m.Client = model.NewClient(uriScheme + m.Credentials.Server)
|
||||
m.Client.HttpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}}
|
||||
m.Client = model.NewAPIv4Client(uriScheme + m.Credentials.Server)
|
||||
m.Client.HttpClient.Transport = &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}, Proxy: http.ProxyFromEnvironment}
|
||||
m.Client.HttpClient.Timeout = time.Second * 10
|
||||
var myinfo *model.Result
|
||||
|
||||
for {
|
||||
d := b.Duration()
|
||||
// bogus call to get the serverversion
|
||||
_, resp := m.Client.Logout()
|
||||
if resp.Error != nil {
|
||||
return fmt.Errorf("%#v", resp.Error.Error())
|
||||
}
|
||||
if firstConnection && !supportedVersion(resp.ServerVersion) {
|
||||
return fmt.Errorf("unsupported mattermost version: %s", resp.ServerVersion)
|
||||
}
|
||||
m.ServerVersion = resp.ServerVersion
|
||||
if m.ServerVersion == "" {
|
||||
m.log.Debugf("Server not up yet, reconnecting in %s", d)
|
||||
time.Sleep(d)
|
||||
} else {
|
||||
m.log.Infof("Found version %s", m.ServerVersion)
|
||||
break
|
||||
}
|
||||
}
|
||||
b.Reset()
|
||||
|
||||
var resp *model.Response
|
||||
//var myinfo *model.Result
|
||||
var appErr *model.AppError
|
||||
var logmsg = "trying login"
|
||||
for {
|
||||
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) {
|
||||
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+"=")
|
||||
if len(token) != 2 {
|
||||
return errors.New("incorrect MMAUTHTOKEN. valid input is MMAUTHTOKEN=yourtoken")
|
||||
}
|
||||
m.Client.HttpClient.Jar = m.createCookieJar(token[1])
|
||||
m.Client.MockSession(token[1])
|
||||
myinfo, appErr = m.Client.GetMe("")
|
||||
if appErr != nil {
|
||||
return errors.New(appErr.DetailedError)
|
||||
m.Client.AuthToken = token[1]
|
||||
m.Client.AuthType = model.HEADER_BEARER
|
||||
m.User, resp = m.Client.GetMe("")
|
||||
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)
|
||||
return errors.New("invalid " + model.SESSION_COOKIE_TOKEN)
|
||||
}
|
||||
} 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 {
|
||||
d := b.Duration()
|
||||
m.log.Debug(appErr.DetailedError)
|
||||
@@ -155,17 +187,34 @@ func (m *MMClient) Login() error {
|
||||
if m.Team == nil {
|
||||
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
|
||||
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.Set(model.HEADER_AUTH, "BEARER "+m.Client.AuthToken)
|
||||
|
||||
m.log.Debugf("WsClient: making connection: %s", wsurl)
|
||||
for {
|
||||
wsDialer := &websocket.Dialer{Proxy: http.ProxyFromEnvironment, TLSClientConfig: &tls.Config{InsecureSkipVerify: m.SkipTLSVerify}}
|
||||
var err error
|
||||
m.WsClient, _, err = wsDialer.Dial(wsurl, header)
|
||||
if err != nil {
|
||||
d := b.Duration()
|
||||
@@ -175,14 +224,12 @@ func (m *MMClient) Login() error {
|
||||
}
|
||||
break
|
||||
}
|
||||
b.Reset()
|
||||
|
||||
m.log.Debug("WsClient: connected")
|
||||
m.WsSequence = 1
|
||||
m.WsPingChan = make(chan *model.WebSocketResponse)
|
||||
// only start to parse WS messages when login is completely done
|
||||
m.WsConnected = true
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MMClient) Logout() error {
|
||||
@@ -190,9 +237,13 @@ func (m *MMClient) Logout() error {
|
||||
m.WsQuit = true
|
||||
m.WsClient.Close()
|
||||
m.WsClient.UnderlyingConn().Close()
|
||||
_, err := m.Client.Logout()
|
||||
if err != nil {
|
||||
return err
|
||||
if strings.Contains(m.Credentials.Pass, model.SESSION_COOKIE_TOKEN) {
|
||||
m.log.Debug("Not invalidating session in logout, credential is a token")
|
||||
return nil
|
||||
}
|
||||
_, resp := m.Client.Logout()
|
||||
if resp.Error != nil {
|
||||
return resp.Error
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -215,21 +266,31 @@ func (m *MMClient) WsReceiver() {
|
||||
if _, rawMsg, err = m.WsClient.ReadMessage(); err != nil {
|
||||
m.log.Error("error:", err)
|
||||
// reconnect
|
||||
m.Login()
|
||||
m.wsConnect()
|
||||
}
|
||||
|
||||
var event model.WebSocketEvent
|
||||
if err := json.Unmarshal(rawMsg, &event); err == nil && event.IsValid() {
|
||||
m.log.Debugf("WsReceiver: %#v", event)
|
||||
m.log.Debugf("WsReceiver event: %#v", event)
|
||||
msg := &Message{Raw: &event, Team: m.Credentials.Team}
|
||||
m.parseMessage(msg)
|
||||
m.MessageChan <- msg
|
||||
// check if we didn't empty the message
|
||||
if msg.Text != "" {
|
||||
m.MessageChan <- msg
|
||||
continue
|
||||
}
|
||||
// if we have file attached but the message is empty, also send it
|
||||
if msg.Post != nil {
|
||||
if msg.Text != "" || len(msg.Post.FileIds) > 0 {
|
||||
m.MessageChan <- msg
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
var response model.WebSocketResponse
|
||||
if err := json.Unmarshal(rawMsg, &response); err == nil && response.IsValid() {
|
||||
m.log.Debugf("WsReceiver: %#v", response)
|
||||
m.log.Debugf("WsReceiver response: %#v", response)
|
||||
m.parseResponse(response)
|
||||
continue
|
||||
}
|
||||
@@ -238,7 +299,7 @@ func (m *MMClient) WsReceiver() {
|
||||
|
||||
func (m *MMClient) parseMessage(rmsg *Message) {
|
||||
switch rmsg.Raw.Event {
|
||||
case model.WEBSOCKET_EVENT_POSTED:
|
||||
case model.WEBSOCKET_EVENT_POSTED, model.WEBSOCKET_EVENT_POST_EDITED:
|
||||
m.parseActionPost(rmsg)
|
||||
/*
|
||||
case model.ACTION_USER_REMOVED:
|
||||
@@ -259,46 +320,70 @@ func (m *MMClient) parseResponse(rmsg model.WebSocketResponse) {
|
||||
}
|
||||
|
||||
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)))
|
||||
// we don't have the user, refresh the userlist
|
||||
if m.GetUser(data.UserId) == nil {
|
||||
m.UpdateUsers()
|
||||
m.log.Infof("User %s is not known, ignoring message %s", data)
|
||||
return
|
||||
}
|
||||
rmsg.Username = m.GetUser(data.UserId).Username
|
||||
rmsg.Username = m.GetUserName(data.UserId)
|
||||
rmsg.Channel = m.GetChannelName(data.ChannelId)
|
||||
rmsg.Team = m.GetTeamName(rmsg.Raw.Data["team_id"].(string))
|
||||
rmsg.UserID = data.UserId
|
||||
rmsg.Type = data.Type
|
||||
teamid, _ := rmsg.Raw.Data["team_id"].(string)
|
||||
// edit messsages have no team_id for some reason
|
||||
if teamid == "" {
|
||||
// we can find the team_id from the channelid
|
||||
teamid = m.GetChannelTeamId(data.ChannelId)
|
||||
rmsg.Raw.Data["team_id"] = teamid
|
||||
}
|
||||
if teamid != "" {
|
||||
rmsg.Team = m.GetTeamName(teamid)
|
||||
}
|
||||
// direct message
|
||||
if rmsg.Raw.Data["channel_type"] == "D" {
|
||||
rmsg.Channel = m.GetUser(data.UserId).Username
|
||||
}
|
||||
rmsg.Text = data.Message
|
||||
rmsg.Post = data
|
||||
return
|
||||
}
|
||||
|
||||
func (m *MMClient) UpdateUsers() error {
|
||||
mmusers, err := m.Client.GetProfiles(0, 50000, "")
|
||||
if err != nil {
|
||||
return errors.New(err.DetailedError)
|
||||
mmusers, resp := m.Client.GetUsers(0, 50000, "")
|
||||
if resp.Error != nil {
|
||||
return errors.New(resp.Error.DetailedError)
|
||||
}
|
||||
m.Lock()
|
||||
m.Users = mmusers.Data.(map[string]*model.User)
|
||||
for _, user := range mmusers {
|
||||
m.Users[user.Id] = user
|
||||
}
|
||||
m.Unlock()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MMClient) UpdateChannels() error {
|
||||
mmchannels, err := m.Client.GetChannels("")
|
||||
if err != nil {
|
||||
return errors.New(err.DetailedError)
|
||||
}
|
||||
mmchannels2, err := m.Client.GetMoreChannels("")
|
||||
if err != nil {
|
||||
return errors.New(err.DetailedError)
|
||||
mmchannels, resp := m.Client.GetChannelsForTeamForUser(m.Team.Id, m.User.Id, "")
|
||||
if resp.Error != nil {
|
||||
return errors.New(resp.Error.DetailedError)
|
||||
}
|
||||
m.Lock()
|
||||
m.Team.Channels = mmchannels.Data.(*model.ChannelList)
|
||||
m.Team.MoreChannels = mmchannels2.Data.(*model.ChannelList)
|
||||
m.Team.Channels = mmchannels
|
||||
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()
|
||||
return nil
|
||||
}
|
||||
@@ -307,9 +392,21 @@ func (m *MMClient) GetChannelName(channelId string) string {
|
||||
m.RLock()
|
||||
defer m.RUnlock()
|
||||
for _, t := range m.OtherTeams {
|
||||
for _, channel := range append(*t.Channels, *t.MoreChannels...) {
|
||||
if channel.Id == channelId {
|
||||
return channel.Name
|
||||
if t == nil {
|
||||
continue
|
||||
}
|
||||
if t.Channels != nil {
|
||||
for _, channel := range t.Channels {
|
||||
if channel.Id == channelId {
|
||||
return channel.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
if t.MoreChannels != nil {
|
||||
for _, channel := range t.MoreChannels {
|
||||
if channel.Id == channelId {
|
||||
return channel.Name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -324,7 +421,7 @@ func (m *MMClient) GetChannelId(name string, teamId string) string {
|
||||
}
|
||||
for _, t := range m.OtherTeams {
|
||||
if t.Id == teamId {
|
||||
for _, channel := range append(*t.Channels, *t.MoreChannels...) {
|
||||
for _, channel := range append(t.Channels, t.MoreChannels...) {
|
||||
if channel.Name == name {
|
||||
return channel.Id
|
||||
}
|
||||
@@ -334,11 +431,24 @@ func (m *MMClient) GetChannelId(name string, teamId string) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *MMClient) GetChannelTeamId(id string) string {
|
||||
m.RLock()
|
||||
defer m.RUnlock()
|
||||
for _, t := range append(m.OtherTeams, m.Team) {
|
||||
for _, channel := range append(t.Channels, t.MoreChannels...) {
|
||||
if channel.Id == id {
|
||||
return channel.TeamId
|
||||
}
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *MMClient) GetChannelHeader(channelId string) string {
|
||||
m.RLock()
|
||||
defer m.RUnlock()
|
||||
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 {
|
||||
return channel.Header
|
||||
}
|
||||
@@ -348,55 +458,68 @@ func (m *MMClient) GetChannelHeader(channelId string) string {
|
||||
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}
|
||||
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 {
|
||||
m.RLock()
|
||||
defer m.RUnlock()
|
||||
for _, c := range *m.Team.Channels {
|
||||
for _, c := range m.Team.Channels {
|
||||
if c.Id == channelId {
|
||||
m.log.Debug("Not joining ", channelId, " already joined.")
|
||||
return nil
|
||||
}
|
||||
}
|
||||
m.log.Debug("Joining ", channelId)
|
||||
_, err := m.Client.JoinChannel(channelId)
|
||||
if err != nil {
|
||||
return errors.New("failed to join")
|
||||
_, resp := m.Client.AddChannelMember(channelId, m.User.Id)
|
||||
if resp.Error != nil {
|
||||
return resp.Error
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MMClient) GetPostsSince(channelId string, time int64) *model.PostList {
|
||||
res, err := m.Client.GetPostsSince(channelId, time)
|
||||
if err != nil {
|
||||
res, resp := m.Client.GetPostsSince(channelId, time)
|
||||
if resp.Error != nil {
|
||||
return nil
|
||||
}
|
||||
return res.Data.(*model.PostList)
|
||||
return res
|
||||
}
|
||||
|
||||
func (m *MMClient) SearchPosts(query string) *model.PostList {
|
||||
res, err := m.Client.SearchPosts(query, false)
|
||||
if err != nil {
|
||||
res, resp := m.Client.SearchPosts(m.Team.Id, query, false)
|
||||
if resp.Error != nil {
|
||||
return nil
|
||||
}
|
||||
return res.Data.(*model.PostList)
|
||||
return res
|
||||
}
|
||||
|
||||
func (m *MMClient) GetPosts(channelId string, limit int) *model.PostList {
|
||||
res, err := m.Client.GetPosts(channelId, 0, limit, "")
|
||||
if err != nil {
|
||||
res, resp := m.Client.GetPostsForChannel(channelId, 0, limit, "")
|
||||
if resp.Error != nil {
|
||||
return nil
|
||||
}
|
||||
return res.Data.(*model.PostList)
|
||||
return res
|
||||
}
|
||||
|
||||
func (m *MMClient) GetPublicLink(filename string) string {
|
||||
res, err := m.Client.GetPublicLink(filename)
|
||||
if err != nil {
|
||||
res, resp := m.Client.GetFileLink(filename)
|
||||
if resp.Error != nil {
|
||||
return ""
|
||||
}
|
||||
return res
|
||||
@@ -405,8 +528,27 @@ func (m *MMClient) GetPublicLink(filename string) string {
|
||||
func (m *MMClient) GetPublicLinks(filenames []string) []string {
|
||||
var output []string
|
||||
for _, f := range filenames {
|
||||
res, err := m.Client.GetPublicLink(f)
|
||||
if err != nil {
|
||||
res, resp := m.Client.GetFileLink(f)
|
||||
if resp.Error != nil {
|
||||
continue
|
||||
}
|
||||
output = append(output, res)
|
||||
}
|
||||
return output
|
||||
}
|
||||
|
||||
func (m *MMClient) GetFileLinks(filenames []string) []string {
|
||||
uriScheme := "https://"
|
||||
if m.NoTLS {
|
||||
uriScheme = "http://"
|
||||
}
|
||||
|
||||
var output []string
|
||||
for _, f := range filenames {
|
||||
res, resp := m.Client.GetFileLink(f)
|
||||
if resp.Error != 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)
|
||||
@@ -415,36 +557,33 @@ func (m *MMClient) GetPublicLinks(filenames []string) []string {
|
||||
}
|
||||
|
||||
func (m *MMClient) UpdateChannelHeader(channelId string, header string) {
|
||||
data := make(map[string]string)
|
||||
data["channel_id"] = channelId
|
||||
data["channel_header"] = header
|
||||
channel := &model.Channel{Id: channelId, Header: header}
|
||||
m.log.Debugf("updating channelheader %#v, %#v", channelId, header)
|
||||
_, err := m.Client.UpdateChannelHeader(data)
|
||||
if err != nil {
|
||||
log.Error(err)
|
||||
_, resp := m.Client.UpdateChannel(channel)
|
||||
if resp.Error != nil {
|
||||
log.Error(resp.Error)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MMClient) UpdateLastViewed(channelId string) {
|
||||
m.log.Debugf("posting lastview %#v", channelId)
|
||||
_, err := m.Client.UpdateLastViewedAt(channelId, true)
|
||||
if err != nil {
|
||||
m.log.Error(err)
|
||||
view := &model.ChannelView{ChannelId: channelId}
|
||||
res, _ := m.Client.ViewChannel(m.User.Id, view)
|
||||
if !res {
|
||||
m.log.Errorf("ChannelView update for %s failed", channelId)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MMClient) UsernamesInChannel(channelId string) []string {
|
||||
res, err := m.Client.GetMyChannelMembers()
|
||||
if err != nil {
|
||||
m.log.Errorf("UsernamesInChannel(%s) failed: %s", channelId, err)
|
||||
res, resp := m.Client.GetChannelMembers(channelId, 0, 50000, "")
|
||||
if resp.Error != nil {
|
||||
m.log.Errorf("UsernamesInChannel(%s) failed: %s", channelId, resp.Error)
|
||||
return []string{}
|
||||
}
|
||||
members := res.Data.(*model.ChannelMembers)
|
||||
allusers := m.GetUsers()
|
||||
result := []string{}
|
||||
for _, channel := range *members {
|
||||
if channel.ChannelId == channelId {
|
||||
result = append(result, m.GetUser(channel.UserId).Username)
|
||||
}
|
||||
for _, member := range *res {
|
||||
result = append(result, allusers[member.UserId].Nickname)
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -468,22 +607,15 @@ func (m *MMClient) createCookieJar(token string) *cookiejar.Jar {
|
||||
func (m *MMClient) SendDirectMessage(toUserId string, msg string) {
|
||||
m.log.Debugf("SendDirectMessage to %s, msg %s", toUserId, msg)
|
||||
// create DM channel (only happens on first message)
|
||||
_, err := m.Client.CreateDirectChannel(toUserId)
|
||||
if err != nil {
|
||||
m.log.Debugf("SendDirectMessage to %#v failed: %s", toUserId, err)
|
||||
_, resp := m.Client.CreateDirectChannel(m.User.Id, toUserId)
|
||||
if resp.Error != nil {
|
||||
m.log.Debugf("SendDirectMessage to %#v failed: %s", toUserId, resp.Error)
|
||||
return
|
||||
}
|
||||
channelName := model.GetDMNameFromIds(toUserId, m.User.Id)
|
||||
|
||||
// update our channels
|
||||
mmchannels, err := m.Client.GetChannels("")
|
||||
if err != nil {
|
||||
m.log.Debug("SendDirectMessage: Couldn't update channels")
|
||||
return
|
||||
}
|
||||
m.Lock()
|
||||
m.Team.Channels = mmchannels.Data.(*model.ChannelList)
|
||||
m.Unlock()
|
||||
m.UpdateChannels()
|
||||
|
||||
// build & send the message
|
||||
msg = strings.Replace(msg, "\r", "", -1)
|
||||
@@ -509,10 +641,10 @@ func (m *MMClient) GetChannels() []*model.Channel {
|
||||
defer m.RUnlock()
|
||||
var channels []*model.Channel
|
||||
// our primary team channels first
|
||||
channels = append(channels, *m.Team.Channels...)
|
||||
channels = append(channels, m.Team.Channels...)
|
||||
for _, t := range m.OtherTeams {
|
||||
if t.Id != m.Team.Id {
|
||||
channels = append(channels, *t.Channels...)
|
||||
channels = append(channels, t.Channels...)
|
||||
}
|
||||
}
|
||||
return channels
|
||||
@@ -524,7 +656,7 @@ func (m *MMClient) GetMoreChannels() []*model.Channel {
|
||||
defer m.RUnlock()
|
||||
var channels []*model.Channel
|
||||
for _, t := range m.OtherTeams {
|
||||
channels = append(channels, *t.MoreChannels...)
|
||||
channels = append(channels, t.MoreChannels...)
|
||||
}
|
||||
return channels
|
||||
}
|
||||
@@ -535,8 +667,10 @@ func (m *MMClient) GetTeamFromChannel(channelId string) string {
|
||||
defer m.RUnlock()
|
||||
var channels []*model.Channel
|
||||
for _, t := range m.OtherTeams {
|
||||
channels = append(channels, *t.Channels...)
|
||||
channels = append(channels, *t.MoreChannels...)
|
||||
channels = append(channels, t.Channels...)
|
||||
if t.MoreChannels != nil {
|
||||
channels = append(channels, t.MoreChannels...)
|
||||
}
|
||||
for _, c := range channels {
|
||||
if c.Id == channelId {
|
||||
return t.Id
|
||||
@@ -549,12 +683,11 @@ func (m *MMClient) GetTeamFromChannel(channelId string) string {
|
||||
func (m *MMClient) GetLastViewedAt(channelId string) int64 {
|
||||
m.RLock()
|
||||
defer m.RUnlock()
|
||||
res, err := m.Client.GetChannel(channelId, "")
|
||||
if err != nil {
|
||||
res, resp := m.Client.GetChannelMember(channelId, m.User.Id, "")
|
||||
if resp.Error != nil {
|
||||
return model.GetMillis()
|
||||
}
|
||||
data := res.Data.(*model.ChannelData)
|
||||
return data.Member.LastViewedAt
|
||||
return res.LastViewedAt
|
||||
}
|
||||
|
||||
func (m *MMClient) GetUsers() map[string]*model.User {
|
||||
@@ -568,42 +701,58 @@ func (m *MMClient) GetUsers() map[string]*model.User {
|
||||
}
|
||||
|
||||
func (m *MMClient) GetUser(userId string) *model.User {
|
||||
m.RLock()
|
||||
defer m.RUnlock()
|
||||
m.Lock()
|
||||
defer m.Unlock()
|
||||
_, ok := m.Users[userId]
|
||||
if !ok {
|
||||
res, resp := m.Client.GetUser(userId, "")
|
||||
if resp.Error != nil {
|
||||
return nil
|
||||
}
|
||||
m.Users[userId] = res
|
||||
}
|
||||
return m.Users[userId]
|
||||
}
|
||||
|
||||
func (m *MMClient) GetUserName(userId string) string {
|
||||
user := m.GetUser(userId)
|
||||
if user != nil {
|
||||
return user.Username
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *MMClient) GetStatus(userId string) string {
|
||||
res, err := m.Client.GetStatuses()
|
||||
if err != nil {
|
||||
res, resp := m.Client.GetUserStatus(userId, "")
|
||||
if resp.Error != nil {
|
||||
return ""
|
||||
}
|
||||
status := res.Data.(map[string]string)
|
||||
if status[userId] == model.STATUS_AWAY {
|
||||
if res.Status == model.STATUS_AWAY {
|
||||
return "away"
|
||||
}
|
||||
if status[userId] == model.STATUS_ONLINE {
|
||||
if res.Status == model.STATUS_ONLINE {
|
||||
return "online"
|
||||
}
|
||||
return "offline"
|
||||
}
|
||||
|
||||
func (m *MMClient) GetStatuses() map[string]string {
|
||||
var ok bool
|
||||
var ids []string
|
||||
statuses := make(map[string]string)
|
||||
res, err := m.Client.GetStatuses()
|
||||
if err != nil {
|
||||
for id := range m.Users {
|
||||
ids = append(ids, id)
|
||||
}
|
||||
res, resp := m.Client.GetUsersStatusesByIds(ids)
|
||||
if resp.Error != nil {
|
||||
return statuses
|
||||
}
|
||||
if statuses, ok = res.Data.(map[string]string); ok {
|
||||
for userId, status := range statuses {
|
||||
statuses[userId] = "offline"
|
||||
if status == model.STATUS_AWAY {
|
||||
statuses[userId] = "away"
|
||||
}
|
||||
if status == model.STATUS_ONLINE {
|
||||
statuses[userId] = "online"
|
||||
}
|
||||
for _, status := range res {
|
||||
statuses[status.UserId] = "offline"
|
||||
if status.Status == model.STATUS_AWAY {
|
||||
statuses[status.UserId] = "away"
|
||||
}
|
||||
if status.Status == model.STATUS_ONLINE {
|
||||
statuses[status.UserId] = "online"
|
||||
}
|
||||
}
|
||||
return statuses
|
||||
@@ -614,6 +763,12 @@ func (m *MMClient) GetTeamId() string {
|
||||
}
|
||||
|
||||
func (m *MMClient) StatusLoop() {
|
||||
retries := 0
|
||||
backoff := time.Second * 60
|
||||
if m.OnWsConnect != nil {
|
||||
m.OnWsConnect()
|
||||
}
|
||||
m.log.Debug("StatusLoop:", m.OnWsConnect)
|
||||
for {
|
||||
if m.WsQuit {
|
||||
return
|
||||
@@ -624,13 +779,23 @@ func (m *MMClient) StatusLoop() {
|
||||
select {
|
||||
case <-m.WsPingChan:
|
||||
m.log.Debug("WS PONG received")
|
||||
backoff = time.Second * 60
|
||||
case <-time.After(time.Second * 5):
|
||||
m.Logout()
|
||||
m.WsQuit = false
|
||||
m.Login()
|
||||
if retries > 3 {
|
||||
m.Logout()
|
||||
m.WsQuit = false
|
||||
m.Login()
|
||||
if m.OnWsConnect != nil {
|
||||
m.OnWsConnect()
|
||||
}
|
||||
go m.WsReceiver()
|
||||
} else {
|
||||
retries++
|
||||
backoff = time.Second * 5
|
||||
}
|
||||
}
|
||||
}
|
||||
time.Sleep(time.Second * 60)
|
||||
time.Sleep(backoff)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -638,36 +803,39 @@ func (m *MMClient) StatusLoop() {
|
||||
func (m *MMClient) initUser() error {
|
||||
m.Lock()
|
||||
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.
|
||||
// all other updates are for channels from our (primary) team only.
|
||||
//m.log.Debug("initUser(): loading all team data")
|
||||
for _, v := range initData.Teams {
|
||||
m.Client.SetTeamId(v.Id)
|
||||
mmusers, err := m.Client.GetProfiles(0, 50000, "")
|
||||
if err != nil {
|
||||
return errors.New(err.DetailedError)
|
||||
teams, resp := m.Client.GetTeamsForUser(m.User.Id, "")
|
||||
if resp.Error != nil {
|
||||
return resp.Error
|
||||
}
|
||||
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}
|
||||
mmchannels, err := m.Client.GetChannels("")
|
||||
if err != nil {
|
||||
return errors.New(err.DetailedError)
|
||||
usermap := make(map[string]*model.User)
|
||||
for _, user := range mmusers {
|
||||
usermap[user.Id] = user
|
||||
}
|
||||
t.Channels = mmchannels.Data.(*model.ChannelList)
|
||||
mmchannels, err = m.Client.GetMoreChannels("")
|
||||
if err != nil {
|
||||
return errors.New(err.DetailedError)
|
||||
|
||||
t := &Team{Team: team, Users: usermap, Id: team.Id}
|
||||
|
||||
mmchannels, resp := m.Client.GetChannelsForTeamForUser(team.Id, m.User.Id, "")
|
||||
if resp.Error != nil {
|
||||
return resp.Error
|
||||
}
|
||||
t.MoreChannels = mmchannels.Data.(*model.ChannelList)
|
||||
t.Channels = mmchannels
|
||||
mmchannels, resp = m.Client.GetPublicChannelsForTeam(team.Id, 0, 5000, "")
|
||||
if resp.Error != nil {
|
||||
return resp.Error
|
||||
}
|
||||
t.MoreChannels = mmchannels
|
||||
m.OtherTeams = append(m.OtherTeams, t)
|
||||
if v.Name == m.Credentials.Team {
|
||||
if team.Name == m.Credentials.Team {
|
||||
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
|
||||
for k, v := range t.Users {
|
||||
@@ -687,3 +855,19 @@ func (m *MMClient) sendWSRequest(action string, data map[string]interface{}) err
|
||||
m.WsClient.WriteJSON(req)
|
||||
return nil
|
||||
}
|
||||
|
||||
func supportedVersion(version string) bool {
|
||||
if strings.HasPrefix(version, "3.8.0") ||
|
||||
strings.HasPrefix(version, "3.9.0") ||
|
||||
strings.HasPrefix(version, "3.10.0") ||
|
||||
strings.HasPrefix(version, "4.0") ||
|
||||
strings.HasPrefix(version, "4.1") ||
|
||||
strings.HasPrefix(version, "4.2") {
|
||||
return true
|
||||
}
|
||||
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"`
|
||||
Text string `schema:"text"`
|
||||
TriggerWord string `schema:"trigger_word"`
|
||||
FileIDs string `schema:"file_ids"`
|
||||
}
|
||||
|
||||
// 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.
|
||||
func (c *Client) Receive() IMessage {
|
||||
for {
|
||||
select {
|
||||
case msg := <-c.In:
|
||||
return msg
|
||||
}
|
||||
var msg IMessage
|
||||
for msg := range c.In {
|
||||
return msg
|
||||
}
|
||||
return msg
|
||||
}
|
||||
|
||||
// Send sends a msg to mattermost incoming webhooks URL.
|
||||
|
||||
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
|
||||
func (gitter *Gitter) SendMessage(roomID, text string) error {
|
||||
func (gitter *Gitter) SendMessage(roomID, text string) (*Message, error) {
|
||||
|
||||
message := Message{Text: text}
|
||||
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 {
|
||||
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
|
||||
@@ -265,7 +291,7 @@ func (gitter *Gitter) SearchRooms(room string) ([]Room, error) {
|
||||
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 {
|
||||
gitter.log(err)
|
||||
@@ -414,6 +440,39 @@ func (gitter *Gitter) post(url string, body []byte) ([]byte, error) {
|
||||
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) {
|
||||
r, err := http.NewRequest("delete", url, nil)
|
||||
if err != nil {
|
||||
@@ -137,7 +137,10 @@ func (stream *Stream) connect() {
|
||||
|
||||
res, err := stream.gitter.getResponse(stream.url, stream)
|
||||
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)
|
||||
|
||||
// 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
|
||||
func parseToEvent(msg string) (*Event, error) {
|
||||
msg = strings.TrimSuffix(msg, "\n") //Remove \r\n
|
||||
@@ -95,6 +106,26 @@ func parseToEvent(msg string) (*Event, error) {
|
||||
if len(msg) < 5 {
|
||||
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 i := strings.Index(msg, " "); i > -1 {
|
||||
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)
|
||||
}
|
||||
|
||||
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 {
|
||||
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 {
|
||||
case res := <-resChan:
|
||||
case res := <-saslResChan:
|
||||
if res.Failed {
|
||||
close(resChan)
|
||||
close(saslResChan)
|
||||
return res.Err
|
||||
}
|
||||
case <-time.After(time.Second * 15):
|
||||
close(resChan)
|
||||
close(saslResChan)
|
||||
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
|
||||
}
|
||||
|
||||
@@ -43,7 +43,6 @@ func (irc *Connection) setupSASLCallbacks(result chan<- *SASLResult) {
|
||||
result <- &SASLResult{true, errors.New(e.Arguments[1])}
|
||||
})
|
||||
irc.AddCallback("903", func(e *Event) {
|
||||
irc.SendRaw("CAP END")
|
||||
result <- &SASLResult{false, nil}
|
||||
})
|
||||
irc.AddCallback("904", func(e *Event) {
|
||||
@@ -15,20 +15,22 @@ import (
|
||||
type Connection struct {
|
||||
sync.Mutex
|
||||
sync.WaitGroup
|
||||
Debug bool
|
||||
Error chan error
|
||||
Password string
|
||||
UseTLS bool
|
||||
UseSASL bool
|
||||
SASLLogin string
|
||||
SASLPassword string
|
||||
SASLMech string
|
||||
TLSConfig *tls.Config
|
||||
Version string
|
||||
Timeout time.Duration
|
||||
PingFreq time.Duration
|
||||
KeepAlive time.Duration
|
||||
Server string
|
||||
Debug bool
|
||||
Error chan error
|
||||
Password string
|
||||
UseTLS bool
|
||||
UseSASL bool
|
||||
RequestCaps []string
|
||||
AcknowledgedCaps []string
|
||||
SASLLogin string
|
||||
SASLPassword string
|
||||
SASLMech string
|
||||
TLSConfig *tls.Config
|
||||
Version string
|
||||
Timeout time.Duration
|
||||
PingFreq time.Duration
|
||||
KeepAlive time.Duration
|
||||
Server string
|
||||
|
||||
socket net.Conn
|
||||
pwrite chan string
|
||||
@@ -59,6 +61,7 @@ type Event struct {
|
||||
Source string //<host>
|
||||
User string //<usr>
|
||||
Arguments []string
|
||||
Tags map[string]string
|
||||
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
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user