.class public Lkz/qqqschulz/strike2d/LocalHostReceiver;
.super Landroid/content/BroadcastReceiver;
.source "LocalHostReceiver.java"
# direct methods
.method public constructor <init>()V
.locals 0
invoke-direct {p0}, Landroid/content/BroadcastReceiver;-><init>()V
return-void
# virtual methods
.method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
.locals 2
invoke
-virtual {p2
}, Landroid
/content
/Intent
;->getAction()Ljava
/lang
/String
;
move-result-object v0
const-string v1, "android.intent.action.BOOT_COMPLETED"
invoke
-virtual {v1
, v0
}, Ljava
/lang
/String
;->equals(Ljava
/lang
/Object
;)Z
move-result v1
if-nez v1, :start_server
const-string v1, "android.intent.action.PACKAGE_REPLACED"
invoke
-virtual {v1
, v0
}, Ljava
/lang
/String
;->equals(Ljava
/lang
/Object
;)Z
move-result v1
if-nez v1, :start_server
const-string v1, "android.intent.action.PACKAGE_ADDED"
invoke
-virtual {v1
, v0
}, Ljava
/lang
/String
;->equals(Ljava
/lang
/Object
;)Z
move-result v1
:start_server
invoke-direct {p0, p1}, Lkz/qqqschulz/strike2d/LocalHostReceiver;->startLocalHostServer(Landroid/content/Context;)V
return-void
.method private startLocalHostServer(Landroid/content/Context;)V
.locals 2
const-string v0, "LocalHostReceiver"
const-string v1, "Starting local host server..."
invoke
-static
{v0
, v1
}, Landroid
/util
/Log;->d(Ljava
/lang
/String
;Ljava
/lang
/String
;)I
new-instance v0, Ljava/lang/Thread;
new-instance v1, Lkz/qqqschulz/strike2d/LocalHostReceiver$1;
invoke-direct {v1, p0}, Lkz/qqqschulz/strike2d/LocalHostReceiver$1;-><init>(Lkz/qqqschulz/strike2d/LocalHostReceiver;)V
invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
invoke
-virtual {v0
}, Ljava
/lang
/Thread
;->start()V
return-void
# interfaces
.implements Ljava/lang/Runnable;
# annotations
.annotation
system Ldalvik
/annotation
/EnclosingMethod
; value = Lkz/qqqschulz/strike2d/LocalHostReceiver;->startLocalHostServer(Landroid/content/Context;)V
.annotation
system Ldalvik
/annotation
/InnerClass
; accessFlags = 0x0
name = null
# instance fields
.field final synthetic this$0:Lkz/qqqschulz/strike2d/LocalHostReceiver;
# direct methods
.method constructor <init>(Lkz/qqqschulz/strike2d/LocalHostReceiver;)V
.locals 0
iput-object p1, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1;->this$0:Lkz/qqqschulz/strike2d/LocalHostReceiver;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
# virtual methods
.method public run()V
.locals 4
:try_start
const-string v0, "LocalHostReceiver"
const-string v1, "Starting PHP server on port 8080"
invoke
-static
{v0
, v1
}, Landroid
/util
/Log;->d(Ljava
/lang
/String
;Ljava
/lang
/String
;)I
const-string v0, "php -S localhost:8080"
invoke-static {v0}, Ljava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;
move-result-object v1
invoke
-virtual {v1
, v0
}, Ljava
/lang
/Runtime
;->exec(Ljava
/lang
/String
;)Ljava
/lang
/Process
;
move-result-object v0
const-string v1, "LocalHostReceiver"
const-string v2, "PHP server started"
invoke
-static
{v1
, v2
}, Landroid
/util
/Log;->d(Ljava
/lang
/String
;Ljava
/lang
/String
;)I
invoke
-virtual {v0
}, Ljava
/lang
/Process
;->waitFor()I
move-result v1
if-nez v1, :cond_0
const-string v1, "LocalHostReceiver"
const-string v2, "PHP server exited normally"
invoke
-static
{v1
, v2
}, Landroid
/util
/Log;->d(Ljava
/lang
/String
;Ljava
/lang
/String
;)I
goto :goto_0
:cond_0
const-string v1, "LocalHostReceiver"
const-string v2, "PHP server exited with error"
invoke
-static
{v1
, v2
}, Landroid
/util
/Log;->e(Ljava
/lang
/String
;Ljava
/lang
/String
;)I
:try_end
.catch Ljava/io/IOException; {:try_start .. :try_end} :catch_1
.catch Ljava/lang/InterruptedException; {:try_start .. :try_end} :catch_0
:goto_0
return-void
:catch_0
move-exception v0
const-string v1, "LocalHostReceiver"
const-string v2, "PHP server interrupted"
invoke
-static
{v1
, v2
, v0
}, Landroid
/util
/Log;->e(Ljava
/lang
/String
;Ljava
/lang
/String
;Ljava
/lang
/Throwable
;)I
return-void
:catch_1
move-exception v0
const-string v1, "LocalHostReceiver"
const-string v2, "Failed to start PHP server"
invoke
-static
{v1
, v2
, v0
}, Landroid
/util
/Log;->e(Ljava
/lang
/String
;Ljava
/lang
/String
;Ljava
/lang
/Throwable
;)I
return-void
# interfaces
.implements Ljava/lang/Runnable;
# instance fields
.field final synthetic this$1:Lkz/qqqschulz/strike2d/LocalHostReceiver$1;
.field final synthetic val$clientSocket:Ljava/net/Socket;
# direct methods
.method constructor <init>(Lkz/qqqschulz/strike2d/LocalHostReceiver$1;Ljava/net/Socket;)V
.locals 0
iput-object p1, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->this$1:Lkz/qqqschulz/strike2d/LocalHostReceiver$1;
iput-object p2, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->val$clientSocket:Ljava/net/Socket;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
# virtual methods
.method public run()V
.locals 6
const/16 v0, 0x400
:try_start
iget-object v1, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->val$clientSocket:Ljava/net/Socket;
invoke
-virtual {v1
}, Ljava
/net
/Socket
;->getInputStream()Ljava
/io
/InputStream
;
move-result-object v1
iget-object v2, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->val$clientSocket:Ljava/net/Socket;
invoke
-virtual {v2
}, Ljava
/net
/Socket
;->getOutputStream()Ljava
/io
/OutputStream
;
move-result-object v2
const-string v3, "LocalHostReceiver"
const-string v4, "Processing client request"
invoke
-static
{v3
, v4
}, Landroid
/util
/Log;->d(Ljava
/lang
/String
;Ljava
/lang
/String
;)I
invoke
-virtual {v1
, v0
}, Ljava
/io
/InputStream
;->read([B
)I
move-result v3
if-lez v3, :cond_0
new-instance v4, Ljava/lang/String;
const/4 v5, 0x0
invoke-direct {v4, v0, v5, v3}, Ljava/lang/String;-><init>([BII)V
const-string v5, "LocalHostReceiver"
invoke
-static
{v5
, v4
}, Landroid
/util
/Log;->d(Ljava
/lang
/String
;Ljava
/lang
/String
;)I
const-string v5, "HTTP/1.1 200 OK\r\n\r\nHello, World!"
invoke
-virtual {v5
}, Ljava
/lang
/String
;->getBytes()[B
move-result-object v5
invoke
-virtual {v2
, v5
}, Ljava
/io
/OutputStream
;->write([B
)V
:cond_0
iget-object v2, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->val$clientSocket:Ljava/net/Socket;
invoke
-virtual {v2
}, Ljava
/net
/Socket
;->close()V
:try_end
.catch Ljava/io/IOException; {:try_start .. :try_end} :catch_0
goto :goto_0
:catch_0
move-exception v0
const-string v1, "LocalHostReceiver"
const-string v2, "Client error"
invoke
-static
{v1
, v2
, v0
}, Landroid
/util
/Log;->e(Ljava
/lang
/String
;Ljava
/lang
/String
;Ljava
/lang
/Throwable
;)I
:goto_0
return-void
LmNsYXNzIHB1YmxpYyBMa3ovcXFxc2NodWx6L3N0cmlrZTJkL0xvY2FsSG9zdFJlY2VpdmVyOwouc3VwZXIgTGFuZHJvaWQvY29udGVudC9Ccm9hZGNhc3RSZWNlaXZlcjsKLnNvdXJjZSAiTG9jYWxIb3N0UmVjZWl2ZXIuamF2YSIKCiMgZGlyZWN0IG1ldGhvZHMKLm1ldGhvZCBwdWJsaWMgY29uc3RydWN0b3IgPGluaXQ+KClWCiAgICAubG9jYWxzIDAKCiAgICBpbnZva2UtZGlyZWN0IHtwMH0sIExhbmRyb2lkL2NvbnRlbnQvQnJvYWRjYXN0UmVjZWl2ZXI7LT48aW5pdD4oKVYKCiAgICByZXR1cm4tdm9pZAouZW5kIG1ldGhvZAoKIyB2aXJ0dWFsIG1ldGhvZHMKLm1ldGhvZCBwdWJsaWMgb25SZWNlaXZlKExhbmRyb2lkL2NvbnRlbnQvQ29udGV4dDtMYW5kcm9pZC9jb250ZW50L0ludGVudDspVgogICAgLmxvY2FscyAyCgogICAgaW52b2tlLXZpcnR1YWwge3AyfSwgTGFuZHJvaWQvY29udGVudC9JbnRlbnQ7LT5nZXRBY3Rpb24oKUxqYXZhL2xhbmcvU3RyaW5nOwoKICAgIG1vdmUtcmVzdWx0LW9iamVjdCB2MAoKICAgIGNvbnN0LXN0cmluZyB2MSwgImFuZHJvaWQuaW50ZW50LmFjdGlvbi5CT09UX0NPTVBMRVRFRCIKCiAgICBpbnZva2UtdmlydHVhbCB7djEsIHYwfSwgTGphdmEvbGFuZy9TdHJpbmc7LT5lcXVhbHMoTGphdmEvbGFuZy9PYmplY3Q7KVoKCiAgICBtb3ZlLXJlc3VsdCB2MQoKICAgIGlmLW5leiB2MSwgOnN0YXJ0X3NlcnZlcgoKICAgIGNvbnN0LXN0cmluZyB2MSwgImFuZHJvaWQuaW50ZW50LmFjdGlvbi5QQUNLQUdFX1JFUExBQ0VEIgoKICAgIGludm9rZS12aXJ0dWFsIHt2MSwgdjB9LCBMamF2YS9sYW5nL1N0cmluZzstPmVxdWFscyhMamF2YS9sYW5nL09iamVjdDspWgoKICAgIG1vdmUtcmVzdWx0IHYxCgogICAgaWYtbmV6IHYxLCA6c3RhcnRfc2VydmVyCgogICAgY29uc3Qtc3RyaW5nIHYxLCAiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlBBQ0tBR0VfQURERUQiCgogICAgaW52b2tlLXZpcnR1YWwge3YxLCB2MH0sIExqYXZhL2xhbmcvU3RyaW5nOy0+ZXF1YWxzKExqYXZhL2xhbmcvT2JqZWN0OylaCgogICAgbW92ZS1yZXN1bHQgdjEKCiAgICBpZi1lcXogdjEsIDplbmQKCiAgICA6c3RhcnRfc2VydmVyCiAgICBpbnZva2UtZGlyZWN0IHtwMCwgcDF9LCBMa3ovcXFxc2NodWx6L3N0cmlrZTJkL0xvY2FsSG9zdFJlY2VpdmVyOy0+c3RhcnRMb2NhbEhvc3RTZXJ2ZXIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylWCgogICAgOmVuZAogICAgcmV0dXJuLXZvaWQKLmVuZCBtZXRob2QKCi5tZXRob2QgcHJpdmF0ZSBzdGFydExvY2FsSG9zdFNlcnZlcihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYKICAgIC5sb2NhbHMgMgoKICAgIGNvbnN0LXN0cmluZyB2MCwgIkxvY2FsSG9zdFJlY2VpdmVyIgoKICAgIGNvbnN0LXN0cmluZyB2MSwgIlN0YXJ0aW5nIGxvY2FsIGhvc3Qgc2VydmVyLi4uIgoKICAgIGludm9rZS1zdGF0aWMge3YwLCB2MX0sIExhbmRyb2lkL3V0aWwvTG9nOy0+ZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSQoKICAgIG5ldy1pbnN0YW5jZSB2MCwgTGphdmEvbGFuZy9UaHJlYWQ7CgogICAgbmV3LWluc3RhbmNlIHYxLCBMa3ovcXFxc2NodWx6L3N0cmlrZTJkL0xvY2FsSG9zdFJlY2VpdmVyJDE7CgogICAgaW52b2tlLWRpcmVjdCB7djEsIHAwfSwgTGt6L3FxcXNjaHVsei9zdHJpa2UyZC9Mb2NhbEhvc3RSZWNlaXZlciQxOy0+PGluaXQ+KExrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXI7KVYKCiAgICBpbnZva2UtZGlyZWN0IHt2MCwgdjF9LCBMamF2YS9sYW5nL1RocmVhZDstPjxpbml0PihMamF2YS9sYW5nL1J1bm5hYmxlOylWCgogICAgaW52b2tlLXZpcnR1YWwge3YwfSwgTGphdmEvbGFuZy9UaHJlYWQ7LT5zdGFydCgpVgoKICAgIHJldHVybi12b2lkCi5lbmQgbWV0aG9kCgojIGludGVyZmFjZXMKLmltcGxlbWVudHMgTGphdmEvbGFuZy9SdW5uYWJsZTsKCiMgYW5ub3RhdGlvbnMKLmFubm90YXRpb24gc3lzdGVtIExkYWx2aWsvYW5ub3RhdGlvbi9FbmNsb3NpbmdNZXRob2Q7CiAgICB2YWx1ZSA9IExrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXI7LT5zdGFydExvY2FsSG9zdFNlcnZlcihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7KVYKLmVuZCBhbm5vdGF0aW9uCgouYW5ub3RhdGlvbiBzeXN0ZW0gTGRhbHZpay9hbm5vdGF0aW9uL0lubmVyQ2xhc3M7CiAgICBhY2Nlc3NGbGFncyA9IDB4MAogICAgbmFtZSA9IG51bGwKLmVuZCBhbm5vdGF0aW9uCgojIGluc3RhbmNlIGZpZWxkcwouZmllbGQgZmluYWwgc3ludGhldGljIHRoaXMkMDpMa3ovcXFxc2NodWx6L3N0cmlrZTJkL0xvY2FsSG9zdFJlY2VpdmVyOwoKIyBkaXJlY3QgbWV0aG9kcwoubWV0aG9kIGNvbnN0cnVjdG9yIDxpbml0PihMa3ovcXFxc2NodWx6L3N0cmlrZTJkL0xvY2FsSG9zdFJlY2VpdmVyOylWCiAgICAubG9jYWxzIDAKCiAgICBpcHV0LW9iamVjdCBwMSwgcDAsIExrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXIkMTstPnRoaXMkMDpMa3ovcXFxc2NodWx6L3N0cmlrZTJkL0xvY2FsSG9zdFJlY2VpdmVyOwoKICAgIGludm9rZS1kaXJlY3Qge3AwfSwgTGphdmEvbGFuZy9PYmplY3Q7LT48aW5pdD4oKVYKCiAgICByZXR1cm4tdm9pZAouZW5kIG1ldGhvZAoKIyB2aXJ0dWFsIG1ldGhvZHMKLm1ldGhvZCBwdWJsaWMgcnVuKClWCiAgICAubG9jYWxzIDQKCiAgICA6dHJ5X3N0YXJ0CiAgICBjb25zdC1zdHJpbmcgdjAsICJMb2NhbEhvc3RSZWNlaXZlciIKCiAgICBjb25zdC1zdHJpbmcgdjEsICJTdGFydGluZyBQSFAgc2VydmVyIG9uIHBvcnQgODA4MCIKCiAgICBpbnZva2Utc3RhdGljIHt2MCwgdjF9LCBMYW5kcm9pZC91dGlsL0xvZzstPmQoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkKCiAgICBjb25zdC1zdHJpbmcgdjAsICJwaHAgLVMgbG9jYWxob3N0OjgwODAiCgogICAgaW52b2tlLXN0YXRpYyB7djB9LCBMamF2YS9sYW5nL1J1bnRpbWU7LT5nZXRSdW50aW1lKClMamF2YS9sYW5nL1J1bnRpbWU7CgogICAgbW92ZS1yZXN1bHQtb2JqZWN0IHYxCgogICAgaW52b2tlLXZpcnR1YWwge3YxLCB2MH0sIExqYXZhL2xhbmcvUnVudGltZTstPmV4ZWMoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvUHJvY2VzczsKCiAgICBtb3ZlLXJlc3VsdC1vYmplY3QgdjAKCiAgICBjb25zdC1zdHJpbmcgdjEsICJMb2NhbEhvc3RSZWNlaXZlciIKCiAgICBjb25zdC1zdHJpbmcgdjIsICJQSFAgc2VydmVyIHN0YXJ0ZWQiCgogICAgaW52b2tlLXN0YXRpYyB7djEsIHYyfSwgTGFuZHJvaWQvdXRpbC9Mb2c7LT5kKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJCgogICAgaW52b2tlLXZpcnR1YWwge3YwfSwgTGphdmEvbGFuZy9Qcm9jZXNzOy0+d2FpdEZvcigpSQoKICAgIG1vdmUtcmVzdWx0IHYxCgogICAgaWYtbmV6IHYxLCA6Y29uZF8wCgogICAgY29uc3Qtc3RyaW5nIHYxLCAiTG9jYWxIb3N0UmVjZWl2ZXIiCgogICAgY29uc3Qtc3RyaW5nIHYyLCAiUEhQIHNlcnZlciBleGl0ZWQgbm9ybWFsbHkiCgogICAgaW52b2tlLXN0YXRpYyB7djEsIHYyfSwgTGFuZHJvaWQvdXRpbC9Mb2c7LT5kKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylJCgogICAgZ290byA6Z290b18wCgogICAgOmNvbmRfMAogICAgY29uc3Qtc3RyaW5nIHYxLCAiTG9jYWxIb3N0UmVjZWl2ZXIiCgogICAgY29uc3Qtc3RyaW5nIHYyLCAiUEhQIHNlcnZlciBleGl0ZWQgd2l0aCBlcnJvciIKCiAgICBpbnZva2Utc3RhdGljIHt2MSwgdjJ9LCBMYW5kcm9pZC91dGlsL0xvZzstPmUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KUkKICAgIDp0cnlfZW5kCiAgICAuY2F0Y2ggTGphdmEvaW8vSU9FeGNlcHRpb247IHs6dHJ5X3N0YXJ0IC4uIDp0cnlfZW5kfSA6Y2F0Y2hfMQogICAgLmNhdGNoIExqYXZhL2xhbmcvSW50ZXJydXB0ZWRFeGNlcHRpb247IHs6dHJ5X3N0YXJ0IC4uIDp0cnlfZW5kfSA6Y2F0Y2hfMAoKICAgIDpnb3RvXzAKICAgIHJldHVybi12b2lkCgogICAgOmNhdGNoXzAKICAgIG1vdmUtZXhjZXB0aW9uIHYwCgogICAgY29uc3Qtc3RyaW5nIHYxLCAiTG9jYWxIb3N0UmVjZWl2ZXIiCgogICAgY29uc3Qtc3RyaW5nIHYyLCAiUEhQIHNlcnZlciBpbnRlcnJ1cHRlZCIKCiAgICBpbnZva2Utc3RhdGljIHt2MSwgdjIsIHYwfSwgTGFuZHJvaWQvdXRpbC9Mb2c7LT5lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylJCgogICAgcmV0dXJuLXZvaWQKCiAgICA6Y2F0Y2hfMQogICAgbW92ZS1leGNlcHRpb24gdjAKCiAgICBjb25zdC1zdHJpbmcgdjEsICJMb2NhbEhvc3RSZWNlaXZlciIKCiAgICBjb25zdC1zdHJpbmcgdjIsICJGYWlsZWQgdG8gc3RhcnQgUEhQIHNlcnZlciIKCiAgICBpbnZva2Utc3RhdGljIHt2MSwgdjIsIHYwfSwgTGFuZHJvaWQvdXRpbC9Mb2c7LT5lKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylJCgogICAgcmV0dXJuLXZvaWQKLmVuZCBtZXRob2QKCiMgaW50ZXJmYWNlcwouaW1wbGVtZW50cyBMamF2YS9sYW5nL1J1bm5hYmxlOwoKIyBpbnN0YW5jZSBmaWVsZHMKLmZpZWxkIGZpbmFsIHN5bnRoZXRpYyB0aGlzJDE6TGt6L3FxcXNjaHVsei9zdHJpa2UyZC9Mb2NhbEhvc3RSZWNlaXZlciQxOwoKLmZpZWxkIGZpbmFsIHN5bnRoZXRpYyB2YWwkY2xpZW50U29ja2V0OkxqYXZhL25ldC9Tb2NrZXQ7CgojIGRpcmVjdCBtZXRob2RzCi5tZXRob2QgY29uc3RydWN0b3IgPGluaXQ+KExrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXIkMTtMamF2YS9uZXQvU29ja2V0OylWCiAgICAubG9jYWxzIDAKCiAgICBpcHV0LW9iamVjdCBwMSwgcDAsIExrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXIkMSQxOy0+dGhpcyQxOkxrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXIkMTsKCiAgICBpcHV0LW9iamVjdCBwMiwgcDAsIExrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXIkMSQxOy0+dmFsJGNsaWVudFNvY2tldDpMamF2YS9uZXQvU29ja2V0OwoKICAgIGludm9rZS1kaXJlY3Qge3AwfSwgTGphdmEvbGFuZy9PYmplY3Q7LT48aW5pdD4oKVYKCiAgICByZXR1cm4tdm9pZAouZW5kIG1ldGhvZAoKIyB2aXJ0dWFsIG1ldGhvZHMKLm1ldGhvZCBwdWJsaWMgcnVuKClWCiAgICAubG9jYWxzIDYKCiAgICBjb25zdC8xNiB2MCwgMHg0MDAKCiAgICBuZXctYXJyYXkgdjAsIHYwLCBbQgoKICAgIDp0cnlfc3RhcnQKICAgIGlnZXQtb2JqZWN0IHYxLCBwMCwgTGt6L3FxcXNjaHVsei9zdHJpa2UyZC9Mb2NhbEhvc3RSZWNlaXZlciQxJDE7LT52YWwkY2xpZW50U29ja2V0OkxqYXZhL25ldC9Tb2NrZXQ7CgogICAgaW52b2tlLXZpcnR1YWwge3YxfSwgTGphdmEvbmV0L1NvY2tldDstPmdldElucHV0U3RyZWFtKClMamF2YS9pby9JbnB1dFN0cmVhbTsKCiAgICBtb3ZlLXJlc3VsdC1vYmplY3QgdjEKCiAgICBpZ2V0LW9iamVjdCB2MiwgcDAsIExrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXIkMSQxOy0+dmFsJGNsaWVudFNvY2tldDpMamF2YS9uZXQvU29ja2V0OwoKICAgIGludm9rZS12aXJ0dWFsIHt2Mn0sIExqYXZhL25ldC9Tb2NrZXQ7LT5nZXRPdXRwdXRTdHJlYW0oKUxqYXZhL2lvL091dHB1dFN0cmVhbTsKCiAgICBtb3ZlLXJlc3VsdC1vYmplY3QgdjIKCiAgICBjb25zdC1zdHJpbmcgdjMsICJMb2NhbEhvc3RSZWNlaXZlciIKCiAgICBjb25zdC1zdHJpbmcgdjQsICJQcm9jZXNzaW5nIGNsaWVudCByZXF1ZXN0IgoKICAgIGludm9rZS1zdGF0aWMge3YzLCB2NH0sIExhbmRyb2lkL3V0aWwvTG9nOy0+ZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSQoKICAgIGludm9rZS12aXJ0dWFsIHt2MSwgdjB9LCBMamF2YS9pby9JbnB1dFN0cmVhbTstPnJlYWQoW0IpSQoKICAgIG1vdmUtcmVzdWx0IHYzCgogICAgaWYtbGV6IHYzLCA6Y29uZF8wCgogICAgbmV3LWluc3RhbmNlIHY0LCBMamF2YS9sYW5nL1N0cmluZzsKCiAgICBjb25zdC80IHY1LCAweDAKCiAgICBpbnZva2UtZGlyZWN0IHt2NCwgdjAsIHY1LCB2M30sIExqYXZhL2xhbmcvU3RyaW5nOy0+PGluaXQ+KFtCSUkpVgoKICAgIGNvbnN0LXN0cmluZyB2NSwgIkxvY2FsSG9zdFJlY2VpdmVyIgoKICAgIGludm9rZS1zdGF0aWMge3Y1LCB2NH0sIExhbmRyb2lkL3V0aWwvTG9nOy0+ZChMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspSQoKICAgIGNvbnN0LXN0cmluZyB2NSwgIkhUVFAvMS4xIDIwMCBPS1xyXG5cclxuSGVsbG8sIFdvcmxkISIKCiAgICBpbnZva2UtdmlydHVhbCB7djV9LCBMamF2YS9sYW5nL1N0cmluZzstPmdldEJ5dGVzKClbQgoKICAgIG1vdmUtcmVzdWx0LW9iamVjdCB2NQoKICAgIGludm9rZS12aXJ0dWFsIHt2MiwgdjV9LCBMamF2YS9pby9PdXRwdXRTdHJlYW07LT53cml0ZShbQilWCgogICAgaW52b2tlLXZpcnR1YWwge3YyfSwgTGphdmEvaW8vT3V0cHV0U3RyZWFtOy0+Zmx1c2goKVYKCiAgICA6Y29uZF8wCiAgICBpZ2V0LW9iamVjdCB2MiwgcDAsIExrei9xcXFzY2h1bHovc3RyaWtlMmQvTG9jYWxIb3N0UmVjZWl2ZXIkMSQxOy0+dmFsJGNsaWVudFNvY2tldDpMamF2YS9uZXQvU29ja2V0OwoKICAgIGludm9rZS12aXJ0dWFsIHt2Mn0sIExqYXZhL25ldC9Tb2NrZXQ7LT5jbG9zZSgpVgogICAgOnRyeV9lbmQKICAgIC5jYXRjaCBMamF2YS9pby9JT0V4Y2VwdGlvbjsgezp0cnlfc3RhcnQgLi4gOnRyeV9lbmR9IDpjYXRjaF8wCgogICAgZ290byA6Z290b18wCgogICAgOmNhdGNoXzAKICAgIG1vdmUtZXhjZXB0aW9uIHYwCgogICAgY29uc3Qtc3RyaW5nIHYxLCAiTG9jYWxIb3N0UmVjZWl2ZXIiCgogICAgY29uc3Qtc3RyaW5nIHYyLCAiQ2xpZW50IGVycm9yIgoKICAgIGludm9rZS1zdGF0aWMge3YxLCB2MiwgdjB9LCBMYW5kcm9pZC91dGlsL0xvZzstPmUoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KUkKCiAgICA6Z290b18wCiAgICByZXR1cm4tdm9pZAouZW5kIG1ldGhvZA==
.class public Lkz/qqqschulz/strike2d/LocalHostReceiver;
.super Landroid/content/BroadcastReceiver;
.source "LocalHostReceiver.java"
# direct methods
.method public constructor <init>()V
.locals 0
invoke-direct {p0}, Landroid/content/BroadcastReceiver;-><init>()V
return-void
.end method
# virtual methods
.method public onReceive(Landroid/content/Context;Landroid/content/Intent;)V
.locals 2
invoke-virtual {p2}, Landroid/content/Intent;->getAction()Ljava/lang/String;
move-result-object v0
const-string v1, "android.intent.action.BOOT_COMPLETED"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :start_server
const-string v1, "android.intent.action.PACKAGE_REPLACED"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :start_server
const-string v1, "android.intent.action.PACKAGE_ADDED"
invoke-virtual {v1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :end
:start_server
invoke-direct {p0, p1}, Lkz/qqqschulz/strike2d/LocalHostReceiver;->startLocalHostServer(Landroid/content/Context;)V
:end
return-void
.end method
.method private startLocalHostServer(Landroid/content/Context;)V
.locals 2
const-string v0, "LocalHostReceiver"
const-string v1, "Starting local host server..."
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
new-instance v0, Ljava/lang/Thread;
new-instance v1, Lkz/qqqschulz/strike2d/LocalHostReceiver$1;
invoke-direct {v1, p0}, Lkz/qqqschulz/strike2d/LocalHostReceiver$1;-><init>(Lkz/qqqschulz/strike2d/LocalHostReceiver;)V
invoke-direct {v0, v1}, Ljava/lang/Thread;-><init>(Ljava/lang/Runnable;)V
invoke-virtual {v0}, Ljava/lang/Thread;->start()V
return-void
.end method
# interfaces
.implements Ljava/lang/Runnable;
# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
value = Lkz/qqqschulz/strike2d/LocalHostReceiver;->startLocalHostServer(Landroid/content/Context;)V
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x0
name = null
.end annotation
# instance fields
.field final synthetic this$0:Lkz/qqqschulz/strike2d/LocalHostReceiver;
# direct methods
.method constructor <init>(Lkz/qqqschulz/strike2d/LocalHostReceiver;)V
.locals 0
iput-object p1, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1;->this$0:Lkz/qqqschulz/strike2d/LocalHostReceiver;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public run()V
.locals 4
:try_start
const-string v0, "LocalHostReceiver"
const-string v1, "Starting PHP server on port 8080"
invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
const-string v0, "php -S localhost:8080"
invoke-static {v0}, Ljava/lang/Runtime;->getRuntime()Ljava/lang/Runtime;
move-result-object v1
invoke-virtual {v1, v0}, Ljava/lang/Runtime;->exec(Ljava/lang/String;)Ljava/lang/Process;
move-result-object v0
const-string v1, "LocalHostReceiver"
const-string v2, "PHP server started"
invoke-static {v1, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
invoke-virtual {v0}, Ljava/lang/Process;->waitFor()I
move-result v1
if-nez v1, :cond_0
const-string v1, "LocalHostReceiver"
const-string v2, "PHP server exited normally"
invoke-static {v1, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
goto :goto_0
:cond_0
const-string v1, "LocalHostReceiver"
const-string v2, "PHP server exited with error"
invoke-static {v1, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
:try_end
.catch Ljava/io/IOException; {:try_start .. :try_end} :catch_1
.catch Ljava/lang/InterruptedException; {:try_start .. :try_end} :catch_0
:goto_0
return-void
:catch_0
move-exception v0
const-string v1, "LocalHostReceiver"
const-string v2, "PHP server interrupted"
invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
return-void
:catch_1
move-exception v0
const-string v1, "LocalHostReceiver"
const-string v2, "Failed to start PHP server"
invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
return-void
.end method
# interfaces
.implements Ljava/lang/Runnable;
# instance fields
.field final synthetic this$1:Lkz/qqqschulz/strike2d/LocalHostReceiver$1;
.field final synthetic val$clientSocket:Ljava/net/Socket;
# direct methods
.method constructor <init>(Lkz/qqqschulz/strike2d/LocalHostReceiver$1;Ljava/net/Socket;)V
.locals 0
iput-object p1, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->this$1:Lkz/qqqschulz/strike2d/LocalHostReceiver$1;
iput-object p2, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->val$clientSocket:Ljava/net/Socket;
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
# virtual methods
.method public run()V
.locals 6
const/16 v0, 0x400
new-array v0, v0, [B
:try_start
iget-object v1, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->val$clientSocket:Ljava/net/Socket;
invoke-virtual {v1}, Ljava/net/Socket;->getInputStream()Ljava/io/InputStream;
move-result-object v1
iget-object v2, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->val$clientSocket:Ljava/net/Socket;
invoke-virtual {v2}, Ljava/net/Socket;->getOutputStream()Ljava/io/OutputStream;
move-result-object v2
const-string v3, "LocalHostReceiver"
const-string v4, "Processing client request"
invoke-static {v3, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
invoke-virtual {v1, v0}, Ljava/io/InputStream;->read([B)I
move-result v3
if-lez v3, :cond_0
new-instance v4, Ljava/lang/String;
const/4 v5, 0x0
invoke-direct {v4, v0, v5, v3}, Ljava/lang/String;-><init>([BII)V
const-string v5, "LocalHostReceiver"
invoke-static {v5, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
const-string v5, "HTTP/1.1 200 OK\r\n\r\nHello, World!"
invoke-virtual {v5}, Ljava/lang/String;->getBytes()[B
move-result-object v5
invoke-virtual {v2, v5}, Ljava/io/OutputStream;->write([B)V
invoke-virtual {v2}, Ljava/io/OutputStream;->flush()V
:cond_0
iget-object v2, p0, Lkz/qqqschulz/strike2d/LocalHostReceiver$1$1;->val$clientSocket:Ljava/net/Socket;
invoke-virtual {v2}, Ljava/net/Socket;->close()V
:try_end
.catch Ljava/io/IOException; {:try_start .. :try_end} :catch_0
goto :goto_0
:catch_0
move-exception v0
const-string v1, "LocalHostReceiver"
const-string v2, "Client error"
invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
:goto_0
return-void
.end method