This file is indexed.

/usr/share/doc/cockpit/guide/cockpit-channels.html is in cockpit-doc 164-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>cockpit.js: Raw Channels</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="index.html" title="Cockpit Guide">
<link rel="up" href="api-base1.html" title="API: base1">
<link rel="prev" href="cockpit-series-data.html" title="cockpit.js: Series Data">
<link rel="next" href="cockpit-location.html" title="cockpit.js: Page Location and Jumping">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
<td><a accesskey="p" href="cockpit-series-data.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
<td><a accesskey="u" href="api-base1.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
<th width="100%" align="center">Cockpit Guide</th>
<td><a accesskey="n" href="cockpit-location.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
</tr></table>
<div class="refentry">
<a name="cockpit-channels"></a><div class="titlepage"></div>
<div class="refnamediv"><table width="100%"><tr>
<td valign="top">
<h2>cockpit.js: Raw Channels</h2>
<p>cockpit.js: Raw Channels — Raw communication channels</p>
</td>
<td valign="top" align="right"></td>
</tr></table></div>
<div class="refsynopsisdiv">
<h2>Synopsis</h2>
<p>At a low level Cockpit communicates with the system via messages passed
      through various channels. These are usually exposed via higher level APIs,
      such as the <code class="code"><a class="link" href="cockpit-spawn.html" title="cockpit.js: Spawning Processes">cockpit.spawn()</a></code> function.
      It is rare to use raw channels directly.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-channel"></a><h2>cockpit.channel()</h2>
<pre class="programlisting">
channel = cockpit.channel(options)
</pre>
<p>This function creates a new channel for communication with the system.
      It returns a new channel object. The <code class="code">options</code> argument is a
      plain object. At least the <code class="code">"payload"</code> option is required, and
      based on the payload type, other options may be required.</p>
<div class="variablelist"><table border="0" class="variablelist">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody>
<tr>
<td><p><span class="term"><code class="code">"binary"</code></span></p></td>
<td><p>Set to <code class="code">true</code> to transfer binary payloads. Both messages
          sent via <a class="link" href="cockpit-channels.html#cockpit-channels-send" title="channel.send()"><code class="code">channel.send()</code></a>
          and those received via
          <a class="link" href="cockpit-channels.html#cockpit-channels-message" title="channel.onmessage"><code class="code">channel.onmessage</code></a>
          should be arrays of bytes, either <code class="code">Uint8Array</code> or <code class="code">Array</code>
          depending on browser support.</p></td>
</tr>
<tr>
<td><p><span class="term"><code class="code">"host"</code></span></p></td>
<td><p>The host to open the channel to. If an alternate user or port is
          required it can be specified as <code class="code">"user@myhost:port"</code>. If no host
          is specified then the correct one will be automatically selected based on the page
          calling this function.</p></td>
</tr>
<tr>
<td><p><span class="term"><code class="code">"payload"</code></span></p></td>
<td><p>The payload type for the channel. Only specific payload
          types are supported.</p></td>
</tr>
<tr>
<td><p><span class="term"><code class="code">"superuser"</code></span></p></td>
<td>
<p>Set to <code class="code">"require"</code> to open this channel as root. If the currently
          logged in user is not permitted to become root (eg: via <code class="code">pkexec</code>) then the
          <code class="code">channel</code> will immediately be
          <a class="link" href="cockpit-channels.html#cockpit-channels-close-ev" title="channel.onclose">closed</a> with a <code class="code">"access-denied"</code>
          problem code.</p>
<p>Set to <code class="code">"try"</code> to try to open the channel as root, but if that fails,
          then fall back to an unprivileged channel.</p>
</td>
</tr>
</tbody>
</table></div>
<p>The channel object returned has the following fields and methods and
      events. You should call the
      <code class="code"><a class="link" href="cockpit-channels.html#cockpit-channels-close" title="channel.close()">channel.close()</a></code>
      method when done with the channel.</p>
<p>A valid channel will always be returned and the is ready to
      <code class="code"><a class="link" href="cockpit-channels.html#cockpit-channels-send" title="channel.send()">channel.send()</a></code>. The channel may
      <a class="link" href="cockpit-channels.html#cockpit-channels-close-ev" title="channel.onclose">close shortly afterword</a> due
      to a failure.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-binary"></a><h2>channel.binary</h2>
