I'm trying to implement MS-FSSHTTP for Office Web Apps. Specifically, I just need to get Word working.
The OWA server is sending out a ExecuteCellStorageRequest request, which follows the FSSHTTP standard (looks like butchered SOAP).
The request body is a standard SOAP request sans Envelope. It looks like this (formatted for clarity):
<RequestVersion Version="2" MinorVersion="2" xmlns="http://schemas.microsoft.com/sharepoint/soap/"/>
<RequestCollection CorrelationId="4528ff55-db57-402f-894a-fcd23cb569c3" xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<Request RequestToken="0" Build="15.0.4481.1000" UserAgentClient="msword" UserAgentPlatform="wac" MetaData="99">
<SubRequest SubRequestToken="1" Type="Cell">
<SubRequestData BinaryDataSize="197" PartitionID="bbd4e3c0-21b4-463d-9279-9c5a9406aa8f">
DAALAJzPKfM5lAabBgIAAO4CAABaBBYADW1zd29yZAd3YWN6AggAFRihD3cBFgIGAAUFABoEIADA49S7tCE9RpJ5nFqUBqqPigICAAk+AgQAAQAfAT4CBAACALoCAgAVHwE+AgQABwECA1QAA1G5+t6Eo6oNSqOoUgx3rHBzAQAAAADqbeOQaI5Gpm3DzbeeY5MBAAAAHwE+AgQABwECAywAAikwtZ5NpE1DT7hZsxzAcAZlAQAAAB8BhABBCwGsAgBVAwE=
</SubRequestData>
</SubRequest>
</Request>
</RequestCollection>
I wrap this request in a standard SOAP Envelope,
$wrap_req = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body>'.$req.'</SOAP-ENV:Body></SOAP-ENV:Envelope>';
So that I can pass it off the the built-in PHP SoapServer class (lest it crash with no error messsage).
When handled it calls a RequestVersion
method for me (I assume this is correct; I can't make heads or tails of that binary message) and produces a response. [It's just taking the tag name and calling a function by the same name. I don't think this is what it's requesting at all.]
The response is supposed to be envelopeless as well, so I strip that off,
$doc = new DOMDocument();
$doc->loadXML($resp);
$resp_body = $doc->saveXML($doc->firstChild->firstChild->firstChild->firstChild);
And send it back. That looks like this:
<ResponseVersion xmlns="http://schemas.microsoft.com/sharepoint/soap/" Version="2" MinorVersion="0"/>
(I think this is the response it's looking for, by looking at this schema).
The request headers also say that it Expect
s a 100-continue
, so I send back an HTTP 100 status code along with my response.
I can only assume the OWA server doesn't like my response because it immediately closes my connection,
2014/01/23 14:08:31 [info] 81976#0: *229 kevent() reported that client 192.168.0.10 closed keepalive connection
And now I'm stumped.
The OWA server isn't giving me any kind of error message, so I have no idea what could be wrong or how to get more information. I have remote access to the OWA machine, but I couldn't see anything useful in the logs.
Does anyone have any experience implementing MS-FSSHTTP (my Google searches suggest a resounding "no") or have any idea how to debug this further? I believe OWA is just an ASP.NET app running on IIS, but AFAICT all the sources are precompiled binary.