├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ └── feature_request.yml ├── auto-comment.yml ├── no-response.yml └── stale.yml ├── .gitignore ├── .gitmodules ├── LICENSE.txt ├── LuaScripts ├── NALParser.lua ├── NVStreamVideoPacket.lua └── gridctl.lua ├── README.md ├── app ├── build.gradle ├── lint.xml ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher-web.png │ ├── java │ │ └── com │ │ │ └── limelight │ │ │ ├── AppView.java │ │ │ ├── Game.java │ │ │ ├── HelpActivity.java │ │ │ ├── LimeLog.java │ │ │ ├── PcView.java │ │ │ ├── PosterContentProvider.java │ │ │ ├── ShortcutTrampoline.java │ │ │ ├── binding │ │ │ ├── PlatformBinding.java │ │ │ ├── audio │ │ │ │ └── AndroidAudioRenderer.java │ │ │ ├── crypto │ │ │ │ └── AndroidCryptoProvider.java │ │ │ ├── input │ │ │ │ ├── ControllerHandler.java │ │ │ │ ├── KeyboardTranslator.java │ │ │ │ ├── capture │ │ │ │ │ ├── AndroidNativePointerCaptureProvider.java │ │ │ │ │ ├── AndroidPointerIconCaptureProvider.java │ │ │ │ │ ├── InputCaptureManager.java │ │ │ │ │ ├── InputCaptureProvider.java │ │ │ │ │ ├── NullCaptureProvider.java │ │ │ │ │ └── ShieldCaptureProvider.java │ │ │ │ ├── driver │ │ │ │ │ ├── AbstractController.java │ │ │ │ │ ├── AbstractXboxController.java │ │ │ │ │ ├── UsbDriverListener.java │ │ │ │ │ ├── UsbDriverService.java │ │ │ │ │ ├── Xbox360Controller.java │ │ │ │ │ ├── Xbox360WirelessDongle.java │ │ │ │ │ └── XboxOneController.java │ │ │ │ ├── evdev │ │ │ │ │ ├── EvdevCaptureProviderShim.java │ │ │ │ │ └── EvdevListener.java │ │ │ │ ├── touch │ │ │ │ │ ├── AbsoluteTouchContext.java │ │ │ │ │ ├── RelativeTouchContext.java │ │ │ │ │ └── TouchContext.java │ │ │ │ └── virtual_controller │ │ │ │ │ ├── AnalogStick.java │ │ │ │ │ ├── DigitalButton.java │ │ │ │ │ ├── DigitalPad.java │ │ │ │ │ ├── LeftAnalogStick.java │ │ │ │ │ ├── LeftTrigger.java │ │ │ │ │ ├── RightAnalogStick.java │ │ │ │ │ ├── RightTrigger.java │ │ │ │ │ ├── VirtualController.java │ │ │ │ │ ├── VirtualControllerConfigurationLoader.java │ │ │ │ │ └── VirtualControllerElement.java │ │ │ └── video │ │ │ │ ├── CrashListener.java │ │ │ │ ├── MediaCodecDecoderRenderer.java │ │ │ │ ├── MediaCodecHelper.java │ │ │ │ ├── PerfOverlayListener.java │ │ │ │ └── VideoStats.java │ │ │ ├── computers │ │ │ ├── ComputerDatabaseManager.java │ │ │ ├── ComputerManagerListener.java │ │ │ ├── ComputerManagerService.java │ │ │ ├── IdentityManager.java │ │ │ ├── LegacyDatabaseReader.java │ │ │ ├── LegacyDatabaseReader2.java │ │ │ └── LegacyDatabaseReader3.java │ │ │ ├── discovery │ │ │ └── DiscoveryService.java │ │ │ ├── grid │ │ │ ├── AppGridAdapter.java │ │ │ ├── GenericGridAdapter.java │ │ │ ├── PcGridAdapter.java │ │ │ └── assets │ │ │ │ ├── CachedAppAssetLoader.java │ │ │ │ ├── DiskAssetLoader.java │ │ │ │ ├── MemoryAssetLoader.java │ │ │ │ ├── NetworkAssetLoader.java │ │ │ │ └── ScaledBitmap.java │ │ │ ├── nvstream │ │ │ ├── ConnectionContext.java │ │ │ ├── NvConnection.java │ │ │ ├── NvConnectionListener.java │ │ │ ├── StreamConfiguration.java │ │ │ ├── av │ │ │ │ ├── ByteBufferDescriptor.java │ │ │ │ ├── audio │ │ │ │ │ └── AudioRenderer.java │ │ │ │ └── video │ │ │ │ │ └── VideoDecoderRenderer.java │ │ │ ├── http │ │ │ │ ├── ComputerDetails.java │ │ │ │ ├── HostHttpResponseException.java │ │ │ │ ├── LimelightCryptoProvider.java │ │ │ │ ├── NvApp.java │ │ │ │ ├── NvHTTP.java │ │ │ │ └── PairingManager.java │ │ │ ├── input │ │ │ │ ├── ControllerPacket.java │ │ │ │ ├── KeyboardPacket.java │ │ │ │ └── MouseButtonPacket.java │ │ │ ├── jni │ │ │ │ └── MoonBridge.java │ │ │ ├── mdns │ │ │ │ ├── JmDNSDiscoveryAgent.java │ │ │ │ ├── MdnsComputer.java │ │ │ │ ├── MdnsDiscoveryAgent.java │ │ │ │ ├── MdnsDiscoveryListener.java │ │ │ │ └── NsdManagerDiscoveryAgent.java │ │ │ └── wol │ │ │ │ └── WakeOnLanSender.java │ │ │ ├── preferences │ │ │ ├── AddComputerManually.java │ │ │ ├── ConfirmDeleteOscPreference.java │ │ │ ├── GlPreferences.java │ │ │ ├── LanguagePreference.java │ │ │ ├── PreferenceConfiguration.java │ │ │ ├── SeekBarPreference.java │ │ │ ├── SmallIconCheckboxPreference.java │ │ │ ├── StreamSettings.java │ │ │ └── WebLauncherPreference.java │ │ │ ├── ui │ │ │ ├── AdapterFragment.java │ │ │ ├── AdapterFragmentCallbacks.java │ │ │ ├── GameGestures.java │ │ │ └── StreamView.java │ │ │ └── utils │ │ │ ├── CacheHelper.java │ │ │ ├── Dialog.java │ │ │ ├── HelpLauncher.java │ │ │ ├── NetHelper.java │ │ │ ├── ServerHelper.java │ │ │ ├── ShortcutHelper.java │ │ │ ├── SpinnerDialog.java │ │ │ ├── TvChannelHelper.java │ │ │ ├── UiHelper.java │ │ │ └── Vector2d.java │ ├── jni │ │ ├── Android.mk │ │ ├── Application.mk │ │ ├── evdev_reader │ │ │ ├── Android.mk │ │ │ └── evdev_reader.c │ │ └── moonlight-core │ │ │ ├── Android.mk │ │ │ ├── Build.txt │ │ │ ├── build-openssl.sh │ │ │ ├── callbacks.c │ │ │ ├── controller_list.h │ │ │ ├── controller_type.h │ │ │ ├── libopus │ │ │ ├── Android.mk │ │ │ ├── arm64-v8a │ │ │ │ └── libopus.a │ │ │ ├── armeabi-v7a │ │ │ │ └── libopus.a │ │ │ ├── include │ │ │ │ ├── opus.h │ │ │ │ ├── opus_defines.h │ │ │ │ ├── opus_multistream.h │ │ │ │ ├── opus_projection.h │ │ │ │ └── opus_types.h │ │ │ ├── x86 │ │ │ │ └── libopus.a │ │ │ └── x86_64 │ │ │ │ └── libopus.a │ │ │ ├── minisdl.c │ │ │ ├── minisdl.h │ │ │ ├── openssl │ │ │ ├── Android.mk │ │ │ ├── arm64-v8a │ │ │ │ ├── libcrypto.a │ │ │ │ └── libssl.a │ │ │ ├── armeabi-v7a │ │ │ │ ├── libcrypto.a │ │ │ │ └── libssl.a │ │ │ ├── include │ │ │ │ └── openssl │ │ │ │ │ ├── __DECC_INCLUDE_EPILOGUE.H │ │ │ │ │ ├── __DECC_INCLUDE_PROLOGUE.H │ │ │ │ │ ├── aes.h │ │ │ │ │ ├── asn1.h │ │ │ │ │ ├── asn1_mac.h │ │ │ │ │ ├── asn1err.h │ │ │ │ │ ├── asn1t.h │ │ │ │ │ ├── async.h │ │ │ │ │ ├── asyncerr.h │ │ │ │ │ ├── bio.h │ │ │ │ │ ├── bioerr.h │ │ │ │ │ ├── blowfish.h │ │ │ │ │ ├── bn.h │ │ │ │ │ ├── bnerr.h │ │ │ │ │ ├── buffer.h │ │ │ │ │ ├── buffererr.h │ │ │ │ │ ├── camellia.h │ │ │ │ │ ├── cast.h │ │ │ │ │ ├── cmac.h │ │ │ │ │ ├── cmp.h │ │ │ │ │ ├── cms.h │ │ │ │ │ ├── cmserr.h │ │ │ │ │ ├── comp.h │ │ │ │ │ ├── comperr.h │ │ │ │ │ ├── conf.h │ │ │ │ │ ├── conf_api.h │ │ │ │ │ ├── conferr.h │ │ │ │ │ ├── configuration.h │ │ │ │ │ ├── crmf.h │ │ │ │ │ ├── crypto.h │ │ │ │ │ ├── cryptoerr.h │ │ │ │ │ ├── ct.h │ │ │ │ │ ├── cterr.h │ │ │ │ │ ├── des.h │ │ │ │ │ ├── dh.h │ │ │ │ │ ├── dherr.h │ │ │ │ │ ├── dsa.h │ │ │ │ │ ├── dsaerr.h │ │ │ │ │ ├── dtls1.h │ │ │ │ │ ├── e_os2.h │ │ │ │ │ ├── ebcdic.h │ │ │ │ │ ├── ec.h │ │ │ │ │ ├── ecdh.h │ │ │ │ │ ├── ecdsa.h │ │ │ │ │ ├── ecerr.h │ │ │ │ │ ├── engine.h │ │ │ │ │ ├── engineerr.h │ │ │ │ │ ├── err.h │ │ │ │ │ ├── ess.h │ │ │ │ │ ├── evp.h │ │ │ │ │ ├── evperr.h │ │ │ │ │ ├── fipskey.h │ │ │ │ │ ├── hmac.h │ │ │ │ │ ├── idea.h │ │ │ │ │ ├── kdf.h │ │ │ │ │ ├── kdferr.h │ │ │ │ │ ├── lhash.h │ │ │ │ │ ├── md2.h │ │ │ │ │ ├── md4.h │ │ │ │ │ ├── md5.h │ │ │ │ │ ├── mdc2.h │ │ │ │ │ ├── modes.h │ │ │ │ │ ├── obj_mac.h │ │ │ │ │ ├── objects.h │ │ │ │ │ ├── objectserr.h │ │ │ │ │ ├── ocsp.h │ │ │ │ │ ├── ocsperr.h │ │ │ │ │ ├── opensslconf.h │ │ │ │ │ ├── opensslconf.h.in │ │ │ │ │ ├── opensslv.h │ │ │ │ │ ├── ossl_typ.h │ │ │ │ │ ├── pem.h │ │ │ │ │ ├── pem2.h │ │ │ │ │ ├── pemerr.h │ │ │ │ │ ├── pkcs12.h │ │ │ │ │ ├── pkcs12err.h │ │ │ │ │ ├── pkcs7.h │ │ │ │ │ ├── pkcs7err.h │ │ │ │ │ ├── rand.h │ │ │ │ │ ├── rand_drbg.h │ │ │ │ │ ├── randerr.h │ │ │ │ │ ├── rc2.h │ │ │ │ │ ├── rc4.h │ │ │ │ │ ├── rc5.h │ │ │ │ │ ├── ripemd.h │ │ │ │ │ ├── rsa.h │ │ │ │ │ ├── rsaerr.h │ │ │ │ │ ├── safestack.h │ │ │ │ │ ├── seed.h │ │ │ │ │ ├── sha.h │ │ │ │ │ ├── srp.h │ │ │ │ │ ├── srtp.h │ │ │ │ │ ├── ssl.h │ │ │ │ │ ├── ssl2.h │ │ │ │ │ ├── ssl3.h │ │ │ │ │ ├── sslerr.h │ │ │ │ │ ├── stack.h │ │ │ │ │ ├── store.h │ │ │ │ │ ├── storeerr.h │ │ │ │ │ ├── symhacks.h │ │ │ │ │ ├── tls1.h │ │ │ │ │ ├── ts.h │ │ │ │ │ ├── tserr.h │ │ │ │ │ ├── txt_db.h │ │ │ │ │ ├── ui.h │ │ │ │ │ ├── uierr.h │ │ │ │ │ ├── whrlpool.h │ │ │ │ │ ├── x509.h │ │ │ │ │ ├── x509_vfy.h │ │ │ │ │ ├── x509err.h │ │ │ │ │ ├── x509v3.h │ │ │ │ │ └── x509v3err.h │ │ │ ├── x86 │ │ │ │ ├── libcrypto.a │ │ │ │ └── libssl.a │ │ │ └── x86_64 │ │ │ │ ├── libcrypto.a │ │ │ │ └── libssl.a │ │ │ ├── simplejni.c │ │ │ └── usb_ids.h │ └── res │ │ ├── anim │ │ ├── boxart_fadein.xml │ │ └── boxart_fadeout.xml │ │ ├── drawable-xhdpi │ │ ├── atv_banner.png │ │ ├── no_app_image.png │ │ └── ouya_icon.png │ │ ├── drawable │ │ ├── app_icon.png │ │ ├── ic_add.xml │ │ ├── ic_channel.xml │ │ ├── ic_computer.xml │ │ ├── ic_help.xml │ │ ├── ic_lime_layer.xml │ │ ├── ic_lock.xml │ │ ├── ic_pc_offline.xml │ │ ├── ic_play.xml │ │ ├── ic_settings.xml │ │ └── list_view_unselected.xml │ │ ├── layout-land │ │ └── activity_pc_view.xml │ │ ├── layout │ │ ├── activity_add_computer_manually.xml │ │ ├── activity_app_view.xml │ │ ├── activity_configure_virtual_controller.xml │ │ ├── activity_game.xml │ │ ├── activity_pc_view.xml │ │ ├── activity_stream_settings.xml │ │ ├── app_grid_item.xml │ │ ├── app_grid_item_small.xml │ │ ├── app_grid_view.xml │ │ ├── app_grid_view_small.xml │ │ ├── pc_grid_item.xml │ │ └── pc_grid_view.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_pc_scut.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_pc_scut.png │ │ └── ic_pc_scut_foreground.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_pc_scut.png │ │ └── ic_pc_scut_foreground.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_pc_scut.png │ │ └── ic_pc_scut_foreground.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_pc_scut.png │ │ └── ic_pc_scut_foreground.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ ├── ic_pc_scut.png │ │ └── ic_pc_scut_foreground.png │ │ ├── values-bg │ │ └── strings.xml │ │ ├── values-ckb │ │ └── strings.xml │ │ ├── values-cs │ │ └── strings.xml │ │ ├── values-de │ │ └── strings.xml │ │ ├── values-el │ │ └── strings.xml │ │ ├── values-es │ │ └── strings.xml │ │ ├── values-fa │ │ └── strings.xml │ │ ├── values-fr │ │ └── strings.xml │ │ ├── values-hu │ │ └── strings.xml │ │ ├── values-in │ │ └── strings.xml │ │ ├── values-it │ │ └── strings.xml │ │ ├── values-iw │ │ └── strings.xml │ │ ├── values-ja │ │ └── strings.xml │ │ ├── values-ko │ │ └── strings.xml │ │ ├── values-nb-rNO │ │ └── strings.xml │ │ ├── values-nl │ │ └── strings.xml │ │ ├── values-pl │ │ └── strings.xml │ │ ├── values-pt-rBR │ │ └── strings.xml │ │ ├── values-pt │ │ └── strings.xml │ │ ├── values-ro │ │ └── strings.xml │ │ ├── values-ru │ │ └── strings.xml │ │ ├── values-sv │ │ └── strings.xml │ │ ├── values-tr │ │ └── strings.xml │ │ ├── values-uk │ │ └── strings.xml │ │ ├── values-v14 │ │ └── styles.xml │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-v24 │ │ └── styles.xml │ │ ├── values-v29 │ │ └── styles.xml │ │ ├── values-vi │ │ └── strings.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ └── strings.xml │ │ ├── values │ │ ├── arrays.xml │ │ ├── dimens.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_pc_scut_background.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ ├── backup_rules.xml │ │ ├── backup_rules_s.xml │ │ ├── game_mode_config.xml │ │ ├── locales_config.xml │ │ ├── network_security_config.xml │ │ └── preferences.xml │ ├── nonRoot │ └── AndroidManifest.xml │ └── root │ ├── AndroidManifest.xml │ └── java │ └── com.limelight │ └── binding │ └── input │ └── evdev │ ├── EvdevCaptureProvider.java │ ├── EvdevEvent.java │ ├── EvdevReader.java │ └── EvdevTranslator.java ├── appveyor.yml ├── build.gradle ├── decoder-errata.txt ├── fastlane └── metadata │ └── android │ ├── de │ ├── full_description.txt │ ├── short_description.txt │ └── title.txt │ └── en-US │ ├── changelogs │ ├── 195.txt │ ├── 197.txt │ ├── 198.txt │ ├── 199.txt │ ├── 200.txt │ ├── 203.txt │ ├── 204.txt │ ├── 205.txt │ ├── 206.txt │ ├── 208.txt │ ├── 209.txt │ ├── 211.txt │ ├── 215.txt │ ├── 216.txt │ ├── 217.txt │ ├── 219.txt │ ├── 220.txt │ ├── 222.txt │ ├── 223.txt │ ├── 224.txt │ ├── 225.txt │ ├── 231.txt │ ├── 233.txt │ ├── 237.txt │ ├── 241.txt │ ├── 242.txt │ ├── 243.txt │ ├── 244.txt │ ├── 245.txt │ ├── 246.txt │ ├── 247.txt │ ├── 251.txt │ ├── 252.txt │ ├── 253.txt │ ├── 254.txt │ ├── 255.txt │ ├── 256.txt │ ├── 257.txt │ ├── 259.txt │ ├── 260.txt │ ├── 261.txt │ ├── 263.txt │ ├── 264.txt │ ├── 266.txt │ ├── 267.txt │ ├── 268.txt │ ├── 270.txt │ ├── 271.txt │ ├── 272.txt │ ├── 273.txt │ ├── 274.txt │ ├── 275.txt │ ├── 278.txt │ ├── 280.txt │ ├── 282.txt │ ├── 283.txt │ ├── 286.txt │ ├── 287.txt │ ├── 288.txt │ ├── 292.txt │ ├── 293.txt │ ├── 296.txt │ ├── 298.txt │ ├── 301.txt │ ├── 306.txt │ ├── 311.txt │ ├── 312.txt │ ├── 313.txt │ └── 314.txt │ ├── full_description.txt │ ├── images │ ├── featureGraphic.png │ ├── icon.png │ ├── phoneScreenshots │ │ ├── 1-pc.png │ │ └── 2-settings.png │ ├── sevenInchScreenshots │ │ ├── 1-pc.png │ │ └── 2-settings.png │ ├── tenInchScreenshots │ │ ├── 1-pc.png │ │ └── 2-settings.png │ ├── tvBanner.png │ └── tvScreenshots │ │ ├── 1-pc.png │ │ └── 2-settings.png │ ├── short_description.txt │ └── title.txt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── store-assets └── lime_layer.svg /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: Feature request 2 | description: Suggest an idea for this project 3 | title: "[Feature request]: " 4 | labels: enhancement 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | Thank you for taking the time to fill out this feature form! 10 | - type: textarea 11 | id: feature 12 | attributes: 13 | label: Is your feature request related to a problem? Please describe. 14 | description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 15 | validations: 16 | required: true 17 | - type: textarea 18 | id: solution 19 | attributes: 20 | label: Describe the solution you'd like 21 | description: A clear and concise description of what you want to happen. 22 | validations: 23 | required: true 24 | - type: textarea 25 | id: alternatives 26 | attributes: 27 | label: Describe alternatives you've considered 28 | description: A clear and concise description of any alternative solutions or features you've considered. 29 | validations: 30 | required: true 31 | - type: textarea 32 | id: screenshots 33 | attributes: 34 | label: Screenshots 35 | description: Add any other context or screenshots about the feature request here. 36 | validations: 37 | required: false 38 | -------------------------------------------------------------------------------- /.github/auto-comment.yml: -------------------------------------------------------------------------------- 1 | issuesOpened: > 2 | If this is a question about Moonlight or you need help troubleshooting a streaming problem, please use the help channels on our [Discord server](https://moonlight-stream.org/discord) instead of GitHub issues. There are many more people available on Discord to help you and answer your questions.

