2015-03-19 06:55:06 -05:00
|
|
|
All communication consists of messages that are one line of
|
2016-05-03 00:15:06 -05:00
|
|
|
human-readable UTF-8 text (with no terminating newline), optionally
|
2016-05-03 00:20:54 -05:00
|
|
|
followed by a single newline and arbitrary (potentialy even binary)
|
|
|
|
data.
|
|
|
|
|
|
|
|
The WebSocket distinction between 'text' and 'binary' frames has no
|
|
|
|
meaning for us for messages that don't contain additional binary data;
|
|
|
|
such messages can be either 'binary' or 'text' from the WebSocket
|
|
|
|
point of view even if we require them (the single line) to be
|
|
|
|
UTF-8. In other words, an implementation is free to send such a
|
|
|
|
single-line message as a WebSocket 'binary' frame, and the receiving
|
|
|
|
implementation must treat that equally as if it was a 'text' frame.
|
|
|
|
|
|
|
|
The WebSocket protocol says that 'text' frames are to be "interpreted"
|
|
|
|
as UTF-8, so it is probably best to indeed use 'binary' frames for
|
|
|
|
messages that contain optional non-UTF-8 data.
|
2015-03-05 07:57:03 -06:00
|
|
|
|
2015-03-24 12:04:16 -05:00
|
|
|
The protocol is not a request-response one. Messages may be sent in
|
|
|
|
either direction at any time, either in response to some message, or
|
|
|
|
spontaneously. For 'tile' messages, the client may send a bunch of
|
|
|
|
tile requests without waiting for return messages. The server may send
|
|
|
|
tiles proactively (guessing what the client might need). Etc.
|
|
|
|
|
2015-03-04 17:14:04 -06:00
|
|
|
client -> server
|
|
|
|
================
|
|
|
|
|
2015-06-05 08:12:06 -05:00
|
|
|
canceltiles
|
|
|
|
|
|
|
|
All outstanding tile messages from the client to the server are
|
2016-10-04 05:20:41 -05:00
|
|
|
dropped and will not be handled, except tile messages with an id
|
|
|
|
parameter. There is no guarantee of exactly which tile: messages
|
|
|
|
might still be sent back to the client.
|
2015-06-05 08:12:06 -05:00
|
|
|
|
2016-02-18 07:42:31 -06:00
|
|
|
downloadas name=<fileName> id=<id> format=<document format> options=<SkipImages, etc>
|
2015-10-09 07:55:49 -05:00
|
|
|
|
|
|
|
Exports the current document to the desired format and returns a download URL
|
2015-10-13 12:56:42 -05:00
|
|
|
The id identifies the request on the client.
|
2015-10-09 07:55:49 -05:00
|
|
|
|
2015-10-22 10:32:19 -05:00
|
|
|
getchildid
|
|
|
|
|
|
|
|
Requests the child id so that it knows where the files needs to be sent when it is
|
|
|
|
inserted in the document
|
|
|
|
|
2015-06-24 10:08:15 -05:00
|
|
|
gettextselection mimetype=<mimeType>
|
|
|
|
|
|
|
|
Request selection's content
|
|
|
|
|
2016-01-15 07:42:02 -06:00
|
|
|
paste mimetype=<mimeType>
|
|
|
|
<binaryPasteData>
|
2015-10-27 04:40:40 -05:00
|
|
|
|
|
|
|
Paste content at the current cursor position.
|
|
|
|
|
2015-10-22 10:32:19 -05:00
|
|
|
insertfile name=<name> type=<type>
|
|
|
|
|
|
|
|
Inserts the file with the name <name> into the document, we currently support type = 'graphic'
|
|
|
|
|
2015-05-28 09:55:49 -05:00
|
|
|
key type=<type> char=<charcode> key=<keycode>
|
|
|
|
|
|
|
|
<type> is 'input' or 'up', <charcode> and <keycode> are numbers.
|
|
|
|
|
2015-03-19 07:38:04 -05:00
|
|
|
load <pathname>
|
|
|
|
|
|
|
|
Deprecated.
|
|
|
|
|
2015-11-18 11:09:13 -06:00
|
|
|
load [part=<partNumber>] url=<url> [timestamp=<time>] [options=<options>]
|
2015-11-18 10:53:03 -06:00
|
|
|
|
|
|
|
part is an optional parameter. <partNumber> is a number.
|
2015-08-04 13:42:27 -05:00
|
|
|
|
|
|
|
timestamp is an optional parameter. <time> is provided in microseconds
|
|
|
|
since the Unix epoch - midnight, January 1, 1970.
|
2015-03-04 17:14:04 -06:00
|
|
|
|
2016-08-22 08:01:19 -05:00
|
|
|
options are the whole rest of the line, not URL-encoded, and must be valid JSON.
|
2015-11-18 11:09:13 -06:00
|
|
|
|
2016-01-21 09:11:39 -06:00
|
|
|
loolclient <major.minor[-patch]>
|
|
|
|
|
|
|
|
Upon connection, a client must announce the version number it supports.
|
|
|
|
Major: an integer that must always match between client and server,
|
|
|
|
otherwise there are no guarantees of any sensible
|
|
|
|
compatibility. This is bumped when API changes.
|
|
|
|
Minor: an integer is more flexible and is at the discretion of either party.
|
|
|
|
Security fixes that do not alter the API would bump the minor version number.
|
|
|
|
Patch: an optional string that is informational.
|
|
|
|
|
2015-03-19 07:38:04 -05:00
|
|
|
mouse type=<type> x=<x> y=<y> count=<count>
|
|
|
|
|
|
|
|
<type> is 'buttondown', 'buttonup' or 'move', others are numbers.
|
|
|
|
|
2016-09-27 13:22:09 -05:00
|
|
|
ping
|
|
|
|
|
|
|
|
requests a 'pong' server message.
|
|
|
|
|
2016-11-27 17:49:17 -06:00
|
|
|
renderfont font=<font> char=<characters>
|
2015-11-27 08:13:25 -06:00
|
|
|
|
|
|
|
requests the rendering of the given font.
|
|
|
|
The font parameter is URL encoded
|
2016-11-27 17:49:17 -06:00
|
|
|
The char parameter is URL encoded
|
2015-11-27 08:13:25 -06:00
|
|
|
|
2015-08-06 10:54:45 -05:00
|
|
|
requestloksession
|
|
|
|
|
|
|
|
requests the initialization of a LOK process in an attempt to predict the user's
|
|
|
|
interaction with the document
|
|
|
|
|
2015-05-28 09:55:49 -05:00
|
|
|
resetselection
|
2015-03-19 07:38:04 -05:00
|
|
|
|
2015-05-28 09:55:49 -05:00
|
|
|
saveas url=<url> format=<format> options=<options>
|
|
|
|
|
2015-07-16 04:00:27 -05:00
|
|
|
<url> is a URL, encoded. <format> is also URL-encoded, i.e. spaces as %20 and it can be empty
|
2015-05-28 09:55:49 -05:00
|
|
|
options are the whole rest of the line, not URL-encoded, and can be empty
|
2015-03-19 07:38:04 -05:00
|
|
|
|
|
|
|
selecttext type=<type> x=<x> y=<y>
|
|
|
|
|
|
|
|
<type> is 'start', 'end' or 'reset', <x> and <y> are numbers.
|
|
|
|
|
|
|
|
selectgraphic type=<type> x=<x> y=<y>
|
|
|
|
|
|
|
|
<type> is 'start' or 'end' <x> and <y> are numbers.
|
|
|
|
|
2016-06-15 07:31:52 -05:00
|
|
|
setclientpart part=<partNumber>
|
|
|
|
|
|
|
|
Informs the server that the client changed to part <partNumber>.
|
|
|
|
|
2015-05-28 09:55:49 -05:00
|
|
|
status
|
2015-03-19 07:38:04 -05:00
|
|
|
|
2015-08-18 13:01:05 -05:00
|
|
|
styles
|
|
|
|
|
2016-05-05 06:06:23 -05:00
|
|
|
tile part=<partNumber> width=<width> height=<height> tileposx=<xpos> tileposy=<ypos> tilewidth=<tileWidth>
|
2016-10-07 08:07:50 -05:00
|
|
|
tileheight=<tileHeight> [timestamp=<time>] [id=<id> broadcast=<yesOrNo>]
|
2015-05-28 09:55:49 -05:00
|
|
|
|
2016-10-07 08:07:50 -05:00
|
|
|
Parameters are numbers except broadcast which is 'yes' or 'no'.
|
2015-05-28 09:55:49 -05:00
|
|
|
|
2016-10-07 08:07:50 -05:00
|
|
|
Note: id must be echoed back in the response verbatim. It and the
|
|
|
|
following parameter, broadcast, are used when rendering slide
|
|
|
|
previews of presentation documents, and not for anything else. It
|
|
|
|
is only useful to loleaflet and will break it if not returned in
|
|
|
|
the response.
|
2016-05-05 06:06:23 -05:00
|
|
|
|
2016-02-18 12:25:30 -06:00
|
|
|
tilecombine <parameters>
|
|
|
|
|
|
|
|
Accept same parameters as 'tile' message except parameters 'tileposx' and 'tileposy'
|
|
|
|
can be a comma separated list, and number of elements in both must be same.
|
|
|
|
|
2015-05-28 09:55:49 -05:00
|
|
|
uno <command>
|
|
|
|
|
|
|
|
<command> is a line of text.
|
2015-03-23 15:13:57 -05:00
|
|
|
|
2015-09-29 05:55:21 -05:00
|
|
|
partpagerectangles
|
|
|
|
|
|
|
|
Invokes lok::Document::getPartPageRectangles().
|
2015-03-23 15:13:57 -05:00
|
|
|
|
2016-02-02 04:48:41 -06:00
|
|
|
clientvisiblearea x=<x> y=<y> width=<width> height=<height>
|
|
|
|
|
|
|
|
Invokes lok::Document::setClientVisibleArea().
|
|
|
|
|
2016-04-21 08:02:34 -05:00
|
|
|
useractive
|
|
|
|
|
|
|
|
Sent when the user regains focus or clicks within the active area to
|
|
|
|
disable the inactive state.
|
|
|
|
Will send invalidation and update notifications to force refreshing the screen.
|
|
|
|
|
|
|
|
See 'userinactive'.
|
|
|
|
|
|
|
|
userinactive
|
|
|
|
|
|
|
|
Sent when the user has switched tabs or away from the Browser altogether.
|
|
|
|
It should throttle updates until the user is active again.
|
|
|
|
|
|
|
|
See 'useractive'.
|
|
|
|
|
2016-11-08 07:37:28 -06:00
|
|
|
closedocument
|
|
|
|
|
|
|
|
This gives document owners the ability to terminate all sessions currently
|
|
|
|
having that document opened. This functionality is enabled only in case WOPI
|
|
|
|
host mentions 'EnableOwnerTermination' flag in its CheckFileInfo response
|
|
|
|
|
2015-03-04 17:14:04 -06:00
|
|
|
server -> client
|
|
|
|
================
|
|
|
|
|
2016-06-20 13:58:00 -05:00
|
|
|
loolserver <loolwsd version> <loolwsd git hash> <major.minor[-patch]>
|
2016-01-06 11:00:44 -06:00
|
|
|
|
|
|
|
Upon connection, the server must announce the version number it supports.
|
|
|
|
Major: an integer that must always match between client and server,
|
|
|
|
otherwise there are no guarantees of any sensible
|
|
|
|
compatibility. This is bumped when API changes.
|
|
|
|
Minor: an integer is more flexible and is at the discretion of either party.
|
|
|
|
Security fixes that do not alter the API would bump the minor version number.
|
|
|
|
Patch: an optional string that is informational.
|
|
|
|
|
2016-07-21 02:48:00 -05:00
|
|
|
lokitversion <JSON string>
|
2016-06-20 13:58:00 -05:00
|
|
|
|
2016-07-21 02:48:00 -05:00
|
|
|
JSON string contains version information in format:
|
|
|
|
{ProductName: <>, ProductVersion: <>, ProductExtension: <>, BuildId: <>}
|
2016-06-20 13:58:00 -05:00
|
|
|
|
2016-07-21 02:48:00 -05:00
|
|
|
Eg: {"ProductName": "LibreOffice",
|
|
|
|
"ProductVersion": "5.3",
|
|
|
|
"ProductExtension": ".0.0.alpha0",
|
|
|
|
"BuildId": "<full 40 char git hash>"}
|
2016-06-20 13:58:00 -05:00
|
|
|
|
2016-04-08 12:13:19 -05:00
|
|
|
contextmenu: <json description of the context menu>
|
|
|
|
|
|
|
|
When the user right-clicks in the document, the content of the context
|
|
|
|
menu is sent back via this callback.
|
|
|
|
|
|
|
|
The structure of the context menu is a JSON, and looks like:
|
|
|
|
|
|
|
|
{
|
|
|
|
"menu": [
|
|
|
|
{ "text": "label text1", "type": "command", "command": ".uno:Something1", "enabled": "true" },
|
|
|
|
{ "text": "label text2", "type": "command", "command": ".uno:Something2", "enabled": "false" },
|
|
|
|
{ "type": "separator" },
|
|
|
|
{ "text": "label text2", "type": "menu", "menu": [ { ... }, { ... }, ... ] },
|
|
|
|
...
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2015-10-09 07:55:49 -05:00
|
|
|
downloadas: jail=<jail directory> dir=<a tmp dir> name=<name> port=<port>
|
|
|
|
|
|
|
|
The client should then request http://server:port/jail/dir/name in order to download
|
|
|
|
the document
|
|
|
|
|
2016-10-01 07:45:08 -05:00
|
|
|
error: cmd=<command> kind=<kind> [code=<error_code>] [params=1,2,3,...,N]
|
2015-03-04 17:14:04 -06:00
|
|
|
<freeErrorText>
|
|
|
|
|
2015-03-19 07:38:04 -05:00
|
|
|
<command> is the command part of the corresponding client->server
|
2016-11-23 06:09:54 -06:00
|
|
|
message that caused the error.
|
|
|
|
|
|
|
|
<command> can also take following values:
|
|
|
|
'internal': for errors generated without directly corresponding to a client
|
|
|
|
message.
|
|
|
|
'storage': for errors pertaining to storage (filesysytem, wopi etc.)
|
|
|
|
|
|
|
|
<kind> is some single-word classification
|
2015-03-19 07:38:04 -05:00
|
|
|
|
2016-02-03 04:15:07 -06:00
|
|
|
<code> (when provided) further specifies the error as forwarded from
|
|
|
|
LibreOffice
|
|
|
|
|
2016-11-08 07:37:28 -06:00
|
|
|
close: <reason>
|
|
|
|
|
|
|
|
Ask a client to close the websocket connection with <reason>.
|
|
|
|
Exactly similar fields are also available in WebSocket protocol's
|
|
|
|
CLOSE frame, but some browser implementation (google-chrome) doesn't seem to
|
|
|
|
handle that well. This is a temporary application-level close websocket
|
|
|
|
to circumvent the same.
|
|
|
|
|
|
|
|
<reason> can have following values:
|
|
|
|
* ownertermination - If the session close is due to 'Document owner'
|
|
|
|
terminating the session.
|
|
|
|
(Document owner is the one who has the file ownership and hence have the
|
|
|
|
ability to kill all other sessions if EnableOwnerTermination flag in WOPI
|
|
|
|
CheckFileInfo is 'true' (assumed to be 'false' by default).
|
|
|
|
|
2016-11-27 17:08:51 -06:00
|
|
|
* shuttingdown - Sent when the server is going down in a graceful fashion.
|
|
|
|
The server doesn't disconnect from clients yet, but starts
|
|
|
|
saving document and tearing down internals.
|
|
|
|
|
2016-11-27 18:11:30 -06:00
|
|
|
* recycling - The last message sent from the server when it is gracefully
|
|
|
|
shutting down to let clients know they can try connecting
|
|
|
|
after a short interval.
|
2016-11-27 17:08:51 -06:00
|
|
|
|
2015-10-22 10:32:19 -05:00
|
|
|
getchildid: id=<id>
|
|
|
|
|
|
|
|
Returns the child id
|
|
|
|
|
2016-10-10 10:16:13 -05:00
|
|
|
invalidatetiles: part=<partNumber> x=<x> y=<y> width=<width> height=<height>
|
2015-05-29 01:44:39 -05:00
|
|
|
|
|
|
|
All parameters are numbers. Tells the client to invalidate any
|
|
|
|
cached tiles for the document area specified (in twips), at any
|
|
|
|
zoom level.
|
|
|
|
|
2016-10-10 10:16:13 -05:00
|
|
|
invalidatetiles: EMPTY
|
2015-05-29 01:44:39 -05:00
|
|
|
|
2015-05-28 07:25:08 -05:00
|
|
|
nextmessage: size=<byteSize>
|
|
|
|
|
|
|
|
<byteSize> is the size, in bytes, of the next message, in case it
|
2015-05-29 01:44:39 -05:00
|
|
|
is "large". (In practice, nextmessage: messages precede each tile:
|
2015-05-28 07:25:08 -05:00
|
|
|
message). Can be ignored by clients using an API that can read
|
|
|
|
arbitrarily large buffers from a WebSocket (like JavaScript), but
|
|
|
|
must be handled by clients that cannot (like those using Poco
|
2016-08-22 07:45:42 -05:00
|
|
|
1.6.0.
|
2015-05-28 07:25:08 -05:00
|
|
|
|
2016-10-11 07:39:56 -05:00
|
|
|
pong rendercount=<num>
|
2016-09-29 06:40:56 -05:00
|
|
|
|
2016-10-11 07:39:56 -05:00
|
|
|
sent in reply to a 'ping' message, where <num> is the total number
|
|
|
|
of rendered tiles of the document.
|
2016-09-29 06:40:56 -05:00
|
|
|
|
2016-07-26 07:03:46 -05:00
|
|
|
status: type=<typeName> parts=<numberOfParts> current=<currentPartNumber> width=<width> height=<height> viewid=<viewId> [partNames]
|
2015-05-28 09:55:49 -05:00
|
|
|
|
|
|
|
<typeName> is 'text, 'spreadsheet', 'presentation', 'drawing' or 'other. Others are numbers.
|
2015-07-15 10:31:52 -05:00
|
|
|
if the document has multiple parts and those have names, part names follow separated by '\n'
|
2015-05-28 09:55:49 -05:00
|
|
|
|
2015-08-18 13:01:05 -05:00
|
|
|
styles: {"styleFamily": ["styles in family"], etc. }
|
|
|
|
|
2016-05-19 05:51:58 -05:00
|
|
|
statechanged: <key>=<value>
|
|
|
|
|
|
|
|
Notifies client of state changed events of <key>.
|
|
|
|
Eg: 'statechanged: .uno:Undo=enabled'
|
|
|
|
|
2015-09-29 05:55:21 -05:00
|
|
|
partpagerectangles: <payload>
|
|
|
|
|
|
|
|
Payload format is the same as LOK_CALLBACK_TEXT_SELECTION.
|
|
|
|
|
2015-06-24 10:08:15 -05:00
|
|
|
textselectioncontent: <content>
|
|
|
|
|
|
|
|
Current selection's content
|
|
|
|
|
2016-04-20 09:06:08 -05:00
|
|
|
tile: part=<partNumber> width=<width> height=<height> tileposx=<xpos> tileposy=<ypos> tilewidth=<tileWidth> tileheight=<tileHeight> [timestamp=<time>] [renderid=<id>]
|
2015-05-28 09:55:49 -05:00
|
|
|
<binaryPngImage>
|
|
|
|
|
|
|
|
The parameters from the corresponding 'tile' command.
|
|
|
|
|
2016-04-20 10:44:25 -05:00
|
|
|
Additionally, in a debug build, the renderid is either a unique
|
2016-04-20 09:06:08 -05:00
|
|
|
identifier, different for each actual call to LibreOfficeKit to
|
2016-04-20 10:44:25 -05:00
|
|
|
render a tile, or the string 'cached' if the tile was found in the
|
|
|
|
cache.
|
2016-04-20 09:06:08 -05:00
|
|
|
|
2016-10-10 10:16:13 -05:00
|
|
|
Each LOK_CALLBACK_FOO_BAR callback except
|
|
|
|
LOK_CALLBACK_INVALIDATE_TILES causes a corresponding message to the
|
|
|
|
client, consisting of the FOO_BAR part in lowercase, without
|
|
|
|
underscore, followed by a colon, space and the callback
|
|
|
|
payload. (LOK_CALLBACK_INVALIDATE_TILES causes an invalidatetiles:
|
|
|
|
message as documented above.) For instance:
|
2015-03-13 04:30:45 -05:00
|
|
|
|
2016-09-01 15:15:13 -05:00
|
|
|
invalidatecursor: <payload>
|
|
|
|
|
|
|
|
The payload contains a rectangle describing the cursor position.
|
2015-03-05 07:57:03 -06:00
|
|
|
|
2015-03-19 06:55:06 -05:00
|
|
|
The communication between the parent process (the one keeping open the
|
|
|
|
Websocket connections to the clients) and a child process (handling
|
|
|
|
one document through LibreOfficeKit) uses the same protocol, with
|
|
|
|
the following additions and changes:
|
|
|
|
|
2015-11-04 06:33:11 -06:00
|
|
|
unocommandresult: <payload>
|
|
|
|
|
|
|
|
Callback that an UNO command has finished.
|
|
|
|
See LOK_CALLBACK_UNO_COMMAND_RESULT for details.
|
2015-05-28 09:55:49 -05:00
|
|
|
|
2016-07-27 10:58:48 -05:00
|
|
|
invalidateviewcursor:
|
|
|
|
|
|
|
|
Per-view cursor position invalidation. JSON payload.
|
|
|
|
|
|
|
|
textviewselection:
|
|
|
|
|
|
|
|
Per-view text selection bounds. JSON payload.
|
|
|
|
|
|
|
|
cellviewcursor:
|
|
|
|
|
|
|
|
Per-view cell cursor position. JSON payload.
|
|
|
|
|
|
|
|
graphicviewselection:
|
|
|
|
|
|
|
|
Per-view graphic selection. JSON payload.
|
|
|
|
|
2016-08-03 09:20:02 -05:00
|
|
|
viewcursorvisible:
|
|
|
|
|
|
|
|
Per-view cursor visible. JSON payload.
|
|
|
|
|
2016-07-27 10:58:48 -05:00
|
|
|
viewlock:
|
|
|
|
|
|
|
|
Per-view lock rectangle. JSON payload.
|
|
|
|
|
2016-09-20 05:29:53 -05:00
|
|
|
viewinfo: <payload>
|
2016-08-14 10:57:17 -05:00
|
|
|
|
2016-09-20 05:29:53 -05:00
|
|
|
Message is sent everytime there is any change in view information.
|
|
|
|
<payload> consists of an array of JSON objects. Structure of JSON
|
|
|
|
objects is like : {"id": <viewid>, "username": <Full Name of the user>}
|
2016-08-14 16:24:46 -05:00
|
|
|
|
2016-08-21 10:15:50 -05:00
|
|
|
redlinetablechanged:
|
|
|
|
|
|
|
|
Signals that the redlines table has been modified.
|
|
|
|
Redlines are used for tracking changes.
|
|
|
|
|
2016-10-14 07:46:49 -05:00
|
|
|
stats: <key> <value>
|
|
|
|
|
2016-10-23 07:05:46 -05:00
|
|
|
Contains statistical data. Eg: 'stats: wopiloadduration 5' means that
|
2016-10-14 07:46:49 -05:00
|
|
|
wopi calls made in loading of document took 5 seconds.
|
|
|
|
|
2016-10-19 09:52:53 -05:00
|
|
|
perm: <permission>
|
|
|
|
|
|
|
|
<permission> can be one of 'edit', 'view', 'readonly'. Client must
|
|
|
|
change the UI accordingly (disabling buttons etc.)
|
|
|
|
|
2016-11-10 05:55:38 -06:00
|
|
|
wopi: <JSON>
|
|
|
|
|
|
|
|
Sent only in case storage is WOPI. Contains WOPI related
|
|
|
|
capabilities/information for loleaflet to act accordingly.
|
|
|
|
|
|
|
|
Properties mentioned:
|
2016-11-29 03:33:27 -06:00
|
|
|
+ PostMessageOrigin: See WOPI specs for more information
|
|
|
|
+ HideSaveOption: (boolean): If loleaflet should hide the save options
|
|
|
|
+ HidePrintOption: (boolean): If loleaflet should hide print options
|
|
|
|
+ HideExportOption: (boolean): If loleaflet should hide the export options
|
|
|
|
this implies 'Download as' options in file menu
|
2016-08-21 10:15:50 -05:00
|
|
|
|
2015-03-19 06:55:06 -05:00
|
|
|
child -> parent
|
|
|
|
===============
|
|
|
|
|
|
|
|
child <id>
|
|
|
|
|
2015-05-28 09:55:49 -05:00
|
|
|
Must be the first message sent from the child to the parent. The
|
|
|
|
parent has passed the id (a 64-bit random number) to the child
|
|
|
|
when starting it, so this is how the child identificates itself.
|
2015-05-18 03:21:30 -05:00
|
|
|
|
2015-05-28 10:39:05 -05:00
|
|
|
curpart: part=<partNumber>
|
|
|
|
|
|
|
|
Sent to the parent process before certain messages that the parent
|
|
|
|
needs to act on in addition to passing them on to the client, like
|
|
|
|
invalidatetiles:
|
|
|
|
|
2016-09-28 14:07:07 -05:00
|
|
|
errortoall: cmd=<command> kind=<kind> [code=<error_code>]
|
|
|
|
|
|
|
|
Causes the parent to send the corresponding error: message to all
|
|
|
|
clients.
|
|
|
|
|
2015-05-18 03:21:30 -05:00
|
|
|
nextmessage: size=<upperlimit>
|
|
|
|
|
2015-05-28 09:55:49 -05:00
|
|
|
each tile: message sent from the child to the parent is preceded
|
|
|
|
by a nextmessage: message that gives an upper limit on the size of
|
|
|
|
the tile: message that will follow. (We assume it is only tile:
|
|
|
|
messages that can be "large".) Once we depend on Poco 1.6.1, where
|
|
|
|
one doesn't need to use a pre-allocated buffer when receiving
|
|
|
|
WebSocket messages, this will go away.
|
2015-10-20 07:03:31 -05:00
|
|
|
|
|
|
|
saveas: url=<url>
|
|
|
|
|
|
|
|
<url> is a URL of the destination, encoded. Sent from the child to the
|
|
|
|
parent after a saveAs() completed.
|
2016-05-11 05:07:27 -05:00
|
|
|
|
2016-10-09 15:37:13 -05:00
|
|
|
client-<sessionId> <Payload Message>
|
|
|
|
|
|
|
|
Forwarding message between a child and its parent session.
|
|
|
|
The payload message is forwarded to the ClientSession.
|
|
|
|
|
|
|
|
parent -> child
|
|
|
|
===============
|
|
|
|
|
|
|
|
child-<sessionId> <Payload Message>
|
|
|
|
|
|
|
|
Forwarding message between a parent and its child session.
|
|
|
|
The payload message is forwarded to the ChildSession.
|
|
|
|
|
|
|
|
disconnect
|
|
|
|
|
|
|
|
Signals to the child that the client for the respective connection
|
|
|
|
has disconnected.
|
|
|
|
|
2016-11-06 20:16:11 -06:00
|
|
|
exit
|
|
|
|
|
|
|
|
Signals to the child that the process must end and exit.
|
|
|
|
|
2016-05-11 05:07:27 -05:00
|
|
|
Admin console
|
|
|
|
===============
|
|
|
|
|
|
|
|
Client can query admin console to get information about currently opened
|
|
|
|
documents. Following information about the document is exposed:
|
|
|
|
|
|
|
|
* PID of the process hosting the document
|
|
|
|
* Number of client views opening this document
|
|
|
|
* Name of the document (URL encoded)
|
|
|
|
* Memory consumed by the process (in kilobytes)
|
|
|
|
* Elapsed time since first view of document was opened (in seconds)
|
|
|
|
|
|
|
|
Admin console can also opt to get notified of various events on the server. For
|
|
|
|
example, getting notified when a new document is opened or closed. Notifications
|
|
|
|
are commands sent from server to the client over established websocket.
|
|
|
|
|
2016-07-28 07:28:40 -05:00
|
|
|
Before doing anything, clients must authenticate by providing an auth token with
|
|
|
|
'auth' command.
|
|
|
|
|
2016-05-11 05:07:27 -05:00
|
|
|
client -> admin
|
|
|
|
==============
|
|
|
|
|
2016-07-28 07:28:40 -05:00
|
|
|
auth jwt=<jwtToken>
|
|
|
|
|
|
|
|
Authenticate the client with provided jwtToken. This is necessary before any
|
|
|
|
other command.
|
|
|
|
|
2016-05-11 05:07:27 -05:00
|
|
|
subscribe <space seperated list of commands>
|
|
|
|
|
|
|
|
Where list of commands are the ones that client wants to get notified
|
|
|
|
about. For eg. 'subscribe adddoc rmdoc'
|
|
|
|
|
|
|
|
documents
|
|
|
|
|
|
|
|
Queries the server for list of opened documents. See `documents` command
|
|
|
|
in admin -> client section for format of the response message
|
|
|
|
|
|
|
|
total_mem
|
|
|
|
|
|
|
|
Queries for total memory being consumed by the server in kilobytes.
|
|
|
|
This includes processes - loolwsd, loolforkit, and child processes
|
|
|
|
hosting various documents
|
|
|
|
|
|
|
|
active_docs_count
|
|
|
|
|
|
|
|
Returns total number of documents opened
|
|
|
|
|
|
|
|
active_users_count
|
|
|
|
|
|
|
|
Returns total number of users connected. This is a summation of number
|
|
|
|
of views opened of each document.
|
|
|
|
|
|
|
|
settings
|
|
|
|
|
|
|
|
Queries the server for configurable settings from admin console.
|
|
|
|
|
|
|
|
set <setting1=value1> <setting2=value2> ...
|
|
|
|
|
|
|
|
Sets a particular setting (must be one returned as response to
|
|
|
|
`settings` command) to value.
|
|
|
|
|
|
|
|
There are only 4 configurable settings as of now.
|
|
|
|
|
|
|
|
mem_stats_size: Number of memory consumed values that server caches
|
|
|
|
atmost.
|
|
|
|
mem_stats_interval: Time after which server calculates its total memory
|
|
|
|
consumption
|
|
|
|
cpu_stats_size: Number of cpu usage values that server caches atmost.
|
|
|
|
cpu_stats_interval: Time after which server calculates its total cpu
|
|
|
|
usage.
|
|
|
|
|
|
|
|
Note: cpu stats gathering is a TODO, so not functional as of now.
|
|
|
|
|
|
|
|
kill <pid>
|
|
|
|
|
|
|
|
<pid> process id of the document to kill. All sessions of document would be
|
|
|
|
killed. There is no way yet to kill individual sessions.
|
|
|
|
|
|
|
|
admin -> client
|
|
|
|
===============
|
|
|
|
|
|
|
|
Commands marked with [*] are notifications that are delivered only if client is
|
|
|
|
subscribed to these commands using `subscribe` (see client->admin
|
|
|
|
section). Others are just response messages to some client command.
|
|
|
|
|
|
|
|
[*] adddoc <pid> <filename> <viewid> <memory consumed>
|
|
|
|
|
|
|
|
<pid> process id hosting the document
|
|
|
|
<filename> URL encoded name of the file
|
|
|
|
<viewid> string identifying the view of this document
|
|
|
|
<memory consumed> RSS of <pid> in kilobytes
|
|
|
|
|
|
|
|
[*] rmdoc <pid> <viewid>
|
|
|
|
|
|
|
|
<pid> process id hosting the document
|
|
|
|
<viewid> view which was closed
|
|
|
|
|
|
|
|
[*] mem_stats <memory consumed>
|
|
|
|
|
|
|
|
<memory consumed> in kilobytes sent from admin -> client after every
|
|
|
|
mem_stats_interval (see `set` command for list of settings)
|
|
|
|
|
2016-12-05 14:11:07 -06:00
|
|
|
[*] resetidle <pid>
|
|
|
|
|
|
|
|
<pid> process id hosting the document
|
|
|
|
reset the idle time counter for the document
|
|
|
|
|
2016-07-28 07:28:40 -05:00
|
|
|
InvalidAuthToken
|
|
|
|
|
|
|
|
This is sent when invalid auth token is provided in 'auth' command. See
|
|
|
|
above.
|
|
|
|
|
|
|
|
NotAuthenticated
|
|
|
|
|
|
|
|
When client sends an admin command that requires authentication.
|
2016-05-11 05:07:27 -05:00
|
|
|
|
2016-12-05 14:11:07 -06:00
|
|
|
documents <pid> <filename> <number of views> <memory consumed> <elapsed time> <idle time>
|
2016-05-11 05:07:27 -05:00
|
|
|
<pid> <filename> ....
|
|
|
|
...
|
|
|
|
|
|
|
|
<elapsed time> is in seconds since the first view of the document was opened
|
2016-12-05 14:11:07 -06:00
|
|
|
<idle time> is in seconds since some user did something in his view of the document (even just moving
|
|
|
|
the insertion cursor)
|
2016-05-11 05:07:27 -05:00
|
|
|
<number of views> Number of users/views opening this(<pid>) document
|
|
|
|
Other parameters are same as mentioned in `adddoc`
|
|
|
|
|
|
|
|
Each set document attributes is separated by a newline.
|
|
|
|
|
|
|
|
total_mem <memory>
|
|
|
|
|
|
|
|
<memory> in kilobytes
|
|
|
|
|
|
|
|
active_docs_count <count>
|
|
|
|
|
|
|
|
active_users_count <count>
|
|
|
|
|
|
|
|
settings <setting1=value1> <setting2=value2> ...
|
|
|
|
|
|
|
|
Current value of each configurable setting.
|
|
|
|
|
|
|
|
mem_stats <comma separated list of memory consumed values>
|
|
|
|
|
|
|
|
The length of the list is equal to the value of setting
|
|
|
|
mem_stats_size`
|