Ejemplo n.º 1
0
        string EP_show_reason(IHttpRequestResponse req)
        {
            string result = "";
            string prefix = "url=";

            try
            {
                string reason = "No url found";

                if (!string.IsNullOrEmpty(req.QueryString))
                {
                    int startIndex = req.QueryString.IndexOf(prefix);
                    if (startIndex > -1)
                    {
                        Uri url = new Uri(System.Net.WebUtility.UrlDecode(req.QueryString.Substring(startIndex + prefix.Length)));
                        isBlockedFullFlow(url, out reason);
                    }
                }

                result = AndroidApp.Properties.Resources.BlockedPage.Replace("{0}", reasonToHTML(reason));
            }
            catch (Exception ex)
            {
                result = stringHTML(ex.ToString(), "Error");
                AndroidBridge.e(TAG, ex.ToString());
            }
            return(result);
        }
Ejemplo n.º 2
0
        string EP_echo(IHttpRequestResponse req)
        {
            string result = "";

            try
            {
                string headers = "";
                foreach (var key in req.Headers.Keys)
                {
                    headers += $"{key}: {req.Headers[key]}\r\n";
                }

                string sentBody = readReqBodyAsString(req);

                result =
                    AndroidApp.Properties.Resources.Echo
                    .Replace("{0}", headers)
                    .Replace("{1}", sentBody)
                    .Replace("{2}", req.Method)
                    .Replace("{3}", req.Path)
                ;
            }
            catch (Exception ex)
            {
                result = stringHTML(ex.ToString(), "Error");
                AndroidBridge.e(TAG, ex.ToString());
            }
            return(result);
        }
Ejemplo n.º 3
0
        async Task SendResponseAsync(IHttpRequestResponse request, HttpSender httpSender)
        {
            try
            {
                if (request.RequestType == RequestType.TCP)
                {
                    string path = request.Path;
                    string responseContentType = ContentHTML;
                    string responseBody        = $"<html>\r\n<body>Unknown Path:\r\n{path}</body>\r\n</html>";


                    if (path.StartsWith("/echo"))
                    {
                        responseContentType = ContentHTML;
                        responseBody        = EP_echo(request);
                    }
                    else if (path.StartsWith("/history"))
                    {
                        responseContentType = ContentHTML;
                        responseBody        = EP_domainHistory(request);
                    }
                    else if (path.StartsWith("/check"))
                    {
                        responseContentType = ContentJSON;
                        responseBody        = EP_checkDomain(request);
                    }
                    else if (path.StartsWith("/reason"))
                    {
                        responseContentType = ContentHTML;
                        responseBody        = EP_show_reason(request);
                    }

                    var response = new HttpResponse
                    {
                        StatusCode     = (int)HttpStatusCode.OK,
                        ResponseReason = HttpStatusCode.OK.ToString(),
                        Headers        = new Dictionary <string, string>
                        {
                            { "Date", DateTime.UtcNow.ToString("r") },
                            { "Content-Type", responseContentType },
                            { "Connection", "close" }
                        },
                        Body = new MemoryStream(Encoding.UTF8.GetBytes(responseBody))
                    };

                    AndroidBridge.d(TAG, "[RESP-SEND] \"" + request.Path + "\" IP: " + ipString(request.RemoteIpEndPoint));

                    await httpSender.SendTcpResponseAsync(request, response).ConfigureAwait(false);

                    request.TcpClient.Close(); // Force close!

                    AndroidBridge.d(TAG, "[END] \"" + request.Path + "\" IP: " + ipString(request.RemoteIpEndPoint));
                }
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex.ToString());
            }
        }
Ejemplo n.º 4
0
    public void CancelDownload(DownloadOperation operation)
    {
        Profiler.BeginSample(string.Format("CancelDownload {0}", operation.ID));

        AndroidBridge.CallStatic("cancelDownload", Context, operation.ID);

        Profiler.EndSample();
    }
