diff --git a/SVSim.EmulatedEntrypoint/Extensions/HttpContextExtensions.cs b/SVSim.EmulatedEntrypoint/Extensions/HttpContextExtensions.cs
index 8e5f4f7..0228bb0 100644
--- a/SVSim.EmulatedEntrypoint/Extensions/HttpContextExtensions.cs
+++ b/SVSim.EmulatedEntrypoint/Extensions/HttpContextExtensions.cs
@@ -1,11 +1,13 @@
using SVSim.Database.Models;
+using SVSim.EmulatedEntrypoint.Constants;
+using SVSim.EmulatedEntrypoint.Services;
namespace SVSim.EmulatedEntrypoint.Extensions;
public static class HttpContextExtensions
{
private const string ViewerItemName = "SVSimViewer";
-
+
public static Viewer? GetViewer(this HttpContext context)
{
if (context.Items.TryGetValue(ViewerItemName, out object? viewer))
@@ -21,4 +23,18 @@ public static class HttpContextExtensions
context.Items[ViewerItemName] = viewer;
return viewer;
}
-}
\ No newline at end of file
+
+ ///
+ /// Resolves the client's UDID for this request by looking up the SID header in the
+ /// in-memory SID→UDID dict that
+ /// populates from the UDID header. Returns null when the SID isn't mapped (e.g. the
+ /// request didn't carry a UDID header at all, or carried an undecodable one).
+ ///
+ public static Guid? GetUdid(this HttpContext context)
+ {
+ string? sid = context.Request.Headers[NetworkConstants.SessionIdHeaderName];
+ if (sid is null) return null;
+ var sessionService = context.RequestServices.GetService();
+ return sessionService?.GetUdidFromSessionId(sid);
+ }
+}