Ignore:
Timestamp:
Sep 2, 2014, 9:32:25 PM (10 years ago)
Author:
alloc
Message:

fixes

Location:
binary-improvements/7dtd-server-fixes
Files:
12 added
5 edited

Legend:

Unmodified
Added
Removed
  • binary-improvements/7dtd-server-fixes/7dtd-server-fixes.csproj

    r146 r154  
    100100    <Compile Include="src\PersistentData\Player.cs" />
    101101    <Compile Include="src\CustomCommands\ListKnownPlayers.cs" />
     102    <Compile Include="src\NetConnections\Servers\Web\ApiHandler.cs" />
     103    <Compile Include="src\NetConnections\Servers\Web\API\GetPlayersOnline.cs" />
     104    <Compile Include="src\NetConnections\Servers\Web\API\WebAPI.cs" />
     105    <Compile Include="src\JSON\JSONNode.cs" />
     106    <Compile Include="src\JSON\JSONArray.cs" />
     107    <Compile Include="src\JSON\JSONObject.cs" />
     108    <Compile Include="src\JSON\JSONNumber.cs" />
     109    <Compile Include="src\JSON\JSONString.cs" />
     110    <Compile Include="src\JSON\JSONBoolean.cs" />
     111    <Compile Include="src\NetConnections\Servers\Web\API\GetPlayersLocation.cs" />
    102112  </ItemGroup>
    103113  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
     
    111121    <Folder Include="src\NetConnections\Servers\Web\" />
    112122    <Folder Include="src\PersistentData\" />
     123    <Folder Include="src\NetConnections\Servers\Web\API\" />
    113124  </ItemGroup>
    114125</Project>
  • binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/PathHandler.cs

    r134 r154  
    66        public abstract class PathHandler
    77        {
    8                 public abstract void HandleRequest(HttpListenerRequest req, HttpListenerResponse resp, HttpListenerBasicIdentity user);
     8                public abstract void HandleRequest (HttpListenerRequest req, HttpListenerResponse resp, HttpListenerBasicIdentity user);
    99        }
    1010}
  • binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/StaticHandler.cs

    r138 r154  
    3434                                                if (!fileCache.ContainsKey (fn)) {
    3535                                                        if (!File.Exists (datapath + "/" + fn)) {
    36                                                                 resp.StatusCode = (int)HttpStatusCode.NotFound;
    37                                                                 if (logMissingFiles)
    38                                                                         Log.Out ("Web:Static:FileNotFound: \"" + req.Url.AbsolutePath + "\" @ \"" + datapath + "/" + fn + "\"");
    39                                                                 return;
     36                                                                throw new FileNotFoundException ();
    4037                                                        }
    4138
     
    4946                                } else {
    5047                                        if (!File.Exists (datapath + "/" + fn)) {
    51                                                 resp.StatusCode = (int)HttpStatusCode.NotFound;
    52                                                 if (logMissingFiles)
    53                                                         Log.Out ("Web:Static:FileNotFound: \"" + req.Url.AbsolutePath + "\" @ \"" + datapath + "/" + fn + "\"");
    54                                                 return;
     48                                                throw new FileNotFoundException ();
    5549                                        }
    5650
     
    6155                                resp.ContentLength64 = content.Length;
    6256                                resp.OutputStream.Write (content, 0, content.Length);
     57                        } catch (FileNotFoundException e) {
     58                                resp.StatusCode = (int)HttpStatusCode.NotFound;
     59                                if (logMissingFiles)
     60                                        Log.Out ("Web:Static:FileNotFound: \"" + req.Url.AbsolutePath + "\" @ \"" + datapath + "/" + req.Url.AbsolutePath.Remove (0, staticPart.Length) + "\"");
     61                                return;
    6362                        } catch (Exception e) {
    6463                                Log.Out ("Error in StaticHandler.HandleRequest: " + e);
  • binary-improvements/7dtd-server-fixes/src/NetConnections/Servers/Web/Web.cs

    r151 r154  
    1919                                        throw new NotSupportedException ("Needs Windows XP SP2, Server 2003 or later.");
    2020 
    21                                 handlers.Add ("/index.", new SimpleRedirectHandler ("/static/index.html"));
     21                                handlers.Add ("/index.htm", new SimpleRedirectHandler ("/static/index.html"));
    2222                                handlers.Add ("/static/", new StaticHandler ("/static/", Application.dataPath + "/../webserver", false/*true*/, true)); // TODO: Enable cache
    2323                                handlers.Add ("/map/", new StaticHandler ("/map/", StaticDirectories.GetSaveGameDir () + "/map", false, false));
     24                                handlers.Add ("/api/", new ApiHandler ("/api/"));
    2425
    2526                                _listener.Prefixes.Add (String.Format ("http://*:{0}/", port));
     
    5354                                ctx.Response.ProtocolVersion = new Version ("1.1");
    5455
    55                                 HttpListenerBasicIdentity user;
     56                                HttpListenerBasicIdentity user = Authorize (ctx);
    5657
    57                                 if (Authorize (ctx, out user)) {
    58                                         if (ctx.Request.Url.AbsolutePath.Length < 2) {
    59                                                 handlers ["/index."].HandleRequest (ctx.Request, ctx.Response, user);
    60                                                 return;
    61                                         } else {
    62                                                 foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
    63                                                         if (ctx.Request.Url.AbsolutePath.StartsWith (kvp.Key)) {
    64                                                                 kvp.Value.HandleRequest (ctx.Request, ctx.Response, user);
    65                                                                 return;
    66                                                         }
     58                                if (ctx.Request.Url.AbsolutePath.Length < 2) {
     59                                        handlers ["/index.htm"].HandleRequest (ctx.Request, ctx.Response, user);
     60                                        return;
     61                                } else {
     62                                        foreach (KeyValuePair<string, PathHandler> kvp in handlers) {
     63                                                if (ctx.Request.Url.AbsolutePath.StartsWith (kvp.Key)) {
     64                                                        kvp.Value.HandleRequest (ctx.Request, ctx.Response, user);
     65                                                        return;
    6766                                                }
    6867                                        }
     68                                }
    6969
    70                                         Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + ctx.Request.Url.AbsolutePath + "\"");
    71                                         ctx.Response.StatusCode = (int)HttpStatusCode.NotFound;
    72                                 } else {
    73                                         ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
    74                                         ctx.Response.AddHeader("WWW-Authenticate", "Basic realm=\"\"");
    75                                 }
     70                                Log.Out ("Error in Web.HandleRequest(): No handler found for path \"" + ctx.Request.Url.AbsolutePath + "\"");
     71                                ctx.Response.StatusCode = (int)HttpStatusCode.NotFound;
    7672
    7773//                              byte[] buf = Encoding.UTF8.GetBytes ("Hello World");
     
    8783                }
    8884
    89                 private bool Authorize (HttpListenerContext ctx, out HttpListenerBasicIdentity user)
     85                private HttpListenerBasicIdentity Authorize (HttpListenerContext ctx)
    9086                {
    91                         user = null;
    92                         return true;
    9387                        try {
    94                                 user = (HttpListenerBasicIdentity)ctx.User.Identity;
    95                                 return user.Name.Equals ("admin") && user.Password.Equals (GamePrefs.GetString (EnumGamePrefs.ControlPanelPassword));
     88                                return (HttpListenerBasicIdentity)ctx.User.Identity;
    9689                        } catch (NullReferenceException) {
    97                                 user = null;
    98                                 return false;
     90                                return null;
    9991                        }
    10092                }
  • binary-improvements/7dtd-server-fixes/src/PersistentData/Player.cs

    r146 r154  
    1717                        lastOnline;
    1818                private Inventory inventory;
     19                [OptionalField]
     20                private int
     21                        lastPositionX, lastPositionY, lastPositionZ;
    1922                [NonSerialized]
    2023                private ClientInfo
     
    8285                }
    8386
     87                public Vector3i LastPosition {
     88                        get {
     89                                if (IsOnline)
     90                                        return new Vector3i (Entity.GetPosition ());
     91                                else
     92                                        return new Vector3i (lastPositionX, lastPositionY, lastPositionZ);
     93                        }
     94                }
     95
    8496                public void SetOffline ()
    8597                {
    8698                        Log.Out ("Player set to offline: " + steamId);
     99                        Vector3i lastPos = new Vector3i (Entity.GetPosition ());
     100                        lastPositionX = lastPos.x;
     101                        lastPositionY = lastPos.y;
     102                        lastPositionZ = lastPos.z;
    87103                        totalPlayTime += (long)(Time.timeSinceLevelLoad - Entity.CreationTimeSinceLevelLoad);
    88104                        lastOnline = DateTime.Now;
Note: See TracChangeset for help on using the changeset viewer.