Ejemplo n.º 5
0
 public AndroidBridgeManager(int baudrate)
 {
     bridgeGameObject      = new GameObject();
     bridgeGameObject.name = "AndroidBridge";
     bridgeComponent       = bridgeGameObject.AddComponent <AndroidBridge>();
     bridge = (AndroidBridge)bridgeComponent;
     bridge.InputChanged      += OnInputChanged;
     bridge.ConnectionChanged += OnConnectionChanged;
     bridge.Setup(baudrate);
 }
Ejemplo n.º 6
0
 public static void AppendLinePublic(string relativePath, string line)
 {
     try
     {
         File.AppendAllLines(AndroidBridge.GetAbsulotePath(relativePath, isPublic: true), new[] { line });
     }
     catch (Exception ex)
     {
         AndroidBridge.e(TAG, ex);
     }
 }
Ejemplo n.º 7
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            _impl = new AndroidBridge(this);
            MonoSAMGame.StaticBridge = _impl;
            var g = new MainGame();

            SetContentView(g.Services.GetService <View>());
            g.Run();
        }
 public void StopFlow()
 {
     if (AndroidBridge.isForegroundServiceUp())
     {
         AndroidBridge.StopForgroundService();
     }
     else
     {
         AndroidBridge.ToastIt("Service already stopped");
     }
 }
        private async void BtnSet_Clicked(object sender, EventArgs e)
        {
            await FilterUtils.TimeLock.onlyUnlockedAsync(async() =>
            {
                DateTime PickedDate;
                PickedDate = datePicker1.Date;
                PickedDate = PickedDate.Add(timePicker1.Time - PickedDate.TimeOfDay);

                string result = FilterUtils.TimeLock.TrySetLockDate(PickedDate);
                AndroidBridge.ToastIt(result);

                await Application.Current.MainPage.Navigation.PopAsync();
            });
        }
Ejemplo n.º 10
0
 public void Stop()
 {
     try
     {
         AndroidBridge.d(TAG, "Closing server");
         cancellationTokenSource?.Cancel();
         myServerInstance?.Dispose();
         myListener?.Stop();
     }
     catch (Exception ex)
     {
         AndroidBridge.e(TAG, ex.ToString());
     }
 }
Ejemplo n.º 11
0
    public DownloadOperation StartDownload(BackgroundDownloadOptions options)
    {
        try
        {
            var id = AndroidBridge.CallStatic <long>("download", Context, options.URL, options.DestinationPath, options.Title, options.Description);

            return(new AndroidDownloadOperation(this, options, id));
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }

        return(null);
    }
Ejemplo n.º 12
0
        string EP_domainHistory(IHttpRequestResponse req)
        {
            string result = "";

            try
            {
                string body = String.Join("<br />", domainHistory);
                result = stringHTML(body: body);
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex.ToString());
            }
            return(result);
        }
Ejemplo n.º 13
0
        public static TaskResult SetPassword(string newPass)
        {
            TaskResult result = TaskResult.Fail("Init");

            try
            {
                newPass = get256Hash(newPass);
                File.WriteAllText(Filenames.MASTER_PASSWORD.getAppPrivate(), newPass);
                result = TaskResult.Success("Master password saved");
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex);
                result = TaskResult.Fail(ex.ToString());
            }
            return(result);
        }
Ejemplo n.º 14
0
        public static string ReadAssetAsString(Context ctx, string tag, string asset_name)
        {
            string result = "";

            try
            {
                using (Stream s = ctx.Assets.Open(asset_name))
                {
                    StreamReader reader = new StreamReader(s);
                    result = reader.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                AndroidBridge.e(tag, ex);
            }
            return(result);
        }
Ejemplo n.º 15
0
        string stringHTML(string body = "", string title = "")
        {
            string result = "";

            try
            {
                result =
                    AndroidApp.Properties.Resources.EmptyHTML
                    .Replace("{title}", title)
                    .Replace("{body}", body)
                ;
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex.ToString());
            }
            return(result);
        }