<p>Will be <code class="code">true</code> for an binary channel. Will be set to <code class="code">false</code> if the
      channel is textual.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-options"></a><h2>channel.options</h2>
<p>The options used to open this channel. This should not be changed.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-valid"></a><h2>channel.valid</h2>
<p>Will be <code class="code">true</code> for an open channel. Will be set to <code class="code">false</code> if the channel
      closes.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-send"></a><h2>channel.send()</h2>
<pre class="programlisting">
channel.send(data)
</pre>
<p>Send a message over the channel. The contents of the message depends on the
      payload type of the channel. If a binary channel, then <code class="code">data</code> is expected
      to be an <code class="code">Array</code> of bytes or a <code class="code">Uint8Array</code>. If not binary,
      then the <code class="code">data</code> will be converted to a string if not already a string.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-control"></a><h2>channel.control()</h2>
<pre class="programlisting">
channel.control(options)
</pre>
<p>Notify the channel to tune certain parameters on the fly. The <code class="code">options</code>
      is a plain javascript object, and the contents depend on the <code class="code">"payload"</code>
      of the channel.</p>
<p>One common operation is to set <code class="code">"command"</code> to <code class="code">"done"</code> in the
      options field. To indicate that no further messages will be sent through the channel.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-wait"></a><h2>channel.wait()</h2>
<pre class="programlisting">
promise = channel.wait([callback])
</pre>
<p>Returns a <code class="code">promise</code> that is ready when the channel is ready, or fails if the
      client closes. If a <code class="code">callback</code> is specified, it is attached to the promise. The
      promise will be rejected or resolved with the contents <code class="code">options</code> passed to the
      <a class="link" href="cockpit-channels.html#cockpit-channels-onready" title="channel.onready">channel.onready</a> and
      <a class="link" href="cockpit-channels.html#cockpit-channels-close-ev" title="channel.onclose">channel.onclose</a> events respectively.</p>
<p>In general it's not necessary to wait for the channel before starting to use the channel.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-close"></a><h2>channel.close()</h2>
<pre class="programlisting">
channel.close([options])
</pre>
<p>Close the channel.</p>
<p>If <code class="code">options</code> is present it can be a plain javascript object
      containing additional channel close options to send to the peer. If closing for
      because of a problem, set the <code class="code">"problem"</code> field to a
      <a class="link" href="cockpit-error.html#cockpit-problems" title="Problem Codes">problem code</a>. If <code class="code">options</code>
      is not an object it will be treated as a <code class="code">"problem"</code>.</p>
<p>The <a class="link" href="cockpit-channels.html#cockpit-channels-close-ev" title="channel.onclose">close event</a> will fire.
      A channel can also be closed by a peer or if the underlying transport closes.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-message"></a><h2>channel.onmessage</h2>
<pre class="programlisting">
channel.addEventListener("message", function(event, data) { ... })
</pre>
<p>An event triggered when the channel receives a message. The message is
      passed as a string to the handler in the <code class="code">data</code>. In the case of binary
      channels <code class="code">data</code> is an <code class="code">Uint8Array</code> or an <code class="code">Array</code>
      of bytes if the former is not supported by the browser. The contents of
      the message depends on the payload type of the channel.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-oncontrol"></a><h2>channel.oncontrol</h2>
<pre class="programlisting">
channel.addEventListener("control", function(event, options) { ... })
</pre>
<p>An event triggered when the channel receives an control message in the
      middle of the flow. One particular use is when the <code class="code">command</code> is set to
      <code class="code">"done"</code> then no further messages will be received in the channel.
      The exact form of these messages depend on the <code class="code">"payload"</code> of the
      channel.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-onready"></a><h2>channel.onready</h2>
<pre class="programlisting">
channel.addEventListener("ready", function(event, options) { ... })
</pre>
<p>An event triggered when the other end of the channel is ready to start processing
      messages. This indicates the channel is completely open. It is possible to start
      sending messages on the channel before this point.</p>
