summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2021-07-09 19:43:04 +0200
committerGitHub <noreply@github.com>2021-07-09 19:43:04 +0200
commitc0b31562f51606fc1b1c662e99dffde1044a9583 (patch)
tree3157fbaec9bb148c64cb4fd3fa40bad6e8ad3864
parenteeabf0a8446c41ce8b11c063ede07337ba7eabbb (diff)
parent69f92fa26c7bef3b042d8da5e520fe60b22e01b7 (diff)
downloadfork-godot-webrtc-native-c0b31562f51606fc1b1c662e99dffde1044a9583.tar.gz
fork-godot-webrtc-native-c0b31562f51606fc1b1c662e99dffde1044a9583.tar.bz2
fork-godot-webrtc-native-c0b31562f51606fc1b1c662e99dffde1044a9583.zip
Merge pull request #39 from Faless/style/clang_black
Add static checks
-rw-r--r--.clang-format128
-rw-r--r--.github/workflows/build_release.yml27
-rw-r--r--SConstruct387
-rwxr-xr-xmisc/scripts/black_format.sh34
-rwxr-xr-xmisc/scripts/clang_format.sh58
-rwxr-xr-xmisc/scripts/copyright_headers.py95
-rwxr-xr-xmisc/scripts/file_format.sh48
-rw-r--r--src/WebRTCLibDataChannel.cpp36
-rw-r--r--src/WebRTCLibDataChannel.hpp32
-rw-r--r--src/WebRTCLibPeerConnection.cpp43
-rw-r--r--src/WebRTCLibPeerConnection.hpp32
-rw-r--r--src/init.cpp35
-rw-r--r--src/net/WebRTCDataChannelNative.cpp30
-rw-r--r--src/net/WebRTCDataChannelNative.hpp30
-rw-r--r--src/net/WebRTCPeerConnectionNative.cpp30
-rw-r--r--src/net/WebRTCPeerConnectionNative.hpp30
16 files changed, 883 insertions, 192 deletions
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..1c26421
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,128 @@
+# Commented out parameters are those with the same value as base LLVM style
+# We can uncomment them if we want to change their value, or enforce the
+# chosen value in case the base style changes (last sync: Clang 6.0.1).
+---
+### General config, applies to all languages ###
+BasedOnStyle: LLVM
+AccessModifierOffset: -4
+AlignAfterOpenBracket: DontAlign
+# AlignConsecutiveAssignments: false
+# AlignConsecutiveDeclarations: false
+# AlignEscapedNewlines: Right
+# AlignOperands: true
+AlignTrailingComments: false
+AllowAllParametersOfDeclarationOnNextLine: false
+# AllowShortBlocksOnASingleLine: false
+# AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: Inline
+# AllowShortIfStatementsOnASingleLine: false
+# AllowShortLoopsOnASingleLine: false
+# AlwaysBreakAfterDefinitionReturnType: None
+# AlwaysBreakAfterReturnType: None
+# AlwaysBreakBeforeMultilineStrings: false
+# AlwaysBreakTemplateDeclarations: false
+# BinPackArguments: true
+# BinPackParameters: true
+# BraceWrapping:
+# AfterClass: false
+# AfterControlStatement: false
+# AfterEnum: false
+# AfterFunction: false
+# AfterNamespace: false
+# AfterObjCDeclaration: false
+# AfterStruct: false
+# AfterUnion: false
+# AfterExternBlock: false
+# BeforeCatch: false
+# BeforeElse: false
+# IndentBraces: false
+# SplitEmptyFunction: true
+# SplitEmptyRecord: true
+# SplitEmptyNamespace: true
+# BreakBeforeBinaryOperators: None
+# BreakBeforeBraces: Attach
+# BreakBeforeInheritanceComma: false
+BreakBeforeTernaryOperators: false
+# BreakConstructorInitializersBeforeComma: false
+BreakConstructorInitializers: AfterColon
+# BreakStringLiterals: true
+ColumnLimit: 0
+# CommentPragmas: '^ IWYU pragma:'
+# CompactNamespaces: false
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 8
+ContinuationIndentWidth: 8
+Cpp11BracedListStyle: false
+# DerivePointerAlignment: false
+# DisableFormat: false
+# ExperimentalAutoDetectBinPacking: false
+# FixNamespaceComments: true
+# ForEachMacros:
+# - foreach
+# - Q_FOREACH
+# - BOOST_FOREACH
+# IncludeBlocks: Preserve
+IncludeCategories:
+ - Regex: '".*"'
+ Priority: 1
+ - Regex: '^<.*\.h>'
+ Priority: 2
+ - Regex: '^<.*'
+ Priority: 3
+# IncludeIsMainRegex: '(Test)?$'
+IndentCaseLabels: true
+# IndentPPDirectives: None
+IndentWidth: 4
+# IndentWrappedFunctionNames: false
+# JavaScriptQuotes: Leave
+# JavaScriptWrapImports: true
+KeepEmptyLinesAtTheStartOfBlocks: false
+# MacroBlockBegin: ''
+# MacroBlockEnd: ''
+# MaxEmptyLinesToKeep: 1
+# NamespaceIndentation: None
+# PenaltyBreakAssignment: 2
+# PenaltyBreakBeforeFirstCallParameter: 19
+# PenaltyBreakComment: 300
+# PenaltyBreakFirstLessLess: 120
+# PenaltyBreakString: 1000
+# PenaltyExcessCharacter: 1000000
+# PenaltyReturnTypeOnItsOwnLine: 60
+# PointerAlignment: Right
+# RawStringFormats:
+# - Delimiter: pb
+# Language: TextProto
+# BasedOnStyle: google
+# ReflowComments: true
+# SortIncludes: true
+# SortUsingDeclarations: true
+# SpaceAfterCStyleCast: false
+# SpaceAfterTemplateKeyword: true
+# SpaceBeforeAssignmentOperators: true
+# SpaceBeforeParens: ControlStatements
+# SpaceInEmptyParentheses: false
+# SpacesBeforeTrailingComments: 1
+# SpacesInAngles: false
+# SpacesInContainerLiterals: true
+# SpacesInCStyleCastParentheses: false
+# SpacesInParentheses: false
+# SpacesInSquareBrackets: false
+TabWidth: 4
+UseTab: Always
+---
+### C++ specific config ###
+Language: Cpp
+Standard: Cpp11
+---
+### ObjC specific config ###
+Language: ObjC
+Standard: Cpp11
+ObjCBlockIndentWidth: 4
+# ObjCSpaceAfterProperty: false
+# ObjCSpaceBeforeProtocolList: true
+---
+### Java specific config ###
+Language: Java
+# BreakAfterJavaFieldAnnotations: false
+JavaImportGroups: ['org.godotengine', 'android', 'androidx', 'com.android', 'com.google', 'java', 'javax']
+...
diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml
index 0205afa..19a59c9 100644
--- a/.github/workflows/build_release.yml
+++ b/.github/workflows/build_release.yml
@@ -2,9 +2,36 @@ name: 🔧 Build -> Package 📦
on: [push, pull_request]
jobs:
+ static-checks:
+ name: 📊 Static Checks (clang-format, black format, file format)
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Install dependencies
+ run: |
+ sudo apt-get install -qq dos2unix recode clang-format-11
+ sudo update-alternatives --remove-all clang-format
+ sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-11 100
+ sudo pip3 install black==20.8b1 pygments
+
+ - name: File formatting checks (file_format.sh)
+ run: |
+ bash ./misc/scripts/file_format.sh
+
+ - name: Style checks via clang-format (clang_format.sh)
+ run: |
+ bash ./misc/scripts/clang_format.sh
+
+ - name: Python style checks via black (black_format.sh)
+ run: |
+ bash ./misc/scripts/black_format.sh
+
build:
runs-on: ${{ matrix.os }}
name: 🔧 Build
+ needs: static-checks
strategy:
matrix:
include:
diff --git a/SConstruct b/SConstruct
index dc3f9dd..b6f1603 100644
--- a/SConstruct
+++ b/SConstruct
@@ -3,221 +3,214 @@
import os, sys, platform, json, subprocess
if sys.version_info < (3,):
+
def decode_utf8(x):
return x
+
+
else:
import codecs
+
def decode_utf8(x):
return codecs.utf_8_decode(x)[0]
def add_sources(sources, dirpath, extension):
- for f in os.listdir(dirpath):
- if f.endswith('.' + extension):
- sources.append(dirpath + '/' + f)
+ for f in os.listdir(dirpath):
+ if f.endswith("." + extension):
+ sources.append(dirpath + "/" + f)
def gen_gdnative_lib(target, source, env):
for t in target:
- with open(t.srcnode().path, 'w') as w:
- w.write(decode_utf8(source[0].get_contents()).replace('{GDNATIVE_PATH}', os.path.splitext(t.name)[0]).replace('{TARGET}', env['target']))
+ with open(t.srcnode().path, "w") as w:
+ w.write(
+ decode_utf8(source[0].get_contents())
+ .replace("{GDNATIVE_PATH}", os.path.splitext(t.name)[0])
+ .replace("{TARGET}", env["target"])
+ )
env = Environment()
-target_arch = ARGUMENTS.get('b', ARGUMENTS.get('bits', '64'))
-target_platform = ARGUMENTS.get('p', ARGUMENTS.get('platform', 'linux'))
-if target_platform == 'windows':
+target_arch = ARGUMENTS.get("b", ARGUMENTS.get("bits", "64"))
+target_platform = ARGUMENTS.get("p", ARGUMENTS.get("platform", "linux"))
+if target_platform == "windows":
# This makes sure to keep the session environment variables on windows,
# that way you can run scons in a vs 2017 prompt and it will find all the required tools
- if (target_arch == '64'):
- env = Environment(ENV = os.environ, TARGET_ARCH='amd64')
+ if target_arch == "64":
+ env = Environment(ENV=os.environ, TARGET_ARCH="amd64")
else:
- env = Environment(ENV = os.environ, TARGET_ARCH='x86')
+ env = Environment(ENV=os.environ, TARGET_ARCH="x86")
-env.Append(BUILDERS={'GDNativeLibBuilder': Builder(action=gen_gdnative_lib)})
+env.Append(BUILDERS={"GDNativeLibBuilder": Builder(action=gen_gdnative_lib)})
-customs = ['custom.py']
+customs = ["custom.py"]
opts = Variables(customs, ARGUMENTS)
-opts.Add(BoolVariable('use_llvm', 'Use the LLVM compiler', False))
-opts.Add(EnumVariable('target', "Compilation target", 'debug', ('debug', 'release')))
+opts.Add(BoolVariable("use_llvm", "Use the LLVM compiler", False))
+opts.Add(EnumVariable("target", "Compilation target", "debug", ("debug", "release")))
-opts.Add(EnumVariable(
- 'android_arch',
- 'Target Android architecture',
- 'armv7',
- ['armv7','arm64v8', 'x86', 'x86_64']
-))
+opts.Add(EnumVariable("android_arch", "Target Android architecture", "armv7", ["armv7", "arm64v8", "x86", "x86_64"]))
opts.Add(
- 'android_api_level',
- 'Target Android API level',
- '18' if ARGUMENTS.get("android_arch", 'armv7') in ['armv7', 'x86'] else '21'
+ "android_api_level",
+ "Target Android API level",
+ "18" if ARGUMENTS.get("android_arch", "armv7") in ["armv7", "x86"] else "21",
)
opts.Add(
- 'ANDROID_NDK_ROOT',
- 'Path to your Android NDK installation. By default, uses ANDROID_NDK_ROOT from your defined environment variables.',
- os.environ.get("ANDROID_NDK_ROOT", None)
+ "ANDROID_NDK_ROOT",
+ "Path to your Android NDK installation. By default, uses ANDROID_NDK_ROOT from your defined environment variables.",
+ os.environ.get("ANDROID_NDK_ROOT", None),
)
-opts.Add(EnumVariable(
- 'ios_arch',
- 'Target iOS architecture',
- 'arm64',
- ['armv7', 'arm64', 'x86_64']
-))
-opts.Add(BoolVariable(
- 'ios_simulator',
- 'Target iOS Simulator',
- False
-))
+opts.Add(EnumVariable("ios_arch", "Target iOS architecture", "arm64", ["armv7", "arm64", "x86_64"]))
+opts.Add(BoolVariable("ios_simulator", "Target iOS Simulator", False))
opts.Add(
- 'IPHONEPATH',
- 'Path to iPhone toolchain',
- '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain',
+ "IPHONEPATH",
+ "Path to iPhone toolchain",
+ "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain",
)
# Update environment (parse options)
opts.Update(env)
-target = env['target']
+target = env["target"]
-if target_platform == 'android':
- target_arch = env['android_arch']
-elif target_platform == 'ios':
- target_arch = env['ios_arch']
+if target_platform == "android":
+ target_arch = env["android_arch"]
+elif target_platform == "ios":
+ target_arch = env["ios_arch"]
host_platform = platform.system()
# Local dependency paths, adapt them to your setup
-godot_headers = ARGUMENTS.get('headers', 'godot-cpp/godot-headers')
-godot_cpp_headers = ARGUMENTS.get('godot_cpp_headers', 'godot-cpp/include')
-godot_cpp_lib_dir = ARGUMENTS.get('godot_cpp_lib_dir', 'godot-cpp/bin')
-result_path = os.path.join('bin', 'webrtc' if env['target'] == 'release' else 'webrtc_debug', 'lib')
+godot_headers = ARGUMENTS.get("headers", "godot-cpp/godot-headers")
+godot_cpp_headers = ARGUMENTS.get("godot_cpp_headers", "godot-cpp/include")
+godot_cpp_lib_dir = ARGUMENTS.get("godot_cpp_lib_dir", "godot-cpp/bin")
+result_path = os.path.join("bin", "webrtc" if env["target"] == "release" else "webrtc_debug", "lib")
lib_prefix = ""
# Convenience check to enforce the use_llvm overrides when CXX is clang(++)
-if 'CXX' in env and 'clang' in os.path.basename(env['CXX']):
- env['use_llvm'] = True
+if "CXX" in env and "clang" in os.path.basename(env["CXX"]):
+ env["use_llvm"] = True
-if target_platform == 'linux':
- env['CXX']='g++'
+if target_platform == "linux":
+ env["CXX"] = "g++"
# LLVM
- if env['use_llvm']:
- if ('clang++' not in os.path.basename(env['CXX'])):
- env['CC'] = 'clang'
+ if env["use_llvm"]:
+ if "clang++" not in os.path.basename(env["CXX"]):
+ env["CC"] = "clang"
env["CXX"] = "clang++"
env["LINK"] = "clang++"
- if (env["target"] == "debug"):
- env.Prepend(CCFLAGS=['-g3'])
- env.Append(LINKFLAGS=['-rdynamic'])
+ if env["target"] == "debug":
+ env.Prepend(CCFLAGS=["-g3"])
+ env.Append(LINKFLAGS=["-rdynamic"])
else:
- env.Prepend(CCFLAGS=['-O3'])
+ env.Prepend(CCFLAGS=["-O3"])
- env.Append(CCFLAGS=['-fPIC', '-std=c++14'])
+ env.Append(CCFLAGS=["-fPIC", "-std=c++14"])
- if target_arch == '32':
- env.Append(CCFLAGS = [ '-m32' ])
- env.Append(LINKFLAGS = [ '-m32' ])
- elif target_arch == '64':
- env.Append(CCFLAGS = [ '-m64' ])
- env.Append(LINKFLAGS = [ '-m64' ])
+ if target_arch == "32":
+ env.Append(CCFLAGS=["-m32"])
+ env.Append(LINKFLAGS=["-m32"])
+ elif target_arch == "64":
+ env.Append(CCFLAGS=["-m64"])
+ env.Append(LINKFLAGS=["-m64"])
# i386 does not like static libstdc++
- env.Append(LINKFLAGS=['-static-libgcc', '-static-libstdc++'])
+ env.Append(LINKFLAGS=["-static-libgcc", "-static-libstdc++"])
-elif target_platform == 'windows':
- if host_platform == 'Windows':
+elif target_platform == "windows":
+ if host_platform == "Windows":
lib_prefix = "lib"
- env.Append(LINKFLAGS = [ '/WX' ])
- if target == 'debug':
- env.Append(CCFLAGS = ['/EHsc', '/D_DEBUG', '/MDd' ])
+ env.Append(LINKFLAGS=["/WX"])
+ if target == "debug":
+ env.Append(CCFLAGS=["/EHsc", "/D_DEBUG", "/MDd"])
else:
- env.Append(CCFLAGS = ['/O2', '/EHsc', '/DNDEBUG', '/MD' ])
+ env.Append(CCFLAGS=["/O2", "/EHsc", "/DNDEBUG", "/MD"])
else:
- if target_arch == '32':
- env['CXX']='i686-w64-mingw32-g++'
- elif target_arch == '64':
- env['CXX']='x86_64-w64-mingw32-g++'
+ if target_arch == "32":
+ env["CXX"] = "i686-w64-mingw32-g++"
+ elif target_arch == "64":
+ env["CXX"] = "x86_64-w64-mingw32-g++"
- if env['target'] == 'debug':
- env.Append(CCFLAGS=['-Og', '-g'])
- elif env['target'] == 'release':
- env.Append(CCFLAGS=['-O3'])
+ if env["target"] == "debug":
+ env.Append(CCFLAGS=["-Og", "-g"])
+ elif env["target"] == "release":
+ env.Append(CCFLAGS=["-O3"])
- env.Append(CCFLAGS = [ '-std=c++14', '-Wwrite-strings' ])
- env.Append(LINKFLAGS = [ '--static', '-Wl,--no-undefined', '-static-libgcc', '-static-libstdc++' ])
+ env.Append(CCFLAGS=["-std=c++14", "-Wwrite-strings"])
+ env.Append(LINKFLAGS=["--static", "-Wl,--no-undefined", "-static-libgcc", "-static-libstdc++"])
-elif target_platform == 'osx':
- if env['use_llvm']:
- env['CXX'] = 'clang++'
+elif target_platform == "osx":
+ if env["use_llvm"]:
+ env["CXX"] = "clang++"
# Only 64-bits is supported for OS X
- target_arch = '64'
+ target_arch = "64"
- env.Append(CCFLAGS = [ '-std=c++14', '-arch', 'x86_64' ])
- env.Append(LINKFLAGS = [ '-arch', 'x86_64', '-framework', 'Cocoa', '-Wl,-undefined,dynamic_lookup' ])
+ env.Append(CCFLAGS=["-std=c++14", "-arch", "x86_64"])
+ env.Append(LINKFLAGS=["-arch", "x86_64", "-framework", "Cocoa", "-Wl,-undefined,dynamic_lookup"])
- if env['target'] == 'debug':
- env.Append(CCFLAGS=['-Og', '-g'])
- elif env['target'] == 'release':
- env.Append(CCFLAGS=['-O3'])
+ if env["target"] == "debug":
+ env.Append(CCFLAGS=["-Og", "-g"])
+ elif env["target"] == "release":
+ env.Append(CCFLAGS=["-O3"])
-elif target_platform == 'ios':
- if env['ios_simulator']:
- sdk_name = 'iphonesimulator'
- env.Append(CCFLAGS=['-mios-simulator-version-min=10.0'])
- env['LIBSUFFIX'] = ".simulator" + env['LIBSUFFIX']
+elif target_platform == "ios":
+ if env["ios_simulator"]:
+ sdk_name = "iphonesimulator"
+ env.Append(CCFLAGS=["-mios-simulator-version-min=10.0"])
+ env["LIBSUFFIX"] = ".simulator" + env["LIBSUFFIX"]
else:
- sdk_name = 'iphoneos'
- env.Append(CCFLAGS=['-miphoneos-version-min=10.0'])
+ sdk_name = "iphoneos"
+ env.Append(CCFLAGS=["-miphoneos-version-min=10.0"])
try:
- sdk_path = decode_utf8(subprocess.check_output(['xcrun', '--sdk', sdk_name, '--show-sdk-path']).strip())
+ sdk_path = decode_utf8(subprocess.check_output(["xcrun", "--sdk", sdk_name, "--show-sdk-path"]).strip())
except (subprocess.CalledProcessError, OSError):
raise ValueError("Failed to find SDK path while running xcrun --sdk {} --show-sdk-path.".format(sdk_name))
- compiler_path = env['IPHONEPATH'] + '/usr/bin/'
- env['ENV']['PATH'] = env['IPHONEPATH'] + "/Developer/usr/bin/:" + env['ENV']['PATH']
+ compiler_path = env["IPHONEPATH"] + "/usr/bin/"
+ env["ENV"]["PATH"] = env["IPHONEPATH"] + "/Developer/usr/bin/:" + env["ENV"]["PATH"]
- env['CC'] = compiler_path + 'clang'
- env['CXX'] = compiler_path + 'clang++'
- env['AR'] = compiler_path + 'ar'
- env['RANLIB'] = compiler_path + 'ranlib'
+ env["CC"] = compiler_path + "clang"
+ env["CXX"] = compiler_path + "clang++"
+ env["AR"] = compiler_path + "ar"
+ env["RANLIB"] = compiler_path + "ranlib"
- env.Append(CCFLAGS=['-std=c++14', '-arch', env['ios_arch'], '-isysroot', sdk_path])
- env.Append(LINKFLAGS=[
- '-arch',
- env['ios_arch'],
- '-Wl,-undefined,dynamic_lookup',
- '-isysroot', sdk_path,
- '-F' + sdk_path
- ])
+ env.Append(CCFLAGS=["-std=c++14", "-arch", env["ios_arch"], "-isysroot", sdk_path])
+ env.Append(
+ LINKFLAGS=["-arch", env["ios_arch"], "-Wl,-undefined,dynamic_lookup", "-isysroot", sdk_path, "-F" + sdk_path]
+ )
- if env['target'] == 'debug':
- env.Append(CCFLAGS=['-Og', '-g'])
- elif env['target'] == 'release':
- env.Append(CCFLAGS=['-O3'])
+ if env["target"] == "debug":
+ env.Append(CCFLAGS=["-Og", "-g"])
+ elif env["target"] == "release":
+ env.Append(CCFLAGS=["-O3"])
-elif target_platform == 'android':
+elif target_platform == "android":
# Verify NDK root
- if not 'ANDROID_NDK_ROOT' in env:
- raise ValueError("To build for Android, ANDROID_NDK_ROOT must be defined. Please set ANDROID_NDK_ROOT to the root folder of your Android NDK installation.")
+ if not "ANDROID_NDK_ROOT" in env:
+ raise ValueError(
+ "To build for Android, ANDROID_NDK_ROOT must be defined. Please set ANDROID_NDK_ROOT to the root folder of your Android NDK installation."
+ )
# Validate API level
- api_level = int(env['android_api_level'])
- if target_arch in ['arm64v8', 'x86_64'] and api_level < 21:
+ api_level = int(env["android_api_level"])
+ if target_arch in ["arm64v8", "x86_64"] and api_level < 21:
print("WARN: 64-bit Android architectures require an API level of at least 21; setting android_api_level=21")
- env['android_api_level'] = '21'
+ env["android_api_level"] = "21"
api_level = 21
# Setup toolchain
- toolchain = env['ANDROID_NDK_ROOT'] + "/toolchains/llvm/prebuilt/"
+ toolchain = env["ANDROID_NDK_ROOT"] + "/toolchains/llvm/prebuilt/"
if host_platform == "Windows":
toolchain += "windows"
import platform as pltfm
+
if pltfm.machine().endswith("64"):
toolchain += "-x86_64"
elif host_platform == "Linux":
@@ -227,36 +220,51 @@ elif target_platform == 'android':
# Get architecture info
arch_info_table = {
- "armv7" : {
- "march":"armv7-a", "target":"armv7a-linux-androideabi", "tool_path":"arm-linux-androideabi", "compiler_path":"armv7a-linux-androideabi",
- "ccflags" : ['-mfpu=neon']
- },
- "arm64v8" : {
- "march":"armv8-a", "target":"aarch64-linux-android", "tool_path":"aarch64-linux-android", "compiler_path":"aarch64-linux-android",
- "ccflags" : []
- },
- "x86" : {
- "march":"i686", "target":"i686-linux-android", "tool_path":"i686-linux-android", "compiler_path":"i686-linux-android",
- "ccflags" : ['-mstackrealign']
- },
- "x86_64" : {"march":"x86-64", "target":"x86_64-linux-android", "tool_path":"x86_64-linux-android", "compiler_path":"x86_64-linux-android",
- "ccflags" : []
- }
+ "armv7": {
+ "march": "armv7-a",
+ "target": "armv7a-linux-androideabi",
+ "tool_path": "arm-linux-androideabi",
+ "compiler_path": "armv7a-linux-androideabi",
+ "ccflags": ["-mfpu=neon"],
+ },
+ "arm64v8": {
+ "march": "armv8-a",
+ "target": "aarch64-linux-android",
+ "tool_path": "aarch64-linux-android",
+ "compiler_path": "aarch64-linux-android",
+ "ccflags": [],
+ },
+ "x86": {
+ "march": "i686",
+ "target": "i686-linux-android",
+ "tool_path": "i686-linux-android",
+ "compiler_path": "i686-linux-android",
+ "ccflags": ["-mstackrealign"],
+ },
+ "x86_64": {
+ "march": "x86-64",
+ "target": "x86_64-linux-android",
+ "tool_path": "x86_64-linux-android",
+ "compiler_path": "x86_64-linux-android",
+ "ccflags": [],
+ },
}
arch_info = arch_info_table[target_arch]
# Setup tools
- env['CC'] = toolchain + "/bin/clang"
- env['CXX'] = toolchain + "/bin/clang++"
+ env["CC"] = toolchain + "/bin/clang"
+ env["CXX"] = toolchain + "/bin/clang++"
- env.Append(CCFLAGS=['--target=' + arch_info['target'] + env['android_api_level'], '-march=' + arch_info['march'], '-fPIC'])
- env.Append(CCFLAGS=arch_info['ccflags'])
- env.Append(LINKFLAGS=['--target=' + arch_info['target'] + env['android_api_level'], '-march=' + arch_info['march']])
+ env.Append(
+ CCFLAGS=["--target=" + arch_info["target"] + env["android_api_level"], "-march=" + arch_info["march"], "-fPIC"]
+ )
+ env.Append(CCFLAGS=arch_info["ccflags"])
+ env.Append(LINKFLAGS=["--target=" + arch_info["target"] + env["android_api_level"], "-march=" + arch_info["march"]])
- if env['target'] == 'debug':
- env.Append(CCFLAGS=['-Og', '-g'])
- elif env['target'] == 'release':
- env.Append(CCFLAGS=['-O3'])
+ if env["target"] == "debug":
+ env.Append(CCFLAGS=["-Og", "-g"])
+ elif env["target"] == "release":
+ env.Append(CCFLAGS=["-O3"])
else:
print("No valid target platform selected.")
@@ -264,34 +272,41 @@ else:
# Godot CPP bindings
env.Append(CPPPATH=[godot_headers])
-env.Append(CPPPATH=[godot_cpp_headers, godot_cpp_headers + '/core', godot_cpp_headers + '/gen'])
+env.Append(CPPPATH=[godot_cpp_headers, godot_cpp_headers + "/core", godot_cpp_headers + "/gen"])
env.Append(LIBPATH=[godot_cpp_lib_dir])
-env.Append(LIBS=['%sgodot-cpp.%s.%s.%s%s' % (lib_prefix, target_platform, target, target_arch, ".simulator" if env["ios_simulator"] else "")])
+env.Append(
+ LIBS=[
+ "%sgodot-cpp.%s.%s.%s%s"
+ % (lib_prefix, target_platform, target, target_arch, ".simulator" if env["ios_simulator"] else "")
+ ]
+)
# WebRTC stuff
webrtc_dir = "webrtc"
-lib_name = 'libwebrtc_full'
+lib_name = "libwebrtc_full"
lib_path = os.path.join(webrtc_dir, target_platform)
-lib_path += {'32': '/x86',
- '64': '/x64',
- 'armv7': '/arm',
- 'arm64v8': '/arm64',
- 'arm64': '/arm64',
- 'x86': '/x86',
- 'x86_64': '/x64'}[target_arch]
-
-if target == 'debug':
- lib_path += '/Debug'
+lib_path += {
+ "32": "/x86",
+ "64": "/x64",
+ "armv7": "/arm",
+ "arm64v8": "/arm64",
+ "arm64": "/arm64",
+ "x86": "/x86",
+ "x86_64": "/x64",
+}[target_arch]
+
+if target == "debug":
+ lib_path += "/Debug"
else:
- lib_path += '/Release'
+ lib_path += "/Release"
env.Append(CPPPATH=[webrtc_dir + "/include", webrtc_dir + "/include/third_party/abseil-cpp"])
if target_platform == "linux":
env.Append(LIBS=[lib_name, "atomic"])
env.Append(LIBPATH=[lib_path])
- #env.Append(CCFLAGS=["-std=c++11"])
+ # env.Append(CCFLAGS=["-std=c++11"])
env.Append(CCFLAGS=["-DWEBRTC_POSIX", "-DWEBRTC_LINUX"])
env.Append(CCFLAGS=["-DRTC_UNUSED=''", "-DNO_RETURN=''"])
@@ -303,7 +318,17 @@ elif target_platform == "windows":
env.Append(LIBPATH=[lib_path])
# Mostly "gcc"
else:
- env.Append(CCFLAGS=["-DWINVER=0x0603", "-D_WIN32_WINNT=0x0603", "-DWEBRTC_WIN", "-DWIN32_LEAN_AND_MEAN", "-DNOMINMAX", "-DRTC_UNUSED=", "-DNO_RETURN="])
+ env.Append(
+ CCFLAGS=[
+ "-DWINVER=0x0603",
+ "-D_WIN32_WINNT=0x0603",
+ "-DWEBRTC_WIN",
+ "-DWIN32_LEAN_AND_MEAN",
+ "-DNOMINMAX",
+ "-DRTC_UNUSED=",
+ "-DNO_RETURN=",
+ ]
+ )
env.Append(LINKFLAGS=[p + env["LIBSUFFIX"] for p in ["secur32", "advapi32", "winmm", lib_name]])
env.Append(LIBPATH=[lib_path])
@@ -313,42 +338,42 @@ elif target_platform == "osx":
env.Append(CCFLAGS=["-DWEBRTC_POSIX", "-DWEBRTC_MAC"])
env.Append(CCFLAGS=["-DRTC_UNUSED=''", "-DNO_RETURN=''"])
-elif target_platform == 'ios':
+elif target_platform == "ios":
env.Append(LIBS=[lib_name])
env.Append(LIBPATH=[lib_path])
env.Append(CCFLAGS=["-DWEBRTC_POSIX", "-DWEBRTC_MAC", "-DWEBRTC_IOS"])
env.Append(CCFLAGS=["-DRTC_UNUSED=''", "-DNO_RETURN=''"])
elif target_platform == "android":
- env.Append(LIBS=['log'])
+ env.Append(LIBS=["log"])
env.Append(LIBS=[lib_name])
env.Append(LIBPATH=[lib_path])
env.Append(CCFLAGS=["-DWEBRTC_POSIX", "-DWEBRTC_LINUX", "-DWEBRTC_ANDROID"])
env.Append(CCFLAGS=["-DRTC_UNUSED=''", "-DNO_RETURN=''"])
- if target_arch == 'arm64v8':
+ if target_arch == "arm64v8":
env.Append(CCFLAGS=["-DWEBRTC_ARCH_ARM64", "-DWEBRTC_HAS_NEON"])
- elif target_arch == 'armv7':
+ elif target_arch == "armv7":
env.Append(CCFLAGS=["-DWEBRTC_ARCH_ARM", "-DWEBRTC_ARCH_ARM_V7", "-DWEBRTC_HAS_NEON"])
# Our includes and sources
-env.Append(CPPPATH=['src/'])
+env.Append(CPPPATH=["src/"])
sources = []
-add_sources(sources, 'src/', 'cpp')
-add_sources(sources, 'src/net/', 'cpp')
+add_sources(sources, "src/", "cpp")
+add_sources(sources, "src/net/", "cpp")
# Suffix
-suffix = '.%s.%s' % (target, target_arch)
+suffix = ".%s.%s" % (target, target_arch)
env["SHOBJSUFFIX"] = suffix + env["SHOBJSUFFIX"]
# Make the shared library
-result_name = 'webrtc_native.%s.%s.%s' % (target_platform, target, target_arch) + env["SHLIBSUFFIX"]
+result_name = "webrtc_native.%s.%s.%s" % (target_platform, target, target_arch) + env["SHLIBSUFFIX"]
library = env.SharedLibrary(target=os.path.join(result_path, result_name), source=sources)
Default(library)
# GDNativeLibrary
-gdnlib = 'webrtc'
-if target != 'release':
- gdnlib += '_debug'
-Default(env.GDNativeLibBuilder([os.path.join('bin', gdnlib, gdnlib + '.tres')], ['misc/gdnlib.tres']))
+gdnlib = "webrtc"
+if target != "release":
+ gdnlib += "_debug"
+Default(env.GDNativeLibBuilder([os.path.join("bin", gdnlib, gdnlib + ".tres")], ["misc/gdnlib.tres"]))
diff --git a/misc/scripts/black_format.sh b/misc/scripts/black_format.sh
new file mode 100755
index 0000000..f6b7925
--- /dev/null
+++ b/misc/scripts/black_format.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+# This script runs black on all Python files in the repo.
+
+set -uo pipefail
+
+# Apply black.
+echo -e "Formatting Python files..."
+PY_FILES=$(find \( -path "./.git" \
+ -o -path "./webrtc" \
+ -o -path "./godot-cpp" \
+ \) -prune \
+ -o \( -name "SConstruct" \
+ -o -name "SCsub" \
+ -o -name "*.py" \
+ \) -print)
+black -l 120 $PY_FILES
+
+git diff > patch.patch
+
+# If no patch has been generated all is OK, clean up, and exit.
+if [ ! -s patch.patch ] ; then
+ printf "Files in this commit comply with the black style rules.\n"
+ rm -f patch.patch
+ exit 0
+fi
+
+# A patch has been created, notify the user, clean up, and exit.
+printf "\n*** The following differences were found between the code "
+printf "and the formatting rules:\n\n"
+cat patch.patch
+printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
+rm -f patch.patch
+exit 1
diff --git a/misc/scripts/clang_format.sh b/misc/scripts/clang_format.sh
new file mode 100755
index 0000000..63c66d4
--- /dev/null
+++ b/misc/scripts/clang_format.sh
@@ -0,0 +1,58 @@
+#!/usr/bin/env bash
+
+# This script runs clang-format and fixes copyright headers on all relevant files in the repo.
+# This is the primary script responsible for fixing style violations.
+
+set -uo pipefail
+IFS=$'\n\t'
+
+CLANG_FORMAT_FILE_EXTS=(".c" ".h" ".cpp" ".hpp" ".cc" ".hh" ".cxx" ".m" ".mm" ".inc" ".java" ".glsl")
+
+# Loops through all text files tracked by Git.
+git grep -zIl '' |
+while IFS= read -rd '' f; do
+ # Exclude some files.
+ if [[ "$f" == "thirdparty"* ]]; then
+ continue
+ elif [[ "$f" == "platform/android/java/lib/src/com/google"* ]]; then
+ continue
+ elif [[ "$f" == *"-so_wrap."* ]]; then
+ continue
+ fi
+
+ for extension in ${CLANG_FORMAT_FILE_EXTS[@]}; do
+ if [[ "$f" == *"$extension" ]]; then
+ # Run clang-format.
+ clang-format -i "$f"
+ # Fix copyright headers, but not all files get them.
+ if [[ "$f" == *"inc" ]]; then
+ continue 2
+ elif [[ "$f" == *"glsl" ]]; then
+ continue 2
+ elif [[ "$f" == *"theme_data.h" ]]; then
+ continue 2
+ elif [[ "$f" == "platform/android/java/lib/src/org/godotengine/godot/input/InputManager"* ]]; then
+ continue 2
+ fi
+ python misc/scripts/copyright_headers.py "$f"
+ continue 2
+ fi
+ done
+done
+
+git diff > patch.patch
+
+# If no patch has been generated all is OK, clean up, and exit.
+if [ ! -s patch.patch ] ; then
+ printf "Files in this commit comply with the clang-format style rules.\n"
+ rm -f patch.patch
+ exit 0
+fi
+
+# A patch has been created, notify the user, clean up, and exit.
+printf "\n*** The following differences were found between the code "
+printf "and the formatting rules:\n\n"
+cat patch.patch
+printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
+rm -f patch.patch
+exit 1
diff --git a/misc/scripts/copyright_headers.py b/misc/scripts/copyright_headers.py
new file mode 100755
index 0000000..2f3e4a1
--- /dev/null
+++ b/misc/scripts/copyright_headers.py
@@ -0,0 +1,95 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import sys
+
+header = """\
+/*************************************************************************/
+/* $filename */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+"""
+
+fname = sys.argv[1]
+
+# Handle replacing $filename with actual filename and keep alignment
+fsingle = fname.strip()
+if fsingle.find("/") != -1:
+ fsingle = fsingle[fsingle.rfind("/") + 1 :]
+rep_fl = "$filename"
+rep_fi = fsingle
+len_fl = len(rep_fl)
+len_fi = len(rep_fi)
+# Pad with spaces to keep alignment
+if len_fi < len_fl:
+ for x in range(len_fl - len_fi):
+ rep_fi += " "
+elif len_fl < len_fi:
+ for x in range(len_fi - len_fl):
+ rep_fl += " "
+if header.find(rep_fl) != -1:
+ text = header.replace(rep_fl, rep_fi)
+else:
+ text = header.replace("$filename", fsingle)
+text += "\n"
+
+# We now have the proper header, so we want to ignore the one in the original file
+# and potentially empty lines and badly formatted lines, while keeping comments that
+# come after the header, and then keep everything non-header unchanged.
+# To do so, we skip empty lines that may be at the top in a first pass.
+# In a second pass, we skip all consecutive comment lines starting with "/*",
+# then we can append the rest (step 2).
+
+fileread = open(fname.strip(), "r")
+line = fileread.readline()
+header_done = False
+
+while line.strip() == "": # Skip empty lines at the top
+ line = fileread.readline()
+
+if line.find("/**********") == -1: # Godot header starts this way
+ # Maybe starting with a non-Godot comment, abort header magic
+ header_done = True
+
+while not header_done: # Handle header now
+ if line.find("/*") != 0: # No more starting with a comment
+ header_done = True
+ if line.strip() != "":
+ text += line
+ line = fileread.readline()
+
+while line != "": # Dump everything until EOF
+ text += line
+ line = fileread.readline()
+
+fileread.close()
+
+# Write
+filewrite = open(fname.strip(), "w")
+filewrite.write(text)
+filewrite.close()
diff --git a/misc/scripts/file_format.sh b/misc/scripts/file_format.sh
new file mode 100755
index 0000000..e6e1fe2
--- /dev/null
+++ b/misc/scripts/file_format.sh
@@ -0,0 +1,48 @@
+#!/usr/bin/env bash
+
+# This script ensures proper POSIX text file formatting and a few other things.
+# This is supplementary to clang_format.sh and black_format.sh, but should be
+# run before them.
+
+# We need dos2unix and recode.
+if [ ! -x "$(command -v dos2unix)" -o ! -x "$(command -v recode)" ]; then
+ printf "Install 'dos2unix' and 'recode' to use this script.\n"
+fi
+
+set -uo pipefail
+IFS=$'\n\t'
+
+# Loops through all text files tracked by Git.
+git grep -zIl '' |
+while IFS= read -rd '' f; do
+ # Exclude some types of files.
+ if [[ "$f" == "webrtc"* ]]; then
+ continue
+ elif [[ "$f" == "godot-cpp"* ]]; then
+ continue
+ fi
+ # Ensure that files are UTF-8 formatted.
+ recode UTF-8 "$f" 2> /dev/null
+ # Ensure that files have LF line endings and do not contain a BOM.
+ dos2unix "$f" 2> /dev/null
+ # Remove trailing space characters and ensures that files end
+ # with newline characters. -l option handles newlines conveniently.
+ perl -i -ple 's/\s*$//g' "$f"
+done
+
+git diff > patch.patch
+
+# If no patch has been generated all is OK, clean up, and exit.
+if [ ! -s patch.patch ] ; then
+ printf "Files in this commit comply with the formatting rules.\n"
+ rm -f patch.patch
+ exit 0
+fi
+
+# A patch has been created, notify the user, clean up, and exit.
+printf "\n*** The following differences were found between the code "
+printf "and the formatting rules:\n\n"
+cat patch.patch
+printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n"
+rm -f patch.patch
+exit 1
diff --git a/src/WebRTCLibDataChannel.cpp b/src/WebRTCLibDataChannel.cpp
index d64d082..f29d562 100644
--- a/src/WebRTCLibDataChannel.cpp
+++ b/src/WebRTCLibDataChannel.cpp
@@ -1,3 +1,33 @@
+/*************************************************************************/
+/* WebRTCLibDataChannel.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
#include "WebRTCLibDataChannel.hpp"
#include "GDNativeLibrary.hpp"
@@ -40,7 +70,6 @@ WebRTCLibDataChannel *WebRTCLibDataChannel::new_data_channel(rtc::scoped_refptr<
return tmp;
}
-
void WebRTCLibDataChannel::bind_channel(rtc::scoped_refptr<webrtc::DataChannelInterface> p_channel) {
ERR_FAIL_COND(p_channel.get() == nullptr);
@@ -120,7 +149,7 @@ godot_error WebRTCLibDataChannel::poll() {
}
void WebRTCLibDataChannel::close() {
- if(channel.get() != nullptr) {
+ if (channel.get() != nullptr) {
channel->Close();
channel->UnregisterObserver();
}
@@ -167,7 +196,8 @@ void WebRTCLibDataChannel::_init() {
register_interface(&interface);
}
-WebRTCLibDataChannel::WebRTCLibDataChannel() : observer(this) {
+WebRTCLibDataChannel::WebRTCLibDataChannel() :
+ observer(this) {
mutex = new std::mutex;
}
diff --git a/src/WebRTCLibDataChannel.hpp b/src/WebRTCLibDataChannel.hpp
index decba98..1d1ce0f 100644
--- a/src/WebRTCLibDataChannel.hpp
+++ b/src/WebRTCLibDataChannel.hpp
@@ -1,3 +1,33 @@
+/*************************************************************************/
+/* WebRTCLibDataChannel.hpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
#ifndef WEBRTC_DATA_CHANNEL_H
#define WEBRTC_DATA_CHANNEL_H
@@ -6,8 +36,8 @@
#include "api/peer_connection_interface.h" // interface for all things needed from WebRTC
#include "media/base/media_engine.h" // needed for CreateModularPeerConnectionFactory
-#include "net/WebRTCDataChannelNative.hpp"
#include "PoolArrays.hpp"
+#include "net/WebRTCDataChannelNative.hpp"
#include <mutex>
namespace godot_webrtc {
diff --git a/src/WebRTCLibPeerConnection.cpp b/src/WebRTCLibPeerConnection.cpp
index eb4e8cc..d090654 100644
--- a/src/WebRTCLibPeerConnection.cpp
+++ b/src/WebRTCLibPeerConnection.cpp
@@ -1,6 +1,36 @@
+/*************************************************************************/
+/* WebRTCLibPeerConnection.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
+#include "WebRTCLibPeerConnection.hpp"
#include "WebRTCDataChannel.hpp"
#include "WebRTCDataChannelGDNative.hpp"
-#include "WebRTCLibPeerConnection.hpp"
#include "WebRTCLibDataChannel.hpp"
using namespace godot_webrtc;
@@ -84,7 +114,12 @@ godot_error _parse_ice_server(webrtc::PeerConnectionInterface::RTCConfiguration
godot_error _parse_channel_config(webrtc::DataChannelInit &r_config, godot::Dictionary p_dict) {
godot::Variant v;
-#define _SET_N(PROP, PNAME, TYPE) if (p_dict.has(#PROP)) { v = p_dict[#PROP]; if(v.get_type() == godot::Variant::TYPE) r_config.PNAME = v; }
+#define _SET_N(PROP, PNAME, TYPE) \
+ if (p_dict.has(#PROP)) { \
+ v = p_dict[#PROP]; \
+ if (v.get_type() == godot::Variant::TYPE) \
+ r_config.PNAME = v; \
+ }
#define _SET(PROP, TYPE) _SET_N(PROP, PROP, TYPE)
_SET(negotiated, BOOL);
_SET(id, INT);
@@ -107,7 +142,7 @@ WebRTCLibPeerConnection::ConnectionState WebRTCLibPeerConnection::get_connection
ERR_FAIL_COND_V(peer_connection.get() == nullptr, STATE_CLOSED);
webrtc::PeerConnectionInterface::IceConnectionState state = peer_connection->ice_connection_state();
- switch(state) {
+ switch (state) {
case webrtc::PeerConnectionInterface::kIceConnectionNew:
return STATE_NEW;
case webrtc::PeerConnectionInterface::kIceConnectionChecking:
@@ -218,7 +253,7 @@ void WebRTCLibPeerConnection::close() {
peer_connection->Close();
}
peer_connection = nullptr;
- while(!signal_queue.empty()) {
+ while (!signal_queue.empty()) {
signal_queue.pop();
}
}
diff --git a/src/WebRTCLibPeerConnection.hpp b/src/WebRTCLibPeerConnection.hpp
index 85ef33f..a265bc1 100644
--- a/src/WebRTCLibPeerConnection.hpp
+++ b/src/WebRTCLibPeerConnection.hpp
@@ -1,3 +1,33 @@
+/*************************************************************************/
+/* WebRTCLibPeerConnection.hpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
#ifndef WEBRTC_PEER_H
#define WEBRTC_PEER_H
@@ -18,6 +48,7 @@ private:
godot_error _create_pc(webrtc::PeerConnectionInterface::RTCConfiguration &config);
static std::unique_ptr<rtc::Thread> signaling_thread;
+
public:
static void _register_methods();
static void initialize_signaling();
@@ -97,6 +128,7 @@ private:
godot::String method;
godot::Variant argv[3];
int argc = 0;
+
public:
Signal(godot::String p_method, int p_argc, const godot::Variant *p_argv) {
method = p_method;
diff --git a/src/init.cpp b/src/init.cpp
index a9a64ad..a6066c3 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1,3 +1,33 @@
+/*************************************************************************/
+/* init.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
#include "WebRTCLibDataChannel.hpp"
#include "WebRTCLibPeerConnection.hpp"
#include "net/WebRTCPeerConnectionNative.hpp"
@@ -34,14 +64,14 @@ godot_error create_peer_connection_wp(godot_object *out) {
_singleton_api->godot_string_destroy(&s);
// Bind script to Object
- const void *args3[] = { (void *)script };
+ const void *args3[] = { (void *)script };
_singleton_api->godot_method_bind_ptrcall(_set_script_mb, out, args3, nullptr);
return GODOT_OK;
}
godot_net_webrtc_library library = {
- {3, 2},
+ { 3, 2 },
&unregistered,
&create_peer_connection_wp,
NULL,
@@ -72,7 +102,6 @@ extern "C" void GDN_EXPORT godot_gdnative_singleton() {
extern "C" void GDN_EXPORT godot_gdnative_init(godot_gdnative_init_options *o) {
const godot_gdnative_core_api_struct *api = o->api_struct;
for (int i = 0; i < api->num_extensions; i++) {
-
if (api->extensions[i]->type != GDNATIVE_EXT_NET)
continue;
diff --git a/src/net/WebRTCDataChannelNative.cpp b/src/net/WebRTCDataChannelNative.cpp
index 8e1d3b1..86d0afa 100644
--- a/src/net/WebRTCDataChannelNative.cpp
+++ b/src/net/WebRTCDataChannelNative.cpp
@@ -1,3 +1,33 @@
+/*************************************************************************/
+/* WebRTCDataChannelNative.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
#include "WebRTCDataChannelNative.hpp"
#include "net/WebRTCPeerConnectionNative.hpp"
diff --git a/src/net/WebRTCDataChannelNative.hpp b/src/net/WebRTCDataChannelNative.hpp
index eaeb95d..37b8616 100644
--- a/src/net/WebRTCDataChannelNative.hpp
+++ b/src/net/WebRTCDataChannelNative.hpp
@@ -1,3 +1,33 @@
+/*************************************************************************/
+/* WebRTCDataChannelNative.hpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
#ifndef WEBRTC_DATA_CHANNEL_NATIVE
#define WEBRTC_DATA_CHANNEL_NATIVE
diff --git a/src/net/WebRTCPeerConnectionNative.cpp b/src/net/WebRTCPeerConnectionNative.cpp
index 5f7d83e..c8c7587 100644
--- a/src/net/WebRTCPeerConnectionNative.cpp
+++ b/src/net/WebRTCPeerConnectionNative.cpp
@@ -1,3 +1,33 @@
+/*************************************************************************/
+/* WebRTCPeerConnectionNative.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
#include "WebRTCPeerConnectionNative.hpp"
const godot_gdnative_ext_net_3_2_api_struct *WebRTCPeerConnectionNative::_net_api = NULL;
diff --git a/src/net/WebRTCPeerConnectionNative.hpp b/src/net/WebRTCPeerConnectionNative.hpp
index 3b0ac79..fb75a46 100644
--- a/src/net/WebRTCPeerConnectionNative.hpp
+++ b/src/net/WebRTCPeerConnectionNative.hpp
@@ -1,3 +1,33 @@
+/*************************************************************************/
+/* WebRTCPeerConnectionNative.hpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* https://godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
+/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+
#ifndef WEBRTC_PEER_NATIVE
#define WEBRTC_PEER_NATIVE