[XAP][Source] Webserver v0.5.0 (background operation)
New, version Alpha 0.5.0, is now up on Codeplex and available for download here!
You asked for it; turns out it's easy; you get it. The app now supports background web-serving using the location-tracking background functionality! There's a new checkbox on the app UI; enable it and switch out of the app, and it should keep on running. You can even browse the server from IE on the phone (although be aware that the loopback address doesn't seem to work; you need to use the same address as from another machine). Please be aware of the battery impact of this feature! The app is uses extremely low settings for GPS update frequency and precision, which should limit the impact, but there will still be some impact. Additionally, the app will go on running under the lockscreen or while the screen is turned off. It will stop automatically after four hours of no interaction, but I haven't yet tested how much faster the battery will drain over the course of those hours. Oh, and I apologize for the crappy styling on the mobile browser. I do know how to do CSS, I just haven't bothered.
The previous version (0.4.9) was a minor feature release; registry browsing now shows unknown types ("None" or invalid type identifiers) correctly, displays hex values for numerical types, and displays 8-byte types as dates (note that they may be a few hours off due to time zone differences; sometimes FILETIME structs use local time and sometimes they don't...). More exciting are the bugfixes and performance improvements. The server should be more responsive and should no longer occasionally fail to respond to a request, much less crash the entire phone the way it was prone to do if left running too long. These improvements are both due to some changes in the threading code. Additionally, the app will now resume the server when it is brought back into the foreground (after switching apps, etc.) correctly, and the Restart Server button works as expected. Finally, the app now remembers the port number you last used!
PLEASE REPORT ANY BUGS YOU FIND IN THE CURRENTLY IMPLEMENTED FEATURES!
There are other things I want to implement soon. The big one is write operations. I'm also looking at moving the server to a background process and making the app just a control UI for it, adding support for authentication and/or HTTPS, adding some stylesheets to the web UI, adding cache control, and much more.
As with the last few releases, the XAP is published twice; once as a fairly standard XAP that any phone can sideload, the second with many exotic capabilities to enable viewing of slightly more of the file system. The standard XAP has had its list of capabilities expanded to pretty much all of them that can be used without interop-unlock. The high-capability variant requires not just interop-unlock
, but the additional capability-unlock hack available in the interop-unlock thread (Samsung only so far, still).
An item of note: the AllCapabilities version can open other drives in the file system. On phones with an SD card, it is mounted at D:\ and you can browse it as normal. Credit to @hjc4869
for this discovery!
I may publish an update to the NativeAccess
libraries soon as well. This version didn't require very extensive changes there, though.
This is a very basic webserver app which can enumerate those files that are in folders readable from the sandbox, can download files, can browse the registry, and can display the contents of registry values of any type. It runs on WP8 only. It is a spiritual successor to the Functional Webserver / WebServer (Mango)
projects from WP7. This version is still missing a lot of functionality as I decided to implement it from scratch, but it is advancing swiftly. Note that there's no access controls implemented; use it on a public network only at your own risk!
Instructions are simple: sideload the XAP, connect to WiFi (required), run the app (called "WebServer Native Access"), point a web browser (on a PC or phone that is also on that local network) to the URL that the app displays. You should get a basic index page. Click on a Filesystem or Registry link to begin browsing the phone. There's a textbox near the top of all filesystem pages, type in a path there (for example, "\windows" with no quotes) and hit Enter or click Get Files. You'll see a list of the contents of that folder. Click on a file to download it or a directory to open it. Navigating the registry is similar, except you'll need to specify the registry hive and then the path from that hive (or no path, to access the root of the hive).
Modifications (uploading or editing files, creating, deleting, or changing registry keys or values) are currently not supported. They will be "soon" although my personal testing suggests that basically the whole registry, and most of the file system, is off-limits for writing. Interestingly, I can *read* most of the registry, including stuff that I probably shouldn't be able to.
You might see an error code (error 5 is "ACCESS_DENIED", you'll see it a lot). Or you might see a status 500 message because of an exception in the server. Or the server may just crash. I'm making it more resilient, but there are still bugs. Please report any previously-unreported issues you find, including how to reproduce them, and I'll fix them if possible.
Also feel free to request features or changes; I'll implement them if reasonably possible. The app is a mixture of C++ and C# code; I could probably have done it all in one or the other but wanted to have a C++ component in case I ran into something that wasn't available in C#, and although it probably would have saved some time, I decided that hacking up a web server in C++ was maybe not the best idea.
The source code is on Codeplex, at the following projects: https://wp8webserver.codeplex.com/
for the server and the app (C#) and https://wp8nativeaccess.codeplex.com/
for the native access wrappers (C++). You may have to fix up the reference paths to get the C# component to see the C++ component correctly. The code is reasonably well documented, but let me know if you have any questions. Permission to re-use the code or components is granted under the MS-PL (Microsoft Permissive License) as posted on Codeplex.
Go forth and find cool stuff!
0.2.0: Initial release, FS only, 920 downloads (source: 652 downloads)
0.3.2: initial registry, HTTP server and web app encapsulation, source on Codeplex, 225 downloads
0.3.3: bugfixes, 454 downloads
0.4.2: basic registry values display, 86 downloads
0.4.3: bugfixes, 326 downloads
0.4.6: multistring registry values, bugfixes, updated libraries, first AllCapabilities version (561 downloads), 376 downloads
25 Oct 2013 - 0.4.8: binary and long registry values, formatting and bugfixes
22 Dec 2013 - 0.4.9: all registry value types, better threading, proper resume, remembers port
24 Dec 2013 - 0.5.0: background operation using Location APIs