</div>
<div class="refsection">
<a name="cockpit-channels-close-ev"></a><h2>channel.onclose</h2>
<pre class="programlisting">
channel.addEventListener("close", function(event, options) { ... })
</pre>
<p>An event triggered when the channel closes. This can happen either because
      <a class="link" href="cockpit-channels.html#cockpit-channels-close" title="channel.close()">channel.close()</a> function was called,
      or if the peer closed the channel, or the underlying transport closes.</p>
<p>The <code class="code">options</code> will contain various close information, including a
      <code class="code">"problem"</code> field which will be set if the channel was closed because
      of a problem.</p>
</div>
<div class="refsection">
<a name="cockpit-transport-origin"></a><h2>cockpit.transport.origin</h2>
<pre class="programlisting">
cockpit.transport.origin
</pre>
<p>The HTTP origin that is being used by the underlying channel transport. This is
      read-only, you should not assign a value. If the browser supports
      <code class="code">window.location.origin</code> then this will be identical to that value.</p>
</div>
<div class="refsection">
<a name="cockpit-transport-host"></a><h2>cockpit.transport.host</h2>
<pre class="programlisting">
cockpit.transport.host
</pre>
<p>The host that this transport is going to talk to by default. This is
      read-only, you should not assign a value. If the value is null that means that the
      transport has not been setup yet.</p>
</div>
<div class="refsection">
<a name="cockpit-transport-csrf-token"></a><h2>cockpit.transport.csrf_token</h2>
<pre class="programlisting">
cockpit.transport.csrf_token
</pre>
<p>A cross site request forgery token for use with external channels. This becomes
      valid once the connection is properly established.</p>
</div>
<div class="refsection">
<a name="cockpit-transport-options"></a><h2>cockpit.transport.options</h2>
<pre class="programlisting">
cockpit.transport.options
</pre>
<p>Initialization options received over the underlying channel transport. These
      will be empty until connection is properly established.</p>
</div>
<div class="refsection">
<a name="cockpit-transport-wait"></a><h2>cockpit.transport.wait()</h2>
<pre class="programlisting">
cockpit.transport.wait(callback)
</pre>
<p>Call the <code class="code">callback</code> function once the underlying channel transport is initialized.
      This will start the initialization if not already in progress or completed. If the
      channel transport is already initialized, then <code class="code">callback</code> will be called
      immediately.</p>
<p>In general it's not necessary to wait for the transport before starting to open channels.</p>
</div>
<div class="refsection">
<a name="cockpit-transport-close"></a><h2>cockpit.transport.close()</h2>
<pre class="programlisting">
cockpit.transport.close([problem])
</pre>
<p>Close the underlying channel transport. All channels open channels will close.
      The <code class="code">problem</code> argument should be a problem code string. If not specified
      it will default to <code class="code">"disconnected"</code>.</p>
</div>
<div class="refsection">
<a name="cockpit-transport-filter"></a><h2>cockpit.transport.filter()</h2>
<pre class="programlisting">
cockpit.transport.filter(function(message, channelid, control) { ... }, [out])
</pre>
<p>Add a filter to the underlying channel transport. All incoming messages will be
      passed to each of the filter callbacks that are registered. If the <code class="code">out</code>
      argument is equal to <code class="code">true</code> then the filter will receive outgoing messages
      that being sent on the underlying channel transport.</p>
<p>This function is rarely used.</p>
<p>Filter callbacks are called in the order they are registered. If a filter
      callback returns <code class="code">false</code> then the message will not be dispatched
      further, whether to other filters, or to channels, etc.</p>
<p>The <code class="code">message</code> is the string or array with the raw message including,
      the framing. The <code class="code">channelid</code> is the channel identifier or an empty string
      for control messages. If <code class="code">control</code> is set then this is a control message,d
      and the <code class="code">control</code> argument contains the parsed JSON object of the
      control message.</p>
</div>
<div class="refsection">
<a name="cockpit-transport-inject"></a><h2>cockpit.transport.inject()</h2>
<pre class="programlisting">
cockpit.transport.inject(message, [out])
</pre>
<p>Inject a message into the underlying channel transport. The <code class="code">message</code>
      should be a <code class="code">string</code> or an array of bytes, and should be valid
      according to the Cockpit message protocol. If the <code class="code">out</code> argument is equal
      to <code class="code">false</code> then the message will be injected as an incoming message as if
      it was received on the underlying channel transport.</p>