Ejemplo n.º 16
0
 public static async Task onlyUnlockedAsync(Func <Task> callback)
 {
     try
     {
         var isLocked = TimeLock.isLocked();
         if (isLocked)
         {
             AndroidBridge.ToastIt(isLocked.eventReason);
         }
         else
         {
             await callback();
         }
     }
     catch (Exception ex)
     {
         AndroidBridge.e(TAG, ex);
     }
 }
Ejemplo n.º 17
0
        string readReqBodyAsString(IHttpRequestResponse req)
        {
            string result = "";

            try
            {
                if (req.Body != null && req.Body.Length > 0)
                {
                    StreamReader reader = new StreamReader(req.Body);
                    req.Body.Position = 0;
                    result            = reader.ReadToEnd();
                }
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex.ToString());
            }
            return(result);
        }
        public static string domainCategoryResult(bool block)
        {
            string result = "";

            try
            {
                int myCategory = block ? Category_Blocked : Category_Allowed;

                var jsonObject = new JObject();
                jsonObject["categories"] = new JArray(new[] { new JValue(myCategory) });
                jsonObject["resultCode"] = new JValue(0);

                result = jsonObject.ToString();
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex.ToString());
            }
            return(result);
        }
Ejemplo n.º 19
0
        public static TaskResult ComparePass(string checkPass)
        {
            TaskResult result = TaskResult.Fail("Init");

            try
            {
                checkPass = get256Hash(checkPass);
                string currentPass         = File.ReadAllText(Filenames.MASTER_PASSWORD.getAppPrivate());
                bool   arePasswordHashSame = checkPass.Equals(currentPass);

                result             = new TaskResult();
                result.success     = arePasswordHashSame;
                result.eventReason = "Are password same? " + arePasswordHashSame;
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex);
                result = TaskResult.Fail(ex.ToString());
            }
            return(result);
        }
Ejemplo n.º 20
0
        public void Start(int port)
        {
            try
            {
                myListener = new TcpListener(IPAddress.Loopback, port)
                {
                    ExclusiveAddressUse = false
                };

                var httpSender = new HttpSender();

                cancellationTokenSource = new CancellationTokenSource();

                myServerInstance = myListener.ToHttpListenerObservable(cancellationTokenSource.Token)
                                   .Do(r =>
                {
                    AndroidBridge.d(TAG, "[START] \"" + r.Path + "\" IP: " + ipString(r.RemoteIpEndPoint));
                })
                                   // Send reply to browser
                                   .Select(r => Observable.FromAsync(() => SendResponseAsync(r, httpSender)))
                                   .Concat()
                                   .Subscribe(r =>
                {
                    //Console.WriteLine("Reply sent.");
                },
                                              ex =>
                {
                    AndroidBridge.e(TAG, ex.ToString());
                },
                                              () =>
                {
                    AndroidBridge.d(TAG, "Server completed");
                });
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex.ToString());
            }
        }
Ejemplo n.º 21
0
        string EP_checkDomain(IHttpRequestResponse req)
        {
            string result = "";

            try
            {
                var    reqJSON = readReqBodyAsString(req);
                string domain  = SpinResultHelper.getDomainName(reqJSON).Trim(new char[] { ' ', '"' });
                domainHistory.Add(domain);

                string reason = "";
                bool   block  = isBlockedFullFlow(new Uri(domain), out reason);


                if (block)
                {
                    try
                    {
                        File.AppendAllLines(Filenames.BLOCK_LOG.getAppPublic(), new[] {
                            string.Format("[{0}] {1} {2}", DateTime.Now, domain, reason)
                        });
                    }
                    catch (Exception ex)
                    {
                        AndroidBridge.e(TAG, ex);
                    }
                }

                result = SpinResultHelper.domainCategoryResult(block);
            }
            catch (Exception ex)
            {
                result = "{\"error\":\"0\"}".Replace("0", ex.ToString());
                AndroidBridge.e(TAG, ex.ToString());
            }
            return(result);
        }
        public static string getDomainName(string jsonBody)
        {
            string result = "";

            try
            {
                var jsonObject = JObject.Parse(jsonBody);
                var version    = jsonObject["v"].ToString();
                if (version == "1")
                {
                    var domainName = jsonObject["domainName"];
                    result = domainName.ToString();
                }
                else
                {
                    throw new Exception("Unknown Version of domain request");
                }
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex.ToString());
            }
            return(result);
        }
