ConfigFetchHttpClient.smali
.class public Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;
.super Ljava/lang/Object;
.source "com.google.firebase:firebase-config@@19.1.0"
# static fields
.field private static final API_KEY_HEADER:Ljava/lang/String; = "X-Goog-Api-Key"
.field private static final ETAG_HEADER:Ljava/lang/String; = "ETag"
.field private static final GMP_APP_ID_PATTERN:Ljava/util/regex/Pattern;
.field private static final IF_NONE_MATCH_HEADER:Ljava/lang/String; = "If-None-Match"
.field private static final X_ANDROID_CERT_HEADER:Ljava/lang/String; = "X-Android-Cert"
.field private static final X_ANDROID_PACKAGE_HEADER:Ljava/lang/String; = "X-Android-Package"
.field private static final X_GOOGLE_GFE_CAN_RETRY:Ljava/lang/String; = "X-Google-GFE-Can-Retry"
# instance fields
.field private final apiKey:Ljava/lang/String;
.field private final appId:Ljava/lang/String;
.field private final connectTimeoutInSeconds:J
.field private final context:Landroid/content/Context;
.field private final namespace:Ljava/lang/String;
.field private final projectNumber:Ljava/lang/String;
.field private final readTimeoutInSeconds:J
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 122
nop
.line 123
const-string v0, "^[^:]+:([0-9]+):(android|ios|web):([0-9a-f]+)"
invoke-static {v0}, Ljava/util/regex/Pattern;->compile(Ljava/lang/String;)Ljava/util/regex/Pattern;
move-result-object v0
sput-object v0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->GMP_APP_ID_PATTERN:Ljava/util/regex/Pattern;
.line 122
return-void
.end method
.method public constructor <init>(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JJ)V
.registers 10
.param p1, "context" # Landroid/content/Context;
.param p2, "appId" # Ljava/lang/String;
.param p3, "apiKey" # Ljava/lang/String;
.param p4, "namespace" # Ljava/lang/String;
.param p5, "connectTimeoutInSeconds" # J
.param p7, "readTimeoutInSeconds" # J
.line 96
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 97
iput-object p1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
.line 98
iput-object p2, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->appId:Ljava/lang/String;
.line 99
iput-object p3, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->apiKey:Ljava/lang/String;
.line 100
invoke-static {p2}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->extractProjectNumberFromAppId(Ljava/lang/String;)Ljava/lang/String;
move-result-object v0
iput-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->projectNumber:Ljava/lang/String;
.line 101
iput-object p4, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->namespace:Ljava/lang/String;
.line 102
iput-wide p5, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->connectTimeoutInSeconds:J
.line 103
iput-wide p7, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->readTimeoutInSeconds:J
.line 104
return-void
.end method
.method private backendHasUpdates(Lorg/json/JSONObject;)Z
.registers 5
.param p1, "response" # Lorg/json/JSONObject;
.line 343
const/4 v0, 0x1
:try_start_1
const-string/jumbo v1, "state"
invoke-virtual {p1, v1}, Lorg/json/JSONObject;->get(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v1
const-string v2, "NO_CHANGE"
invoke-virtual {v1, v2}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
move-result v1
:try_end_e
.catch Lorg/json/JSONException; {:try_start_1 .. :try_end_e} :catch_10
xor-int/2addr v0, v1
return v0
.line 344
:catch_10
move-exception v1
.line 347
.local v1, "e":Lorg/json/JSONException;
return v0
.end method
.method private createFetchRequestBody(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lorg/json/JSONObject;
.registers 9
.param p1, "instanceId" # Ljava/lang/String;
.param p2, "instanceIdToken" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/String;",
"Ljava/lang/String;",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;)",
"Lorg/json/JSONObject;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;
}
.end annotation
.line 282
.local p3, "analyticsUserProperties":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
.line 284
.local v0, "requestBodyMap":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/Object;>;"
if-eqz p1, :cond_8e
.line 287
const-string v1, "appInstanceId"
invoke-interface {v0, v1, p1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 289
const-string v1, "appInstanceIdToken"
invoke-interface {v0, v1, p2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 290
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->appId:Ljava/lang/String;
const-string v2, "appId"
invoke-interface {v0, v2, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 292
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
invoke-virtual {v1}, Landroid/content/Context;->getResources()Landroid/content/res/Resources;
move-result-object v1
invoke-virtual {v1}, Landroid/content/res/Resources;->getConfiguration()Landroid/content/res/Configuration;
move-result-object v1
iget-object v1, v1, Landroid/content/res/Configuration;->locale:Ljava/util/Locale;
.line 293
.local v1, "locale":Ljava/util/Locale;
invoke-virtual {v1}, Ljava/util/Locale;->getCountry()Ljava/lang/String;
move-result-object v2
const-string v3, "countryCode"
invoke-interface {v0, v3, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 294
invoke-virtual {v1}, Ljava/util/Locale;->toString()Ljava/lang/String;
move-result-object v2
const-string v3, "languageCode"
invoke-interface {v0, v3, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 296
sget v2, Landroid/os/Build$VERSION;->SDK_INT:I
invoke-static {v2}, Ljava/lang/Integer;->toString(I)Ljava/lang/String;
move-result-object v2
const-string v3, "platformVersion"
invoke-interface {v0, v3, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 298
invoke-static {}, Ljava/util/TimeZone;->getDefault()Ljava/util/TimeZone;
move-result-object v2
invoke-virtual {v2}, Ljava/util/TimeZone;->getID()Ljava/lang/String;
move-result-object v2
const-string/jumbo v3, "timeZone"
invoke-interface {v0, v3, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 301
:try_start_4f
iget-object v2, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
.line 302
invoke-virtual {v2}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
move-result-object v2
iget-object v3, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
invoke-virtual {v3}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
move-result-object v3
const/4 v4, 0x0
invoke-virtual {v2, v3, v4}, Landroid/content/pm/PackageManager;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;
move-result-object v2
.line 303
.local v2, "packageInfo":Landroid/content/pm/PackageInfo;
if-eqz v2, :cond_69
.line 304
const-string v3, "appVersion"
iget-object v4, v2, Landroid/content/pm/PackageInfo;->versionName:Ljava/lang/String;
invoke-interface {v0, v3, v4}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
:try_end_69
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_4f .. :try_end_69} :catch_6a
.line 308
.end local v2 # "packageInfo":Landroid/content/pm/PackageInfo;
:cond_69
goto :goto_6b
.line 306
:catch_6a
move-exception v2
.line 310
:goto_6b
iget-object v2, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
invoke-virtual {v2}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
move-result-object v2
const-string v3, "packageName"
invoke-interface {v0, v3, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 311
const-string/jumbo v2, "sdkVersion"
const-string v3, "19.1.0"
invoke-interface {v0, v2, v3}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 313
new-instance v2, Lorg/json/JSONObject;
invoke-direct {v2, p3}, Lorg/json/JSONObject;-><init>(Ljava/util/Map;)V
const-string v3, "analyticsUserProperties"
invoke-interface {v0, v3, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 315
new-instance v2, Lorg/json/JSONObject;
invoke-direct {v2, v0}, Lorg/json/JSONObject;-><init>(Ljava/util/Map;)V
return-object v2
.line 285
.end local v1 # "locale":Ljava/util/Locale;
:cond_8e
new-instance v1, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;
const-string v2, "Fetch failed: Firebase instance id is null."
invoke-direct {v1, v2}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method private static extractConfigs(Lorg/json/JSONObject;Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigContainer;
.registers 6
.param p0, "fetchResponse" # Lorg/json/JSONObject;
.param p1, "fetchTime" # Ljava/util/Date;
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;
}
.end annotation
.line 362
:try_start_0
invoke-static {}, Lcom/google/firebase/remoteconfig/internal/ConfigContainer;->newBuilder()Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;
move-result-object v0
invoke-virtual {v0, p1}, Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;->withFetchTime(Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;
move-result-object v0
:try_end_8
.catch Lorg/json/JSONException; {:try_start_0 .. :try_end_8} :catch_2b
.line 364
.local v0, "containerBuilder":Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;
const/4 v1, 0x0
.line 366
.local v1, "entries":Lorg/json/JSONObject;
:try_start_9
const-string v2, "entries"
invoke-virtual {p0, v2}, Lorg/json/JSONObject;->getJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
move-result-object v2
:try_end_f
.catch Lorg/json/JSONException; {:try_start_9 .. :try_end_f} :catch_11
move-object v1, v2
.line 369
goto :goto_12
.line 367
:catch_11
move-exception v2
.line 370
:goto_12
if-eqz v1, :cond_17
.line 371
:try_start_14
invoke-virtual {v0, v1}, Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;->replaceConfigsWith(Lorg/json/JSONObject;)Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;
:try_end_17
.catch Lorg/json/JSONException; {:try_start_14 .. :try_end_17} :catch_2b
.line 374
:cond_17
const/4 v2, 0x0
.line 376
.local v2, "experimentDescriptions":Lorg/json/JSONArray;
:try_start_18
const-string v3, "experimentDescriptions"
invoke-virtual {p0, v3}, Lorg/json/JSONObject;->getJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
move-result-object v3
:try_end_1e
.catch Lorg/json/JSONException; {:try_start_18 .. :try_end_1e} :catch_20
move-object v2, v3
.line 379
goto :goto_21
.line 377
:catch_20
move-exception v3
.line 380
:goto_21
if-eqz v2, :cond_26
.line 381
:try_start_23
invoke-virtual {v0, v2}, Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;->withAbtExperiments(Lorg/json/JSONArray;)Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;
.line 384
:cond_26
invoke-virtual {v0}, Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;->build()Lcom/google/firebase/remoteconfig/internal/ConfigContainer;
move-result-object v3
:try_end_2a
.catch Lorg/json/JSONException; {:try_start_23 .. :try_end_2a} :catch_2b
return-object v3
.line 385
.end local v0 # "containerBuilder":Lcom/google/firebase/remoteconfig/internal/ConfigContainer$Builder;
.end local v1 # "entries":Lorg/json/JSONObject;
.end local v2 # "experimentDescriptions":Lorg/json/JSONArray;
:catch_2b
move-exception v0
.line 386
.local v0, "e":Lorg/json/JSONException;
new-instance v1, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;
const-string v2, "Fetch failed: fetch response could not be parsed."
invoke-direct {v1, v2, v0}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.end method
.method private static extractProjectNumberFromAppId(Ljava/lang/String;)Ljava/lang/String;
.registers 3
.param p0, "gmpAppId" # Ljava/lang/String;
.line 126
sget-object v0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->GMP_APP_ID_PATTERN:Ljava/util/regex/Pattern;
invoke-virtual {v0, p0}, Ljava/util/regex/Pattern;->matcher(Ljava/lang/CharSequence;)Ljava/util/regex/Matcher;
move-result-object v0
.line 127
.local v0, "matcher":Ljava/util/regex/Matcher;
invoke-virtual {v0}, Ljava/util/regex/Matcher;->matches()Z
move-result v1
if-eqz v1, :cond_12
const/4 v1, 0x1
invoke-virtual {v0, v1}, Ljava/util/regex/Matcher;->group(I)Ljava/lang/String;
move-result-object v1
goto :goto_13
:cond_12
const/4 v1, 0x0
:goto_13
return-object v1
.end method
.method private getFetchResponseBody(Ljava/net/URLConnection;)Lorg/json/JSONObject;
.registers 7
.param p1, "urlConnection" # Ljava/net/URLConnection;
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;,
Lorg/json/JSONException;
}
.end annotation
.line 329
new-instance v0, Ljava/io/BufferedReader;
new-instance v1, Ljava/io/InputStreamReader;
.line 330
invoke-virtual {p1}, Ljava/net/URLConnection;->getInputStream()Ljava/io/InputStream;
move-result-object v2
const-string/jumbo v3, "utf-8"
invoke-direct {v1, v2, v3}, Ljava/io/InputStreamReader;-><init>(Ljava/io/InputStream;Ljava/lang/String;)V
invoke-direct {v0, v1}, Ljava/io/BufferedReader;-><init>(Ljava/io/Reader;)V
.line 331
.local v0, "br":Ljava/io/BufferedReader;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
.line 332
.local v1, "responseStringBuilder":Ljava/lang/StringBuilder;
const/4 v2, 0x0
.line 333
.local v2, "current":I
:goto_17
invoke-virtual {v0}, Ljava/io/BufferedReader;->read()I
move-result v3
move v2, v3
const/4 v4, -0x1
if-eq v3, v4, :cond_24
.line 334
int-to-char v3, v2
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
goto :goto_17
.line 337
:cond_24
new-instance v3, Lorg/json/JSONObject;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v4
invoke-direct {v3, v4}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V
return-object v3
.end method
.method private getFetchUrl(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
.registers 5
.param p1, "projectNumber" # Ljava/lang/String;
.param p2, "namespace" # Ljava/lang/String;
.line 228
const/4 v0, 0x2
new-array v0, v0, [Ljava/lang/Object;
const/4 v1, 0x0
aput-object p1, v0, v1
const/4 v1, 0x1
aput-object p2, v0, v1
const-string v1, "https://firebaseremoteconfig.googleapis.com/v1/projects/%s/namespaces/%s:fetch"
invoke-static {v1, v0}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method private getFingerprintHashForPackage()Ljava/lang/String;
.registers 6
.line 259
const-string v0, "FirebaseRemoteConfig"
const/4 v1, 0x0
:try_start_3
iget-object v2, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
iget-object v3, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
invoke-virtual {v3}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
move-result-object v3
invoke-static {v2, v3}, Lcom/google/android/gms/common/util/AndroidUtilsLight;->getPackageCertificateHashBytes(Landroid/content/Context;Ljava/lang/String;)[B
move-result-object v2
.line 261
.local v2, "hash":[B
if-nez v2, :cond_2c
.line 262
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "Could not get fingerprint hash for package: "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v4, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
invoke-virtual {v4}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
move-result-object v4
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-static {v0, v3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 263
return-object v1
.line 265
:cond_2c
const/4 v3, 0x0
invoke-static {v2, v3}, Lcom/google/android/gms/common/util/Hex;->bytesToStringUppercase([BZ)Ljava/lang/String;
move-result-object v0
:try_end_31
.catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_3 .. :try_end_31} :catch_32
return-object v0
.line 267
.end local v2 # "hash":[B
:catch_32
move-exception v2
.line 268
.local v2, "e":Landroid/content/pm/PackageManager$NameNotFoundException;
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
const-string v4, "No such package: "
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
iget-object v4, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
invoke-virtual {v4}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
move-result-object v4
invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v3
invoke-static {v0, v3, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
.line 269
return-object v1
.end method
.method private setCommonRequestHeaders(Ljava/net/HttpURLConnection;)V
.registers 4
.param p1, "urlConnection" # Ljava/net/HttpURLConnection;
.line 232
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->apiKey:Ljava/lang/String;
const-string v1, "X-Goog-Api-Key"
invoke-virtual {p1, v1, v0}, Ljava/net/HttpURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
.line 235
iget-object v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->context:Landroid/content/Context;
invoke-virtual {v0}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
move-result-object v0
const-string v1, "X-Android-Package"
invoke-virtual {p1, v1, v0}, Ljava/net/HttpURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
.line 236
invoke-direct {p0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->getFingerprintHashForPackage()Ljava/lang/String;
move-result-object v0
const-string v1, "X-Android-Cert"
invoke-virtual {p1, v1, v0}, Ljava/net/HttpURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
.line 239
const-string v0, "X-Google-GFE-Can-Retry"
const-string/jumbo v1, "yes"
invoke-virtual {p1, v0, v1}, Ljava/net/HttpURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
.line 242
const-string v0, "application/json"
const-string v1, "Content-Type"
invoke-virtual {p1, v1, v0}, Ljava/net/HttpURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
.line 243
const-string v1, "Accept"
invoke-virtual {p1, v1, v0}, Ljava/net/HttpURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
.line 244
return-void
.end method
.method private setCustomRequestHeaders(Ljava/net/HttpURLConnection;Ljava/util/Map;)V
.registers 7
.param p1, "urlConnection" # Ljava/net/HttpURLConnection;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/net/HttpURLConnection;",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;)V"
}
.end annotation
.line 249
.local p2, "customHeaders":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
invoke-interface {p2}, Ljava/util/Map;->entrySet()Ljava/util/Set;
move-result-object v0
invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;
move-result-object v0
:goto_8
invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z
move-result v1
if-eqz v1, :cond_24
invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v1
check-cast v1, Ljava/util/Map$Entry;
.line 250
.local v1, "customHeaderEntry":Ljava/util/Map$Entry;, "Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/String;>;"
invoke-interface {v1}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/lang/String;
invoke-interface {v1}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;
move-result-object v3
check-cast v3, Ljava/lang/String;
invoke-virtual {p1, v2, v3}, Ljava/net/HttpURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
.line 251
.end local v1 # "customHeaderEntry":Ljava/util/Map$Entry;, "Ljava/util/Map$Entry<Ljava/lang/String;Ljava/lang/String;>;"
goto :goto_8
.line 252
:cond_24
return-void
.end method
.method private setFetchRequestBody(Ljava/net/HttpURLConnection;[B)V
.registers 5
.param p1, "urlConnection" # Ljava/net/HttpURLConnection;
.param p2, "requestBody" # [B
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 320
array-length v0, p2
invoke-virtual {p1, v0}, Ljava/net/HttpURLConnection;->setFixedLengthStreamingMode(I)V
.line 321
new-instance v0, Ljava/io/BufferedOutputStream;
invoke-virtual {p1}, Ljava/net/HttpURLConnection;->getOutputStream()Ljava/io/OutputStream;
move-result-object v1
invoke-direct {v0, v1}, Ljava/io/BufferedOutputStream;-><init>(Ljava/io/OutputStream;)V
.line 322
.local v0, "out":Ljava/io/OutputStream;
invoke-virtual {v0, p2}, Ljava/io/OutputStream;->write([B)V
.line 323
invoke-virtual {v0}, Ljava/io/OutputStream;->flush()V
.line 324
invoke-virtual {v0}, Ljava/io/OutputStream;->close()V
.line 325
return-void
.end method
.method private setUpUrlConnection(Ljava/net/HttpURLConnection;Ljava/lang/String;Ljava/util/Map;)V
.registers 7
.param p1, "urlConnection" # Ljava/net/HttpURLConnection;
.param p2, "lastFetchEtag" # Ljava/lang/String;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/net/HttpURLConnection;",
"Ljava/lang/String;",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;)V"
}
.end annotation
.line 215
.local p3, "customHeaders":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
const/4 v0, 0x1
invoke-virtual {p1, v0}, Ljava/net/HttpURLConnection;->setDoOutput(Z)V
.line 216
sget-object v0, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
iget-wide v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->connectTimeoutInSeconds:J
invoke-virtual {v0, v1, v2}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J
move-result-wide v0
long-to-int v1, v0
invoke-virtual {p1, v1}, Ljava/net/HttpURLConnection;->setConnectTimeout(I)V
.line 217
sget-object v0, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit;
iget-wide v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->readTimeoutInSeconds:J
invoke-virtual {v0, v1, v2}, Ljava/util/concurrent/TimeUnit;->toMillis(J)J
move-result-wide v0
long-to-int v1, v0
invoke-virtual {p1, v1}, Ljava/net/HttpURLConnection;->setReadTimeout(I)V
.line 221
const-string v0, "If-None-Match"
invoke-virtual {p1, v0, p2}, Ljava/net/HttpURLConnection;->setRequestProperty(Ljava/lang/String;Ljava/lang/String;)V
.line 223
invoke-direct {p0, p1}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->setCommonRequestHeaders(Ljava/net/HttpURLConnection;)V
.line 224
invoke-direct {p0, p1, p3}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->setCustomRequestHeaders(Ljava/net/HttpURLConnection;Ljava/util/Map;)V
.line 225
return-void
.end method
# virtual methods
.method createHttpURLConnection()Ljava/net/HttpURLConnection;
.registers 4
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigException;
}
.end annotation
.line 136
:try_start_0
new-instance v0, Ljava/net/URL;
iget-object v1, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->projectNumber:Ljava/lang/String;
iget-object v2, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->namespace:Ljava/lang/String;
invoke-direct {p0, v1, v2}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->getFetchUrl(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
invoke-direct {v0, v1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V
.line 137
.local v0, "url":Ljava/net/URL;
invoke-virtual {v0}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;
move-result-object v1
check-cast v1, Ljava/net/HttpURLConnection;
:try_end_13
.catch Ljava/io/IOException; {:try_start_0 .. :try_end_13} :catch_14
return-object v1
.line 138
.end local v0 # "url":Ljava/net/URL;
:catch_14
move-exception v0
.line 139
.local v0, "e":Ljava/io/IOException;
new-instance v1, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigException;
invoke-virtual {v0}, Ljava/io/IOException;->getMessage()Ljava/lang/String;
move-result-object v2
invoke-direct {v1, v2}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigException;-><init>(Ljava/lang/String;)V
throw v1
.end method
.method fetch(Ljava/net/HttpURLConnection;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Ljava/util/Map;Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
.registers 12
.param p1, "urlConnection" # Ljava/net/HttpURLConnection;
.param p2, "instanceId" # Ljava/lang/String;
.param p3, "instanceIdToken" # Ljava/lang/String;
.param p5, "lastFetchETag" # Ljava/lang/String;
.param p7, "currentTime" # Ljava/util/Date;
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/net/HttpURLConnection;",
"Ljava/lang/String;",
"Ljava/lang/String;",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;",
"Ljava/lang/String;",
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/lang/String;",
">;",
"Ljava/util/Date;",
")",
"Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigException;
}
.end annotation
.line 173
.local p4, "analyticsUserProperties":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.local p6, "customHeaders":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
invoke-direct {p0, p1, p5, p6}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->setUpUrlConnection(Ljava/net/HttpURLConnection;Ljava/lang/String;Ljava/util/Map;)V
.line 178
nop
.line 179
:try_start_4
invoke-direct {p0, p2, p3, p4}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->createFetchRequestBody(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)Lorg/json/JSONObject;
move-result-object v0
.line 180
invoke-virtual {v0}, Lorg/json/JSONObject;->toString()Ljava/lang/String;
move-result-object v0
const-string/jumbo v1, "utf-8"
.line 181
invoke-virtual {v0, v1}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
move-result-object v0
.line 182
.local v0, "requestBody":[B
invoke-direct {p0, p1, v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->setFetchRequestBody(Ljava/net/HttpURLConnection;[B)V
.line 184
invoke-virtual {p1}, Ljava/net/HttpURLConnection;->connect()V
.line 186
invoke-virtual {p1}, Ljava/net/HttpURLConnection;->getResponseCode()I
move-result v1
.line 187
.local v1, "responseCode":I
const/16 v2, 0xc8
if-ne v1, v2, :cond_4d
.line 191
const-string v2, "ETag"
invoke-virtual {p1, v2}, Ljava/net/HttpURLConnection;->getHeaderField(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
.line 192
.local v2, "fetchResponseETag":Ljava/lang/String;
invoke-direct {p0, p1}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->getFetchResponseBody(Ljava/net/URLConnection;)Lorg/json/JSONObject;
move-result-object v3
:try_end_2b
.catch Ljava/io/IOException; {:try_start_4 .. :try_end_2b} :catch_5b
.catch Lorg/json/JSONException; {:try_start_4 .. :try_end_2b} :catch_59
.catchall {:try_start_4 .. :try_end_2b} :catchall_57
move-object v0, v3
.line 197
.end local v1 # "responseCode":I
.local v0, "fetchResponse":Lorg/json/JSONObject;
invoke-virtual {p1}, Ljava/net/HttpURLConnection;->disconnect()V
.line 200
:try_start_2f
invoke-virtual {p1}, Ljava/net/HttpURLConnection;->getInputStream()Ljava/io/InputStream;
move-result-object v1
invoke-virtual {v1}, Ljava/io/InputStream;->close()V
:try_end_36
.catch Ljava/io/IOException; {:try_start_2f .. :try_end_36} :catch_37
.line 202
goto :goto_39
.line 201
:catch_37
move-exception v1
.line 203
nop
.line 205
:goto_39
invoke-direct {p0, v0}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->backendHasUpdates(Lorg/json/JSONObject;)Z
move-result v1
if-nez v1, :cond_44
.line 206
invoke-static {p7}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;->forBackendHasNoUpdates(Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
move-result-object v1
return-object v1
.line 209
:cond_44
invoke-static {v0, p7}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->extractConfigs(Lorg/json/JSONObject;Ljava/util/Date;)Lcom/google/firebase/remoteconfig/internal/ConfigContainer;
move-result-object v1
.line 210
.local v1, "fetchedConfigs":Lcom/google/firebase/remoteconfig/internal/ConfigContainer;
invoke-static {v1, v2}, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;->forBackendUpdatesFetched(Lcom/google/firebase/remoteconfig/internal/ConfigContainer;Ljava/lang/String;)Lcom/google/firebase/remoteconfig/internal/ConfigFetchHandler$FetchResponse;
move-result-object v3
return-object v3
.line 188
.end local v2 # "fetchResponseETag":Ljava/lang/String;
.local v0, "requestBody":[B
.local v1, "responseCode":I
:cond_4d
:try_start_4d
new-instance v2, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;
.line 189
invoke-virtual {p1}, Ljava/net/HttpURLConnection;->getResponseMessage()Ljava/lang/String;
move-result-object v3
invoke-direct {v2, v1, v3}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigServerException;-><init>(ILjava/lang/String;)V
.end local p1 # "urlConnection":Ljava/net/HttpURLConnection;
.end local p2 # "instanceId":Ljava/lang/String;
.end local p3 # "instanceIdToken":Ljava/lang/String;
.end local p4 # "analyticsUserProperties":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.end local p5 # "lastFetchETag":Ljava/lang/String;
.end local p6 # "customHeaders":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.end local p7 # "currentTime":Ljava/util/Date;
throw v2
:try_end_57
.catch Ljava/io/IOException; {:try_start_4d .. :try_end_57} :catch_5b
.catch Lorg/json/JSONException; {:try_start_4d .. :try_end_57} :catch_59
.catchall {:try_start_4d .. :try_end_57} :catchall_57
.line 197
.end local v0 # "requestBody":[B
.end local v1 # "responseCode":I
.restart local p1 # "urlConnection":Ljava/net/HttpURLConnection;
.restart local p2 # "instanceId":Ljava/lang/String;
.restart local p3 # "instanceIdToken":Ljava/lang/String;
.restart local p4 # "analyticsUserProperties":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.restart local p5 # "lastFetchETag":Ljava/lang/String;
.restart local p6 # "customHeaders":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.restart local p7 # "currentTime":Ljava/util/Date;
:catchall_57
move-exception v0
goto :goto_64
.line 193
:catch_59
move-exception v0
goto :goto_5c
:catch_5b
move-exception v0
.line 194
.local v0, "e":Ljava/lang/Exception;
:goto_5c
:try_start_5c
new-instance v1, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;
const-string v2, "The client had an error while calling the backend!"
invoke-direct {v1, v2, v0}, Lcom/google/firebase/remoteconfig/FirebaseRemoteConfigClientException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
.end local p1 # "urlConnection":Ljava/net/HttpURLConnection;
.end local p2 # "instanceId":Ljava/lang/String;
.end local p3 # "instanceIdToken":Ljava/lang/String;
.end local p4 # "analyticsUserProperties":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.end local p5 # "lastFetchETag":Ljava/lang/String;
.end local p6 # "customHeaders":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.end local p7 # "currentTime":Ljava/util/Date;
throw v1
:try_end_64
.catchall {:try_start_5c .. :try_end_64} :catchall_57
.line 197
.end local v0 # "e":Ljava/lang/Exception;
.restart local p1 # "urlConnection":Ljava/net/HttpURLConnection;
.restart local p2 # "instanceId":Ljava/lang/String;
.restart local p3 # "instanceIdToken":Ljava/lang/String;
.restart local p4 # "analyticsUserProperties":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.restart local p5 # "lastFetchETag":Ljava/lang/String;
.restart local p6 # "customHeaders":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"
.restart local p7 # "currentTime":Ljava/util/Date;
:goto_64
invoke-virtual {p1}, Ljava/net/HttpURLConnection;->disconnect()V
.line 200
:try_start_67
invoke-virtual {p1}, Ljava/net/HttpURLConnection;->getInputStream()Ljava/io/InputStream;
move-result-object v1
invoke-virtual {v1}, Ljava/io/InputStream;->close()V
:try_end_6e
.catch Ljava/io/IOException; {:try_start_67 .. :try_end_6e} :catch_6f
.line 202
goto :goto_70
.line 201
:catch_6f
move-exception v1
.line 202
:goto_70
throw v0
.end method
.method public getConnectTimeoutInSeconds()J
.registers 3
.line 109
iget-wide v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->connectTimeoutInSeconds:J
return-wide v0
.end method
.method public getReadTimeoutInSeconds()J
.registers 3
.line 115
iget-wide v0, p0, Lcom/google/firebase/remoteconfig/internal/ConfigFetchHttpClient;->readTimeoutInSeconds:J
return-wide v0
.end method