XLiveServices 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.travis.yml +8 -0
- data/.yardopts +1 -0
- data/Gemfile +3 -0
- data/README.md +41 -0
- data/Rakefile +13 -0
- data/UNLICENSE +24 -0
- data/XLiveServices.gemspec +32 -0
- data/data/certs.pem +103 -0
- data/lib/xlive_services/hresult.rb +281 -0
- data/lib/xlive_services/marketplace_public.rb +79 -0
- data/lib/xlive_services/utils.rb +38 -0
- data/lib/xlive_services/version.rb +3 -0
- data/lib/xlive_services/xlive.rb +77 -0
- data/lib/xlive_services/xlive_services.rb +57 -0
- data/lib/xlive_services.rb +10 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/xlive_services_spec.rb +6 -0
- metadata +205 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9d4ce325425418c79672864729e094bea42b9198
|
4
|
+
data.tar.gz: 10181bca72cc853d7938a9d11c6b626493e27c76
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9c1b0b7b6c5f1d1f803118485beb56c806cc1280e4eb17be7276b3885d5a16b1c30a823feed2d39afa12d6411c4d54eb7539a22e3a8eaf4128b9930317d7d1b0
|
7
|
+
data.tar.gz: 171bfba640d78d503d1ad3d44cebfafe0fb2f4c94f33cc5ebb9ccef95c866f6b53a0bd15e866dfb09d447712aa0ad8af451bfba93ef438bb3d5f4b63b87cb77c
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/.travis.yml
ADDED
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--markup markdown
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# XLiveServices
|
2
|
+
|
3
|
+
A library to consume Xbox LIVE and Games for Windows LIVE services.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'xlive_services'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install XLiveServices
|
18
|
+
|
19
|
+
## Unlicense
|
20
|
+
|
21
|
+
![Copyright-Free](http://unlicense.org/pd-icon.png)
|
22
|
+
|
23
|
+
All text, documentation, code and files in this repository are in public domain (including this text, README).
|
24
|
+
It means you can copy, modify, distribute and include in your own work/code, even for commercial purposes, all without asking permission.
|
25
|
+
|
26
|
+
[About Unlicense](http://unlicense.org/)
|
27
|
+
|
28
|
+
## Contributing
|
29
|
+
|
30
|
+
1. Fork it ( https://github.com/davispuh/XLiveServices/fork )
|
31
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
32
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
33
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
34
|
+
5. Create a new Pull Request
|
35
|
+
|
36
|
+
|
37
|
+
**Warning**: By sending pull request to this repository you dedicate any and all copyright interest in pull request (code files and all other) to the public domain. (files will be in public domain even if pull request doesn't get merged)
|
38
|
+
|
39
|
+
Also before sending pull request you acknowledge that you own all copyrights or have authorization to dedicate them to public domain.
|
40
|
+
|
41
|
+
If you don't want to dedicate code to public domain or if you're not allowed to (eg. you don't own required copyrights) then DON'T send pull request.
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'yard'
|
4
|
+
|
5
|
+
desc 'Default: run specs.'
|
6
|
+
task :default => :spec
|
7
|
+
|
8
|
+
desc 'Run specs'
|
9
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
10
|
+
end
|
11
|
+
|
12
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
13
|
+
end
|
data/UNLICENSE
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or
|
4
|
+
distribute this software, either in source code form or as a compiled
|
5
|
+
binary, for any purpose, commercial or non-commercial, and by any
|
6
|
+
means.
|
7
|
+
|
8
|
+
In jurisdictions that recognize copyright laws, the author or authors
|
9
|
+
of this software dedicate any and all copyright interest in the
|
10
|
+
software to the public domain. We make this dedication for the benefit
|
11
|
+
of the public at large and to the detriment of our heirs and
|
12
|
+
successors. We intend this dedication to be an overt act of
|
13
|
+
relinquishment in perpetuity of all present and future rights to this
|
14
|
+
software under copyright law.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
20
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
21
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
For more information, please refer to <http://unlicense.org/>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'xlive_services/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'XLiveServices'
|
8
|
+
spec.version = XLiveServices::VERSION
|
9
|
+
spec.authors = ['Dāvis']
|
10
|
+
spec.email = ['davispuh@gmail.com']
|
11
|
+
spec.summary = 'Interact with Xbox LIVE and Games for Windows LIVE services.'
|
12
|
+
spec.description = 'A library to consume Xbox LIVE and Games for Windows LIVE services.'
|
13
|
+
spec.homepage = 'https://github.com/davispuh/XLiveServices'
|
14
|
+
spec.license = 'UNLICENSE'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'httpi'
|
22
|
+
spec.add_runtime_dependency 'multi_xml'
|
23
|
+
spec.add_runtime_dependency 'LiveIdentity', '>= 0.0.2'
|
24
|
+
spec.add_runtime_dependency 'savon'
|
25
|
+
spec.add_runtime_dependency 'builder'
|
26
|
+
|
27
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
28
|
+
spec.add_development_dependency 'rake'
|
29
|
+
spec.add_development_dependency 'rspec'
|
30
|
+
spec.add_development_dependency 'simplecov'
|
31
|
+
spec.add_development_dependency 'yard'
|
32
|
+
end
|
data/data/certs.pem
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIGCDCCA/CgAwIBAgIKYV2q0gAGAAAAQDANBgkqhkiG9w0BAQUFADAnMSUwIwYD
|
3
|
+
VQQDExxNaWNyb3NvZnQgSW50ZXJuZXQgQXV0aG9yaXR5MB4XDTEyMDUxNTIwNDA1
|
4
|
+
NVoXDTE2MDUxNTIwNTA1NVowgYAxEzARBgoJkiaJk/IsZAEZFgNjb20xGTAXBgoJ
|
5
|
+
kiaJk/IsZAEZFgltaWNyb3NvZnQxFDASBgoJkiaJk/IsZAEZFgRjb3JwMRcwFQYK
|
6
|
+
CZImiZPyLGQBGRYHcmVkbW9uZDEfMB0GA1UEAxMWTVNJVCBNYWNoaW5lIEF1dGgg
|
7
|
+
Q0EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3I6ADrWGkpEYSH
|
8
|
+
HJ+HTUQ9OBvHE5PnFEwXK9t1CMDJIcqu4B/ojP6h3ySMvwKc7Zm+OlMqRU6wSHg3
|
9
|
+
3KFj7wO3lClmbGbXbGpIZbLdRyEjG7hBdC+W3ZgiufrzDkqwLwui3rcCE0JwP3gE
|
10
|
+
FHLjOit+KEgdlrTbFjmNs8RZodei0mRhMytBGMWrlW9dIgd3zVOdA0ll1Yj1X53w
|
11
|
+
xGlPkQilOQeWNq8tZNwmWsET7jE51l/cl/wnqgV4R8UiJmNTfjfCe2Q9acvw+4oV
|
12
|
+
PlKzhmq0wRw7svXHPsV23XRodnpV5oB7Loym2ruRWgfNGUrqCFz/wUnWewa/67dK
|
13
|
+
n7QnnBcCAwEAAaOCAdowggHWMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGC
|
14
|
+
NxUCBBYEFCO30O1oke9mm+EFQHq+Z8oz1ga9MB0GA1UdDgQWBBTr2xFe+Ame2NZi
|
15
|
+
nP1ineOESijhJzAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMC
|
16
|
+
AYYwEgYDVR0TAQH/BAgwBgEB/wIBADAfBgNVHSMEGDAWgBQqTZeVXTR+nbbmM76c
|
17
|
+
J8FwfmfbwTCBowYDVR0fBIGbMIGYMIGVoIGSoIGPhjZodHRwOi8vbXNjcmwubWlj
|
18
|
+
cm9zb2Z0LmNvbS9wa2kvbXNjb3JwL2NybC9tc3d3dyg2KS5jcmyGNGh0dHA6Ly9j
|
19
|
+
cmwubWljcm9zb2Z0LmNvbS9wa2kvbXNjb3JwL2NybC9tc3d3dyg2KS5jcmyGH2h0
|
20
|
+
dHA6Ly9jb3JwcGtpL2NybC9tc3d3dyg2KS5jcmwweQYIKwYBBQUHAQEEbTBrMDwG
|
21
|
+
CCsGAQUFBzAChjBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL21zY29ycC9t
|
22
|
+
c3d3dyg2KS5jcnQwKwYIKwYBBQUHMAKGH2h0dHA6Ly9jb3JwcGtpL2FpYS9tc3d3
|
23
|
+
dyg2KS5jcnQwDQYJKoZIhvcNAQEFBQADggIBAKM2cvdFC6eGN94gjfXXjtqJAHpS
|
24
|
+
S4UysjLX7YBX/Q1RHNEePQw+kSow4lO8YQeJAhG5G4NI0xrHR5Zit8/e1w24nYSO
|
25
|
+
3tXm5LnABuMc9DFDH1P8SkK1myPNsuwND4GJ/1mpANMESguvW4T1O0+5N5GIIeSc
|
26
|
+
ylJ2Y36IemW0jhZq9GC9LA7vF4YrdQlYc8VPuagb7yr0tqO5B/CkkDlT3+G6Apil
|
27
|
+
pYIRoQZTssLr/epncjdj0IXPhgXIw3PB2/PE0lX/oB3nchQa/7L/CEJIQAoZgs8i
|
28
|
+
8wXF1d8LKcQ6DsUyOO8vlJoM8tTuv2LH4qRfPW54vBDBLkow8ofbiTi+/syAj/X5
|
29
|
+
XMtc8eoCCGulC+8gXKM0zPCAth9juUQyHCZBm92To2QBVxEhQ5QqVy2KSsuKKEAK
|
30
|
+
+1D5ryZ0E5eCTmxk69HGv179JdoFRkquxy/HBO8ucS7iqFuk6rJvqJE1xLdjF2IO
|
31
|
+
J448JM09RWkF3FLFNfgRwB3fYmD04aZecLhFdAOr0RZ0457TwaPokJaKisJGRp25
|
32
|
+
XGwCHTKE6xSFdpWqTS1ptgL2/u001Yzm+qxd3ANA5s93if+xKMqGjMjnMUf8Fv5U
|
33
|
+
DPUmsX7cmCZwWCYTXMd12xLeTKz/mgzqosIcQQSM5keXR2+JxUjeNw1q2fBoJFz/
|
34
|
+
GVnm4XA3OA3b7rDi
|
35
|
+
-----END CERTIFICATE-----
|
36
|
+
-----BEGIN CERTIFICATE-----
|
37
|
+
MIIFATCCA+mgAwIBAgIEBydvrjANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
|
38
|
+
RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
|
39
|
+
VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTEyMDQyNTE3NDEzNloX
|
40
|
+
DTIwMDQyNTE3NDA1NVowJzElMCMGA1UEAxMcTWljcm9zb2Z0IEludGVybmV0IEF1
|
41
|
+
dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL5AVBGqKHlm
|
42
|
+
Xqm7sJNiS3MZqukvkUxtlzclaLiwNlCUXO//xMQXdkNX/KDhxjPsMGK+NQ8jepZN
|
43
|
+
bHRiCX4xSE6fTapbsxa3/qApL2WlS6xqVoq/KHBq3zcY3+zGhyI+Ft04HA/iBb53
|
44
|
+
q+6Fih4NIz/pJOGQR7JnOxU+VSA8+fVC16/FZg2alBe5amd8qPqxJgAEI9VNo66N
|
45
|
+
eWCxjoNPzbt3eCey6HStH0w0gDF/i+RQfm9/z1Xaxvu2WvVdHTiUpf6wjSJjI+dw
|
46
|
+
QEC/iapURiUD7KTyrcBAs3L+lLXZlrIbc17V9GtHQXmk2vOOLo04TcleFxyutUw2
|
47
|
+
a+h/2STHKPCnhr7oHQi023IjZNFC8/VM2qzztqV1aPzwuwJhXR56B1IpvnQSQlOc
|
48
|
+
jczpiHukVTYIWIwhicW6E+htm4GKd8Y4bPU6HZE3Vyup6ytGSqiXKIujfkrdjafT
|
49
|
+
AhB8lrDIvIYoBtZXoqdm8RfWzF9VEj1ZA6LH0tZptA0l+fHTlFYWLia8lvm6HFGb
|
50
|
+
gfE3vHfuftmaePZBtHHfECVbsuE6x3vybLMZtyDnienEpWqkfDkk7uddKyvJkf6h
|
51
|
+
PDMlvcVBFJLuz1Y6JhN1yhFcxierSYirVXL8ZUjcrs3xj4sQZiqQLguLt/44dc2x
|
52
|
+
dYC2j89DHCEpkw/jE7nisMiyRipaFAwdAgMBAAGjggEAMIH9MBIGA1UdEwEB/wQI
|
53
|
+
MAYBAf8CAQEwUwYDVR0gBEwwSjBIBgkrBgEEAbE+AQAwOzA5BggrBgEFBQcCARYt
|
54
|
+
aHR0cDovL2N5YmVydHJ1c3Qub21uaXJvb3QuY29tL3JlcG9zaXRvcnkuY2ZtMA4G
|
55
|
+
A1UdDwEB/wQEAwIBhjAfBgNVHSMEGDAWgBTlnVkwgkdYzKz6CFQ2hns6tQRN8DBC
|
56
|
+
BgNVHR8EOzA5MDegNaAzhjFodHRwOi8vY2RwMS5wdWJsaWMtdHJ1c3QuY29tL0NS
|
57
|
+
TC9PbW5pcm9vdDIwMjUuY3JsMB0GA1UdDgQWBBQqTZeVXTR+nbbmM76cJ8Fwfmfb
|
58
|
+
wTANBgkqhkiG9w0BAQUFAAOCAQEAIz6HbtPK1g6wNiWNzArO3F1080Ib76rASXOF
|
59
|
+
zH0vdwkjxSxQHUbDaGjvEDLZTX7jWuMdGDzSQFTN71nu3/77cEq82HQ3K9ykaHFQ
|
60
|
+
umPLRN0RSP/48f9gunyqMH3dF7F36lCQIAALoz1dmHFRn90twHheDVWxg0Xe5VmY
|
61
|
+
baThaXwy0AR796kdlzvVWb/Lb52ktqW7QRHtyJGDFVWuWTa3n2rwuDj5fDIllcwz
|
62
|
+
8THn38t4SzYf9FXgvSj5yrlkmc7rYemBcpTTm80KKyqklIOuagwjRA41raHp7NjX
|
63
|
+
dZCN4dazxVD8XdX7b5Lh9H7wrq/5ObPOSwGcvU738fJvzsA22A==
|
64
|
+
-----END CERTIFICATE-----
|
65
|
+
-----BEGIN CERTIFICATE-----
|
66
|
+
MIIEFTCCA36gAwIBAgIEByeO7TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJV
|
67
|
+
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
|
68
|
+
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
|
69
|
+
b2JhbCBSb290MB4XDTEyMDQxODE2MzYxOFoXDTE4MDgxMzE2MzUxN1owWjELMAkG
|
70
|
+
A1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVz
|
71
|
+
dDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZI
|
72
|
+
hvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKrmD1X6CZymrV51Cni4eiVgLGw41uO
|
73
|
+
KymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsBUnuId9Mcj8e6uYi1agnn
|
74
|
+
c+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/CG9VwcPCP
|
75
|
+
wBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPg
|
76
|
+
kAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFc
|
77
|
+
B5kpvcY67Oduhjprl3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaOCAUcw
|
78
|
+
ggFDMBIGA1UdEwEB/wQIMAYBAf8CAQMwSgYDVR0gBEMwQTA/BgRVHSAAMDcwNQYI
|
79
|
+
KwYBBQUHAgEWKWh0dHA6Ly9jeWJlcnRydXN0Lm9tbmlyb290LmNvbS9yZXBvc2l0
|
80
|
+
b3J5MA4GA1UdDwEB/wQEAwIBBjCBiQYDVR0jBIGBMH+heaR3MHUxCzAJBgNVBAYT
|
81
|
+
AlVTMRgwFgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJl
|
82
|
+
clRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3Qg
|
83
|
+
R2xvYmFsIFJvb3SCAgGlMEUGA1UdHwQ+MDwwOqA4oDaGNGh0dHA6Ly93d3cucHVi
|
84
|
+
bGljLXRydXN0LmNvbS9jZ2ktYmluL0NSTC8yMDE4L2NkcC5jcmwwDQYJKoZIhvcN
|
85
|
+
AQEFBQADgYEAkx3+i65G7MupD6vl78qyaBZo2I/6E6mvs8st50tujmkqwisQCo32
|
86
|
+
rnO2ufsU/V9tuFC2xIrWQH7Xw8tz3MldW6+wQbU36+rcIJHENGr0ofOWnTeGl+Fx
|
87
|
+
pN19+kSElK7XCQQidg9kUTWpJA/5C9sy2sL+wbkqXHonE8qxSDpx0EM=
|
88
|
+
-----END CERTIFICATE-----
|
89
|
+
-----BEGIN CERTIFICATE-----
|
90
|
+
MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
|
91
|
+
VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
|
92
|
+
bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
|
93
|
+
b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
|
94
|
+
UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
|
95
|
+
cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
|
96
|
+
b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
|
97
|
+
iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
|
98
|
+
r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
|
99
|
+
04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
|
100
|
+
GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
|
101
|
+
3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
|
102
|
+
lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
|
103
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,281 @@
|
|
1
|
+
require 'win_common'
|
2
|
+
|
3
|
+
module XLiveServices
|
4
|
+
module XOnline
|
5
|
+
module HRESULT
|
6
|
+
XONLINE_E_OVERFLOW = 0x80150001
|
7
|
+
XONLINE_E_NO_SESSION = 0x80150002
|
8
|
+
XONLINE_E_USER_NOT_LOGGED_ON = 0x80150003
|
9
|
+
XONLINE_E_NO_GUEST_ACCESS = 0x80150004
|
10
|
+
XONLINE_E_NOT_INITIALIZED = 0x80150005
|
11
|
+
XONLINE_E_NO_USER = 0x80150006
|
12
|
+
XONLINE_E_INTERNAL_ERROR = 0x80150007
|
13
|
+
XONLINE_E_OUT_OF_MEMORY = 0x80150008
|
14
|
+
XONLINE_E_TASK_BUSY = 0x80150009
|
15
|
+
XONLINE_E_SERVER_ERROR = 0x8015000A
|
16
|
+
XONLINE_E_IO_ERROR = 0x8015000B
|
17
|
+
XONLINE_E_USER_NOT_PRESENT = 0x8015000D
|
18
|
+
XONLINE_E_INVALID_REQUEST = 0x80150010
|
19
|
+
XONLINE_E_TASK_THROTTLED = 0x80150011
|
20
|
+
XONLINE_E_TASK_ABORTED_BY_DUPLICATE = 0x80150012
|
21
|
+
XONLINE_E_INVALID_TITLE_ID = 0x80150013
|
22
|
+
XONLINE_E_SERVER_CONFIG_ERROR = 0x80150014
|
23
|
+
XONLINE_E_END_OF_STREAM = 0x80150015
|
24
|
+
XONLINE_E_ACCESS_DENIED = 0x80150016
|
25
|
+
XONLINE_E_GEO_DENIED = 0x80150017
|
26
|
+
XONLINE_E_LOGON_NO_NETWORK_CONNECTION = 0x80151000
|
27
|
+
XONLINE_E_LOGON_CANNOT_ACCESS_SERVICE = 0x80151001
|
28
|
+
XONLINE_E_LOGON_UPDATE_REQUIRED = 0x80151002
|
29
|
+
XONLINE_E_LOGON_SERVERS_TOO_BUSY = 0x80151003
|
30
|
+
XONLINE_E_LOGON_CONNECTION_LOST = 0x80151004
|
31
|
+
XONLINE_E_LOGON_KICKED_BY_DUPLICATE_LOGON = 0x80151005
|
32
|
+
XONLINE_E_LOGON_INVALID_USER = 0x80151006
|
33
|
+
XONLINE_E_LOGON_FLASH_UPDATE_REQUIRED = 0x80151007
|
34
|
+
XONLINE_E_LOGON_SG_CONNECTION_TIMEDOUT = 0x8015100C
|
35
|
+
XONLINE_E_ACCOUNTS_GRADUATE_USER_NO_PRIVILEGE = 0x8015102A
|
36
|
+
XONLINE_E_ACCOUNTS_GRADUATE_USER_NOT_CHILD = 0x8015102B
|
37
|
+
XONLINE_E_ACCOUNTS_GRADUATE_USER_NOT_ADULT = 0x8015102C
|
38
|
+
XONLINE_E_ACCOUNTS_GRADUATE_USER_NO_PI = 0x8015102D
|
39
|
+
XONLINE_E_ACCOUNTS_GRADUATE_USER_PI_MISMATCH = 0x8015102E
|
40
|
+
XONLINE_E_ACCOUNTS_GRADUATE_USER_ALREADY = 0x8015102F
|
41
|
+
XONLINE_E_ACCOUNTS_GRADUATE_USER_QUEUED = 0x80151031
|
42
|
+
XONLINE_E_ACCOUNTS_SWITCH_PASSPORT_NEW_PASSPORT_INELIGIBLE = 0x80151032
|
43
|
+
XONLINE_E_ACCOUNTS_NO_AUTHENTICATION_DATA = 0x80151033
|
44
|
+
XONLINE_E_ACCOUNTS_CLIENT_TYPE_CONFIG_ERROR = 0x80151034
|
45
|
+
XONLINE_E_ACCOUNTS_CLIENT_TYPE_MISSING = 0x80151035
|
46
|
+
XONLINE_E_ACCOUNTS_CLIENT_TYPE_INVALID = 0x80151036
|
47
|
+
XONLINE_E_ACCOUNTS_COUNTRY_NOT_AUTHORIZED = 0x80151037
|
48
|
+
XONLINE_E_ACCOUNTS_TAG_CHANGE_REQUIRED = 0x80151038
|
49
|
+
XONLINE_E_ACCOUNTS_ACCOUNT_SUSPENDED = 0x80151039
|
50
|
+
XONLINE_E_ACCOUNTS_TERMS_OF_SERVICE_NOT_ACCEPTED = 0x8015103A
|
51
|
+
XONLINE_S_LOGON_CONNECTION_ESTABLISHED = 0x001510F0
|
52
|
+
XONLINE_S_LOGON_DISCONNECTED = 0x001510F1
|
53
|
+
XONLINE_E_LOGON_SERVICE_NOT_REQUESTED = 0x80151100
|
54
|
+
XONLINE_E_LOGON_SERVICE_NOT_AUTHORIZED = 0x80151101
|
55
|
+
XONLINE_E_LOGON_SERVICE_TEMPORARILY_UNAVAILABLE = 0x80151102
|
56
|
+
XONLINE_E_LOGON_PPLOGIN_FAILED = 0x80151103
|
57
|
+
XONLINE_E_LOGON_SPONSOR_TOKEN_INVALID = 0x80151104
|
58
|
+
XONLINE_E_LOGON_SPONSOR_TOKEN_BANNED = 0x80151105
|
59
|
+
XONLINE_E_LOGON_SPONSOR_TOKEN_USAGE_EXCEEDED = 0x80151106
|
60
|
+
XONLINE_E_LOGON_FLASH_UPDATE_NOT_DOWNLOADED = 0x80151107
|
61
|
+
XONLINE_E_LOGON_UPDATE_NOT_DOWNLOADED = 0x80151108
|
62
|
+
XONLINE_E_LOGON_NOT_LOGGED_ON = 0x80151802
|
63
|
+
XONLINE_E_LOGON_DNS_LOOKUP_FAILED = 0x80151903
|
64
|
+
XONLINE_E_LOGON_DNS_LOOKUP_TIMEDOUT = 0x80151904
|
65
|
+
XONLINE_E_LOGON_MACS_FAILED = 0x80151906
|
66
|
+
XONLINE_E_LOGON_MACS_TIMEDOUT = 0x80151907
|
67
|
+
XONLINE_E_LOGON_AUTHENTICATION_TIMEDOUT = 0x80151909
|
68
|
+
XONLINE_E_LOGON_UNKNOWN_TITLE = 0x80151912
|
69
|
+
XONLINE_E_OFFERING_INVALID_CONSUME_ITEMS = 0x80153013
|
70
|
+
XONLINE_E_ACCOUNTS_NAME_TAKEN = 0x80154000
|
71
|
+
XONLINE_E_ACCOUNTS_INVALID_KINGDOM = 0x80154001
|
72
|
+
XONLINE_E_ACCOUNTS_INVALID_USER = 0x80154002
|
73
|
+
XONLINE_E_ACCOUNTS_BAD_CREDIT_CARD = 0x80154003
|
74
|
+
XONLINE_E_ACCOUNTS_BAD_BILLING_ADDRESS = 0x80154004
|
75
|
+
XONLINE_E_ACCOUNTS_ACCOUNT_BANNED = 0x80154005
|
76
|
+
XONLINE_E_ACCOUNTS_PERMISSION_DENIED = 0x80154006
|
77
|
+
XONLINE_E_ACCOUNTS_INVALID_VOUCHER = 0x80154007
|
78
|
+
XONLINE_E_ACCOUNTS_DATA_CHANGED = 0x80154008
|
79
|
+
XONLINE_E_ACCOUNTS_VOUCHER_ALREADY_USED = 0x80154009
|
80
|
+
XONLINE_E_ACCOUNTS_OPERATION_BLOCKED = 0x8015400A
|
81
|
+
XONLINE_E_ACCOUNTS_POSTAL_CODE_REQUIRED = 0x8015400B
|
82
|
+
XONLINE_E_ACCOUNTS_TRY_AGAIN_LATER = 0x8015400C
|
83
|
+
XONLINE_E_ACCOUNTS_NOT_A_RENEWAL_OFFER = 0x8015400D
|
84
|
+
XONLINE_E_ACCOUNTS_RENEWAL_IS_LOCKED = 0x8015400E
|
85
|
+
XONLINE_E_ACCOUNTS_VOUCHER_REQUIRED = 0x8015400F
|
86
|
+
XONLINE_E_ACCOUNTS_ALREADY_DEPROVISIONED = 0x80154010
|
87
|
+
XONLINE_E_ACCOUNTS_INVALID_PRIVILEGE = 0x80154011
|
88
|
+
XONLINE_E_ACCOUNTS_INVALID_SIGNED_PASSPORT_PUID = 0x80154012
|
89
|
+
XONLINE_E_ACCOUNTS_PASSPORT_ALREADY_LINKED = 0x80154013
|
90
|
+
XONLINE_E_ACCOUNTS_MIGRATE_NOT_XBOX1_USER = 0x80154014
|
91
|
+
XONLINE_E_ACCOUNTS_MIGRATE_BAD_SUBSCRIPTION = 0x80154015
|
92
|
+
XONLINE_E_ACCOUNTS_PASSPORT_NOT_LINKED = 0x80154016
|
93
|
+
XONLINE_E_ACCOUNTS_NOT_XENON_USER = 0x80154017
|
94
|
+
XONLINE_E_ACCOUNTS_CREDIT_CARD_REQUIRED = 0x80154018
|
95
|
+
XONLINE_E_ACCOUNTS_MIGRATE_NOT_XBOXCOM_USER = 0x80154019
|
96
|
+
XONLINE_E_ACCOUNTS_NOT_A_VOUCHER_OFFER = 0x8015401A
|
97
|
+
XONLINE_E_ACCOUNTS_REACHED_TRIAL_OFFER_LIMIT = 0x8015401B
|
98
|
+
XONLINE_E_ACCOUNTS_XBOX1_MANAGEMENT_BLOCKED = 0x8015401C
|
99
|
+
XONLINE_E_ACCOUNTS_OFFLINE_XUID_ALREADY_USED = 0x8015401D
|
100
|
+
XONLINE_E_ACCOUNTS_BILLING_PROVIDER_TIMEOUT = 0x8015401E
|
101
|
+
XONLINE_E_ACCOUNTS_MIGRATION_OFFER_NOT_FOUND = 0x8015401F
|
102
|
+
XONLINE_E_ACCOUNTS_UNDER_AGE = 0x80154020
|
103
|
+
XONLINE_E_ACCOUNTS_XBOX1_LOGON_BLOCKED = 0x80154021
|
104
|
+
XONLINE_E_ACCOUNTS_VOUCHER_INVALID_FOR_TIER = 0x80154022
|
105
|
+
XONLINE_E_ACCOUNTS_SWITCH_PASSPORT_QUEUED = 0x80154023
|
106
|
+
XONLINE_E_ACCOUNTS_SERVICE_NOT_PROVISIONED = 0x80154024
|
107
|
+
XONLINE_E_ACCOUNTS_ACCOUNT_UNBAN_BLOCKED = 0x80154025
|
108
|
+
XONLINE_E_ACCOUNTS_SWITCH_PASSPORT_INELIGIBLE = 0x80154026
|
109
|
+
XONLINE_E_ACCOUNTS_ADDITIONAL_DATA_REQUIRED = 0x80154027
|
110
|
+
XONLINE_E_ACCOUNTS_SWITCH_PASSPORT_SCS_PENDING = 0x80154028
|
111
|
+
XONLINE_E_ACCOUNTS_SWITCH_PASSPORT_NO_BIRTHDATE = 0x80154029
|
112
|
+
XONLINE_E_ACCOUNTS_SWITCH_PASSPORT_ADULT_TO_CHILD = 0x80154030
|
113
|
+
#XONLINE_E_ACCOUNTS_ WHAT ??? = 0x80154038
|
114
|
+
XONLINE_E_ACCOUNTS_USER_GET_ACCOUNT_INFO_ERROR = 0x80154098
|
115
|
+
XONLINE_E_ACCOUNTS_USER_OPTED_OUT = 0x80154099
|
116
|
+
XONLINE_E_MATCH_INVALID_SESSION_ID = 0x80155100
|
117
|
+
XONLINE_E_MATCH_INVALID_TITLE_ID = 0x80155101
|
118
|
+
XONLINE_E_MATCH_INVALID_DATA_TYPE = 0x80155102
|
119
|
+
XONLINE_E_MATCH_REQUEST_TOO_SMALL = 0x80155103
|
120
|
+
XONLINE_E_MATCH_REQUEST_TRUNCATED = 0x80155104
|
121
|
+
XONLINE_E_MATCH_INVALID_SEARCH_REQ = 0x80155105
|
122
|
+
XONLINE_E_MATCH_INVALID_OFFSET = 0x80155106
|
123
|
+
XONLINE_E_MATCH_INVALID_ATTR_TYPE = 0x80155107
|
124
|
+
XONLINE_E_MATCH_INVALID_VERSION = 0x80155108
|
125
|
+
XONLINE_E_MATCH_OVERFLOW = 0x80155109
|
126
|
+
XONLINE_E_MATCH_INVALID_RESULT_COL = 0x8015510A
|
127
|
+
XONLINE_E_MATCH_INVALID_STRING = 0x8015510B
|
128
|
+
XONLINE_E_MATCH_STRING_TOO_LONG = 0x8015510C
|
129
|
+
XONLINE_E_MATCH_BLOB_TOO_LONG = 0x8015510D
|
130
|
+
XONLINE_E_MATCH_INVALID_ATTRIBUTE_ID = 0x80155110
|
131
|
+
XONLINE_E_MATCH_SESSION_ALREADY_EXISTS = 0x80155112
|
132
|
+
XONLINE_E_MATCH_CRITICAL_DB_ERR = 0x80155115
|
133
|
+
XONLINE_E_MATCH_NOT_ENOUGH_COLUMNS = 0x80155116
|
134
|
+
XONLINE_E_MATCH_PERMISSION_DENIED = 0x80155117
|
135
|
+
XONLINE_E_MATCH_INVALID_PART_SCHEME = 0x80155118
|
136
|
+
XONLINE_E_MATCH_INVALID_PARAM = 0x80155119
|
137
|
+
XONLINE_E_MATCH_DATA_TYPE_MISMATCH = 0x8015511D
|
138
|
+
XONLINE_E_MATCH_SERVER_ERROR = 0x8015511E
|
139
|
+
XONLINE_E_MATCH_NO_USERS = 0x8015511F
|
140
|
+
XONLINE_E_MATCH_INVALID_BLOB = 0x80155120
|
141
|
+
XONLINE_E_MATCH_TOO_MANY_USERS = 0x80155121
|
142
|
+
XONLINE_E_MATCH_INVALID_FLAGS = 0x80155122
|
143
|
+
XONLINE_E_MATCH_PARAM_MISSING = 0x80155123
|
144
|
+
XONLINE_E_MATCH_TOO_MANY_PARAM = 0x80155124
|
145
|
+
XONLINE_E_MATCH_DUPLICATE_PARAM = 0x80155125
|
146
|
+
XONLINE_E_MATCH_TOO_MANY_ATTR = 0x80155126
|
147
|
+
XONLINE_E_SESSION_NOT_FOUND = 0x80155200
|
148
|
+
XONLINE_E_SESSION_INSUFFICIENT_PRIVILEGES = 0x80155201
|
149
|
+
XONLINE_E_SESSION_FULL = 0x80155202
|
150
|
+
XONLINE_E_SESSION_INVITES_DISABLED = 0x80155203
|
151
|
+
XONLINE_E_SESSION_INVALID_FLAGS = 0x80155204
|
152
|
+
XONLINE_E_SESSION_REQUIRES_ARBITRATION = 0x80155205
|
153
|
+
XONLINE_E_SESSION_WRONG_STATE = 0x80155206
|
154
|
+
XONLINE_E_SESSION_INSUFFICIENT_BUFFER = 0x80155207
|
155
|
+
XONLINE_E_SESSION_REGISTRATION_ERROR = 0x80155208
|
156
|
+
XONLINE_E_SESSION_NOT_LOGGED_ON = 0x80155209
|
157
|
+
XONLINE_E_SESSION_JOIN_ILLEGAL = 0x8015520A
|
158
|
+
XONLINE_E_SESSION_CREATE_KEY_FAILED = 0x8015520B
|
159
|
+
XONLINE_E_SESSION_NOT_REGISTERED = 0x8015520C
|
160
|
+
XONLINE_E_SESSION_REGISTER_KEY_FAILED = 0x8015520D
|
161
|
+
XONLINE_E_SESSION_UNREGISTER_KEY_FAILED = 0x8015520E
|
162
|
+
XONLINE_E_QUERY_QUOTA_FULL = 0x80156101
|
163
|
+
XONLINE_E_QUERY_ENTITY_NOT_FOUND = 0x80156102
|
164
|
+
XONLINE_E_QUERY_PERMISSION_DENIED = 0x80156103
|
165
|
+
XONLINE_E_QUERY_ATTRIBUTE_TOO_LONG = 0x80156104
|
166
|
+
XONLINE_E_QUERY_UNEXPECTED_ATTRIBUTE = 0x80156105
|
167
|
+
XONLINE_E_QUERY_INVALID_ACTION = 0x80156107
|
168
|
+
XONLINE_E_QUERY_SPEC_COUNT_MISMATCH = 0x80156108
|
169
|
+
XONLINE_E_QUERY_DATASET_NOT_FOUND = 0x80156109
|
170
|
+
XONLINE_E_QUERY_PROCEDURE_NOT_FOUND = 0x8015610A
|
171
|
+
XONLINE_E_COMP_ACCESS_DENIED = 0x80156202
|
172
|
+
XONLINE_E_COMP_REGISTRATION_CLOSED = 0x80156203
|
173
|
+
XONLINE_E_COMP_FULL = 0x80156204
|
174
|
+
XONLINE_E_COMP_NOT_REGISTERED = 0x80156205
|
175
|
+
XONLINE_E_COMP_CANCELLED = 0x80156206
|
176
|
+
XONLINE_E_COMP_CHECKIN_TIME_INVALID = 0x80156207
|
177
|
+
XONLINE_E_COMP_CHECKIN_BAD_EVENT = 0x80156208
|
178
|
+
XONLINE_E_COMP_EVENT_SCORED = 0x80156209
|
179
|
+
XONLINE_S_COMP_EVENT_SCORED = 0x00156209
|
180
|
+
XONLINE_E_COMP_UNEXPECTED = 0x80156210
|
181
|
+
XONLINE_E_COMP_TOPOLOGY_ERROR = 0x80156216
|
182
|
+
XONLINE_E_COMP_TOPOLOGY_PENDING = 0x80156217
|
183
|
+
XONLINE_E_COMP_CHECKIN_TOO_EARLY = 0x80156218
|
184
|
+
XONLINE_E_COMP_ALREADY_REGISTERED = 0x80156219
|
185
|
+
XONLINE_E_COMP_INVALID_ENTRANT_TYPE = 0x8015621A
|
186
|
+
XONLINE_E_COMP_TOO_LATE = 0x8015621B
|
187
|
+
XONLINE_E_COMP_TOO_EARLY = 0x8015621C
|
188
|
+
XONLINE_E_COMP_NO_BYES_AVAILABLE = 0x8015621D
|
189
|
+
XONLINE_E_COMP_SERVICE_OUTAGE = 0x8015621E
|
190
|
+
XONLINE_E_MSGSVR_INVALID_REQUEST = 0x80157001
|
191
|
+
XONLINE_E_STRING_TOO_LONG = 0x80157101
|
192
|
+
XONLINE_E_STRING_OFFENSIVE_TEXT = 0x80157102
|
193
|
+
XONLINE_E_STRING_NO_DEFAULT_STRING = 0x80157103
|
194
|
+
XONLINE_E_STRING_INVALID_LANGUAGE = 0x80157104
|
195
|
+
XONLINE_E_FEEDBACK_NULL_TARGET = 0x80158001
|
196
|
+
XONLINE_E_FEEDBACK_BAD_TYPE = 0x80158002
|
197
|
+
XONLINE_E_FEEDBACK_CANNOT_LOG = 0x80158006
|
198
|
+
XONLINE_E_STAT_BAD_REQUEST = 0x80159001
|
199
|
+
XONLINE_E_STAT_INVALID_TITLE_OR_LEADERBOARD = 0x80159002
|
200
|
+
XONLINE_E_STAT_TOO_MANY_SPECS = 0x80159004
|
201
|
+
XONLINE_E_STAT_TOO_MANY_STATS = 0x80159005
|
202
|
+
XONLINE_E_STAT_USER_NOT_FOUND = 0x80159003
|
203
|
+
XONLINE_E_STAT_SET_FAILED_0 = 0x80159100
|
204
|
+
XONLINE_E_STAT_PERMISSION_DENIED = 0x80159200
|
205
|
+
XONLINE_E_STAT_LEADERBOARD_WAS_RESET = 0x80159201
|
206
|
+
XONLINE_E_STAT_INVALID_ATTACHMENT = 0x80159202
|
207
|
+
XONLINE_S_STAT_CAN_UPLOAD_ATTACHMENT = 0x00159203
|
208
|
+
XONLINE_E_STAT_TOO_MANY_PARAMETERS = 0x80159204
|
209
|
+
XONLINE_E_STAT_TOO_MANY_PROCEDURES = 0x80159205
|
210
|
+
XONLINE_E_STAT_STAT_POST_PROC_ERROR = 0x80159206
|
211
|
+
XONLINE_E_STAT_NOT_ENOUGH_PARAMETERS = 0x80159208
|
212
|
+
XONLINE_E_STAT_INVALID_PROCEDURE = 0x80159209
|
213
|
+
XONLINE_E_STAT_EXCEEDED_WRITE_READ_LIMIT = 0x8015920A
|
214
|
+
XONLINE_E_STAT_LEADERBOARD_READONLY = 0x8015920B
|
215
|
+
XONLINE_E_STAT_MUSIGMA_ARITHMETIC_OVERFLOW = 0x8015920C
|
216
|
+
XONLINE_E_STAT_READ_NO_SPEC = 0x8015920D
|
217
|
+
XONLINE_E_STAT_MUSIGMA_NO_GAME_MODE = 0x8015920E
|
218
|
+
XONLINE_E_SIGNATURE_ERROR = 0x8015B000
|
219
|
+
XONLINE_E_SIGNATURE_VER_INVALID_SIGNATURE = 0x8015B001
|
220
|
+
XONLINE_E_SIGNATURE_VER_UNKNOWN_KEY_VER = 0x8015B002
|
221
|
+
XONLINE_E_SIGNATURE_VER_UNKNOWN_SIGNATURE_VER = 0x8015B003
|
222
|
+
XONLINE_E_SIGNATURE_BANNED_XBOX = 0x8015B004
|
223
|
+
XONLINE_E_SIGNATURE_BANNED_USER = 0x8015B005
|
224
|
+
XONLINE_E_SIGNATURE_BANNED_TITLE = 0x8015B006
|
225
|
+
XONLINE_E_SIGNATURE_BANNED_DIGEST = 0x8015B007
|
226
|
+
XONLINE_E_SIGNATURE_GET_BAD_AUTH_DATA = 0x8015B008
|
227
|
+
XONLINE_E_SIGNATURE_SERVICE_UNAVAILABLE = 0x8015B009
|
228
|
+
XONLINE_E_ARBITRATION_SERVICE_UNAVAILABLE = 0x8015B101
|
229
|
+
XONLINE_E_ARBITRATION_INVALID_REQUEST = 0x8015B102
|
230
|
+
XONLINE_E_ARBITRATION_SESSION_NOT_FOUND = 0x8015B103
|
231
|
+
XONLINE_E_ARBITRATION_REGISTRATION_FLAGS_MISMATCH = 0x8015B104
|
232
|
+
XONLINE_E_ARBITRATION_REGISTRATION_SESSION_TIME_MISMATCH = 0x8015B105
|
233
|
+
XONLINE_E_ARBITRATION_REGISTRATION_TOO_LATE = 0x8015B106
|
234
|
+
XONLINE_E_ARBITRATION_NEED_TO_REGISTER_FIRST = 0x8015B107
|
235
|
+
XONLINE_E_ARBITRATION_TIME_EXTENSION_NOT_ALLOWED = 0x8015B108
|
236
|
+
XONLINE_E_ARBITRATION_INCONSISTENT_FLAGS = 0x8015B109
|
237
|
+
XONLINE_E_ARBITRATION_INCONSISTENT_COMPETITION_STATUS = 0x8015B10A
|
238
|
+
XONLINE_E_ARBITRATION_REPORT_ALREADY_CALLED = 0x8015B10B
|
239
|
+
XONLINE_E_ARBITRATION_TOO_MANY_XBOXES_IN_SESSION = 0x8015B10C
|
240
|
+
XONLINE_E_ARBITRATION_1_XBOX_1_USER_SESSION_NOT_ALLOWED = 0x8015B10D
|
241
|
+
XONLINE_E_ARBITRATION_REPORT_TOO_LARGE = 0x8015B10E
|
242
|
+
XONLINE_E_ARBITRATION_INVALID_TEAMTICKET = 0x8015B10F
|
243
|
+
XONLINE_S_ARBITRATION_INVALID_XBOX_SPECIFIED = 0x0015B1F0
|
244
|
+
XONLINE_S_ARBITRATION_INVALID_USER_SPECIFIED = 0x0015B1F1
|
245
|
+
XONLINE_S_ARBITRATION_DIFFERENT_RESULTS_DETECTED = 0x0015B1F2
|
246
|
+
XONLINE_E_STORAGE_INVALID_REQUEST = 0x8015C001
|
247
|
+
XONLINE_E_STORAGE_ACCESS_DENIED = 0x8015C002
|
248
|
+
XONLINE_E_STORAGE_FILE_IS_TOO_BIG = 0x8015C003
|
249
|
+
XONLINE_E_STORAGE_FILE_NOT_FOUND = 0x8015C004
|
250
|
+
XONLINE_E_STORAGE_INVALID_ACCESS_TOKEN = 0x8015C005
|
251
|
+
XONLINE_E_STORAGE_CANNOT_FIND_PATH = 0x8015C006
|
252
|
+
XONLINE_E_STORAGE_FILE_IS_ELSEWHERE = 0x8015C007
|
253
|
+
XONLINE_E_STORAGE_INVALID_STORAGE_PATH = 0x8015C008
|
254
|
+
XONLINE_E_STORAGE_INVALID_FACILITY = 0x8015C009
|
255
|
+
XONLINE_E_STORAGE_UNKNOWN_DOMAIN = 0x8015C00A
|
256
|
+
XONLINE_E_STORAGE_SYNC_TIME_SKEW = 0x8015C00B
|
257
|
+
XONLINE_E_STORAGE_SYNC_TIME_SKEW_LOCALTIME = 0x8015C00C
|
258
|
+
XONLINE_E_STORAGE_QUOTA_EXCEEDED = 0x8015C00D
|
259
|
+
XONLINE_E_STORAGE_FILE_ALREADY_EXISTS = 0x8015C011
|
260
|
+
XONLINE_E_STORAGE_DATABASE_ERROR = 0x8015C012
|
261
|
+
XONLINE_S_STORAGE_FILE_NOT_MODIFIED = 0x0015C013
|
262
|
+
XONLINE_E_STORAGE_UNSUPPORTED_CONTENT_TYPE = 0x8015CA0E
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
module WGX
|
267
|
+
module HRESULT
|
268
|
+
WGX_E_OUT_OF_TOKENS = 0x80170101
|
269
|
+
WGX_E_OUT_OF_ACTIVATION_KEY = 0x80170102
|
270
|
+
WGX_E_TITLE_NOT_PURCHASED = 0x80170103
|
271
|
+
WGX_E_TITLE_NOT_FOUND = 0x80170104
|
272
|
+
WGX_E_OFFER_NOT_FOUND = 0x80170105
|
273
|
+
WGX_E_UNKNOWN = 0x80170107
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
module WinCommon::Errors::HRESULT
|
279
|
+
include XLiveServices::XOnline::HRESULT
|
280
|
+
include XLiveServices::WGX::HRESULT
|
281
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'base64'
|
3
|
+
|
4
|
+
module XLiveServices
|
5
|
+
class MarketplacePublic
|
6
|
+
extend Savon::Model
|
7
|
+
client endpoint: '', namespace: 'http://tempuri.org/'
|
8
|
+
global :env_namespace, :s
|
9
|
+
global :namespace_identifier, :t
|
10
|
+
global :convert_request_keys_to, :none
|
11
|
+
global :element_form_default, :qualified
|
12
|
+
global :convert_response_tags_to, :camelcase
|
13
|
+
global :soap_version, 2
|
14
|
+
global :namespaces, { 'xmlns:a' => 'http://www.w3.org/2005/08/addressing' }
|
15
|
+
|
16
|
+
ConfigurationName = 'IMarketplacePublic'
|
17
|
+
|
18
|
+
module SortField
|
19
|
+
Title = :Title
|
20
|
+
AvailabilityDate = :AvailabilityDate
|
21
|
+
LastPlayedDate = :LastPlayedDate
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(endpoint, wgxService)
|
25
|
+
@WgxService = wgxService
|
26
|
+
client.globals[:endpoint] = endpoint
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.BuildOfferGUID(offerID, titleID=nil)
|
30
|
+
titleID = offerID >> 32 if titleID.nil?
|
31
|
+
offerID &= 0xffffffff
|
32
|
+
"%08x-0000-4000-8000-0000%08x" % [offerID, titleID]
|
33
|
+
end
|
34
|
+
|
35
|
+
def BuildOfferGUID(offerID, titleID=nil)
|
36
|
+
self.class.BuildOfferGUID(offerID, titleID)
|
37
|
+
end
|
38
|
+
|
39
|
+
def GetHeader(name)
|
40
|
+
Utils::BuildHeader(client.globals[:endpoint], Utils::BuildAction(client.globals[:namespace], ConfigurationName, name.to_s), @WgxService.Token)
|
41
|
+
end
|
42
|
+
|
43
|
+
def GetPurchaseHistory(locale, pageNum = 1, orderBy = SortField::Title)
|
44
|
+
client.globals[:soap_header] = GetHeader(__callee__)
|
45
|
+
client.call __callee__, message: { locale: locale, pageNum: pageNum, orderBy: Utils::Serialization::Serialize('enum', orderBy) }
|
46
|
+
end
|
47
|
+
|
48
|
+
def ReadUserSettings(titleID, settings)
|
49
|
+
client.globals[:soap_header] = GetHeader(__callee__)
|
50
|
+
client.call __callee__, message: { titleID: titleID, settings: Utils::Serialization::Serialize('uint[]', settings) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def GetOfferDetailsPublic(locale, offerGUID)
|
54
|
+
client.globals[:soap_header] = GetHeader(__callee__)
|
55
|
+
client.call __callee__, message: { locale: locale, offerId: offerGUID }
|
56
|
+
end
|
57
|
+
|
58
|
+
def GetLicensePublic(offerGUID)
|
59
|
+
client.globals[:soap_header] = GetHeader(__callee__)
|
60
|
+
client.call __callee__, message: { offerId: offerGUID }
|
61
|
+
end
|
62
|
+
|
63
|
+
def GetSponsorToken(titleId)
|
64
|
+
client.globals[:soap_header] = GetHeader(__callee__)
|
65
|
+
client.call __callee__, message: { titleId: titleId }
|
66
|
+
end
|
67
|
+
|
68
|
+
def GetActivationKey(offerGUID)
|
69
|
+
client.globals[:soap_header] = GetHeader(__callee__)
|
70
|
+
client.call __callee__, message: { offerId: offerGUID }
|
71
|
+
end
|
72
|
+
|
73
|
+
def GetMediaUrls(urls, offerGUID)
|
74
|
+
client.globals[:soap_header] = GetHeader(__callee__)
|
75
|
+
client.call __callee__, message: { urls: Utils::Serialization::Serialize('string[]', urls), offerID: offerGUID }
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'builder/xchar'
|
2
|
+
|
3
|
+
module XLiveServices
|
4
|
+
module Utils
|
5
|
+
def self.BuildHeader(endpoint, action, compactRPSTicket)
|
6
|
+
%{
|
7
|
+
<a:Action s:mustUnderstand="1">#{action}</a:Action>
|
8
|
+
<a:To s:mustUnderstand="1">#{endpoint}</a:To>
|
9
|
+
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
|
10
|
+
<cct:RpsSecurityToken wsu:Id="00000000-0000-0000-0000-000000000000" xmlns:cct="http://samples.microsoft.com/wcf/security/Extensibility/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
|
11
|
+
<cct:RpsTicket>#{Builder::XChar.encode(compactRPSTicket)}</cct:RpsTicket>
|
12
|
+
</cct:RpsSecurityToken>
|
13
|
+
</o:Security>
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.BuildAction(namespace, configurationName, name)
|
18
|
+
namespace + configurationName + '/' + name
|
19
|
+
end
|
20
|
+
|
21
|
+
class Serialization
|
22
|
+
def self.Serialize(type, data)
|
23
|
+
serialized = {}
|
24
|
+
case type
|
25
|
+
when 'enum'
|
26
|
+
serialized = data.to_s
|
27
|
+
when 'uint[]'
|
28
|
+
serialized[:'@xmlns:b'] = 'http://schemas.microsoft.com/2003/10/Serialization/Arrays'
|
29
|
+
serialized[:content!] = { 'b:unsignedInt' => data }
|
30
|
+
when 'string[]'
|
31
|
+
serialized[:'@xmlns:b'] = 'http://schemas.microsoft.com/2003/10/Serialization/Arrays'
|
32
|
+
serialized[:content!] = { 'b:string' => data }
|
33
|
+
end
|
34
|
+
serialized
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module XLiveServices
|
2
|
+
class XLive
|
3
|
+
LiveIdGUID = '{D34F9E47-A73B-44E5-AE67-5D0D8B8CFA76}'
|
4
|
+
LiveIdVersion = 1
|
5
|
+
attr_reader :Locale
|
6
|
+
attr_reader :Config
|
7
|
+
attr_reader :Live
|
8
|
+
attr_reader :Identity
|
9
|
+
attr_reader :Username
|
10
|
+
def initialize(username = nil, password = nil, locale = nil)
|
11
|
+
@Locale = 'en-US'
|
12
|
+
@Locale = locale if locale
|
13
|
+
@Config = XLiveServices.GetLcwConfig(@Locale)
|
14
|
+
@Live = LiveIdentity.new(LiveIdGUID, LiveIdVersion, :NO_UI, { :IDCRL_OPTION_ENVIRONMENT => 'Production' })
|
15
|
+
|
16
|
+
if username.nil?
|
17
|
+
identities = @Live.GetIdentities(LiveIdentity::PPCRL_CREDTYPE_PASSWORD)
|
18
|
+
@Username = identities.GetNextIdentityName
|
19
|
+
if !@Username
|
20
|
+
identities = @Live.GetIdentities(LiveIdentity::PPCRL_CREDTYPE_MEMBERNAMEONLY)
|
21
|
+
@Username = identities.GetNextIdentityName
|
22
|
+
end
|
23
|
+
raise XLiveServicesError.new('No Username!') unless @Username
|
24
|
+
else
|
25
|
+
@Username = username
|
26
|
+
end
|
27
|
+
|
28
|
+
@Identity = @Live.GetIdentity(@Username, :IDENTITY_SHARE_ALL)
|
29
|
+
if !@Identity.HasPersistedCredential?(LiveIdentity::PPCRL_CREDTYPE_MEMBERNAMEONLY)
|
30
|
+
@Identity.SetCredential(LiveIdentity::PPCRL_CREDTYPE_MEMBERNAMEONLY, @Username)
|
31
|
+
end
|
32
|
+
|
33
|
+
if password
|
34
|
+
@Identity.SetCredential(LiveIdentity::PPCRL_CREDTYPE_PASSWORD, password)
|
35
|
+
elsif !@Identity.HasPersistedCredential?(LiveIdentity::PPCRL_CREDTYPE_PASSWORD)
|
36
|
+
raise XLiveServicesError.new("No Password for #{@Username}!")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def PersistCredentials
|
41
|
+
@Identity.PersistCredential(LiveIdentity::PPCRL_CREDTYPE_MEMBERNAMEONLY)
|
42
|
+
@Identity.PersistCredential(LiveIdentity::PPCRL_CREDTYPE_PASSWORD)
|
43
|
+
end
|
44
|
+
|
45
|
+
def RemovePersistedCredentials
|
46
|
+
@Identity.RemovePersistedCredential(LiveIdentity::PPCRL_CREDTYPE_PASSWORD)
|
47
|
+
@Identity.RemovePersistedCredential(LiveIdentity::PPCRL_CREDTYPE_MEMBERNAMEONLY)
|
48
|
+
end
|
49
|
+
|
50
|
+
def IsAuthenticated?
|
51
|
+
@Identity.IsAuthenticated?
|
52
|
+
end
|
53
|
+
|
54
|
+
def Authenticate
|
55
|
+
return if IsAuthenticated?()
|
56
|
+
@Identity.Authenticate(nil, :LOGONIDENTITY_ALLOW_PERSISTENT_COOKIES)
|
57
|
+
end
|
58
|
+
|
59
|
+
def GetUserAuthService
|
60
|
+
@GetUserAuthService ||= XLiveServices.GetUserAuthService(@Identity, @Config)
|
61
|
+
end
|
62
|
+
|
63
|
+
def GetUserAuthorizationInfo
|
64
|
+
userAuthorization = XLiveServices.GetUserAuthorization(@Config[:URL][:GetUserAuth].first, GetUserAuthService())
|
65
|
+
userAuthorization['GetUserAuthorizationInfo']
|
66
|
+
end
|
67
|
+
|
68
|
+
def GetWgxService
|
69
|
+
@WgxService ||= XLiveServices.GetWgxService(@Identity, @Config)
|
70
|
+
end
|
71
|
+
|
72
|
+
def GetMarketplace
|
73
|
+
# Alternative service url https://services.gamesforwindows.com/SecurePublic/MarketplaceRestSecure.svc
|
74
|
+
XLiveServices::MarketplacePublic.new(@Config[:URL][:WgxService].first, GetWgxService())
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'httpi'
|
2
|
+
require 'multi_xml'
|
3
|
+
require 'live_identity'
|
4
|
+
|
5
|
+
module XLiveServices
|
6
|
+
class XLiveServicesError < RuntimeError; end
|
7
|
+
|
8
|
+
def self.GetLcwConfig(locale = 'en-US')
|
9
|
+
raise XLiveServicesError.new('Invalid Locale!') if locale.nil? or locale.empty?
|
10
|
+
response = HTTPI.get(HTTPI::Request.new("https://live.xbox.com/#{locale}/GetLcwConfig.ashx"))
|
11
|
+
raise "Error! HTTP Status Code: #{response.code}" if response.error?
|
12
|
+
XLiveServices.ParseConfig(MultiXml.parse(response.body))
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.ParseConfig(config)
|
16
|
+
parsed = { :Auth => {}, :URL => {} }
|
17
|
+
config['Environment']['Authentication']['AuthSetting'].each do |setting|
|
18
|
+
parsed[:Auth][setting['name'].to_sym] = { ServiceName: setting['serviceName'], Policy: setting['policy'].to_sym }
|
19
|
+
end
|
20
|
+
config['Environment']['UrlSettings']['UrlSetting'].each do |setting|
|
21
|
+
parsed[:URL][setting['name'].to_sym] = [ setting['url'], setting['authKey'].empty? ? nil : setting['authKey'].to_sym ]
|
22
|
+
end
|
23
|
+
parsed
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.DoAuth(identity, serviceName, policy)
|
27
|
+
identity.GetService(serviceName, policy)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.GetUserAuthService(identity, config)
|
31
|
+
configData = config[:Auth][config[:URL][:GetUserAuth].last]
|
32
|
+
DoAuth(identity, configData[:ServiceName], configData[:Policy])
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.GetWgxService(identity, config)
|
36
|
+
configData = config[:Auth][config[:URL][:WgxService].last]
|
37
|
+
DoAuth(identity, configData[:ServiceName], configData[:Policy])
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.GetUserAuthorization(url, userAuthService)
|
41
|
+
raise XLiveServicesError.new('Invalid AuthService Token!') if userAuthService.Token.nil? or userAuthService.Token.empty?
|
42
|
+
request = HTTPI::Request.new(url)
|
43
|
+
request.body = { :serviceType => 1, :titleId => 0 }
|
44
|
+
request.headers['Authorization'] = "WLID1.0 #{userAuthService.Token}"
|
45
|
+
request.headers['X-ClientType'] = 'panorama'
|
46
|
+
response = HTTPI.post(request)
|
47
|
+
raise "Error! HTTP Status Code: #{response.code} #{response.body}" if response.error?
|
48
|
+
MultiXml.parse(response.body)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.UserLogout(config)
|
52
|
+
request = HTTPI::Request.new(config[:URL][:Logout].first)
|
53
|
+
response = HTTPI.get(request)
|
54
|
+
raise XLiveServicesError.new("Error! HTTP Status Code: #{response.code} #{response.body}") if response.error?
|
55
|
+
response.body
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
ENV['SSL_CERT_FILE'] = Pathname.new("#{File.dirname(__FILE__)}/../data/certs.pem").realpath.to_s
|
4
|
+
|
5
|
+
require 'xlive_services/version'
|
6
|
+
require 'xlive_services/utils'
|
7
|
+
require 'xlive_services/xlive_services'
|
8
|
+
require 'xlive_services/marketplace_public'
|
9
|
+
require 'xlive_services/xlive'
|
10
|
+
require 'xlive_services/hresult'
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,205 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: XLiveServices
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dāvis
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-05-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httpi
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: multi_xml
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: LiveIdentity
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.0.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: savon
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: builder
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.6'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.6'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: simplecov
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: yard
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
description: A library to consume Xbox LIVE and Games for Windows LIVE services.
|
154
|
+
email:
|
155
|
+
- davispuh@gmail.com
|
156
|
+
executables: []
|
157
|
+
extensions: []
|
158
|
+
extra_rdoc_files: []
|
159
|
+
files:
|
160
|
+
- ".gitignore"
|
161
|
+
- ".travis.yml"
|
162
|
+
- ".yardopts"
|
163
|
+
- Gemfile
|
164
|
+
- README.md
|
165
|
+
- Rakefile
|
166
|
+
- UNLICENSE
|
167
|
+
- XLiveServices.gemspec
|
168
|
+
- data/certs.pem
|
169
|
+
- lib/xlive_services.rb
|
170
|
+
- lib/xlive_services/hresult.rb
|
171
|
+
- lib/xlive_services/marketplace_public.rb
|
172
|
+
- lib/xlive_services/utils.rb
|
173
|
+
- lib/xlive_services/version.rb
|
174
|
+
- lib/xlive_services/xlive.rb
|
175
|
+
- lib/xlive_services/xlive_services.rb
|
176
|
+
- spec/spec_helper.rb
|
177
|
+
- spec/xlive_services_spec.rb
|
178
|
+
homepage: https://github.com/davispuh/XLiveServices
|
179
|
+
licenses:
|
180
|
+
- UNLICENSE
|
181
|
+
metadata: {}
|
182
|
+
post_install_message:
|
183
|
+
rdoc_options: []
|
184
|
+
require_paths:
|
185
|
+
- lib
|
186
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - ">="
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: '0'
|
191
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
requirements: []
|
197
|
+
rubyforge_project:
|
198
|
+
rubygems_version: 2.2.2
|
199
|
+
signing_key:
|
200
|
+
specification_version: 4
|
201
|
+
summary: Interact with Xbox LIVE and Games for Windows LIVE services.
|
202
|
+
test_files:
|
203
|
+
- spec/spec_helper.rb
|
204
|
+
- spec/xlive_services_spec.rb
|
205
|
+
has_rdoc:
|