Răsfoiți Sursa

fix ws / wss check

Robert 1 an în urmă
părinte
comite
eecb00efb2

+ 0 - 1
EVCB_OCPP.WSServer/Program.cs

@@ -54,7 +54,6 @@ namespace EVCB_OCPP.WSServer
             app.MapWsService();
             app.MapApiServce();
             app.Urls.Add("http://*:80");
-            app.Urls.Add("https://*:443");
             app.Run();
         }
 

+ 1 - 0
EVCB_OCPP.WSServer/ProtalServer.cs

@@ -363,6 +363,7 @@ namespace EVCB_OCPP.WSServer
 
             string[] words = session.Path.ToString().Split('/');
             session.ChargeBoxId = words.Last();
+            logger.LogDebug("{0}:{1}", session.ChargeBoxId, session.UriScheme);
 
             foreach (var denyModel in GlobalConfig.DenyModelNames)
             {

+ 26 - 9
EVCB_OCPP.WSServer/Service/WsService/WebsocketService.cs

@@ -5,6 +5,7 @@ using Microsoft.Extensions.Primitives;
 using System.Net;
 using System.Net.WebSockets;
 using System.Text;
+using static System.Runtime.InteropServices.JavaScript.JSType;
 
 namespace EVCB_OCPP.WSServer.Service.WsService;
 
@@ -60,15 +61,8 @@ public class WebsocketService<T> where T : WsSession
         data.AuthHeader = context?.Request?.Headers?.Authorization;
         //data.Origin = context.Request.Scheme;
 
-        var origin = context.Request.Headers.Origin.FirstOrDefault();
-        try
-        {
-            data.UriScheme = new Uri(origin).Scheme;
-        }
-        catch
-        {
-            data.UriScheme = origin;
-        }
+        data.UriScheme = GetScheme(context);
+
 
         try
         {
@@ -92,6 +86,29 @@ public class WebsocketService<T> where T : WsSession
         await data.EndConnSemaphore.WaitAsync();
         return;
     }
+
+    private string GetScheme(HttpContext context)
+    {
+        string toReturn = string.Empty;
+
+        if (context.Request.Headers.ContainsKey("x-original-host"))
+        {
+            toReturn = new Uri(context.Request.Headers["x-original-host"]).Scheme;
+            return toReturn;
+        }
+
+        var origin = context.Request.Headers.Origin.FirstOrDefault();
+        try
+        {
+            toReturn = new Uri(origin).Scheme;
+            return toReturn;
+        }
+        catch
+        {
+        }
+
+        return toReturn;
+    }
 }
 
 public enum CloseReason