Ejemplo n.º 23
0
        private static string ForceLockDate(DateTime date)
        {
            string result = "";

            try
            {
                string unlockPath = Filenames.LOCK_DATE.getAppPrivate();

                AndroidBridge.d(TAG, "(*) Locking until '" + date.ToString() + "'");
                if (File.Exists(unlockPath))
                {
                    File.Delete(unlockPath);
                }
                File.WriteAllText(unlockPath, date.ToString());

                result = "Sucess! Locked to " + date.ToString();
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex);
                result = ex.ToString();
            }
            return(result);
        }
        public void StartFlow()
        {
            try
            {
                // Reload policies:
                FilteringObjects.httpPolicy.reloadPolicy(File.ReadAllText(Filenames.HTTP_POLICY.getAppPrivate()));
                FilteringObjects.timePolicy.reloadPolicy(File.ReadAllText(Filenames.TIME_POLICY.getAppPrivate()));

                if (!AndroidBridge.isForegroundServiceUp())
                {
                    AndroidBridge.OnForgroundServiceStart = () =>
                    {
                        AndroidBridge.d(TAG, "Starting filtering flow");
                        myHTTPServer.StartHttpServer();
                        StartPeriodicTasks();
                    };

                    AndroidBridge.OnForgroundServiceStop = () =>
                    {
                        AndroidBridge.d(TAG, "Stopping filtering flow");
                        StopPeriodicTasks();
                        myHTTPServer.StopHTTPServer();
                    };

                    AndroidBridge.StartForgroundService();
                }
                else
                {
                    AndroidBridge.ToastIt("Service already up!");
                }
            }
            catch (Exception ex)
            {
                AndroidBridge.e(TAG, ex);
            }
        }
        public void scheduleRepeated()
        {
            TimeSpan WIFI_PERIOD = (FilteringObjects.isFiltering && FilteringObjects.isInWifiBlockZone) ?
                                   WIFI_PERIOD_BLOCKED : WIFI_PERIOD_ALLOWED;

            int taskID = AndroidBridge.scheduleJob(WIFI_PERIOD, WIFI_PERIOD + TimeSpan.FromSeconds(10), null,
                                                   (finishFunc) => {
                if (AndroidBridge.isForegroundServiceUp())
                {
                    AndroidBridge.StartWifiScanning();
                    scheduleRepeated();
                }
                finishFunc(false);
            },
                                                   () => AndroidBridge.isForegroundServiceUp(),
                                                   null,
                                                   () => false
                                                   );

            if (taskID < 0)
            {
                AndroidBridge.e(TAG, "Failed to schedule job.");
            }
        }
Ejemplo n.º 26
0
 public string getAppPrivate()
 {
     return(AndroidBridge.GetAbsulotePath(_relative, false));
 }
 public void StopPeriodicTasks()
 {
     AndroidBridge.stopAllJobs();
 }
Ejemplo n.º 28
0
 public DownloadStatus GetStatus(long id)
 {
     return((DownloadStatus)AndroidBridge.CallStatic <int>("getDownloadStatus", Context, id));
 }
Ejemplo n.º 29
0
 public float GetProgress(long id)
 {
     return(AndroidBridge.CallStatic <float>("getDownloadProgress", Context, id));
 }
Ejemplo n.º 30
0
    public DownloadOperation GetDownloadOperation(string url)
    {
        var id = AndroidBridge.CallStatic <long> ("getDownloadOperation", Context, url);

        return((id == -1) ? null : new AndroidDownloadOperation(this, new BackgroundDownloadOptions(url), id));
    }