[XAP][Source] Root Webserver - v2.3.1 (supports Full or Root Tools unlock)

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
UPDATE: Still working on a newer version of the webserver, but I've been distrcted by a number of other projects lately (including getting a new job). The most important news is that the Root Webserver works great with WP7 Root Tools; you don't need a full-unlocked ROM or HtcRoot compatibility anymore! Just mark the app as Trusted in the WP7 Root Tools policy pivot, and you're good to go.

Sorry for the long delay, I've been working on many different things. One of them is re-write of a substantial part of this app, to make it more modular and extensible and also to add more features. That re-write is far from done, any may end up being broken into a few smaller pieces once any of the new or re-written features reach release-quality without the whole app being unusably broken.

This project started out as a child of the HtcRoot project. It no longer requires HtcRoot; full-unlock or WP7 Root Tools work fine. It's also a child of the Functional Webserver / WebServer (Mango) projects, and builds on their open-source foundations. Its goal is to allow unfettered access to your phone through the convenience of a web browser.

Fifth release (v2.3.1)
Platform release, minor feature release, minor library update, bugfixes
Should now be compatible with fully unlocked custom ROMs, even if they can't use the HtcRoot project.
This release does not include NativeIO_Mango source, as it was not changed. If you need the source for this library, extract it from the 2.2.0 download.

Homebrew library (v1.6.3)
Better detection and reporting of exceptions due to not being root.
Should be safe to use the HtcRoot functionality on fully-unlocked ROMs.

Please see the changelog in the app for details and history

Note that this app requires a slight update to NativeIO_Mango from @fiinix's version. There were some bugs in the library that were making things difficult, so I fixed them. I also changed the return values of a couple functions (though the signatures are unchanged) to give the ability to return error codes from COM. Source code for both the managed Homebrew and COM NativeIO_Mango libraries is included, along with compiled binaries. Source code for the HtcUtility library can be downloaded from the HtcRoot proect.

Features:
View folder and ROM Module last-modified dates. (NEW 2.3.1)
File attribute info now presented better. (NEW 2.3.1)
Upload files anywhere. (2.2.0)
Create and delete directories anywhere. (2.2.0)
Delete writable files.
Add or Remove readonly attribute from files. (2.2.0)
See file size and attributes for any file.
Browse the entire filesystem.
Download any file (still not ROM modules, though).
Static HTML files in a "Content" folder for easier editing.
Easy link to browse (and add your own files) to Content folder (2.2.0)
All features of previous WebServer versions (IsoStore uploading, authentication, etc.)
Changelog

Bugfixes:
Fixed a case where setting file attributes or uploading a file would fail due to lacking permissions.
Fixed the potential for infinite loops on fully-unlocked ROMs compatibel with the HtcRoot project.
More effort to eliminate RootException / Error 1260.

Upcoming:
Access the registry as well as the filesystem.
Better access to installed application info and folders.
View, edit, move, and rename files.
Rename and move directories.
Server-side commands (process provxml, for example)?
Filesystem/Registry/Application search?

Known Bugs:
App may take several seconds to close; don't re-launch it immediately or weird things may happen.
Touching the screen while the app is in "root" mode appears to cause a crash, and posible resource leak.
Error 1260 (Least Privileged Chamber) may still occasionally appear on first access attempt or two... really wish I knew why.

Requirements:
Developer-unlocked phone (if you remove ID_CAP_INTEROPSERVICES it will work without root access, cutting off most of the filesystem).
For root access, you need *EITHER*
* A fully-unlocked ROM
* An interop-unlocked HTC phone with working HtcUtility driver
If your phone is compatible with the HtcRoot project, you're OK.

Thanks To:
Davux (original author of the "Functional Webserver" app)
Fiinix (Ported the NativeIO library and Webserver app to Mango)
MarysFetus (designed icons and graphics for the webserver app - site http://klaus-widraw.de)
Everybody who helped make the HtcRoot project possible.


Have fun!
 

Attachments

Last edited:

voluptuary

Senior Member
Dec 29, 2010
960
753
0
Mukwonago
I'm not by my HTC HD2 but anybody know if will this work on it under the B.t.t.F ROM?

Awesome work GDTD!

EDIT: Doesn't work on a HTC HD2 on B.t.t.F v2.1 @ 8107 (no SP1) I get the following error when trying to connect from my PC:
Code:
Exception while getting the listing for /!
Homebrew.InteropException: Error listing subdirectories of ! GetLastError: 1260 at Homebrew.IO.DirectoryInfo.GetDirectories(String filter) at Homebrew.IO.DirectoryInfo.GetDirectories() at WebServer.MainPage.handler.BuildDirectoryListing(String dirPath) at WebServer.MainPage.handler.Process(RequestContext context) at HttpServer.Server.ProcessModules(RequestContext context) at HttpServer.Server.HandleRequest(RequestEventArgs e) at HttpServer.Server.OnRequest(Object sender, RequestEventArgs e) at HttpServer.HttpListener.OnRequest(Object sender, RequestEventArgs e) at HttpServer.HttpContext.OnRequest(Object sender, FactoryRequestEventArgs e) at HttpServer.Messages.MessageFactoryContext.OnMessageComplete(Object sender, EventArgs e) at HttpServer.Messages.Parser.HttpParser.OnComplete() at HttpServer.Messages.Parser.HttpParser.GetHeaderName() at HttpServer.Messages.Parser.HttpParser.Parse(Byte[] buffer, Int32 offset, Int32 count) at HttpServer.Messages.MessageFactoryContext.Parse(Byte[] buffer, Int32 offset, Int32 length) at HttpServer.HttpContext.ParseBuffer(Int32 bytesLeft) at HttpServer.HttpContext.OnReceive(Int32 bytesLeft) at HttpServer.HttpContext.b__a() at System.Threading.ThreadHelper.ThreadStartHelper(ThreadHelper t) at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStartHelper()
It is interop unlocked so I don't get the error.
 
Last edited:

dragonide

Senior Member
Jul 9, 2010
284
67
0
Rome
NOOOO I AM CRYING !!! THIS IS WHAT I WANTED AND I CAN'T EVEN TRY IT !!

Kill me now ;_; sigh sob sigh

EDIT : good work and good luck ;)
 