<p>This function is rarely used. In general you should only <code class="code">inject()</code>
      messages you got from a <code class="code"><a class="link" href="cockpit-channels.html#cockpit-transport-filter" title="cockpit.transport.filter()">filter()</a></code>.</p>
</div>
<div class="refsection">
<a name="cockpit-base64-encode"></a><h2>cockpit.base64_encode()</h2>
<pre class="programlisting">
string = cockpit.base64_encode(data)
</pre>
<p>Encode binary data into a string using the Base64 encoding. The <code class="code">data</code>
      argument can either be a <code class="code">string</code>, an <code class="code">Array</code>, an <code class="code">ArrayBuffer</code>
      or a <code class="code">Uint8Array</code>. The return value is a string.</p>
</div>
<div class="refsection">
<a name="cockpit-base64-decode"></a><h2>cockpit.base64_decode()</h2>
<pre class="programlisting">
data = cockpit.base64_decode(string, [constructor])
</pre>
<p>Decode binary data from a Base64 encoded string. The <code class="code">string</code>
      argument should be a javascript string. The returned <code class="code">data</code>&gt; will be an
      array of bytes.</p>
<p>You can pass <code class="code">Uint8Array</code>, <code class="code">Array</code> or <code class="code">String</code>
      as an alternate <code class="code">constructor</code> if you want the decoded data in an
      alternate form. The default is to return an <code class="code">Array</code>. Note that if you use a
      <code class="code">String</code> for the decoded data, then you must guarantee that the data
      does not contain bytes that would be invalid for a string.</p>
</div>
<div class="refsection">
<a name="cockpit-utf8-encoder"></a><h2>cockpit.utf8_encoder()</h2>
<pre class="programlisting">
encoder = cockpit.utf8_encoder([constructor])
</pre>
<p>Create an encoder for encoding a string into a UTF8 sequence of bytes.</p>
<p>You can pass <code class="code">Uint8Array</code>, <code class="code">Array</code> or <code class="code">String</code>
      as an alternate <code class="code">constructor</code> if you want the decoded data in an
      alternate form. The default is to return an <code class="code">Array</code>.</p>
</div>
<div class="refsection">
<a name="cockpit-utf8-encoder-encode"></a><h2>encoder.encode()</h2>
<pre class="programlisting">
data = encoder.encode(string)
</pre>
<p>Encode a <code class="code">string</code> into a UTF8 sequence of bytes.</p>
<p>The resulting <code class="code">data</code> is an array of bytes, but it's type may be
      modified by passing an alternate <code class="code">constructor</code> to
      <a class="link" href="cockpit-channels.html#cockpit-utf8-encoder" title="cockpit.utf8_encoder()">cockpit.utf8_encoder()</a>.</p>
</div>
<div class="refsection">
<a name="cockpit-utf8-decoder"></a><h2>cockpit.utf8_decoder()</h2>
<pre class="programlisting">
decoder = cockpit.utf8_decoder([fatal])
</pre>
<p>Creates a decoder to decode a UTF8 sequence of bytes data into a string.</p>
<p>If the <code class="code">fatal</code> is set to <code class="code">true</code> then the <code class="code">decoder</code>
      will throw an exception when it encounters invalid UTF8 data. By default invalid data
      will be substituted with special UTF8 characters.</p>
</div>
<div class="refsection">
<a name="cockpit-utf8-decoder-decode"></a><h2>decoder.decode()</h2>
<pre class="programlisting">
string = decoder.decode(data, [options])
</pre>
<p>Decode an array of UTF8 bytes into a <code class="code">string</code>. The <code class="code">data</code>
      argument may be an <code class="code">Array</code>, a <code class="code">Uint8Array</code> or a string containing
      binary data.</p>
<p>If <code class="code">options</code> is passed it should be a plain javascript object. If
      <code class="code">options</code> has a <code class="code">stream</code> property equal to <code class="code">true</code>,
      then multiple invocations of this function can be made with parts of the UTF8 sequence
      of bytes. Any trailing bytes that don't yet build a complete unicode character, will be
      cached until the next invocation. To drain the last data, call this function without
      the <code class="code">stream</code> property set.</p>
</div>
</div>
<div class="footer"><hr></div>
</body>
</html>