3 | This issue tracker should only be used for specific bugs or feature requests.

4 | Thank you, and happy streaming! 5 | -------------------------------------------------------------------------------- /.github/no-response.yml: -------------------------------------------------------------------------------- 1 | # ProBot No Response (https://probot.github.io/apps/no-response/) 2 | 3 | daysUntilClose: 7 4 | responseRequiredLabel: 'need more info' 5 | closeComment: > 6 | This issue has been automatically closed because there was no response to a 7 | request for more information from the issue opener. Please leave a comment or 8 | open a new issue if you have additional information related to this issue. 9 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # ProBot Stale (https://probot.github.io/apps/stale/) 2 | 3 | daysUntilStale: 90 4 | daysUntilClose: 7 5 | exemptLabels: 6 | - accepted 7 | - bug 8 | - enhancement 9 | - meta 10 | staleLabel: stale 11 | markComment: > 12 | This issue has been automatically marked as stale because it has not had 13 | recent activity. It will be closed if no further activity occurs. 14 | closeComment: false 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # built application files 2 | *.apk 3 | *.ap_ 4 | *.aab 5 | output.json 6 | output-metadata.json 7 | out/ 8 | 9 | # files for the dex VM 10 | *.dex 11 | 12 | # Java class files 13 | *.class 14 | 15 | # generated files 16 | bin/ 17 | gen/ 18 | 19 | # Local configuration file (sdk path, etc) 20 | local.properties 21 | 22 | # Windows thumbnail db 23 | Thumbs.db 24 | 25 | # OSX files 26 | .DS_Store 27 | 28 | # Eclipse project files 29 | .classpath 30 | .project 31 | 32 | # Android Studio 33 | .idea 34 | #.idea/workspace.xml - remove # and delete .idea if it better suit your needs. 35 | .gradle 36 | build/ 37 | *.iml 38 | 39 | # Compiled JNI libraries folder 40 | **/jniLibs 41 | app/.externalNativeBuild/ 42 | 43 | # NDK stuff 44 | .cxx/ -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "app/src/main/jni/moonlight-core/moonlight-common-c"] 2 | path = app/src/main/jni/moonlight-core/moonlight-common-c 3 | url = https://github.com/moonlight-stream/moonlight-common-c.git 4 | -------------------------------------------------------------------------------- /LuaScripts/NALParser.lua: -------------------------------------------------------------------------------- 1 | -- H264 NAL Parser 2 | -- Version: 1.0 3 | -- Cameron Gutman 4 | 5 | -- NAL header 6 | local nal_start = ProtoField.bytes("nal.start", "H264 NAL Start Sequence") -- 4 Byte Start 7 | local nal_type = ProtoField.uint8("nal.type", "H264 NAL Type") -- 1 byte NAL type 8 | local nal_data = ProtoField.bytes("nal.data", "H264 NAL Data") -- variable byte NAL data 9 | 10 | p_h264raw = Proto("h264raw", "H264 Raw NAL Parser") 11 | p_h264raw.fields = { 12 | nal_start, 13 | nal_type, 14 | nal_data 15 | } 16 | 17 | function p_h264raw.dissector(buf, pkt, root) 18 | pkt.cols.protocol = p_h264raw.name 19 | subtree = root:add(p_h264raw, buf(0)) 20 | 21 | local i = 0 22 | local data_start = -1 23 | while i < buf:len() do 24 | -- Make sure we have a potential start sequence and type 25 | if buf:len() - i < 5 then 26 | -- We need more data 27 | pkt.desegment_len = DESEGMENT_ONE_MORE_SEGMENT 28 | pkt.desegment_offset = 0 29 | return 30 | end 31 | 32 | -- Check for start sequence 33 | start = buf(i, 4):uint() 34 | if start == 1 then 35 | if data_start ~= -1 then 36 | -- End the last NAL 37 | subtree:add(nal_data, buf(data_start, i-data_start)) 38 | end 39 | -- This is the start of a NAL 40 | subtree:add(nal_start, buf(i, 4)) 41 | i = i + 4 42 | -- Next byte is NAL type 43 | subtree:add(nal_type, buf(i, 1), buf(i, 1):uint8()) 44 | i = i + 1 45 | -- Data begins here 46 | data_start = i 47 | else 48 | -- This must be a data byte 49 | i = i + 1 50 | end 51 | end 52 | end 53 | 54 | function p_h264raw.init() 55 | end 56 | 57 | 58 | local udp_dissector_table = DissectorTable.get("rtp.pt") 59 | udp_dissector_table:add(96, p_h264raw) 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Moonlight Android 2 | 3 | [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/232a8tadrrn8jv0k/branch/master?svg=true)](https://ci.appveyor.com/project/cgutman/moonlight-android/branch/master) 4 | [![Translation Status](https://hosted.weblate.org/widgets/moonlight/-/moonlight-android/svg-badge.svg)](https://hosted.weblate.org/projects/moonlight/moonlight-android/) 5 | 6 | [Moonlight for Android](https://moonlight-stream.org) is an open source client for NVIDIA GameStream and [Sunshine](https://github.com/LizardByte/Sunshine). 7 | 8 | Moonlight for Android will allow you to stream your full collection of games from your Windows PC to your Android device, 9 | whether in your own home or over the internet. 10 | 11 | Moonlight also has a [PC client](https://github.com/moonlight-stream/moonlight-qt) and [iOS/tvOS client](https://github.com/moonlight-stream/moonlight-ios). 12 | 13 | You can follow development on our [Discord server](https://moonlight-stream.org/discord) and help translate Moonlight into your language on [Weblate](https://hosted.weblate.org/projects/moonlight/moonlight-android/). 14 | 15 | ## Downloads 16 | * [Google Play Store](https://play.google.com/store/apps/details?id=com.limelight) 17 | * [Amazon App Store](https://www.amazon.com/gp/product/B00JK4MFN2) 18 | * [F-Droid](https://f-droid.org/packages/com.limelight) 19 | * [APK](https://github.com/moonlight-stream/moonlight-android/releases) 20 | 21 | ## Building 22 | * Install Android Studio and the Android NDK 23 | * Run ‘git submodule update --init --recursive’ from within moonlight-android/ 24 | * In moonlight-android/, create a file called ‘local.properties’. Add an ‘ndk.dir=’ property to the local.properties file and set it equal to your NDK directory. 25 | * Build the APK using Android Studio or gradle 26 | 27 | ## Authors 28 | 29 | * [Cameron Gutman](https://github.com/cgutman) 30 | * [Diego Waxemberg](https://github.com/dwaxemberg) 31 | * [Aaron Neyer](https://github.com/Aaronneyer) 32 | * [Andrew Hennessy](https://github.com/yetanothername) 33 | 34 | Moonlight is the work of students at [Case Western](http://case.edu) and was 35 | started as a project at [MHacks](http://mhacks.org). 36 | -------------------------------------------------------------------------------- /app/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Don't obfuscate code 2 | -dontobfuscate 3 | 4 | # Our code 5 | -keep class com.limelight.binding.input.evdev.* {*;} 6 | 7 | # Moonlight common 8 | -keep class com.limelight.nvstream.jni.* {*;} 9 | 10 | # Okio 11 | -keep class sun.misc.Unsafe {*;} 12 | -dontwarn java.nio.file.* 13 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 14 | -dontwarn okio.** 15 | 16 | # BouncyCastle 17 | -keep class org.bouncycastle.jcajce.provider.asymmetric.* {*;} 18 | -keep class org.bouncycastle.jcajce.provider.asymmetric.util.* {*;} 19 | -keep class org.bouncycastle.jcajce.provider.asymmetric.rsa.* {*;} 20 | -keep class org.bouncycastle.jcajce.provider.digest.** {*;} 21 | -keep class org.bouncycastle.jcajce.provider.symmetric.** {*;} 22 | -keep class org.bouncycastle.jcajce.spec.* {*;} 23 | -keep class org.bouncycastle.jce.** {*;} 24 | -dontwarn javax.naming.** 25 | 26 | # jMDNS 27 | -dontwarn javax.jmdns.impl.DNSCache 28 | -dontwarn org.slf4j.** 29 | -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/LimeLog.java: -------------------------------------------------------------------------------- 1 | package com.limelight; 2 | 3 | import java.io.IOException; 4 | import java.util.logging.FileHandler; 5 | import java.util.logging.Logger; 6 | 7 | public class LimeLog { 8 | private static final Logger LOGGER = Logger.getLogger(LimeLog.class.getName()); 9 | 10 | public static void info(String msg) { 11 | LOGGER.info(msg); 12 | } 13 | 14 | public static void warning(String msg) { 15 | LOGGER.warning(msg); 16 | } 17 | 18 | public static void severe(String msg) { 19 | LOGGER.severe(msg); 20 | } 21 | 22 | public static void setFileHandler(String fileName) throws IOException { 23 | LOGGER.addHandler(new FileHandler(fileName)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/PlatformBinding.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding; 2 | 3 | import android.content.Context; 4 | 5 | import com.limelight.binding.audio.AndroidAudioRenderer; 6 | import com.limelight.binding.crypto.AndroidCryptoProvider; 7 | import com.limelight.nvstream.av.audio.AudioRenderer; 8 | import com.limelight.nvstream.http.LimelightCryptoProvider; 9 | 10 | public class PlatformBinding { 11 | public static LimelightCryptoProvider getCryptoProvider(Context c) { 12 | return new AndroidCryptoProvider(c); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/capture/AndroidPointerIconCaptureProvider.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.capture; 2 | 3 | import android.annotation.TargetApi; 4 | import android.app.Activity; 5 | import android.content.Context; 6 | import android.os.Build; 7 | import android.view.PointerIcon; 8 | import android.view.View; 9 | 10 | @TargetApi(Build.VERSION_CODES.N) 11 | public class AndroidPointerIconCaptureProvider extends InputCaptureProvider { 12 | private final View targetView; 13 | private final Context context; 14 | 15 | public AndroidPointerIconCaptureProvider(Activity activity, View targetView) { 16 | this.context = activity; 17 | this.targetView = targetView; 18 | } 19 | 20 | public static boolean isCaptureProviderSupported() { 21 | return Build.VERSION.SDK_INT >= Build.VERSION_CODES.N; 22 | } 23 | 24 | @Override 25 | public void hideCursor() { 26 | super.hideCursor(); 27 | targetView.setPointerIcon(PointerIcon.getSystemIcon(context, PointerIcon.TYPE_NULL)); 28 | } 29 | 30 | @Override 31 | public void showCursor() { 32 | super.showCursor(); 33 | targetView.setPointerIcon(null); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/capture/InputCaptureManager.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.capture; 2 | 3 | import android.app.Activity; 4 | 5 | import com.limelight.BuildConfig; 6 | import com.limelight.LimeLog; 7 | import com.limelight.R; 8 | import com.limelight.binding.input.evdev.EvdevCaptureProviderShim; 9 | import com.limelight.binding.input.evdev.EvdevListener; 10 | 11 | public class InputCaptureManager { 12 | public static InputCaptureProvider getInputCaptureProvider(Activity activity, EvdevListener rootListener) { 13 | if (AndroidNativePointerCaptureProvider.isCaptureProviderSupported()) { 14 | LimeLog.info("Using Android O+ native mouse capture"); 15 | return new AndroidNativePointerCaptureProvider(activity, activity.findViewById(R.id.surfaceView)); 16 | } 17 | // LineageOS implemented broken NVIDIA capture extensions, so avoid using them on root builds. 18 | // See https://github.com/LineageOS/android_frameworks_base/commit/d304f478a023430f4712dbdc3ee69d9ad02cebd3 19 | else if (!BuildConfig.ROOT_BUILD && ShieldCaptureProvider.isCaptureProviderSupported()) { 20 | LimeLog.info("Using NVIDIA mouse capture extension"); 21 | return new ShieldCaptureProvider(activity); 22 | } 23 | else if (EvdevCaptureProviderShim.isCaptureProviderSupported()) { 24 | LimeLog.info("Using Evdev mouse capture"); 25 | return EvdevCaptureProviderShim.createEvdevCaptureProvider(activity, rootListener); 26 | } 27 | else if (AndroidPointerIconCaptureProvider.isCaptureProviderSupported()) { 28 | // Android N's native capture can't capture over system UI elements 29 | // so we want to only use it if there's no other option. 30 | LimeLog.info("Using Android N+ pointer hiding"); 31 | return new AndroidPointerIconCaptureProvider(activity, activity.findViewById(R.id.surfaceView)); 32 | } 33 | else { 34 | LimeLog.info("Mouse capture not available"); 35 | return new NullCaptureProvider(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/capture/InputCaptureProvider.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.capture; 2 | 3 | import android.view.MotionEvent; 4 | 5 | public abstract class InputCaptureProvider { 6 | protected boolean isCapturing; 7 | protected boolean isCursorVisible; 8 | 9 | public void enableCapture() { 10 | isCapturing = true; 11 | hideCursor(); 12 | } 13 | public void disableCapture() { 14 | isCapturing = false; 15 | showCursor(); 16 | } 17 | 18 | public void destroy() {} 19 | 20 | public boolean isCapturingEnabled() { 21 | return isCapturing; 22 | } 23 | 24 | public boolean isCapturingActive() { 25 | return isCapturing; 26 | } 27 | 28 | public void showCursor() { 29 | isCursorVisible = true; 30 | } 31 | 32 | public void hideCursor() { 33 | isCursorVisible = false; 34 | } 35 | 36 | public boolean eventHasRelativeMouseAxes(MotionEvent event) { 37 | return false; 38 | } 39 | 40 | public float getRelativeAxisX(MotionEvent event) { 41 | return 0; 42 | } 43 | 44 | public float getRelativeAxisY(MotionEvent event) { 45 | return 0; 46 | } 47 | 48 | public void onWindowFocusChanged(boolean focusActive) {} 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/capture/NullCaptureProvider.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.capture; 2 | 3 | 4 | public class NullCaptureProvider extends InputCaptureProvider {} 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/driver/AbstractController.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.driver; 2 | 3 | public abstract class AbstractController { 4 | 5 | private final int deviceId; 6 | private final int vendorId; 7 | private final int productId; 8 | 9 | private UsbDriverListener listener; 10 | 11 | protected int buttonFlags, supportedButtonFlags; 12 | protected float leftTrigger, rightTrigger; 13 | protected float rightStickX, rightStickY; 14 | protected float leftStickX, leftStickY; 15 | protected short capabilities; 16 | protected byte type; 17 | 18 | public int getControllerId() { 19 | return deviceId; 20 | } 21 | 22 | public int getVendorId() { 23 | return vendorId; 24 | } 25 | 26 | public int getProductId() { 27 | return productId; 28 | } 29 | 30 | public int getSupportedButtonFlags() { 31 | return supportedButtonFlags; 32 | } 33 | 34 | public short getCapabilities() { 35 | return capabilities; 36 | } 37 | 38 | public byte getType() { 39 | return type; 40 | } 41 | 42 | protected void setButtonFlag(int buttonFlag, int data) { 43 | if (data != 0) { 44 | buttonFlags |= buttonFlag; 45 | } 46 | else { 47 | buttonFlags &= ~buttonFlag; 48 | } 49 | } 50 | 51 | protected void reportInput() { 52 | listener.reportControllerState(deviceId, buttonFlags, leftStickX, leftStickY, 53 | rightStickX, rightStickY, leftTrigger, rightTrigger); 54 | } 55 | 56 | public abstract boolean start(); 57 | public abstract void stop(); 58 | 59 | public AbstractController(int deviceId, UsbDriverListener listener, int vendorId, int productId) { 60 | this.deviceId = deviceId; 61 | this.listener = listener; 62 | this.vendorId = vendorId; 63 | this.productId = productId; 64 | } 65 | 66 | public abstract void rumble(short lowFreqMotor, short highFreqMotor); 67 | 68 | public abstract void rumbleTriggers(short leftTrigger, short rightTrigger); 69 | 70 | protected void notifyDeviceRemoved() { 71 | listener.deviceRemoved(this); 72 | } 73 | 74 | protected void notifyDeviceAdded() { 75 | listener.deviceAdded(this); 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/driver/UsbDriverListener.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.driver; 2 | 3 | public interface UsbDriverListener { 4 | void reportControllerState(int controllerId, int buttonFlags, 5 | float leftStickX, float leftStickY, 6 | float rightStickX, float rightStickY, 7 | float leftTrigger, float rightTrigger); 8 | 9 | void deviceRemoved(AbstractController controller); 10 | void deviceAdded(AbstractController controller); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/evdev/EvdevCaptureProviderShim.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.evdev; 2 | 3 | 4 | import android.app.Activity; 5 | 6 | import com.limelight.BuildConfig; 7 | import com.limelight.binding.input.capture.InputCaptureProvider; 8 | 9 | public class EvdevCaptureProviderShim { 10 | public static boolean isCaptureProviderSupported() { 11 | return BuildConfig.ROOT_BUILD; 12 | } 13 | 14 | // We need to construct our capture provider using reflection because it isn't included in non-root builds 15 | public static InputCaptureProvider createEvdevCaptureProvider(Activity activity, EvdevListener listener) { 16 | try { 17 | Class providerClass = Class.forName("com.limelight.binding.input.evdev.EvdevCaptureProvider"); 18 | return (InputCaptureProvider) providerClass.getConstructors()[0].newInstance(activity, listener); 19 | } catch (Exception e) { 20 | e.printStackTrace(); 21 | throw new RuntimeException(e); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/evdev/EvdevListener.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.evdev; 2 | 3 | public interface EvdevListener { 4 | int BUTTON_LEFT = 1; 5 | int BUTTON_MIDDLE = 2; 6 | int BUTTON_RIGHT = 3; 7 | int BUTTON_X1 = 4; 8 | int BUTTON_X2 = 5; 9 | 10 | void mouseMove(int deltaX, int deltaY); 11 | void mouseButtonEvent(int buttonId, boolean down); 12 | void mouseVScroll(byte amount); 13 | void mouseHScroll(byte amount); 14 | void keyboardEvent(boolean buttonDown, short keyCode); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/touch/TouchContext.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.input.touch; 2 | 3 | public interface TouchContext { 4 | int getActionIndex(); 5 | void setPointerCount(int pointerCount); 6 | boolean touchDownEvent(int eventX, int eventY, long eventTime, boolean isNewFinger); 7 | boolean touchMoveEvent(int eventX, int eventY, long eventTime); 8 | void touchUpEvent(int eventX, int eventY, long eventTime); 9 | void cancelTouch(); 10 | boolean isCancelled(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/virtual_controller/LeftAnalogStick.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Karim Mreisi. 3 | */ 4 | 5 | package com.limelight.binding.input.virtual_controller; 6 | 7 | import android.content.Context; 8 | 9 | import com.limelight.nvstream.input.ControllerPacket; 10 | 11 | public class LeftAnalogStick extends AnalogStick { 12 | public LeftAnalogStick(final VirtualController controller, final Context context) { 13 | super(controller, context, EID_LS); 14 | 15 | addAnalogStickListener(new AnalogStick.AnalogStickListener() { 16 | @Override 17 | public void onMovement(float x, float y) { 18 | VirtualController.ControllerInputContext inputContext = 19 | controller.getControllerInputContext(); 20 | inputContext.leftStickX = (short) (x * 0x7FFE); 21 | inputContext.leftStickY = (short) (y * 0x7FFE); 22 | 23 | controller.sendControllerInputContext(); 24 | } 25 | 26 | @Override 27 | public void onClick() { 28 | } 29 | 30 | @Override 31 | public void onDoubleClick() { 32 | VirtualController.ControllerInputContext inputContext = 33 | controller.getControllerInputContext(); 34 | inputContext.inputMap |= ControllerPacket.LS_CLK_FLAG; 35 | 36 | controller.sendControllerInputContext(); 37 | } 38 | 39 | @Override 40 | public void onRevoke() { 41 | VirtualController.ControllerInputContext inputContext = 42 | controller.getControllerInputContext(); 43 | inputContext.inputMap &= ~ControllerPacket.LS_CLK_FLAG; 44 | 45 | controller.sendControllerInputContext(); 46 | } 47 | }); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/virtual_controller/LeftTrigger.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Karim Mreisi. 3 | */ 4 | 5 | package com.limelight.binding.input.virtual_controller; 6 | 7 | import android.content.Context; 8 | 9 | public class LeftTrigger extends DigitalButton { 10 | public LeftTrigger(final VirtualController controller, final int layer, final Context context) { 11 | super(controller, EID_LT, layer, context); 12 | addDigitalButtonListener(new DigitalButton.DigitalButtonListener() { 13 | @Override 14 | public void onClick() { 15 | VirtualController.ControllerInputContext inputContext = 16 | controller.getControllerInputContext(); 17 | inputContext.leftTrigger = (byte) 0xFF; 18 | 19 | controller.sendControllerInputContext(); 20 | } 21 | 22 | @Override 23 | public void onLongClick() { 24 | } 25 | 26 | @Override 27 | public void onRelease() { 28 | VirtualController.ControllerInputContext inputContext = 29 | controller.getControllerInputContext(); 30 | inputContext.leftTrigger = (byte) 0x00; 31 | 32 | controller.sendControllerInputContext(); 33 | } 34 | }); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/virtual_controller/RightAnalogStick.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Karim Mreisi. 3 | */ 4 | 5 | package com.limelight.binding.input.virtual_controller; 6 | 7 | import android.content.Context; 8 | 9 | import com.limelight.nvstream.input.ControllerPacket; 10 | 11 | public class RightAnalogStick extends AnalogStick { 12 | public RightAnalogStick(final VirtualController controller, final Context context) { 13 | super(controller, context, EID_RS); 14 | 15 | addAnalogStickListener(new AnalogStick.AnalogStickListener() { 16 | @Override 17 | public void onMovement(float x, float y) { 18 | VirtualController.ControllerInputContext inputContext = 19 | controller.getControllerInputContext(); 20 | inputContext.rightStickX = (short) (x * 0x7FFE); 21 | inputContext.rightStickY = (short) (y * 0x7FFE); 22 | 23 | controller.sendControllerInputContext(); 24 | } 25 | 26 | @Override 27 | public void onClick() { 28 | } 29 | 30 | @Override 31 | public void onDoubleClick() { 32 | VirtualController.ControllerInputContext inputContext = 33 | controller.getControllerInputContext(); 34 | inputContext.inputMap |= ControllerPacket.RS_CLK_FLAG; 35 | 36 | controller.sendControllerInputContext(); 37 | } 38 | 39 | @Override 40 | public void onRevoke() { 41 | VirtualController.ControllerInputContext inputContext = 42 | controller.getControllerInputContext(); 43 | inputContext.inputMap &= ~ControllerPacket.RS_CLK_FLAG; 44 | 45 | controller.sendControllerInputContext(); 46 | } 47 | }); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/input/virtual_controller/RightTrigger.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Karim Mreisi. 3 | */ 4 | 5 | package com.limelight.binding.input.virtual_controller; 6 | 7 | import android.content.Context; 8 | 9 | public class RightTrigger extends DigitalButton { 10 | public RightTrigger(final VirtualController controller, final int layer, final Context context) { 11 | super(controller, EID_RT, layer, context); 12 | addDigitalButtonListener(new DigitalButton.DigitalButtonListener() { 13 | @Override 14 | public void onClick() { 15 | VirtualController.ControllerInputContext inputContext = 16 | controller.getControllerInputContext(); 17 | inputContext.rightTrigger = (byte) 0xFF; 18 | 19 | controller.sendControllerInputContext(); 20 | } 21 | 22 | @Override 23 | public void onLongClick() { 24 | } 25 | 26 | @Override 27 | public void onRelease() { 28 | VirtualController.ControllerInputContext inputContext = 29 | controller.getControllerInputContext(); 30 | inputContext.rightTrigger = (byte) 0x00; 31 | 32 | controller.sendControllerInputContext(); 33 | } 34 | }); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/video/CrashListener.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.video; 2 | 3 | public interface CrashListener { 4 | void notifyCrash(Exception e); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/binding/video/PerfOverlayListener.java: -------------------------------------------------------------------------------- 1 | package com.limelight.binding.video; 2 | 3 | public interface PerfOverlayListener { 4 | void onPerfUpdate(final String text); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/computers/ComputerManagerListener.java: -------------------------------------------------------------------------------- 1 | package com.limelight.computers; 2 | 3 | import com.limelight.nvstream.http.ComputerDetails; 4 | 5 | public interface ComputerManagerListener { 6 | void notifyComputerUpdated(ComputerDetails details); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/computers/IdentityManager.java: -------------------------------------------------------------------------------- 1 | package com.limelight.computers; 2 | 3 | import java.io.FileNotFoundException; 4 | import java.io.IOException; 5 | import java.io.InputStreamReader; 6 | import java.io.OutputStreamWriter; 7 | import java.util.Locale; 8 | import java.util.Random; 9 | 10 | import com.limelight.LimeLog; 11 | 12 | import android.content.Context; 13 | 14 | public class IdentityManager { 15 | private static final String UNIQUE_ID_FILE_NAME = "uniqueid"; 16 | private static final int UID_SIZE_IN_BYTES = 8; 17 | 18 | private String uniqueId; 19 | 20 | public IdentityManager(Context c) { 21 | uniqueId = loadUniqueId(c); 22 | if (uniqueId == null) { 23 | uniqueId = generateNewUniqueId(c); 24 | } 25 | 26 | LimeLog.info("UID is now: "+uniqueId); 27 | } 28 | 29 | public String getUniqueId() { 30 | return uniqueId; 31 | } 32 | 33 | private static String loadUniqueId(Context c) { 34 | // 2 Hex digits per byte 35 | char[] uid = new char[UID_SIZE_IN_BYTES * 2]; 36 | LimeLog.info("Reading UID from disk"); 37 | try (final InputStreamReader reader = 38 | new InputStreamReader(c.openFileInput(UNIQUE_ID_FILE_NAME)) 39 | ) { 40 | if (reader.read(uid) != UID_SIZE_IN_BYTES * 2) { 41 | LimeLog.severe("UID file data is truncated"); 42 | return null; 43 | } 44 | return new String(uid); 45 | } catch (FileNotFoundException e) { 46 | LimeLog.info("No UID file found"); 47 | return null; 48 | } catch (IOException e) { 49 | LimeLog.severe("Error while reading UID file"); 50 | e.printStackTrace(); 51 | return null; 52 | } 53 | } 54 | 55 | private static String generateNewUniqueId(Context c) { 56 | // Generate a new UID hex string 57 | LimeLog.info("Generating new UID"); 58 | String uidStr = String.format((Locale)null, "%016x", new Random().nextLong()); 59 | 60 | try (final OutputStreamWriter writer = 61 | new OutputStreamWriter(c.openFileOutput(UNIQUE_ID_FILE_NAME, 0)) 62 | ) { 63 | writer.write(uidStr); 64 | LimeLog.info("UID written to disk"); 65 | } catch (IOException e) { 66 | LimeLog.severe("Error while writing UID file"); 67 | e.printStackTrace(); 68 | } 69 | 70 | // We can return a UID even if I/O fails 71 | return uidStr; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/grid/GenericGridAdapter.java: -------------------------------------------------------------------------------- 1 | package com.limelight.grid; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.BaseAdapter; 8 | import android.widget.ImageView; 9 | import android.widget.ProgressBar; 10 | import android.widget.TextView; 11 | 12 | import com.limelight.R; 13 | 14 | import java.util.ArrayList; 15 | 16 | public abstract class GenericGridAdapter extends BaseAdapter { 17 | protected final Context context; 18 | private int layoutId; 19 | final ArrayList itemList = new ArrayList<>(); 20 | private final LayoutInflater inflater; 21 | 22 | GenericGridAdapter(Context context, int layoutId) { 23 | this.context = context; 24 | this.layoutId = layoutId; 25 | 26 | this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 27 | } 28 | 29 | void setLayoutId(int layoutId) { 30 | if (layoutId != this.layoutId) { 31 | this.layoutId = layoutId; 32 | 33 | // Force the view to be redrawn with the new layout 34 | notifyDataSetInvalidated(); 35 | } 36 | } 37 | 38 | public void clear() { 39 | itemList.clear(); 40 | } 41 | 42 | @Override 43 | public int getCount() { 44 | return itemList.size(); 45 | } 46 | 47 | @Override 48 | public Object getItem(int i) { 49 | return itemList.get(i); 50 | } 51 | 52 | @Override 53 | public long getItemId(int i) { 54 | return i; 55 | } 56 | 57 | public abstract void populateView(View parentView, ImageView imgView, ProgressBar prgView, TextView txtView, ImageView overlayView, T obj); 58 | 59 | @Override 60 | public View getView(int i, View convertView, ViewGroup viewGroup) { 61 | if (convertView == null) { 62 | convertView = inflater.inflate(layoutId, viewGroup, false); 63 | } 64 | 65 | ImageView imgView = convertView.findViewById(R.id.grid_image); 66 | ImageView overlayView = convertView.findViewById(R.id.grid_overlay); 67 | TextView txtView = convertView.findViewById(R.id.grid_text); 68 | ProgressBar prgView = convertView.findViewById(R.id.grid_spinner); 69 | 70 | populateView(convertView, imgView, prgView, txtView, overlayView, itemList.get(i)); 71 | 72 | return convertView; 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/grid/assets/NetworkAssetLoader.java: -------------------------------------------------------------------------------- 1 | package com.limelight.grid.assets; 2 | 3 | import android.content.Context; 4 | 5 | import com.limelight.LimeLog; 6 | import com.limelight.binding.PlatformBinding; 7 | import com.limelight.nvstream.http.NvHTTP; 8 | import com.limelight.utils.ServerHelper; 9 | 10 | import java.io.IOException; 11 | import java.io.InputStream; 12 | 13 | public class NetworkAssetLoader { 14 | private final Context context; 15 | private final String uniqueId; 16 | 17 | public NetworkAssetLoader(Context context, String uniqueId) { 18 | this.context = context; 19 | this.uniqueId = uniqueId; 20 | } 21 | 22 | public InputStream getBitmapStream(CachedAppAssetLoader.LoaderTuple tuple) { 23 | InputStream in = null; 24 | try { 25 | NvHTTP http = new NvHTTP(ServerHelper.getCurrentAddressFromComputer(tuple.computer), 26 | tuple.computer.httpsPort, uniqueId, tuple.computer.serverCert, 27 | PlatformBinding.getCryptoProvider(context)); 28 | in = http.getBoxArt(tuple.app); 29 | } catch (IOException ignored) {} 30 | 31 | if (in != null) { 32 | LimeLog.info("Network asset load complete: " + tuple); 33 | } 34 | else { 35 | LimeLog.info("Network asset load failed: " + tuple); 36 | } 37 | 38 | return in; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/grid/assets/ScaledBitmap.java: -------------------------------------------------------------------------------- 1 | package com.limelight.grid.assets; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | public class ScaledBitmap { 6 | public int originalWidth; 7 | public int originalHeight; 8 | 9 | public Bitmap bitmap; 10 | 11 | public ScaledBitmap() {} 12 | 13 | public ScaledBitmap(int originalWidth, int originalHeight, Bitmap bitmap) { 14 | this.originalWidth = originalWidth; 15 | this.originalHeight = originalHeight; 16 | this.bitmap = bitmap; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/ConnectionContext.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream; 2 | 3 | import com.limelight.nvstream.http.ComputerDetails; 4 | 5 | import java.security.cert.X509Certificate; 6 | 7 | import javax.crypto.SecretKey; 8 | 9 | public class ConnectionContext { 10 | public ComputerDetails.AddressTuple serverAddress; 11 | public int httpsPort; 12 | public boolean isNvidiaServerSoftware; 13 | public X509Certificate serverCert; 14 | public StreamConfiguration streamConfig; 15 | public NvConnectionListener connListener; 16 | public SecretKey riKey; 17 | public int riKeyId; 18 | 19 | // This is the version quad from the appversion tag of /serverinfo 20 | public String serverAppVersion; 21 | public String serverGfeVersion; 22 | public int serverCodecModeSupport; 23 | 24 | // This is the sessionUrl0 tag from /resume and /launch 25 | public String rtspSessionUrl; 26 | 27 | public int negotiatedWidth, negotiatedHeight; 28 | public boolean negotiatedHdr; 29 | 30 | public int negotiatedRemoteStreaming; 31 | public int negotiatedPacketSize; 32 | 33 | public int videoCapabilities; 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/NvConnectionListener.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream; 2 | 3 | public interface NvConnectionListener { 4 | void stageStarting(String stage); 5 | void stageComplete(String stage); 6 | void stageFailed(String stage, int portFlags, int errorCode); 7 | 8 | void connectionStarted(); 9 | void connectionTerminated(int errorCode); 10 | void connectionStatusUpdate(int connectionStatus); 11 | 12 | void displayMessage(String message); 13 | void displayTransientMessage(String message); 14 | 15 | void rumble(short controllerNumber, short lowFreqMotor, short highFreqMotor); 16 | void rumbleTriggers(short controllerNumber, short leftTrigger, short rightTrigger); 17 | 18 | void setHdrMode(boolean enabled, byte[] hdrMetadata); 19 | 20 | void setMotionEventState(short controllerNumber, byte motionType, short reportRateHz); 21 | 22 | void setControllerLED(short controllerNumber, byte r, byte g, byte b); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/av/ByteBufferDescriptor.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.av; 2 | 3 | public class ByteBufferDescriptor { 4 | public byte[] data; 5 | public int offset; 6 | public int length; 7 | 8 | public ByteBufferDescriptor nextDescriptor; 9 | 10 | public ByteBufferDescriptor(byte[] data, int offset, int length) 11 | { 12 | this.data = data; 13 | this.offset = offset; 14 | this.length = length; 15 | } 16 | 17 | public ByteBufferDescriptor(ByteBufferDescriptor desc) 18 | { 19 | this.data = desc.data; 20 | this.offset = desc.offset; 21 | this.length = desc.length; 22 | } 23 | 24 | public void reinitialize(byte[] data, int offset, int length) 25 | { 26 | this.data = data; 27 | this.offset = offset; 28 | this.length = length; 29 | this.nextDescriptor = null; 30 | } 31 | 32 | public void print() 33 | { 34 | print(offset, length); 35 | } 36 | 37 | public void print(int length) 38 | { 39 | print(this.offset, length); 40 | } 41 | 42 | public void print(int offset, int length) 43 | { 44 | for (int i = offset; i < offset+length;) { 45 | if (i + 8 <= offset+length) { 46 | System.out.printf("%x: %02x %02x %02x %02x %02x %02x %02x %02x\n", i, 47 | data[i], data[i+1], data[i+2], data[i+3], data[i+4], data[i+5], data[i+6], data[i+7]); 48 | i += 8; 49 | } 50 | else { 51 | System.out.printf("%x: %02x \n", i, data[i]); 52 | i++; 53 | } 54 | } 55 | System.out.println(); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/av/audio/AudioRenderer.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.av.audio; 2 | 3 | import com.limelight.nvstream.jni.MoonBridge; 4 | 5 | public interface AudioRenderer { 6 | int setup(MoonBridge.AudioConfiguration audioConfiguration, int sampleRate, int samplesPerFrame); 7 | 8 | void start(); 9 | 10 | void stop(); 11 | 12 | void playDecodedAudio(short[] audioData); 13 | 14 | void cleanup(); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/av/video/VideoDecoderRenderer.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.av.video; 2 | 3 | public abstract class VideoDecoderRenderer { 4 | public abstract int setup(int format, int width, int height, int redrawRate); 5 | 6 | public abstract void start(); 7 | 8 | public abstract void stop(); 9 | 10 | // This is called once for each frame-start NALU. This means it will be called several times 11 | // for an IDR frame which contains several parameter sets and the I-frame data. 12 | public abstract int submitDecodeUnit(byte[] decodeUnitData, int decodeUnitLength, int decodeUnitType, 13 | int frameNumber, int frameType, char frameHostProcessingLatency, 14 | long receiveTimeMs, long enqueueTimeMs); 15 | 16 | public abstract void cleanup(); 17 | 18 | public abstract int getCapabilities(); 19 | 20 | public abstract void setHdrMode(boolean enabled, byte[] hdrMetadata); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/http/HostHttpResponseException.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.http; 2 | 3 | import java.io.IOException; 4 | 5 | public class HostHttpResponseException extends IOException { 6 | private static final long serialVersionUID = 1543508830807804222L; 7 | 8 | private int errorCode; 9 | private String errorMsg; 10 | 11 | public HostHttpResponseException(int errorCode, String errorMsg) { 12 | this.errorCode = errorCode; 13 | this.errorMsg = errorMsg; 14 | } 15 | 16 | public int getErrorCode() { 17 | return errorCode; 18 | } 19 | 20 | public String getErrorMessage() { 21 | return errorMsg; 22 | } 23 | 24 | @Override 25 | public String getMessage() { 26 | return "Host PC returned error: "+errorMsg+" (Error code: "+errorCode+")"; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/http/LimelightCryptoProvider.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.http; 2 | 3 | import java.security.PrivateKey; 4 | import java.security.cert.X509Certificate; 5 | 6 | public interface LimelightCryptoProvider { 7 | X509Certificate getClientCertificate(); 8 | PrivateKey getClientPrivateKey(); 9 | byte[] getPemEncodedClientCertificate(); 10 | String encodeBase64String(byte[] data); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/http/NvApp.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.http; 2 | 3 | import com.limelight.LimeLog; 4 | 5 | public class NvApp { 6 | private String appName = ""; 7 | private int appId; 8 | private boolean initialized; 9 | private boolean hdrSupported; 10 | 11 | public NvApp() {} 12 | 13 | public NvApp(String appName) { 14 | this.appName = appName; 15 | } 16 | 17 | public NvApp(String appName, int appId, boolean hdrSupported) { 18 | this.appName = appName; 19 | this.appId = appId; 20 | this.hdrSupported = hdrSupported; 21 | this.initialized = true; 22 | } 23 | 24 | public void setAppName(String appName) { 25 | this.appName = appName; 26 | } 27 | 28 | public void setAppId(String appId) { 29 | try { 30 | this.appId = Integer.parseInt(appId); 31 | this.initialized = true; 32 | } catch (NumberFormatException e) { 33 | LimeLog.warning("Malformed app ID: "+appId); 34 | } 35 | } 36 | 37 | public void setAppId(int appId) { 38 | this.appId = appId; 39 | this.initialized = true; 40 | } 41 | 42 | public void setHdrSupported(boolean hdrSupported) { 43 | this.hdrSupported = hdrSupported; 44 | } 45 | 46 | public String getAppName() { 47 | return this.appName; 48 | } 49 | 50 | public int getAppId() { 51 | return this.appId; 52 | } 53 | 54 | public boolean isHdrSupported() { 55 | return this.hdrSupported; 56 | } 57 | 58 | public boolean isInitialized() { 59 | return this.initialized; 60 | } 61 | 62 | @Override 63 | public String toString() { 64 | StringBuilder str = new StringBuilder(); 65 | str.append("Name: ").append(appName).append("\n"); 66 | str.append("HDR Supported: ").append(hdrSupported ? "Yes" : "Unknown").append("\n"); 67 | str.append("ID: ").append(appId).append("\n"); 68 | return str.toString(); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/input/ControllerPacket.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.input; 2 | 3 | public class ControllerPacket { 4 | public static final int A_FLAG = 0x1000; 5 | public static final int B_FLAG = 0x2000; 6 | public static final int X_FLAG = 0x4000; 7 | public static final int Y_FLAG = 0x8000; 8 | public static final int UP_FLAG = 0x0001; 9 | public static final int DOWN_FLAG = 0x0002; 10 | public static final int LEFT_FLAG = 0x0004; 11 | public static final int RIGHT_FLAG = 0x0008; 12 | public static final int LB_FLAG = 0x0100; 13 | public static final int RB_FLAG = 0x0200; 14 | public static final int PLAY_FLAG = 0x0010; 15 | public static final int BACK_FLAG = 0x0020; 16 | public static final int LS_CLK_FLAG = 0x0040; 17 | public static final int RS_CLK_FLAG = 0x0080; 18 | public static final int SPECIAL_BUTTON_FLAG = 0x0400; 19 | 20 | // Extended buttons (Sunshine only) 21 | public static final int PADDLE1_FLAG = 0x010000; 22 | public static final int PADDLE2_FLAG = 0x020000; 23 | public static final int PADDLE3_FLAG = 0x040000; 24 | public static final int PADDLE4_FLAG = 0x080000; 25 | public static final int TOUCHPAD_FLAG = 0x100000; // Touchpad buttons on Sony controllers 26 | public static final int MISC_FLAG = 0x200000; // Share/Mic/Capture/Mute buttons on various controllers 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/input/KeyboardPacket.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.input; 2 | 3 | public class KeyboardPacket { 4 | public static final byte KEY_DOWN = 0x03; 5 | public static final byte KEY_UP = 0x04; 6 | 7 | public static final byte MODIFIER_SHIFT = 0x01; 8 | public static final byte MODIFIER_CTRL = 0x02; 9 | public static final byte MODIFIER_ALT = 0x04; 10 | public static final byte MODIFIER_META = 0x08; 11 | } -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/input/MouseButtonPacket.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.input; 2 | 3 | public class MouseButtonPacket { 4 | public static final byte PRESS_EVENT = 0x07; 5 | public static final byte RELEASE_EVENT = 0x08; 6 | 7 | public static final byte BUTTON_LEFT = 0x01; 8 | public static final byte BUTTON_MIDDLE = 0x02; 9 | public static final byte BUTTON_RIGHT = 0x03; 10 | public static final byte BUTTON_X1 = 0x04; 11 | public static final byte BUTTON_X2 = 0x05; 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/mdns/MdnsComputer.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.mdns; 2 | 3 | import java.net.Inet6Address; 4 | import java.net.InetAddress; 5 | 6 | public class MdnsComputer { 7 | private InetAddress localAddr; 8 | private Inet6Address v6Addr; 9 | private int port; 10 | private String name; 11 | 12 | public MdnsComputer(String name, InetAddress localAddress, Inet6Address v6Addr, int port) { 13 | this.name = name; 14 | this.localAddr = localAddress; 15 | this.v6Addr = v6Addr; 16 | this.port = port; 17 | } 18 | 19 | public String getName() { 20 | return name; 21 | } 22 | 23 | public InetAddress getLocalAddress() { 24 | return localAddr; 25 | } 26 | 27 | public Inet6Address getIpv6Address() { 28 | return v6Addr; 29 | } 30 | 31 | public int getPort() { 32 | return port; 33 | } 34 | 35 | @Override 36 | public int hashCode() { 37 | return name.hashCode(); 38 | } 39 | 40 | @Override 41 | public boolean equals(Object o) { 42 | if (o instanceof MdnsComputer) { 43 | MdnsComputer other = (MdnsComputer)o; 44 | 45 | if (!other.name.equals(name) || other.port != port) { 46 | return false; 47 | } 48 | 49 | if ((other.localAddr != null && localAddr == null) || 50 | (other.localAddr == null && localAddr != null) || 51 | (other.localAddr != null && !other.localAddr.equals(localAddr))) { 52 | return false; 53 | } 54 | 55 | if ((other.v6Addr != null && v6Addr == null) || 56 | (other.v6Addr == null && v6Addr != null) || 57 | (other.v6Addr != null && !other.v6Addr.equals(v6Addr))) { 58 | return false; 59 | } 60 | 61 | return true; 62 | } 63 | 64 | return false; 65 | } 66 | 67 | @Override 68 | public String toString() { 69 | return "["+name+" - "+localAddr+" - "+v6Addr+"]"; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/nvstream/mdns/MdnsDiscoveryListener.java: -------------------------------------------------------------------------------- 1 | package com.limelight.nvstream.mdns; 2 | 3 | public interface MdnsDiscoveryListener { 4 | void notifyComputerAdded(MdnsComputer computer); 5 | void notifyDiscoveryFailure(Exception e); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/preferences/ConfirmDeleteOscPreference.java: -------------------------------------------------------------------------------- 1 | package com.limelight.preferences; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.Context; 5 | import android.content.DialogInterface; 6 | import android.os.Build; 7 | import android.preference.DialogPreference; 8 | import android.util.AttributeSet; 9 | import android.widget.Toast; 10 | 11 | import com.limelight.R; 12 | 13 | import static com.limelight.binding.input.virtual_controller.VirtualControllerConfigurationLoader.OSC_PREFERENCE; 14 | 15 | public class ConfirmDeleteOscPreference extends DialogPreference { 16 | public ConfirmDeleteOscPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 17 | super(context, attrs, defStyleAttr, defStyleRes); 18 | } 19 | 20 | public ConfirmDeleteOscPreference(Context context, AttributeSet attrs, int defStyleAttr) { 21 | super(context, attrs, defStyleAttr); 22 | } 23 | 24 | public ConfirmDeleteOscPreference(Context context, AttributeSet attrs) { 25 | super(context, attrs); 26 | } 27 | 28 | public ConfirmDeleteOscPreference(Context context) { 29 | super(context); 30 | } 31 | 32 | public void onClick(DialogInterface dialog, int which) { 33 | if (which == DialogInterface.BUTTON_POSITIVE) { 34 | getContext().getSharedPreferences(OSC_PREFERENCE, Context.MODE_PRIVATE).edit().clear().apply(); 35 | Toast.makeText(getContext(), R.string.toast_reset_osc_success, Toast.LENGTH_SHORT).show(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/preferences/GlPreferences.java: -------------------------------------------------------------------------------- 1 | package com.limelight.preferences; 2 | 3 | 4 | import android.content.Context; 5 | import android.content.SharedPreferences; 6 | 7 | public class GlPreferences { 8 | private static final String PREF_NAME = "GlPreferences"; 9 | 10 | private static final String FINGERPRINT_PREF_STRING = "Fingerprint"; 11 | private static final String GL_RENDERER_PREF_STRING = "Renderer"; 12 | 13 | private SharedPreferences prefs; 14 | public String glRenderer; 15 | public String savedFingerprint; 16 | 17 | private GlPreferences(SharedPreferences prefs) { 18 | this.prefs = prefs; 19 | } 20 | 21 | public static GlPreferences readPreferences(Context context) { 22 | SharedPreferences prefs = context.getSharedPreferences(PREF_NAME, 0); 23 | GlPreferences glPrefs = new GlPreferences(prefs); 24 | 25 | glPrefs.glRenderer = prefs.getString(GL_RENDERER_PREF_STRING, ""); 26 | glPrefs.savedFingerprint = prefs.getString(FINGERPRINT_PREF_STRING, ""); 27 | 28 | return glPrefs; 29 | } 30 | 31 | public boolean writePreferences() { 32 | return prefs.edit() 33 | .putString(GL_RENDERER_PREF_STRING, glRenderer) 34 | .putString(FINGERPRINT_PREF_STRING, savedFingerprint) 35 | .commit(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/preferences/LanguagePreference.java: -------------------------------------------------------------------------------- 1 | package com.limelight.preferences; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.ActivityNotFoundException; 5 | import android.content.Context; 6 | import android.content.Intent; 7 | import android.net.Uri; 8 | import android.os.Build; 9 | import android.preference.ListPreference; 10 | import android.provider.Settings; 11 | import android.util.AttributeSet; 12 | 13 | public class LanguagePreference extends ListPreference { 14 | public LanguagePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 15 | super(context, attrs, defStyleAttr, defStyleRes); 16 | } 17 | 18 | public LanguagePreference(Context context, AttributeSet attrs, int defStyleAttr) { 19 | super(context, attrs, defStyleAttr); 20 | } 21 | 22 | public LanguagePreference(Context context, AttributeSet attrs) { 23 | super(context, attrs); 24 | } 25 | 26 | public LanguagePreference(Context context) { 27 | super(context); 28 | } 29 | 30 | @Override 31 | protected void onClick() { 32 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { 33 | try { 34 | // Launch the Android native app locale settings page 35 | Intent intent = new Intent(Settings.ACTION_APP_LOCALE_SETTINGS); 36 | intent.addCategory(Intent.CATEGORY_DEFAULT); 37 | intent.setData(Uri.parse("package:" + getContext().getPackageName())); 38 | getContext().startActivity(intent, null); 39 | return; 40 | } catch (ActivityNotFoundException e) { 41 | // App locale settings should be present on all Android 13 devices, 42 | // but if not, we'll launch the old language chooser. 43 | } 44 | } 45 | 46 | // If we don't have native app locale settings, launch the normal dialog 47 | super.onClick(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/preferences/SmallIconCheckboxPreference.java: -------------------------------------------------------------------------------- 1 | package com.limelight.preferences; 2 | 3 | import android.content.Context; 4 | import android.content.res.TypedArray; 5 | import android.preference.CheckBoxPreference; 6 | import android.util.AttributeSet; 7 | 8 | public class SmallIconCheckboxPreference extends CheckBoxPreference { 9 | public SmallIconCheckboxPreference(Context context, AttributeSet attrs, int defStyleAttr) { 10 | super(context, attrs, defStyleAttr); 11 | } 12 | 13 | public SmallIconCheckboxPreference(Context context, AttributeSet attrs) { 14 | super(context, attrs); 15 | } 16 | 17 | @Override 18 | protected Object onGetDefaultValue(TypedArray a, int index) { 19 | return PreferenceConfiguration.getDefaultSmallMode(getContext()); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/preferences/WebLauncherPreference.java: -------------------------------------------------------------------------------- 1 | package com.limelight.preferences; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.Context; 5 | import android.os.Build; 6 | import android.preference.Preference; 7 | import android.util.AttributeSet; 8 | 9 | import com.limelight.utils.HelpLauncher; 10 | 11 | public class WebLauncherPreference extends Preference { 12 | private String url; 13 | 14 | public WebLauncherPreference(Context context, AttributeSet attrs, int defStyleAttr) { 15 | super(context, attrs, defStyleAttr); 16 | initialize(attrs); 17 | } 18 | 19 | public WebLauncherPreference(Context context, AttributeSet attrs) { 20 | super(context, attrs); 21 | initialize(attrs); 22 | } 23 | 24 | public WebLauncherPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 25 | super(context, attrs, defStyleAttr, defStyleRes); 26 | initialize(attrs); 27 | } 28 | 29 | private void initialize(AttributeSet attrs) { 30 | if (attrs == null) { 31 | throw new IllegalStateException("WebLauncherPreference must have attributes!"); 32 | } 33 | 34 | url = attrs.getAttributeValue(null, "url"); 35 | if (url == null) { 36 | throw new IllegalStateException("WebLauncherPreference must have 'url' attribute!"); 37 | } 38 | } 39 | 40 | @Override 41 | public void onClick() { 42 | HelpLauncher.launchUrl(getContext(), url); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/ui/AdapterFragment.java: -------------------------------------------------------------------------------- 1 | package com.limelight.ui; 2 | 3 | 4 | import android.app.Activity; 5 | import android.app.Fragment; 6 | import android.os.Bundle; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.AbsListView; 11 | 12 | import com.limelight.R; 13 | 14 | public class AdapterFragment extends Fragment { 15 | private AdapterFragmentCallbacks callbacks; 16 | 17 | @Override 18 | public void onAttach(Activity activity) { 19 | super.onAttach(activity); 20 | 21 | callbacks = (AdapterFragmentCallbacks) activity; 22 | } 23 | 24 | @Override 25 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 26 | Bundle savedInstanceState) { 27 | return inflater.inflate(callbacks.getAdapterFragmentLayoutId(), container, false); 28 | } 29 | 30 | @Override 31 | public void onActivityCreated(Bundle savedInstanceState) { 32 | super.onActivityCreated(savedInstanceState); 33 | callbacks.receiveAbsListView(getView().findViewById(R.id.fragmentView)); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/ui/AdapterFragmentCallbacks.java: -------------------------------------------------------------------------------- 1 | package com.limelight.ui; 2 | 3 | import android.widget.AbsListView; 4 | 5 | public interface AdapterFragmentCallbacks { 6 | int getAdapterFragmentLayoutId(); 7 | void receiveAbsListView(AbsListView gridView); 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/ui/GameGestures.java: -------------------------------------------------------------------------------- 1 | package com.limelight.ui; 2 | 3 | public interface GameGestures { 4 | void toggleKeyboard(); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/utils/HelpLauncher.java: -------------------------------------------------------------------------------- 1 | package com.limelight.utils; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.content.pm.PackageManager; 6 | import android.net.Uri; 7 | 8 | import com.limelight.HelpActivity; 9 | 10 | public class HelpLauncher { 11 | public static void launchUrl(Context context, String url) { 12 | // Try to launch the default browser 13 | try { 14 | Intent i = new Intent(Intent.ACTION_VIEW); 15 | i.setData(Uri.parse(url)); 16 | 17 | // Several Android TV devices will lie and say they do have a browser even though the OS 18 | // just shows an error dialog if we try to use it. We used to try to be clever and check 19 | // the package name of the resolved intent, but it's not worth it anymore with Android 11's 20 | // package visibility changes. We'll just always use the WebView on Android TV. 21 | if (!context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK)) { 22 | context.startActivity(i); 23 | return; 24 | } 25 | } catch (Exception e) { 26 | // This is only supposed to throw ActivityNotFoundException but 27 | // it can (at least) also throw SecurityException if a user's default 28 | // browser is not exported. We'll catch everything to workaround this. 29 | 30 | // Fall through 31 | } 32 | 33 | // This platform has no browser (possibly a leanback device) 34 | // We'll launch our WebView activity 35 | Intent i = new Intent(context, HelpActivity.class); 36 | i.setData(Uri.parse(url)); 37 | context.startActivity(i); 38 | } 39 | 40 | public static void launchSetupGuide(Context context) { 41 | launchUrl(context, "https://github.com/moonlight-stream/moonlight-docs/wiki/Setup-Guide"); 42 | } 43 | 44 | public static void launchTroubleshooting(Context context) { 45 | launchUrl(context, "https://github.com/moonlight-stream/moonlight-docs/wiki/Troubleshooting"); 46 | } 47 | 48 | public static void launchGameStreamEolFaq(Context context) { 49 | launchUrl(context, "https://github.com/moonlight-stream/moonlight-docs/wiki/NVIDIA-GameStream-End-Of-Service-Announcement-FAQ"); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/utils/NetHelper.java: -------------------------------------------------------------------------------- 1 | package com.limelight.utils; 2 | 3 | import android.content.Context; 4 | import android.net.ConnectivityManager; 5 | import android.net.Network; 6 | import android.net.NetworkCapabilities; 7 | import android.net.NetworkInfo; 8 | import android.os.Build; 9 | 10 | public class NetHelper { 11 | public static boolean isActiveNetworkVpn(Context context) { 12 | ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 13 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 14 | Network activeNetwork = connMgr.getActiveNetwork(); 15 | if (activeNetwork != null) { 16 | NetworkCapabilities netCaps = connMgr.getNetworkCapabilities(activeNetwork); 17 | if (netCaps != null) { 18 | return netCaps.hasTransport(NetworkCapabilities.TRANSPORT_VPN) || 19 | !netCaps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN); 20 | } 21 | } 22 | } 23 | else { 24 | NetworkInfo activeNetworkInfo = connMgr.getActiveNetworkInfo(); 25 | if (activeNetworkInfo != null) { 26 | return activeNetworkInfo.getType() == ConnectivityManager.TYPE_VPN; 27 | } 28 | } 29 | 30 | return false; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/limelight/utils/Vector2d.java: -------------------------------------------------------------------------------- 1 | package com.limelight.utils; 2 | 3 | public class Vector2d { 4 | private float x; 5 | private float y; 6 | private double magnitude; 7 | 8 | public static final Vector2d ZERO = new Vector2d(); 9 | 10 | public Vector2d() { 11 | initialize(0, 0); 12 | } 13 | 14 | public void initialize(float x, float y) { 15 | this.x = x; 16 | this.y = y; 17 | this.magnitude = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); 18 | } 19 | 20 | public double getMagnitude() { 21 | return magnitude; 22 | } 23 | 24 | public void getNormalized(Vector2d vector) { 25 | vector.initialize((float)(x / magnitude), (float)(y / magnitude)); 26 | } 27 | 28 | public void scalarMultiply(double factor) { 29 | initialize((float)(x * factor), (float)(y * factor)); 30 | } 31 | 32 | public void setX(float x) { 33 | initialize(x, this.y); 34 | } 35 | 36 | public void setY(float y) { 37 | initialize(this.x, y); 38 | } 39 | 40 | public float getX() { 41 | return x; 42 | } 43 | 44 | public float getY() { 45 | return y; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/jni/Android.mk: -------------------------------------------------------------------------------- 1 | include $(call all-subdir-makefiles) 2 | -------------------------------------------------------------------------------- /app/src/main/jni/Application.mk: -------------------------------------------------------------------------------- 1 | # Application.mk for Moonlight 2 | 3 | # Our minimum version is Android 5.0 4 | APP_PLATFORM := android-21 5 | 6 | # We support 16KB pages 7 | APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true 8 | -------------------------------------------------------------------------------- /app/src/main/jni/evdev_reader/Android.mk: -------------------------------------------------------------------------------- 1 | # Android.mk for Limelight's Evdev Reader 2 | MY_LOCAL_PATH := $(call my-dir) 3 | 4 | include $(call all-subdir-makefiles) 5 | 6 | LOCAL_PATH := $(MY_LOCAL_PATH) 7 | 8 | # Only build evdev_reader for the rooted APK flavor 9 | ifeq (root,$(PRODUCT_FLAVOR)) 10 | include $(CLEAR_VARS) 11 | LOCAL_MODULE := evdev_reader 12 | LOCAL_SRC_FILES := evdev_reader.c 13 | LOCAL_LDLIBS := -llog 14 | 15 | 16 | # This next portion of the makefile is mostly copied from build-executable.mk but 17 | # creates a binary with the libXXX.so form so the APK will install and drop 18 | # the binary correctly. 19 | 20 | LOCAL_BUILD_SCRIPT := BUILD_EXECUTABLE 21 | LOCAL_MAKEFILE := $(local-makefile) 22 | 23 | $(call check-defined-LOCAL_MODULE,$(LOCAL_BUILD_SCRIPT)) 24 | $(call check-LOCAL_MODULE,$(LOCAL_MAKEFILE)) 25 | $(call check-LOCAL_MODULE_FILENAME) 26 | 27 | # we are building target objects 28 | my := TARGET_ 29 | 30 | $(call handle-module-filename,lib,$(TARGET_SONAME_EXTENSION)) 31 | $(call handle-module-built) 32 | 33 | LOCAL_MODULE_CLASS := EXECUTABLE 34 | include $(BUILD_SYSTEM)/build-module.mk 35 | endif 36 | 37 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/Build.txt: -------------------------------------------------------------------------------- 1 | Static libraries were built from https://github.com/cgutman/moonlight-mobile-deps using AppVeyor CI -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/build-openssl.sh: -------------------------------------------------------------------------------- 1 | PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH 2 | OUTPUT_DIR=~/openssl 3 | 4 | BASE_ARGS="no-shared no-ssl3 no-stdio no-engine no-hw" 5 | 6 | set -e 7 | 8 | ./Configure android-arm $BASE_ARGS -D__ANDROID_API__=16 9 | make clean 10 | make build_libs -j`nproc` 11 | cp lib*.a $OUTPUT_DIR/armeabi-v7a/ 12 | 13 | ./Configure android-arm64 $BASE_ARGS -D__ANDROID_API__=21 14 | make clean 15 | make build_libs -j`nproc` 16 | cp lib*.a $OUTPUT_DIR/arm64-v8a/ 17 | 18 | ./Configure android-x86 $BASE_ARGS -D__ANDROID_API__=16 19 | make clean 20 | make build_libs -j`nproc` 21 | cp lib*.a $OUTPUT_DIR/x86/ 22 | 23 | ./Configure android-x86_64 $BASE_ARGS -D__ANDROID_API__=21 24 | make clean 25 | make build_libs -j`nproc` 26 | cp lib*.a $OUTPUT_DIR/x86_64/ 27 | cp -R include/ $OUTPUT_DIR/include -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/libopus/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH:= $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | LOCAL_MODULE:= libopus 5 | LOCAL_SRC_FILES:= $(TARGET_ARCH_ABI)/libopus.a 6 | LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 7 | include $(PREBUILT_STATIC_LIBRARY) 8 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/libopus/arm64-v8a/libopus.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/libopus/arm64-v8a/libopus.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/libopus/armeabi-v7a/libopus.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/libopus/armeabi-v7a/libopus.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/libopus/x86/libopus.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/libopus/x86/libopus.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/libopus/x86_64/libopus.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/libopus/x86_64/libopus.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/minisdl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | typedef int SDL_bool; 4 | #define SDL_TRUE 1 5 | #define SDL_FALSE 0 6 | 7 | typedef unsigned short Uint16; 8 | 9 | SDL_bool SDL_IsJoystickXboxOneElite(Uint16 vendor_id, Uint16 product_id); 10 | SDL_bool SDL_IsJoystickXboxSeriesX(Uint16 vendor_id, Uint16 product_id); 11 | SDL_bool SDL_IsJoystickDualSenseEdge(Uint16 vendor_id, Uint16 product_id); -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH:= $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | LOCAL_MODULE:= libssl 5 | LOCAL_SRC_FILES:= $(TARGET_ARCH_ABI)/libssl.a 6 | LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 7 | include $(PREBUILT_STATIC_LIBRARY) 8 | 9 | include $(CLEAR_VARS) 10 | LOCAL_MODULE:= libcrypto 11 | LOCAL_SRC_FILES:= $(TARGET_ARCH_ABI)/libcrypto.a 12 | LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include 13 | include $(PREBUILT_STATIC_LIBRARY) 14 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/arm64-v8a/libcrypto.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/openssl/arm64-v8a/libcrypto.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/arm64-v8a/libssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/openssl/arm64-v8a/libssl.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/armeabi-v7a/libcrypto.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/openssl/armeabi-v7a/libcrypto.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/armeabi-v7a/libssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/openssl/armeabi-v7a/libssl.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/__DECC_INCLUDE_EPILOGUE.H: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | /* 11 | * This file is only used by HP C/C++ on VMS, and is included automatically 12 | * after each header file from this directory 13 | */ 14 | 15 | /* 16 | * The C++ compiler doesn't understand these pragmas, even though it 17 | * understands the corresponding command line qualifier. 18 | */ 19 | #ifndef __cplusplus 20 | /* restore state. Must correspond to the save in __decc_include_prologue.h */ 21 | # pragma names restore 22 | #endif 23 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/__DECC_INCLUDE_PROLOGUE.H: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | /* 11 | * This file is only used by HP C/C++ on VMS, and is included automatically 12 | * after each header file from this directory 13 | */ 14 | 15 | /* 16 | * The C++ compiler doesn't understand these pragmas, even though it 17 | * understands the corresponding command line qualifier. 18 | */ 19 | #ifndef __cplusplus 20 | /* save state */ 21 | # pragma names save 22 | /* have the compiler shorten symbols larger than 31 chars to 23 chars 23 | * followed by a 8 hex char CRC 24 | */ 25 | # pragma names as_is,shortened 26 | #endif 27 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/asn1_mac.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #error "This file is obsolete; please update your software." 11 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/async.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #include 11 | 12 | #ifndef HEADER_ASYNC_H 13 | # define HEADER_ASYNC_H 14 | 15 | #if defined(_WIN32) 16 | # if defined(BASETYPES) || defined(_WINDEF_H) 17 | /* application has to include to use this */ 18 | #define OSSL_ASYNC_FD HANDLE 19 | #define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE 20 | # endif 21 | #else 22 | #define OSSL_ASYNC_FD int 23 | #define OSSL_BAD_ASYNC_FD -1 24 | #endif 25 | # include 26 | 27 | 28 | # ifdef __cplusplus 29 | extern "C" { 30 | # endif 31 | 32 | typedef struct async_job_st ASYNC_JOB; 33 | typedef struct async_wait_ctx_st ASYNC_WAIT_CTX; 34 | 35 | #define ASYNC_ERR 0 36 | #define ASYNC_NO_JOBS 1 37 | #define ASYNC_PAUSE 2 38 | #define ASYNC_FINISH 3 39 | 40 | int ASYNC_init_thread(size_t max_size, size_t init_size); 41 | void ASYNC_cleanup_thread(void); 42 | 43 | #ifdef OSSL_ASYNC_FD 44 | ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); 45 | void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); 46 | int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, 47 | OSSL_ASYNC_FD fd, 48 | void *custom_data, 49 | void (*cleanup)(ASYNC_WAIT_CTX *, const void *, 50 | OSSL_ASYNC_FD, void *)); 51 | int ASYNC_WAIT_CTX_get_fd(ASYNC_WAIT_CTX *ctx, const void *key, 52 | OSSL_ASYNC_FD *fd, void **custom_data); 53 | int ASYNC_WAIT_CTX_get_all_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *fd, 54 | size_t *numfds); 55 | int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, 56 | size_t *numaddfds, OSSL_ASYNC_FD *delfd, 57 | size_t *numdelfds); 58 | int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); 59 | #endif 60 | 61 | int ASYNC_is_capable(void); 62 | 63 | int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, 64 | int (*func)(void *), void *args, size_t size); 65 | int ASYNC_pause_job(void); 66 | 67 | ASYNC_JOB *ASYNC_get_current_job(void); 68 | ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); 69 | void ASYNC_block_pause(void); 70 | void ASYNC_unblock_pause(void); 71 | 72 | 73 | # ifdef __cplusplus 74 | } 75 | # endif 76 | #endif 77 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/asyncerr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the OpenSSL license (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef HEADER_ASYNCERR_H 12 | # define HEADER_ASYNCERR_H 13 | 14 | # ifndef HEADER_SYMHACKS_H 15 | # include 16 | # endif 17 | 18 | # ifdef __cplusplus 19 | extern "C" 20 | # endif 21 | int ERR_load_ASYNC_strings(void); 22 | 23 | /* 24 | * ASYNC function codes. 25 | */ 26 | # define ASYNC_F_ASYNC_CTX_NEW 100 27 | # define ASYNC_F_ASYNC_INIT_THREAD 101 28 | # define ASYNC_F_ASYNC_JOB_NEW 102 29 | # define ASYNC_F_ASYNC_PAUSE_JOB 103 30 | # define ASYNC_F_ASYNC_START_FUNC 104 31 | # define ASYNC_F_ASYNC_START_JOB 105 32 | # define ASYNC_F_ASYNC_WAIT_CTX_SET_WAIT_FD 106 33 | 34 | /* 35 | * ASYNC reason codes. 36 | */ 37 | # define ASYNC_R_FAILED_TO_SET_POOL 101 38 | # define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 39 | # define ASYNC_R_INIT_FAILED 105 40 | # define ASYNC_R_INVALID_POOL_SIZE 103 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/blowfish.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_BLOWFISH_H 11 | # define HEADER_BLOWFISH_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_BF 16 | # include 17 | # ifdef __cplusplus 18 | extern "C" { 19 | # endif 20 | 21 | # define BF_ENCRYPT 1 22 | # define BF_DECRYPT 0 23 | 24 | /*- 25 | * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 26 | * ! BF_LONG has to be at least 32 bits wide. ! 27 | * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 28 | */ 29 | # define BF_LONG unsigned int 30 | 31 | # define BF_ROUNDS 16 32 | # define BF_BLOCK 8 33 | 34 | typedef struct bf_key_st { 35 | BF_LONG P[BF_ROUNDS + 2]; 36 | BF_LONG S[4 * 256]; 37 | } BF_KEY; 38 | 39 | void BF_set_key(BF_KEY *key, int len, const unsigned char *data); 40 | 41 | void BF_encrypt(BF_LONG *data, const BF_KEY *key); 42 | void BF_decrypt(BF_LONG *data, const BF_KEY *key); 43 | 44 | void BF_ecb_encrypt(const unsigned char *in, unsigned char *out, 45 | const BF_KEY *key, int enc); 46 | void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, 47 | const BF_KEY *schedule, unsigned char *ivec, int enc); 48 | void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out, 49 | long length, const BF_KEY *schedule, 50 | unsigned char *ivec, int *num, int enc); 51 | void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out, 52 | long length, const BF_KEY *schedule, 53 | unsigned char *ivec, int *num); 54 | const char *BF_options(void); 55 | 56 | # ifdef __cplusplus 57 | } 58 | # endif 59 | # endif 60 | 61 | #endif 62 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/buffer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_BUFFER_H 11 | # define HEADER_BUFFER_H 12 | 13 | # include 14 | # ifndef HEADER_CRYPTO_H 15 | # include 16 | # endif 17 | # include 18 | 19 | 20 | #ifdef __cplusplus 21 | extern "C" { 22 | #endif 23 | 24 | # include 25 | # include 26 | 27 | /* 28 | * These names are outdated as of OpenSSL 1.1; a future release 29 | * will move them to be deprecated. 30 | */ 31 | # define BUF_strdup(s) OPENSSL_strdup(s) 32 | # define BUF_strndup(s, size) OPENSSL_strndup(s, size) 33 | # define BUF_memdup(data, size) OPENSSL_memdup(data, size) 34 | # define BUF_strlcpy(dst, src, size) OPENSSL_strlcpy(dst, src, size) 35 | # define BUF_strlcat(dst, src, size) OPENSSL_strlcat(dst, src, size) 36 | # define BUF_strnlen(str, maxlen) OPENSSL_strnlen(str, maxlen) 37 | 38 | struct buf_mem_st { 39 | size_t length; /* current number of bytes */ 40 | char *data; 41 | size_t max; /* size of buffer */ 42 | unsigned long flags; 43 | }; 44 | 45 | # define BUF_MEM_FLAG_SECURE 0x01 46 | 47 | BUF_MEM *BUF_MEM_new(void); 48 | BUF_MEM *BUF_MEM_new_ex(unsigned long flags); 49 | void BUF_MEM_free(BUF_MEM *a); 50 | size_t BUF_MEM_grow(BUF_MEM *str, size_t len); 51 | size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); 52 | void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); 53 | 54 | 55 | # ifdef __cplusplus 56 | } 57 | # endif 58 | #endif 59 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/buffererr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the OpenSSL license (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef HEADER_BUFERR_H 12 | # define HEADER_BUFERR_H 13 | 14 | # ifndef HEADER_SYMHACKS_H 15 | # include 16 | # endif 17 | 18 | # ifdef __cplusplus 19 | extern "C" 20 | # endif 21 | int ERR_load_BUF_strings(void); 22 | 23 | /* 24 | * BUF function codes. 25 | */ 26 | # define BUF_F_BUF_MEM_GROW 100 27 | # define BUF_F_BUF_MEM_GROW_CLEAN 105 28 | # define BUF_F_BUF_MEM_NEW 101 29 | 30 | /* 31 | * BUF reason codes. 32 | */ 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/cast.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_CAST_H 11 | # define HEADER_CAST_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_CAST 16 | # ifdef __cplusplus 17 | extern "C" { 18 | # endif 19 | 20 | # define CAST_ENCRYPT 1 21 | # define CAST_DECRYPT 0 22 | 23 | # define CAST_LONG unsigned int 24 | 25 | # define CAST_BLOCK 8 26 | # define CAST_KEY_LENGTH 16 27 | 28 | typedef struct cast_key_st { 29 | CAST_LONG data[32]; 30 | int short_key; /* Use reduced rounds for short key */ 31 | } CAST_KEY; 32 | 33 | void CAST_set_key(CAST_KEY *key, int len, const unsigned char *data); 34 | void CAST_ecb_encrypt(const unsigned char *in, unsigned char *out, 35 | const CAST_KEY *key, int enc); 36 | void CAST_encrypt(CAST_LONG *data, const CAST_KEY *key); 37 | void CAST_decrypt(CAST_LONG *data, const CAST_KEY *key); 38 | void CAST_cbc_encrypt(const unsigned char *in, unsigned char *out, 39 | long length, const CAST_KEY *ks, unsigned char *iv, 40 | int enc); 41 | void CAST_cfb64_encrypt(const unsigned char *in, unsigned char *out, 42 | long length, const CAST_KEY *schedule, 43 | unsigned char *ivec, int *num, int enc); 44 | void CAST_ofb64_encrypt(const unsigned char *in, unsigned char *out, 45 | long length, const CAST_KEY *schedule, 46 | unsigned char *ivec, int *num); 47 | 48 | # ifdef __cplusplus 49 | } 50 | # endif 51 | # endif 52 | 53 | #endif 54 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/cmac.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_CMAC_H 11 | # define HEADER_CMAC_H 12 | 13 | # ifndef OPENSSL_NO_CMAC 14 | 15 | #ifdef __cplusplus 16 | extern "C" { 17 | #endif 18 | 19 | # include 20 | 21 | /* Opaque */ 22 | typedef struct CMAC_CTX_st CMAC_CTX; 23 | 24 | CMAC_CTX *CMAC_CTX_new(void); 25 | void CMAC_CTX_cleanup(CMAC_CTX *ctx); 26 | void CMAC_CTX_free(CMAC_CTX *ctx); 27 | EVP_CIPHER_CTX *CMAC_CTX_get0_cipher_ctx(CMAC_CTX *ctx); 28 | int CMAC_CTX_copy(CMAC_CTX *out, const CMAC_CTX *in); 29 | 30 | int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen, 31 | const EVP_CIPHER *cipher, ENGINE *impl); 32 | int CMAC_Update(CMAC_CTX *ctx, const void *data, size_t dlen); 33 | int CMAC_Final(CMAC_CTX *ctx, unsigned char *out, size_t *poutlen); 34 | int CMAC_resume(CMAC_CTX *ctx); 35 | 36 | #ifdef __cplusplus 37 | } 38 | #endif 39 | 40 | # endif 41 | #endif 42 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/comp.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_COMP_H 11 | # define HEADER_COMP_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_COMP 16 | # include 17 | # include 18 | # ifdef __cplusplus 19 | extern "C" { 20 | # endif 21 | 22 | 23 | 24 | COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); 25 | const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); 26 | int COMP_CTX_get_type(const COMP_CTX* comp); 27 | int COMP_get_type(const COMP_METHOD *meth); 28 | const char *COMP_get_name(const COMP_METHOD *meth); 29 | void COMP_CTX_free(COMP_CTX *ctx); 30 | 31 | int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, 32 | unsigned char *in, int ilen); 33 | int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, 34 | unsigned char *in, int ilen); 35 | 36 | COMP_METHOD *COMP_zlib(void); 37 | 38 | #if OPENSSL_API_COMPAT < 0x10100000L 39 | #define COMP_zlib_cleanup() while(0) continue 40 | #endif 41 | 42 | # ifdef HEADER_BIO_H 43 | # ifdef ZLIB 44 | const BIO_METHOD *BIO_f_zlib(void); 45 | # endif 46 | # endif 47 | 48 | 49 | # ifdef __cplusplus 50 | } 51 | # endif 52 | # endif 53 | #endif 54 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/comperr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the OpenSSL license (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef HEADER_COMPERR_H 12 | # define HEADER_COMPERR_H 13 | 14 | # ifndef HEADER_SYMHACKS_H 15 | # include 16 | # endif 17 | 18 | # include 19 | 20 | # ifndef OPENSSL_NO_COMP 21 | 22 | # ifdef __cplusplus 23 | extern "C" 24 | # endif 25 | int ERR_load_COMP_strings(void); 26 | 27 | /* 28 | * COMP function codes. 29 | */ 30 | # define COMP_F_BIO_ZLIB_FLUSH 99 31 | # define COMP_F_BIO_ZLIB_NEW 100 32 | # define COMP_F_BIO_ZLIB_READ 101 33 | # define COMP_F_BIO_ZLIB_WRITE 102 34 | # define COMP_F_COMP_CTX_NEW 103 35 | 36 | /* 37 | * COMP reason codes. 38 | */ 39 | # define COMP_R_ZLIB_DEFLATE_ERROR 99 40 | # define COMP_R_ZLIB_INFLATE_ERROR 100 41 | # define COMP_R_ZLIB_NOT_SUPPORTED 101 42 | 43 | # endif 44 | #endif 45 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/conf_api.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_CONF_API_H 11 | # define HEADER_CONF_API_H 12 | 13 | # include 14 | # include 15 | 16 | #ifdef __cplusplus 17 | extern "C" { 18 | #endif 19 | 20 | /* Up until OpenSSL 0.9.5a, this was new_section */ 21 | CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); 22 | /* Up until OpenSSL 0.9.5a, this was get_section */ 23 | CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); 24 | /* Up until OpenSSL 0.9.5a, this was CONF_get_section */ 25 | STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, 26 | const char *section); 27 | 28 | int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); 29 | char *_CONF_get_string(const CONF *conf, const char *section, 30 | const char *name); 31 | long _CONF_get_number(const CONF *conf, const char *section, 32 | const char *name); 33 | 34 | int _CONF_new_data(CONF *conf); 35 | void _CONF_free_data(CONF *conf); 36 | 37 | #ifdef __cplusplus 38 | } 39 | #endif 40 | #endif 41 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/cryptoerr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the OpenSSL license (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef HEADER_CRYPTOERR_H 12 | # define HEADER_CRYPTOERR_H 13 | 14 | # ifndef HEADER_SYMHACKS_H 15 | # include 16 | # endif 17 | 18 | # ifdef __cplusplus 19 | extern "C" 20 | # endif 21 | int ERR_load_CRYPTO_strings(void); 22 | 23 | /* 24 | * CRYPTO function codes. 25 | */ 26 | # define CRYPTO_F_CMAC_CTX_NEW 120 27 | # define CRYPTO_F_CRYPTO_DUP_EX_DATA 110 28 | # define CRYPTO_F_CRYPTO_FREE_EX_DATA 111 29 | # define CRYPTO_F_CRYPTO_GET_EX_NEW_INDEX 100 30 | # define CRYPTO_F_CRYPTO_MEMDUP 115 31 | # define CRYPTO_F_CRYPTO_NEW_EX_DATA 112 32 | # define CRYPTO_F_CRYPTO_OCB128_COPY_CTX 121 33 | # define CRYPTO_F_CRYPTO_OCB128_INIT 122 34 | # define CRYPTO_F_CRYPTO_SET_EX_DATA 102 35 | # define CRYPTO_F_FIPS_MODE_SET 109 36 | # define CRYPTO_F_GET_AND_LOCK 113 37 | # define CRYPTO_F_OPENSSL_ATEXIT 114 38 | # define CRYPTO_F_OPENSSL_BUF2HEXSTR 117 39 | # define CRYPTO_F_OPENSSL_FOPEN 119 40 | # define CRYPTO_F_OPENSSL_HEXSTR2BUF 118 41 | # define CRYPTO_F_OPENSSL_INIT_CRYPTO 116 42 | # define CRYPTO_F_OPENSSL_LH_NEW 126 43 | # define CRYPTO_F_OPENSSL_SK_DEEP_COPY 127 44 | # define CRYPTO_F_OPENSSL_SK_DUP 128 45 | # define CRYPTO_F_PKEY_HMAC_INIT 123 46 | # define CRYPTO_F_PKEY_POLY1305_INIT 124 47 | # define CRYPTO_F_PKEY_SIPHASH_INIT 125 48 | # define CRYPTO_F_SK_RESERVE 129 49 | 50 | /* 51 | * CRYPTO reason codes. 52 | */ 53 | # define CRYPTO_R_FIPS_MODE_NOT_SUPPORTED 101 54 | # define CRYPTO_R_ILLEGAL_HEX_DIGIT 102 55 | # define CRYPTO_R_ODD_NUMBER_OF_DIGITS 103 56 | 57 | #endif 58 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/dtls1.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_DTLS1_H 11 | # define HEADER_DTLS1_H 12 | 13 | #ifdef __cplusplus 14 | extern "C" { 15 | #endif 16 | 17 | # define DTLS1_VERSION 0xFEFF 18 | # define DTLS1_2_VERSION 0xFEFD 19 | # define DTLS_MIN_VERSION DTLS1_VERSION 20 | # define DTLS_MAX_VERSION DTLS1_2_VERSION 21 | # define DTLS1_VERSION_MAJOR 0xFE 22 | 23 | # define DTLS1_BAD_VER 0x0100 24 | 25 | /* Special value for method supporting multiple versions */ 26 | # define DTLS_ANY_VERSION 0x1FFFF 27 | 28 | /* lengths of messages */ 29 | /* 30 | * Actually the max cookie length in DTLS is 255. But we can't change this now 31 | * due to compatibility concerns. 32 | */ 33 | # define DTLS1_COOKIE_LENGTH 256 34 | 35 | # define DTLS1_RT_HEADER_LENGTH 13 36 | 37 | # define DTLS1_HM_HEADER_LENGTH 12 38 | 39 | # define DTLS1_HM_BAD_FRAGMENT -2 40 | # define DTLS1_HM_FRAGMENT_RETRY -3 41 | 42 | # define DTLS1_CCS_HEADER_LENGTH 1 43 | 44 | # define DTLS1_AL_HEADER_LENGTH 2 45 | 46 | /* Timeout multipliers */ 47 | # define DTLS1_TMO_READ_COUNT 2 48 | # define DTLS1_TMO_WRITE_COUNT 2 49 | 50 | # define DTLS1_TMO_ALERT_COUNT 12 51 | 52 | #ifdef __cplusplus 53 | } 54 | #endif 55 | #endif 56 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/ebcdic.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_EBCDIC_H 11 | # define HEADER_EBCDIC_H 12 | 13 | # include 14 | 15 | #ifdef __cplusplus 16 | extern "C" { 17 | #endif 18 | 19 | /* Avoid name clashes with other applications */ 20 | # define os_toascii _openssl_os_toascii 21 | # define os_toebcdic _openssl_os_toebcdic 22 | # define ebcdic2ascii _openssl_ebcdic2ascii 23 | # define ascii2ebcdic _openssl_ascii2ebcdic 24 | 25 | extern const unsigned char os_toascii[256]; 26 | extern const unsigned char os_toebcdic[256]; 27 | void *ebcdic2ascii(void *dest, const void *srce, size_t count); 28 | void *ascii2ebcdic(void *dest, const void *srce, size_t count); 29 | 30 | #ifdef __cplusplus 31 | } 32 | #endif 33 | #endif 34 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/ecdh.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #include 11 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/ecdsa.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #include 11 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/fipskey.h: -------------------------------------------------------------------------------- 1 | /* 2 | * WARNING: do not edit! 3 | * Generated by Makefile from include/openssl/fipskey.h.in 4 | * 5 | * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. 6 | * 7 | * Licensed under the Apache License 2.0 (the "License"). You may not use 8 | * this file except in compliance with the License. You can obtain a copy 9 | * in the file LICENSE in the source distribution or at 10 | * https://www.openssl.org/source/license.html 11 | */ 12 | 13 | #ifndef OPENSSL_FIPSKEY_H 14 | # define OPENSSL_FIPSKEY_H 15 | # pragma once 16 | 17 | # ifdef __cplusplus 18 | extern "C" { 19 | # endif 20 | 21 | /* 22 | * The FIPS validation HMAC key, usable as an array initializer. 23 | */ 24 | #define FIPS_KEY_ELEMENTS \ 25 | 0xf4, 0x55, 0x66, 0x50, 0xac, 0x31, 0xd3, 0x54, 0x61, 0x61, 0x0b, 0xac, 0x4e, 0xd8, 0x1b, 0x1a, 0x18, 0x1b, 0x2d, 0x8a, 0x43, 0xea, 0x28, 0x54, 0xcb, 0xae, 0x22, 0xca, 0x74, 0x56, 0x08, 0x13 26 | 27 | /* 28 | * The FIPS validation key, as a string. 29 | */ 30 | #define FIPS_KEY_STRING "f4556650ac31d35461610bac4ed81b1a181b2d8a43ea2854cbae22ca74560813" 31 | 32 | # ifdef __cplusplus 33 | } 34 | # endif 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/hmac.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_HMAC_H 11 | # define HEADER_HMAC_H 12 | 13 | # include 14 | 15 | # include 16 | 17 | # if OPENSSL_API_COMPAT < 0x10200000L 18 | # define HMAC_MAX_MD_CBLOCK 128 /* Deprecated */ 19 | # endif 20 | 21 | #ifdef __cplusplus 22 | extern "C" { 23 | #endif 24 | 25 | size_t HMAC_size(const HMAC_CTX *e); 26 | HMAC_CTX *HMAC_CTX_new(void); 27 | int HMAC_CTX_reset(HMAC_CTX *ctx); 28 | void HMAC_CTX_free(HMAC_CTX *ctx); 29 | 30 | DEPRECATEDIN_1_1_0(__owur int HMAC_Init(HMAC_CTX *ctx, const void *key, int len, 31 | const EVP_MD *md)) 32 | 33 | /*__owur*/ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len, 34 | const EVP_MD *md, ENGINE *impl); 35 | /*__owur*/ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, 36 | size_t len); 37 | /*__owur*/ int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, 38 | unsigned int *len); 39 | unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, 40 | const unsigned char *d, size_t n, unsigned char *md, 41 | unsigned int *md_len); 42 | __owur int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); 43 | 44 | void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); 45 | const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); 46 | 47 | #ifdef __cplusplus 48 | } 49 | #endif 50 | 51 | #endif 52 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/idea.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_IDEA_H 11 | # define HEADER_IDEA_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_IDEA 16 | # ifdef __cplusplus 17 | extern "C" { 18 | # endif 19 | 20 | typedef unsigned int IDEA_INT; 21 | 22 | # define IDEA_ENCRYPT 1 23 | # define IDEA_DECRYPT 0 24 | 25 | # define IDEA_BLOCK 8 26 | # define IDEA_KEY_LENGTH 16 27 | 28 | typedef struct idea_key_st { 29 | IDEA_INT data[9][6]; 30 | } IDEA_KEY_SCHEDULE; 31 | 32 | const char *IDEA_options(void); 33 | void IDEA_ecb_encrypt(const unsigned char *in, unsigned char *out, 34 | IDEA_KEY_SCHEDULE *ks); 35 | void IDEA_set_encrypt_key(const unsigned char *key, IDEA_KEY_SCHEDULE *ks); 36 | void IDEA_set_decrypt_key(IDEA_KEY_SCHEDULE *ek, IDEA_KEY_SCHEDULE *dk); 37 | void IDEA_cbc_encrypt(const unsigned char *in, unsigned char *out, 38 | long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, 39 | int enc); 40 | void IDEA_cfb64_encrypt(const unsigned char *in, unsigned char *out, 41 | long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, 42 | int *num, int enc); 43 | void IDEA_ofb64_encrypt(const unsigned char *in, unsigned char *out, 44 | long length, IDEA_KEY_SCHEDULE *ks, unsigned char *iv, 45 | int *num); 46 | void IDEA_encrypt(unsigned long *in, IDEA_KEY_SCHEDULE *ks); 47 | 48 | # if OPENSSL_API_COMPAT < 0x10100000L 49 | # define idea_options IDEA_options 50 | # define idea_ecb_encrypt IDEA_ecb_encrypt 51 | # define idea_set_encrypt_key IDEA_set_encrypt_key 52 | # define idea_set_decrypt_key IDEA_set_decrypt_key 53 | # define idea_cbc_encrypt IDEA_cbc_encrypt 54 | # define idea_cfb64_encrypt IDEA_cfb64_encrypt 55 | # define idea_ofb64_encrypt IDEA_ofb64_encrypt 56 | # define idea_encrypt IDEA_encrypt 57 | # endif 58 | 59 | # ifdef __cplusplus 60 | } 61 | # endif 62 | # endif 63 | 64 | #endif 65 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/kdferr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the OpenSSL license (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef HEADER_KDFERR_H 12 | # define HEADER_KDFERR_H 13 | 14 | # ifndef HEADER_SYMHACKS_H 15 | # include 16 | # endif 17 | 18 | # ifdef __cplusplus 19 | extern "C" 20 | # endif 21 | int ERR_load_KDF_strings(void); 22 | 23 | /* 24 | * KDF function codes. 25 | */ 26 | # define KDF_F_PKEY_HKDF_CTRL_STR 103 27 | # define KDF_F_PKEY_HKDF_DERIVE 102 28 | # define KDF_F_PKEY_HKDF_INIT 108 29 | # define KDF_F_PKEY_SCRYPT_CTRL_STR 104 30 | # define KDF_F_PKEY_SCRYPT_CTRL_UINT64 105 31 | # define KDF_F_PKEY_SCRYPT_DERIVE 109 32 | # define KDF_F_PKEY_SCRYPT_INIT 106 33 | # define KDF_F_PKEY_SCRYPT_SET_MEMBUF 107 34 | # define KDF_F_PKEY_TLS1_PRF_CTRL_STR 100 35 | # define KDF_F_PKEY_TLS1_PRF_DERIVE 101 36 | # define KDF_F_PKEY_TLS1_PRF_INIT 110 37 | # define KDF_F_TLS1_PRF_ALG 111 38 | 39 | /* 40 | * KDF reason codes. 41 | */ 42 | # define KDF_R_INVALID_DIGEST 100 43 | # define KDF_R_MISSING_ITERATION_COUNT 109 44 | # define KDF_R_MISSING_KEY 104 45 | # define KDF_R_MISSING_MESSAGE_DIGEST 105 46 | # define KDF_R_MISSING_PARAMETER 101 47 | # define KDF_R_MISSING_PASS 110 48 | # define KDF_R_MISSING_SALT 111 49 | # define KDF_R_MISSING_SECRET 107 50 | # define KDF_R_MISSING_SEED 106 51 | # define KDF_R_UNKNOWN_PARAMETER_TYPE 103 52 | # define KDF_R_VALUE_ERROR 108 53 | # define KDF_R_VALUE_MISSING 102 54 | 55 | #endif 56 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/md2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_MD2_H 11 | # define HEADER_MD2_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_MD2 16 | # include 17 | # ifdef __cplusplus 18 | extern "C" { 19 | # endif 20 | 21 | typedef unsigned char MD2_INT; 22 | 23 | # define MD2_DIGEST_LENGTH 16 24 | # define MD2_BLOCK 16 25 | 26 | typedef struct MD2state_st { 27 | unsigned int num; 28 | unsigned char data[MD2_BLOCK]; 29 | MD2_INT cksm[MD2_BLOCK]; 30 | MD2_INT state[MD2_BLOCK]; 31 | } MD2_CTX; 32 | 33 | const char *MD2_options(void); 34 | int MD2_Init(MD2_CTX *c); 35 | int MD2_Update(MD2_CTX *c, const unsigned char *data, size_t len); 36 | int MD2_Final(unsigned char *md, MD2_CTX *c); 37 | unsigned char *MD2(const unsigned char *d, size_t n, unsigned char *md); 38 | 39 | # ifdef __cplusplus 40 | } 41 | # endif 42 | # endif 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/md4.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_MD4_H 11 | # define HEADER_MD4_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_MD4 16 | # include 17 | # include 18 | # ifdef __cplusplus 19 | extern "C" { 20 | # endif 21 | 22 | /*- 23 | * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 24 | * ! MD4_LONG has to be at least 32 bits wide. ! 25 | * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 26 | */ 27 | # define MD4_LONG unsigned int 28 | 29 | # define MD4_CBLOCK 64 30 | # define MD4_LBLOCK (MD4_CBLOCK/4) 31 | # define MD4_DIGEST_LENGTH 16 32 | 33 | typedef struct MD4state_st { 34 | MD4_LONG A, B, C, D; 35 | MD4_LONG Nl, Nh; 36 | MD4_LONG data[MD4_LBLOCK]; 37 | unsigned int num; 38 | } MD4_CTX; 39 | 40 | int MD4_Init(MD4_CTX *c); 41 | int MD4_Update(MD4_CTX *c, const void *data, size_t len); 42 | int MD4_Final(unsigned char *md, MD4_CTX *c); 43 | unsigned char *MD4(const unsigned char *d, size_t n, unsigned char *md); 44 | void MD4_Transform(MD4_CTX *c, const unsigned char *b); 45 | 46 | # ifdef __cplusplus 47 | } 48 | # endif 49 | # endif 50 | 51 | #endif 52 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/md5.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_MD5_H 11 | # define HEADER_MD5_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_MD5 16 | # include 17 | # include 18 | # ifdef __cplusplus 19 | extern "C" { 20 | # endif 21 | 22 | /* 23 | * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 24 | * ! MD5_LONG has to be at least 32 bits wide. ! 25 | * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 26 | */ 27 | # define MD5_LONG unsigned int 28 | 29 | # define MD5_CBLOCK 64 30 | # define MD5_LBLOCK (MD5_CBLOCK/4) 31 | # define MD5_DIGEST_LENGTH 16 32 | 33 | typedef struct MD5state_st { 34 | MD5_LONG A, B, C, D; 35 | MD5_LONG Nl, Nh; 36 | MD5_LONG data[MD5_LBLOCK]; 37 | unsigned int num; 38 | } MD5_CTX; 39 | 40 | int MD5_Init(MD5_CTX *c); 41 | int MD5_Update(MD5_CTX *c, const void *data, size_t len); 42 | int MD5_Final(unsigned char *md, MD5_CTX *c); 43 | unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md); 44 | void MD5_Transform(MD5_CTX *c, const unsigned char *b); 45 | # ifdef __cplusplus 46 | } 47 | # endif 48 | # endif 49 | 50 | #endif 51 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/mdc2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_MDC2_H 11 | # define HEADER_MDC2_H 12 | 13 | # include 14 | 15 | #ifndef OPENSSL_NO_MDC2 16 | # include 17 | # include 18 | # ifdef __cplusplus 19 | extern "C" { 20 | # endif 21 | 22 | # define MDC2_BLOCK 8 23 | # define MDC2_DIGEST_LENGTH 16 24 | 25 | typedef struct mdc2_ctx_st { 26 | unsigned int num; 27 | unsigned char data[MDC2_BLOCK]; 28 | DES_cblock h, hh; 29 | int pad_type; /* either 1 or 2, default 1 */ 30 | } MDC2_CTX; 31 | 32 | int MDC2_Init(MDC2_CTX *c); 33 | int MDC2_Update(MDC2_CTX *c, const unsigned char *data, size_t len); 34 | int MDC2_Final(unsigned char *md, MDC2_CTX *c); 35 | unsigned char *MDC2(const unsigned char *d, size_t n, unsigned char *md); 36 | 37 | # ifdef __cplusplus 38 | } 39 | # endif 40 | # endif 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/objectserr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Generated by util/mkerr.pl DO NOT EDIT 3 | * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. 4 | * 5 | * Licensed under the OpenSSL license (the "License"). You may not use 6 | * this file except in compliance with the License. You can obtain a copy 7 | * in the file LICENSE in the source distribution or at 8 | * https://www.openssl.org/source/license.html 9 | */ 10 | 11 | #ifndef HEADER_OBJERR_H 12 | # define HEADER_OBJERR_H 13 | 14 | # ifndef HEADER_SYMHACKS_H 15 | # include 16 | # endif 17 | 18 | # ifdef __cplusplus 19 | extern "C" 20 | # endif 21 | int ERR_load_OBJ_strings(void); 22 | 23 | /* 24 | * OBJ function codes. 25 | */ 26 | # define OBJ_F_OBJ_ADD_OBJECT 105 27 | # define OBJ_F_OBJ_ADD_SIGID 107 28 | # define OBJ_F_OBJ_CREATE 100 29 | # define OBJ_F_OBJ_DUP 101 30 | # define OBJ_F_OBJ_NAME_NEW_INDEX 106 31 | # define OBJ_F_OBJ_NID2LN 102 32 | # define OBJ_F_OBJ_NID2OBJ 103 33 | # define OBJ_F_OBJ_NID2SN 104 34 | # define OBJ_F_OBJ_TXT2OBJ 108 35 | 36 | /* 37 | * OBJ reason codes. 38 | */ 39 | # define OBJ_R_OID_EXISTS 102 40 | # define OBJ_R_UNKNOWN_NID 101 41 | 42 | #endif 43 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/pem2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_PEM2_H 11 | # define HEADER_PEM2_H 12 | # include 13 | #endif 14 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/rand.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_RAND_H 11 | # define HEADER_RAND_H 12 | 13 | # include 14 | # include 15 | # include 16 | # include 17 | 18 | #ifdef __cplusplus 19 | extern "C" { 20 | #endif 21 | 22 | struct rand_meth_st { 23 | int (*seed) (const void *buf, int num); 24 | int (*bytes) (unsigned char *buf, int num); 25 | void (*cleanup) (void); 26 | int (*add) (const void *buf, int num, double randomness); 27 | int (*pseudorand) (unsigned char *buf, int num); 28 | int (*status) (void); 29 | }; 30 | 31 | int RAND_set_rand_method(const RAND_METHOD *meth); 32 | const RAND_METHOD *RAND_get_rand_method(void); 33 | # ifndef OPENSSL_NO_ENGINE 34 | int RAND_set_rand_engine(ENGINE *engine); 35 | # endif 36 | 37 | RAND_METHOD *RAND_OpenSSL(void); 38 | 39 | # if OPENSSL_API_COMPAT < 0x10100000L 40 | # define RAND_cleanup() while(0) continue 41 | # endif 42 | int RAND_bytes(unsigned char *buf, int num); 43 | int RAND_priv_bytes(unsigned char *buf, int num); 44 | DEPRECATEDIN_1_1_0(int RAND_pseudo_bytes(unsigned char *buf, int num)) 45 | 46 | void RAND_seed(const void *buf, int num); 47 | void RAND_keep_random_devices_open(int keep); 48 | 49 | # if defined(__ANDROID__) && defined(__NDK_FPABI__) 50 | __NDK_FPABI__ /* __attribute__((pcs("aapcs"))) on ARM */ 51 | # endif 52 | void RAND_add(const void *buf, int num, double randomness); 53 | int RAND_load_file(const char *file, long max_bytes); 54 | int RAND_write_file(const char *file); 55 | const char *RAND_file_name(char *file, size_t num); 56 | int RAND_status(void); 57 | 58 | # ifndef OPENSSL_NO_EGD 59 | int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); 60 | int RAND_egd(const char *path); 61 | int RAND_egd_bytes(const char *path, int bytes); 62 | # endif 63 | 64 | int RAND_poll(void); 65 | 66 | # if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) 67 | /* application has to include in order to use these */ 68 | DEPRECATEDIN_1_1_0(void RAND_screen(void)) 69 | DEPRECATEDIN_1_1_0(int RAND_event(UINT, WPARAM, LPARAM)) 70 | # endif 71 | 72 | 73 | #ifdef __cplusplus 74 | } 75 | #endif 76 | 77 | #endif 78 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/rc2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_RC2_H 11 | # define HEADER_RC2_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_RC2 16 | # ifdef __cplusplus 17 | extern "C" { 18 | # endif 19 | 20 | typedef unsigned int RC2_INT; 21 | 22 | # define RC2_ENCRYPT 1 23 | # define RC2_DECRYPT 0 24 | 25 | # define RC2_BLOCK 8 26 | # define RC2_KEY_LENGTH 16 27 | 28 | typedef struct rc2_key_st { 29 | RC2_INT data[64]; 30 | } RC2_KEY; 31 | 32 | void RC2_set_key(RC2_KEY *key, int len, const unsigned char *data, int bits); 33 | void RC2_ecb_encrypt(const unsigned char *in, unsigned char *out, 34 | RC2_KEY *key, int enc); 35 | void RC2_encrypt(unsigned long *data, RC2_KEY *key); 36 | void RC2_decrypt(unsigned long *data, RC2_KEY *key); 37 | void RC2_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, 38 | RC2_KEY *ks, unsigned char *iv, int enc); 39 | void RC2_cfb64_encrypt(const unsigned char *in, unsigned char *out, 40 | long length, RC2_KEY *schedule, unsigned char *ivec, 41 | int *num, int enc); 42 | void RC2_ofb64_encrypt(const unsigned char *in, unsigned char *out, 43 | long length, RC2_KEY *schedule, unsigned char *ivec, 44 | int *num); 45 | 46 | # ifdef __cplusplus 47 | } 48 | # endif 49 | # endif 50 | 51 | #endif 52 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/rc4.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_RC4_H 11 | # define HEADER_RC4_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_RC4 16 | # include 17 | #ifdef __cplusplus 18 | extern "C" { 19 | #endif 20 | 21 | typedef struct rc4_key_st { 22 | RC4_INT x, y; 23 | RC4_INT data[256]; 24 | } RC4_KEY; 25 | 26 | const char *RC4_options(void); 27 | void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); 28 | void RC4(RC4_KEY *key, size_t len, const unsigned char *indata, 29 | unsigned char *outdata); 30 | 31 | # ifdef __cplusplus 32 | } 33 | # endif 34 | # endif 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/rc5.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_RC5_H 11 | # define HEADER_RC5_H 12 | 13 | # include 14 | 15 | # ifndef OPENSSL_NO_RC5 16 | # ifdef __cplusplus 17 | extern "C" { 18 | # endif 19 | 20 | # define RC5_ENCRYPT 1 21 | # define RC5_DECRYPT 0 22 | 23 | # define RC5_32_INT unsigned int 24 | 25 | # define RC5_32_BLOCK 8 26 | # define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ 27 | 28 | /* 29 | * This are the only values supported. Tweak the code if you want more The 30 | * most supported modes will be RC5-32/12/16 RC5-32/16/8 31 | */ 32 | # define RC5_8_ROUNDS 8 33 | # define RC5_12_ROUNDS 12 34 | # define RC5_16_ROUNDS 16 35 | 36 | typedef struct rc5_key_st { 37 | /* Number of rounds */ 38 | int rounds; 39 | RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)]; 40 | } RC5_32_KEY; 41 | 42 | void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data, 43 | int rounds); 44 | void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out, 45 | RC5_32_KEY *key, int enc); 46 | void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key); 47 | void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key); 48 | void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out, 49 | long length, RC5_32_KEY *ks, unsigned char *iv, 50 | int enc); 51 | void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out, 52 | long length, RC5_32_KEY *schedule, 53 | unsigned char *ivec, int *num, int enc); 54 | void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out, 55 | long length, RC5_32_KEY *schedule, 56 | unsigned char *ivec, int *num); 57 | 58 | # ifdef __cplusplus 59 | } 60 | # endif 61 | # endif 62 | 63 | #endif 64 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/ripemd.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_RIPEMD_H 11 | # define HEADER_RIPEMD_H 12 | 13 | # include 14 | 15 | #ifndef OPENSSL_NO_RMD160 16 | # include 17 | # include 18 | # ifdef __cplusplus 19 | extern "C" { 20 | # endif 21 | 22 | # define RIPEMD160_LONG unsigned int 23 | 24 | # define RIPEMD160_CBLOCK 64 25 | # define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) 26 | # define RIPEMD160_DIGEST_LENGTH 20 27 | 28 | typedef struct RIPEMD160state_st { 29 | RIPEMD160_LONG A, B, C, D, E; 30 | RIPEMD160_LONG Nl, Nh; 31 | RIPEMD160_LONG data[RIPEMD160_LBLOCK]; 32 | unsigned int num; 33 | } RIPEMD160_CTX; 34 | 35 | int RIPEMD160_Init(RIPEMD160_CTX *c); 36 | int RIPEMD160_Update(RIPEMD160_CTX *c, const void *data, size_t len); 37 | int RIPEMD160_Final(unsigned char *md, RIPEMD160_CTX *c); 38 | unsigned char *RIPEMD160(const unsigned char *d, size_t n, unsigned char *md); 39 | void RIPEMD160_Transform(RIPEMD160_CTX *c, const unsigned char *b); 40 | 41 | # ifdef __cplusplus 42 | } 43 | # endif 44 | # endif 45 | 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/srtp.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | /* 11 | * DTLS code by Eric Rescorla 12 | * 13 | * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. 14 | */ 15 | 16 | #ifndef HEADER_D1_SRTP_H 17 | # define HEADER_D1_SRTP_H 18 | 19 | # include 20 | 21 | #ifdef __cplusplus 22 | extern "C" { 23 | #endif 24 | 25 | # define SRTP_AES128_CM_SHA1_80 0x0001 26 | # define SRTP_AES128_CM_SHA1_32 0x0002 27 | # define SRTP_AES128_F8_SHA1_80 0x0003 28 | # define SRTP_AES128_F8_SHA1_32 0x0004 29 | # define SRTP_NULL_SHA1_80 0x0005 30 | # define SRTP_NULL_SHA1_32 0x0006 31 | 32 | /* AEAD SRTP protection profiles from RFC 7714 */ 33 | # define SRTP_AEAD_AES_128_GCM 0x0007 34 | # define SRTP_AEAD_AES_256_GCM 0x0008 35 | 36 | # ifndef OPENSSL_NO_SRTP 37 | 38 | __owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); 39 | __owur int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles); 40 | 41 | __owur STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); 42 | __owur SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); 43 | 44 | # endif 45 | 46 | #ifdef __cplusplus 47 | } 48 | #endif 49 | 50 | #endif 51 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/ssl2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_SSL2_H 11 | # define HEADER_SSL2_H 12 | 13 | #ifdef __cplusplus 14 | extern "C" { 15 | #endif 16 | 17 | # define SSL2_VERSION 0x0002 18 | 19 | # define SSL2_MT_CLIENT_HELLO 1 20 | 21 | #ifdef __cplusplus 22 | } 23 | #endif 24 | #endif 25 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/symhacks.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_SYMHACKS_H 11 | # define HEADER_SYMHACKS_H 12 | 13 | # include 14 | 15 | /* Case insensitive linking causes problems.... */ 16 | # if defined(OPENSSL_SYS_VMS) 17 | # undef ERR_load_CRYPTO_strings 18 | # define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings 19 | # undef OCSP_crlID_new 20 | # define OCSP_crlID_new OCSP_crlID2_new 21 | 22 | # undef d2i_ECPARAMETERS 23 | # define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS 24 | # undef i2d_ECPARAMETERS 25 | # define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS 26 | # undef d2i_ECPKPARAMETERS 27 | # define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS 28 | # undef i2d_ECPKPARAMETERS 29 | # define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS 30 | 31 | /* This one clashes with CMS_data_create */ 32 | # undef cms_Data_create 33 | # define cms_Data_create priv_cms_Data_create 34 | 35 | # endif 36 | 37 | #endif /* ! defined HEADER_VMS_IDHACKS_H */ 38 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/txt_db.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_TXT_DB_H 11 | # define HEADER_TXT_DB_H 12 | 13 | # include 14 | # include 15 | # include 16 | # include 17 | 18 | # define DB_ERROR_OK 0 19 | # define DB_ERROR_MALLOC 1 20 | # define DB_ERROR_INDEX_CLASH 2 21 | # define DB_ERROR_INDEX_OUT_OF_RANGE 3 22 | # define DB_ERROR_NO_INDEX 4 23 | # define DB_ERROR_INSERT_INDEX_CLASH 5 24 | # define DB_ERROR_WRONG_NUM_FIELDS 6 25 | 26 | #ifdef __cplusplus 27 | extern "C" { 28 | #endif 29 | 30 | typedef OPENSSL_STRING *OPENSSL_PSTRING; 31 | DEFINE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) 32 | 33 | typedef struct txt_db_st { 34 | int num_fields; 35 | STACK_OF(OPENSSL_PSTRING) *data; 36 | LHASH_OF(OPENSSL_STRING) **index; 37 | int (**qual) (OPENSSL_STRING *); 38 | long error; 39 | long arg1; 40 | long arg2; 41 | OPENSSL_STRING *arg_row; 42 | } TXT_DB; 43 | 44 | TXT_DB *TXT_DB_read(BIO *in, int num); 45 | long TXT_DB_write(BIO *out, TXT_DB *db); 46 | int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), 47 | OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp); 48 | void TXT_DB_free(TXT_DB *db); 49 | OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, 50 | OPENSSL_STRING *value); 51 | int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); 52 | 53 | #ifdef __cplusplus 54 | } 55 | #endif 56 | 57 | #endif 58 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/include/openssl/whrlpool.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2005-2016 The OpenSSL Project Authors. All Rights Reserved. 3 | * 4 | * Licensed under the OpenSSL license (the "License"). You may not use 5 | * this file except in compliance with the License. You can obtain a copy 6 | * in the file LICENSE in the source distribution or at 7 | * https://www.openssl.org/source/license.html 8 | */ 9 | 10 | #ifndef HEADER_WHRLPOOL_H 11 | # define HEADER_WHRLPOOL_H 12 | 13 | #include 14 | 15 | # ifndef OPENSSL_NO_WHIRLPOOL 16 | # include 17 | # include 18 | # ifdef __cplusplus 19 | extern "C" { 20 | # endif 21 | 22 | # define WHIRLPOOL_DIGEST_LENGTH (512/8) 23 | # define WHIRLPOOL_BBLOCK 512 24 | # define WHIRLPOOL_COUNTER (256/8) 25 | 26 | typedef struct { 27 | union { 28 | unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; 29 | /* double q is here to ensure 64-bit alignment */ 30 | double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; 31 | } H; 32 | unsigned char data[WHIRLPOOL_BBLOCK / 8]; 33 | unsigned int bitoff; 34 | size_t bitlen[WHIRLPOOL_COUNTER / sizeof(size_t)]; 35 | } WHIRLPOOL_CTX; 36 | 37 | int WHIRLPOOL_Init(WHIRLPOOL_CTX *c); 38 | int WHIRLPOOL_Update(WHIRLPOOL_CTX *c, const void *inp, size_t bytes); 39 | void WHIRLPOOL_BitUpdate(WHIRLPOOL_CTX *c, const void *inp, size_t bits); 40 | int WHIRLPOOL_Final(unsigned char *md, WHIRLPOOL_CTX *c); 41 | unsigned char *WHIRLPOOL(const void *inp, size_t bytes, unsigned char *md); 42 | 43 | # ifdef __cplusplus 44 | } 45 | # endif 46 | # endif 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/x86/libcrypto.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/openssl/x86/libcrypto.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/x86/libssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/openssl/x86/libssl.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/x86_64/libcrypto.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/openssl/x86_64/libcrypto.a -------------------------------------------------------------------------------- /app/src/main/jni/moonlight-core/openssl/x86_64/libssl.a: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/jni/moonlight-core/openssl/x86_64/libssl.a -------------------------------------------------------------------------------- /app/src/main/res/anim/boxart_fadein.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/boxart_fadeout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/atv_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/res/drawable-xhdpi/atv_banner.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/no_app_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/res/drawable-xhdpi/no_app_image.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ouya_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/res/drawable-xhdpi/ouya_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/app_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/moonlight-stream/moonlight-android/f10085f552b367cf7203007693d91c322a0a2936/app/src/main/res/drawable/app_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_channel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_computer.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_help.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lime_layer.xml: -------------------------------------------------------------------------------- 1 | 3 | 5 | 7 | 9 | 11 | 13 | 15 | 17 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lock.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_pc_offline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/list_view_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_add_computer_manually.xml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 20 | 21 | 36 | 37 | 38 | 39 | 40 |