Last edited:

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
@voluptuary: If you can run the HtcUtilityTest app successfully (from the HtcRoot page) then yes, this will work.

On that thread, I have the following listed as compatible:
HD2 (BttF [XBmod-Yuki] v2 SP1)

That your ROM?
 
  • Like
Reactions: voluptuary

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
@Voluptuary:
To quote from the Known Bugs section:
First attempt to access the filesystem will often fail or take too long; hit refresh a couple times and it should work.

I don't know why it does this. I built in some delays and some automatic retries, and that improved things dramatically - it will *almost* always work on the first freresh attempt (or second click on the Filesystem link) now - but didn't eliminate the problem. I'm not sure what it is; on the test app the switch to SYSTEM token is effectively instant. Maybe it has to do with the number of threads or something?

Anyhow, give it another shot and it should work. I contemplated just putting in a 5-second auto-refresh on the error page...
 
  • Like
Reactions: voluptuary

voluptuary

Senior Member
Dec 29, 2010
960
753
0
Mukwonago
@Voluptuary:
To quote from the Known Bugs section:
First attempt to access the filesystem will often fail or take too long; hit refresh a couple times and it should work.

I don't know why it does this. I built in some delays and some automatic retries, and that improved things dramatically - it will *almost* always work on the first freresh attempt (or second click on the Filesystem link) now - but didn't eliminate the problem. I'm not sure what it is; on the test app the switch to SYSTEM token is effectively instant. Maybe it has to do with the number of threads or something?

Anyhow, give it another shot and it should work. I contemplated just putting in a 5-second auto-refresh on the error page...
Sorry, I should have read your post better. I hate when people do that to me in my threads, I should know better.

Anyways I got it working, kinda. It still gave the error at the top of the page but then it listed the directories anyways, then navigating to Windows always fails, just times out or stays loading forever. This is over Wifi, I guess it could be a latency problem but everything else on my network runs fine.
 

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
I'm looking into ways to resolve the read error issue. Once it decides to work, I can leave the app running for hours (on USB power, idle detection disabled of course) and browse with no trouble, but when I first open the app it's ornery for a few minutes. Very weird (and annoying). I'm guessing it's due to a threading issue, which would technically be a bug in the HtcRoot library, but I'll need to explore more.

By the way, the Windows folder takes a moment to load (it's huge). It should work pretty reliably though (you can open it for reading without having root at all, actually) and it opens a lot faster on my version than it did on the earlier ones (StringBuilder + half as many FileSystem calls + eliminated one of the slowest calls).

@Ttblondey: Dude, it's a W E B S E R V E R app. It runs a web server on your phone. You browse it through a web browser. I literally don't know what else to tell you, except to go read the threads on the other web server apps.
 
Last edited:

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
New version uploaded!

This contains some bigfixes - in particular, the Error 1260 bug (failure to elevate to root before trying to access the filesystem) has been mitigated to the point where it shouldn't be a problem.

It also uses a new version of the Homebrew library, 1.6.0, which incorporates access to the HtcRoot project under the Homebrew.HtcRoot namespace. Previously, the HtcRoot project was tacked onto the webserver directly, which meant the Homebrew library was unaware of its existence.

Requirements and major features have not changes in this update. Source code is included.
 

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
@Briefcase: Thanks! I wish I could support more phones. Heathcliff74 may be able to enable something for Samsung (gen1 at least) but he hasn't released a library for doing so yet.

FEATURE RELEASE 2.1.0 is out.
Major changes: File attributes information, file deletion.
 

Pr0xiMUS

Senior Member
Jul 29, 2008
72
31
0
You should talk with ROM chefs here to include read/write enabled HtcUtility in their roms because all recent ROMs unfortunately doesn't support your findings.
 

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
@Pr0xiMUS: That's a good point. This tool is potentially more powerful that TouchXplorer or Registry Editor from TouchXperience, but those are the primarily-targeted apps in custom ROMs.

I wonder if adding registry support will be as straighforward (and simultaneously frustrating, due to bugs) as filesystem support...
 
  • Like
Reactions: Briefcase

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
If anybody knows of a ready-made and Mango compatible registry COM library (that's open source, thanks a ton @schaps), this would save me some time. If not, I can either ports one from NoDo or write my own well enough.
 
  • Like
Reactions: Briefcase

Kr3i0s

Senior Member
Jun 30, 2011
107
28
0
I am not able to browse the File System getting the following error.

Exception while getting the listing for /!


System.Runtime.InteropServices.COMException (0x8007001F): A device attached to the system is not functioning.

Using DFT V3 rom on Htc 7 Pro (Gold)
 

GoodDayToDie

Inactive Recognized Developer
Jan 20, 2011
6,066
2,930
0
Seattle
@Kr3i0s: Your ROM is not compatible with the HtcRoot project, due to it having a crippled HtcUtility driver. If the ROM is updatable, it might be possible to downgrade the HtcUtility driver using a custom CAB. Otherwise, you'll need to wait for (or switch to) a ROM that has a working HtcUtility driver.

EDIT: Actually, a fully-unlocked ROM can probably use this app even without HtcRoot compatibility. I'll modify the app so that it detects Error 31 and tries to fall back on whatever permissions it already has.
 
Last edited: