diff --git a/build.gradle b/build.gradle
index f521dda49..64f9cdfbc 100644
--- a/build.gradle
+++ b/build.gradle
@@ -140,6 +140,8 @@ dependencies {
include project(':events')
include project(':events-domain')
include project(':api')
+ include project(':http-domain')
+ include project(':http')
}
def javadocSourceProjects = providers.provider {
diff --git a/http-domain/.gitignore b/http-domain/.gitignore
new file mode 100644
index 000000000..796b96d1c
--- /dev/null
+++ b/http-domain/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/http-domain/README.md b/http-domain/README.md
new file mode 100644
index 000000000..362956fbb
--- /dev/null
+++ b/http-domain/README.md
@@ -0,0 +1,5 @@
+# HTTP Domain module
+
+This module contains public HTTP configuration contracts exposed to consumers of the Split SDK.
+
+Includes certificate pinning configuration, proxy settings, SSL configuration, and authenticator interfaces.
diff --git a/http-domain/build.gradle b/http-domain/build.gradle
new file mode 100644
index 000000000..05b24204a
--- /dev/null
+++ b/http-domain/build.gradle
@@ -0,0 +1,22 @@
+plugins {
+ id 'com.android.library'
+}
+
+apply from: "$rootDir/gradle/common-android-library.gradle"
+
+android {
+ namespace 'io.split.android.client.network.domain'
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation libs.annotation
+ implementation project(':logger')
+
+ testImplementation libs.junit4
+ testImplementation libs.mockitoCore
+}
diff --git a/http-domain/consumer-rules.pro b/http-domain/consumer-rules.pro
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/http-domain/consumer-rules.pro
@@ -0,0 +1 @@
+
diff --git a/http-domain/proguard-rules.pro b/http-domain/proguard-rules.pro
new file mode 100644
index 000000000..f1b424510
--- /dev/null
+++ b/http-domain/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/http-domain/src/main/AndroidManifest.xml b/http-domain/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..8bdb7e14b
--- /dev/null
+++ b/http-domain/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/http/.gitignore b/http/.gitignore
new file mode 100644
index 000000000..796b96d1c
--- /dev/null
+++ b/http/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/http/README.md b/http/README.md
new file mode 100644
index 000000000..199f22805
--- /dev/null
+++ b/http/README.md
@@ -0,0 +1,5 @@
+# HTTP module
+
+This module provides the HTTP client implementation used internally by the Split SDK.
+
+Includes request/response lifecycle, certificate pinning runtime, proxy tunnelling, and TLS configuration. Hidden from SDK consumers.
diff --git a/http/build.gradle b/http/build.gradle
new file mode 100644
index 000000000..85ef7d707
--- /dev/null
+++ b/http/build.gradle
@@ -0,0 +1,26 @@
+plugins {
+ id 'com.android.library'
+}
+
+apply from: "$rootDir/gradle/common-android-library.gradle"
+
+android {
+ namespace 'io.split.android.client.network.http'
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation libs.annotation
+ implementation project(':logger')
+ implementation project(':http-domain')
+
+ testImplementation libs.junit4
+ testImplementation libs.mockitoCore
+ testImplementation libs.mockitoInline
+ testImplementation libs.okhttpMockwebserver
+ testImplementation libs.okhttpTls
+}
diff --git a/http/consumer-rules.pro b/http/consumer-rules.pro
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/http/consumer-rules.pro
@@ -0,0 +1 @@
+
diff --git a/http/proguard-rules.pro b/http/proguard-rules.pro
new file mode 100644
index 000000000..f1b424510
--- /dev/null
+++ b/http/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/http/src/main/AndroidManifest.xml b/http/src/main/AndroidManifest.xml
new file mode 100644
index 000000000..8bdb7e14b
--- /dev/null
+++ b/http/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/main/build.gradle b/main/build.gradle
index 7ec1e3110..70d932be8 100644
--- a/main/build.gradle
+++ b/main/build.gradle
@@ -52,7 +52,9 @@ dependencies {
// Public api modules
api project(':logger')
api project(':api')
+ api project(':http-domain')
// Internal module dependencies
+ implementation project(':http')
implementation project(':events-domain')
// External dependencies
diff --git a/settings.gradle b/settings.gradle
index b584365a6..7eaafe2d3 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -2,6 +2,8 @@ rootProject.name = 'android-client'
include ':api'
include ':logger'
+include ':http-domain'
+include ':http'
include ':main'
include ':events'
include ':events-domain'
diff --git a/sonar-project.properties b/sonar-project.properties
index f598dd559..a3cc5e80d 100644
--- a/sonar-project.properties
+++ b/sonar-project.properties
@@ -3,15 +3,17 @@ sonar.projectKey=splitio_android-client
sonar.projectName=android-client
# Path to source directories (multi-module)
-# Root project contains modules: main, events, logger
-sonar.sources=main/src/main/java,events/src/main/java,logger/src/main/java
+# Root project contains modules: main, events, logger, http-domain, http
+sonar.sources=main/src/main/java,events/src/main/java,logger/src/main/java,http-domain/src/main/java,http/src/main/java
# Path to compiled classes (multi-module)
-# Include binary paths for all modules: main, events, logger
+# Include binary paths for all modules: main, events, logger, http-domain, http
sonar.java.binaries=\
main/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes,\
events/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes,\
- logger/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes
+ logger/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes,\
+ http-domain/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes,\
+ http/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes
# Path to dependency/libraries jars (multi-module)
sonar.java.libraries=\
@@ -26,11 +28,19 @@ sonar.java.libraries=\
logger/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar,\
logger/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar,\
logger/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar,\
- logger/build/intermediates/compile_and_runtime_r_class_jar/debugUnitTest/generateDebugUnitTestStubRFile/R.jar
+ logger/build/intermediates/compile_and_runtime_r_class_jar/debugUnitTest/generateDebugUnitTestStubRFile/R.jar,\
+ http-domain/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar,\
+ http-domain/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar,\
+ http-domain/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar,\
+ http-domain/build/intermediates/compile_and_runtime_r_class_jar/debugUnitTest/generateDebugUnitTestStubRFile/R.jar,\
+ http/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar,\
+ http/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar,\
+ http/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar,\
+ http/build/intermediates/compile_and_runtime_r_class_jar/debugUnitTest/generateDebugUnitTestStubRFile/R.jar
# Path to test directories (multi-module)
# Only include test source folders that are guaranteed to exist in all environments
-sonar.tests=main/src/test/java,main/src/androidTest/java,main/src/sharedTest/java,events/src/test/java,logger/src/test/java
+sonar.tests=main/src/test/java,main/src/androidTest/java,main/src/sharedTest/java,events/src/test/java,logger/src/test/java,http-domain/src/test/java,http/src/test/java
# Encoding of the source code
sonar.sourceEncoding=UTF-8