diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2014-02-03 15:41:33 +0100 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2014-02-03 15:41:33 +0100 |
commit | 944972bc951c03605fbd7a9fd3236e63cfd0fd6d (patch) | |
tree | 3f94bb0b2266a6bab8d157d0d26091c456b833f3 /doc | |
parent | a2839fabb5611e6f079afa39f963fb5b3213d586 (diff) | |
download | weechat-944972bc951c03605fbd7a9fd3236e63cfd0fd6d.zip |
doc: add French version of relay protocol
Diffstat (limited to 'doc')
-rw-r--r-- | doc/en/CMakeLists.txt | 22 | ||||
-rw-r--r-- | doc/en/Makefile.am | 6 | ||||
-rw-r--r-- | doc/en/weechat_relay_protocol.en.txt | 373 | ||||
-rw-r--r-- | doc/fr/CMakeLists.txt | 11 | ||||
-rw-r--r-- | doc/fr/Makefile.am | 6 | ||||
-rw-r--r-- | doc/fr/weechat_relay_protocol.fr.txt | 1704 |
6 files changed, 1943 insertions, 179 deletions
diff --git a/doc/en/CMakeLists.txt b/doc/en/CMakeLists.txt index cab89a174..a25eabb06 100644 --- a/doc/en/CMakeLists.txt +++ b/doc/en/CMakeLists.txt @@ -104,17 +104,6 @@ IF(ENABLE_DOC AND SOURCEHIGHLIGHT_FOUND) ADD_CUSTOM_TARGET(doc-tester-en ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/weechat_tester.en.html) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/weechat_tester.en.html DESTINATION ${SHAREDIR}/doc/${PROJECT_NAME}) - # developer's guide - ADD_CUSTOM_COMMAND( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.en.html - COMMAND ${ASCIIDOC_EXECUTABLE} ARGS -a revision="${VERSION}" -a stylesheet=${CMAKE_CURRENT_SOURCE_DIR}/../asciidoc.css -f ${CMAKE_CURRENT_SOURCE_DIR}/../asciidoc.conf -n -o ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.en.html ${CMAKE_CURRENT_SOURCE_DIR}/weechat_dev.en.txt - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/weechat_dev.en.txt - COMMENT "Building weechat_dev.en.html" - ) - ADD_CUSTOM_TARGET(doc-dev-en ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.en.html) - INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.en.html DESTINATION ${SHAREDIR}/doc/${PROJECT_NAME}) - # relay protocol ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_protocol.en.html @@ -126,4 +115,15 @@ IF(ENABLE_DOC AND SOURCEHIGHLIGHT_FOUND) ADD_CUSTOM_TARGET(doc-relay-protocol-en ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_protocol.en.html) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_protocol.en.html DESTINATION ${SHAREDIR}/doc/${PROJECT_NAME}) + # developer's guide + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.en.html + COMMAND ${ASCIIDOC_EXECUTABLE} ARGS -a revision="${VERSION}" -a stylesheet=${CMAKE_CURRENT_SOURCE_DIR}/../asciidoc.css -f ${CMAKE_CURRENT_SOURCE_DIR}/../asciidoc.conf -n -o ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.en.html ${CMAKE_CURRENT_SOURCE_DIR}/weechat_dev.en.txt + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/weechat_dev.en.txt + COMMENT "Building weechat_dev.en.html" + ) + ADD_CUSTOM_TARGET(doc-dev-en ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.en.html) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.en.html DESTINATION ${SHAREDIR}/doc/${PROJECT_NAME}) + ENDIF(ENABLE_DOC AND SOURCEHIGHLIGHT_FOUND) diff --git a/doc/en/Makefile.am b/doc/en/Makefile.am index 3bb2d8e99..a8817706b 100644 --- a/doc/en/Makefile.am +++ b/doc/en/Makefile.am @@ -29,8 +29,8 @@ EXTRA_DIST = CMakeLists.txt \ weechat_faq.en.txt \ weechat_quickstart.en.txt \ weechat_tester.en.txt \ - weechat_dev.en.txt \ weechat_relay_protocol.en.txt \ + weechat_dev.en.txt \ $(wildcard autogen/user/*.txt) \ $(wildcard autogen/plugin_api/*.txt) @@ -46,8 +46,8 @@ if DOC weechat_faq.en.html \ weechat_quickstart.en.html \ weechat_tester.en.html \ - weechat_dev.en.html \ - weechat_relay_protocol.en.html + weechat_relay_protocol.en.html \ + weechat_dev.en.html doc_install = install-doc doc_uninstall = uninstall-doc endif diff --git a/doc/en/weechat_relay_protocol.en.txt b/doc/en/weechat_relay_protocol.en.txt index 1640b95d3..6efbe5be8 100644 --- a/doc/en/weechat_relay_protocol.en.txt +++ b/doc/en/weechat_relay_protocol.en.txt @@ -6,7 +6,7 @@ :toclevels: 4 -This document is the specification of WeeChat relay protocol: the protocol used +This document is the specification of WeeChat Relay protocol: the protocol used to relay WeeChat data to clients, which are mostly remote interfaces. @@ -21,7 +21,7 @@ The following terms are used in this document: * 'relay': this is the WeeChat with relay plugin, which acts as "server" and allows 'clients' to connect * 'client': this is another software, connected to 'relay' via a network - connection; in most cases, this 'client' is a remote interface + connection; in most cases, this 'client' is a remote interface. [[network_diagram]] === Network diagram @@ -49,15 +49,14 @@ network servers ncurses interface relay remote interfaces [NOTE] All clients here are clients using 'weechat' protocol in 'relay' plugin. The 'relay' plugin also allows IRC clients, then 'relay' plugin acts as an -'irc proxy' (not described in this document). +'IRC proxy' (not described in this document). [[protocol_generalities]] == Protocol generalities * Connections from 'client' to 'relay' are made using TCP sockets on IP/port - used by 'relay' plugin to listen to new connections - (option 'relay.port.weechat' in WeeChat). -* Number of 'clients' is not limited. + used by 'relay' plugin to listen to new connections. +* Number of 'clients' is limited by the option 'relay.network.max_clients'. * Each 'client' is independent from other clients. * Messages from 'client' to 'relay' are called 'commands', they are sent as text (a string). @@ -76,7 +75,7 @@ Fields are: ("_") (ids starting with underscore are reserved for WeeChat 'event' messages) * 'command': a command (see table below) * 'arguments': optional arguments for command (many arguments are separated by - spaces) + spaces). List of available commands (detail in next chapters): @@ -84,10 +83,10 @@ List of available commands (detail in next chapters): |=== | Command | Description | init | Initialize connection with 'relay' -| hdata | Request hdata -| info | Request info -| infolist | Request infolist -| nicklist | Request nicklist +| hdata | Request a 'hdata' +| info | Request an 'info' +| infolist | Request an 'infolist' +| nicklist | Request a 'nicklist' | input | Send data to a buffer (text or command) | sync | Synchronize buffer(s) (get updates for buffer(s)) | desync | Desynchronize buffer(s) (stop updates for buffer(s)) @@ -113,11 +112,11 @@ Arguments: ** 'password': password used to authenticate on 'relay' (option 'relay.network.password' in WeeChat) ** 'compression': compression type: -*** 'zlib': enable zlib compression for messages sent by 'relay' +*** 'zlib': enable 'zlib' compression for messages sent by 'relay' *** 'off': disable compression [NOTE] -Compression 'zlib' is enabled by default if 'relay' supports zlib compression. +Compression 'zlib' is enabled by default if 'relay' supports 'zlib' compression. Examples: @@ -132,7 +131,7 @@ init password=mypass,compression=off [[command_hdata]] === hdata -Request hdata. +Request a 'hdata'. Syntax: @@ -149,9 +148,8 @@ Arguments: (count allowed, see below) ** 'var': a variable name in parent hdata (previous name in path) (count allowed, see below) -* 'keys': comma-separated list of keys to return in hdata returned (if not - specified, all keys are returned, which is not recommended on large hdata - structures) +* 'keys': comma-separated list of keys to return in hdata (if not specified, all + keys are returned, which is not recommended on large hdata structures) A count is allowed after pointer and variables, with format "(N)". Possible values are: @@ -164,21 +162,21 @@ Examples: ---- # request all buffers, hdata of type "buffer" is returned -# keys number and name are returned for each buffer +# keys "number" and "name" are returned for each buffer hdata buffer:gui_buffers(*) number,name # request all lines of all buffers, hdata of type "line_data" is returned # all keys are returned hdata buffer:gui_buffers(*)/lines/first_line(*)/data -# request full_name of first buffer +# request full name of first buffer hdata buffer:gui_buffers full_name ---- [[command_info]] === info -Request info. +Request an 'info'. Syntax: @@ -199,7 +197,7 @@ info version [[command_infolist]] === infolist -Request infolist. +Request an 'infolist'. [IMPORTANT] Content of infolist is a duplication of actual data. Wherever possible, use @@ -209,13 +207,14 @@ faster, uses less memory and returns smaller objects in message). Syntax: ---- -(id) infolist <name> <arguments> +(id) infolist <name> [<pointer> [<arguments>]] ---- Arguments: * 'name': name of infolist to retrieve -* 'arguments': arguments for infolist +* 'pointer': pointer (optional) +* 'arguments': arguments (optional) Example: @@ -226,7 +225,7 @@ infolist buffer [[command_nicklist]] === nicklist -Request nicklist, for one or all buffers. +Request a 'nicklist', for one or all buffers. Syntax: @@ -284,7 +283,7 @@ Synchronize one or more buffers, to get updates. [IMPORTANT] It is recommended to send this command immediately after you asked data for buffers (lines, ...). It can be send in same message (after a new -line). +line char: "\n"). Syntax: @@ -300,14 +299,14 @@ Arguments: * 'options': one of following keywords, separated by commas (default is 'buffers,upgrade,buffer,nicklist' for "*" and 'buffer,nicklist' for a buffer): ** 'buffers': receive signals about buffers (opened/closed, moved, renamed, - merged/unmerged, renamed); this can be used only with name "*" - _(new in version 0.4.1)_ + merged/unmerged); this can be used only with name "*" + _(WeeChat ≥ 0.4.1)_ ** 'upgrade': receive signals about WeeChat upgrade (upgrade, upgrade ended); this can be used only with name "*" - _(new in version 0.4.1)_ + _(WeeChat ≥ 0.4.1)_ ** 'buffer': receive signals about buffer (new lines, type changed, title - changed, local variable added/removed, and same signals as 'buffers' for the - buffer) _(updated in version 0.4.1)_ + changed, local variable added/removed, and same signals as 'buffers' for the + buffer) _(updated in version 0.4.1)_ ** 'nicklist': receive nicklist after changes Examples: @@ -340,7 +339,7 @@ Desynchronize one or more buffers, to stop updates. [NOTE] This will remove 'options' for buffers. If some options are still active for -buffers, the client will still receive updates for buffers. +buffers, the client will still receive updates for these buffers. Syntax: @@ -355,7 +354,7 @@ Arguments: specify all buffers * 'options': one of following keywords, separated by commas (default is 'buffers,upgrade,buffer,nicklist' for "*" and 'buffer,nicklist' for a buffer); - see <<command_sync,command sync>> for values. + see <<command_sync,command sync>> for values [NOTE] When using buffer "*", the other buffers synchronized (using a name) are kept. + @@ -385,11 +384,12 @@ desync irc.freenode.#weechat Test command: WeeChat will reply with various different objects. -This command is useful to test the decoding of objects returned by WeeChat. +This command is useful to test the decoding of binary objects returned by +WeeChat. [IMPORTANT] You must not use the pointer values returned by this command, they are not -valid. This command should only be used to test decoding of a message sent by +valid. This command must be used only to test decoding of a message sent by WeeChat. Syntax: @@ -422,19 +422,19 @@ Returned objects (in this order): | pointer | ptr | 0x1234abcd | pointer | ptr | NULL | time | tim | 1321993456 -| array of strings | arr str | { "abc", "de" } -| array of integers | arr int | { 123, 456, 789 } +| array of strings | arr str | [ "abc", "de" ] +| array of integers | arr int | [ 123, 456, 789 ] |=== [[command_ping]] === ping -_Added in version 0.4.2._ +_WeeChat ≥ 0.4.2._ Send a ping to WeeChat which will reply with a message "_pong" and same arguments. This command is useful to test that connection with WeeChat is still alive and -measure the network lag. +measure the response time. Syntax: @@ -483,10 +483,10 @@ Messages are sent as binary data, using following format (with size in bytes): .... * 'length' (unsigned integer): number of bytes of whole message (including - this length) + this field) * 'compression' (byte): flag: ** '0x00': following data is not compressed -** '0x01': following data is zlib-compressed +** '0x01': following data is compressed with 'zlib' * 'id' (string): identifier sent by client (before command name); it can be empty (string with zero length and no content) if no identifier was given in command @@ -497,12 +497,12 @@ Messages are sent as binary data, using following format (with size in bytes): === Compression If flag 'compression' is equal to 0x01, then *all* data after is compressed -with zlib, and therefore must be uncompressed before being processed. +with 'zlib', and therefore must be uncompressed before being processed. [[message_identifier]] === Identifier -There are two different identifiers ('id'): +There are two types of identifiers ('id'): * 'id' sent by 'client': 'relay' will answer with same 'id' in its answer * 'id' of an event: on some events, 'relay' will send message to 'client' using @@ -512,30 +512,66 @@ WeeChat reserved identifiers: [width="100%",cols="5,5,3,4,7",options="header"] |=== -| Identifier | Description | Received with sync | Data sent | Recommended action in client -| _buffer_opened | Buffer opened | buffers / buffer | hdata: buffer | Open buffer -| _buffer_moved | Buffer moved | buffers / buffer | hdata: buffer | Move buffer -| _buffer_merged | Buffer merged | buffers / buffer | hdata: buffer | Merge buffer -| _buffer_unmerged | Buffer unmerged | buffers / buffer | hdata: buffer | Unmerge buffer -| _buffer_renamed | Buffer renamed | buffers / buffer | hdata: buffer | Rename buffer -| _buffer_title_changed | Title of buffer changed | buffers / buffer | hdata: buffer | Change title of buffer -| _buffer_type_changed | Type of buffer changed | buffer | hdata: buffer | Change type of buffer -| _buffer_localvar_added | Local variable added | buffer | hdata: buffer | Add local variable in buffer -| _buffer_localvar_changed | Local variable changed | buffer | hdata: buffer | Change local variable in buffer -| _buffer_localvar_removed | Local variable removed | buffer | hdata: buffer | Remove local variable from buffer -| _buffer_line_added | Line added in buffer | buffer | hdata: line | Display line in buffer -| _buffer_closing | Buffer closing | buffers / buffer | hdata: buffer | Close buffer -| _nicklist | Nicklist for a buffer | nicklist | hdata: nicklist_item | Replace nicklist -| _nicklist_diff | Nicklist diffs for a buffer | nicklist | hdata: nicklist_item | Update nicklist -| _pong | Answer to a "ping" | (always) | string: ping arguments | Measure network lag -| _upgrade | WeeChat is upgrading | upgrade | (empty) | Desync from WeeChat (or disconnect) -| _upgrade_ended | Upgrade of WeeChat done | upgrade | (empty) | Sync/resync with WeeChat +| Identifier | Received with sync | Data sent | + Description | Recommended action in client + +| _buffer_opened | buffers / buffer | hdata: buffer | + Buffer opened | Open buffer + +| _buffer_moved | buffers / buffer | hdata: buffer | + Buffer moved | Move buffer + +| _buffer_merged | buffers / buffer | hdata: buffer | + Buffer merged | Merge buffer + +| _buffer_unmerged | buffers / buffer | hdata: buffer | + Buffer unmerged | Unmerge buffer + +| _buffer_renamed | buffers / buffer | hdata: buffer | + Buffer renamed | Rename buffer + +| _buffer_title_changed | buffers / buffer | hdata: buffer | + Title of buffer changed | Change title of buffer + +| _buffer_type_changed | buffer | hdata: buffer | + Type of buffer changed | Change type of buffer + +| _buffer_localvar_added | buffer | hdata: buffer | + Local variable added | Add local variable in buffer + +| _buffer_localvar_changed | buffer | hdata: buffer | + Local variable changed | Change local variable in buffer + +| _buffer_localvar_removed | buffer | hdata: buffer | + Local variable removed | Remove local variable from buffer + +| _buffer_line_added | buffer | hdata: line | + Line added in buffer | Display line in buffer + +| _buffer_closing | buffers / buffer | hdata: buffer | + Buffer closing | Close buffer + +| _nicklist | nicklist | hdata: nicklist_item | + Nicklist for a buffer | Replace nicklist + +| _nicklist_diff | nicklist | hdata: nicklist_item | + Nicklist diffs for a buffer | Update nicklist + +| _pong | (always) | string: ping arguments | + Answer to a "ping" | Measure response time + +| _upgrade | upgrade | (empty) | + WeeChat is upgrading | Desync from WeeChat (or disconnect) + +| _upgrade_ended | upgrade | (empty) | + Upgrade of WeeChat done | Sync/resync with WeeChat |=== [[message_buffer_opened]] ==== _buffer_opened -It is sent to the client when the signal "buffer_opened" is sent by WeeChat. +This message is sent to the client when the signal "buffer_opened" is sent by +WeeChat. Data sent as hdata: @@ -552,7 +588,7 @@ Data sent as hdata: | next_buffer | pointer | Pointer to next buffer |=== -Example: join of channel '#weechat' on freenode, new buffer +Example: channel '#weechat' joined on freenode, new buffer 'irc.freenode.#weechat': [source,python] @@ -577,17 +613,18 @@ hda: [[message_buffer_moved]] ==== _buffer_moved -It is sent to the client when the signal "buffer_moved" is sent by WeeChat. +This message is sent to the client when the signal "buffer_moved" is sent by +WeeChat. Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| number | integer | Buffer number (≥ 1) -| full_name | string | Full name (example: 'irc.freenode.#weechat') -| prev_buffer | pointer | Pointer to previous buffer -| next_buffer | pointer | Pointer to next buffer +| Name | Type | Description +| number | integer | Buffer number (≥ 1) +| full_name | string | Full name (example: 'irc.freenode.#weechat') +| prev_buffer | pointer | Pointer to previous buffer +| next_buffer | pointer | Pointer to next buffer |=== Example: buffer 'irc.freenode.#weechat' moved to number 2: @@ -609,17 +646,18 @@ hda: [[message_buffer_merged]] ==== _buffer_merged -It is sent to the client when the signal "buffer_merged" is sent by WeeChat. +This message is sent to the client when the signal "buffer_merged" is sent by +WeeChat. Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| number | integer | Buffer number (≥ 1) -| full_name | string | Full name (example: 'irc.freenode.#weechat') -| prev_buffer | pointer | Pointer to previous buffer -| next_buffer | pointer | Pointer to next buffer +| Name | Type | Description +| number | integer | Buffer number (≥ 1) +| full_name | string | Full name (example: 'irc.freenode.#weechat') +| prev_buffer | pointer | Pointer to previous buffer +| next_buffer | pointer | Pointer to next buffer |=== Example: buffer 'irc.freenode.#weechat' merged with buffer #2: @@ -641,17 +679,18 @@ hda: [[message_buffer_unmerged]] ==== _buffer_unmerged -It is sent to the client when the signal "buffer_unmerged" is sent by WeeChat. +This message is sent to the client when the signal "buffer_unmerged" is sent by +WeeChat. Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| number | integer | Buffer number (≥ 1) -| full_name | string | Full name (example: 'irc.freenode.#weechat') -| prev_buffer | pointer | Pointer to previous buffer -| next_buffer | pointer | Pointer to next buffer +| Name | Type | Description +| number | integer | Buffer number (≥ 1) +| full_name | string | Full name (example: 'irc.freenode.#weechat') +| prev_buffer | pointer | Pointer to previous buffer +| next_buffer | pointer | Pointer to next buffer |=== Example: buffer 'irc.freenode.#weechat' unmerged: @@ -673,7 +712,8 @@ hda: [[message_buffer_renamed]] ==== _buffer_renamed -It is sent to the client when the signal "buffer_renamed" is sent by WeeChat. +This message is sent to the client when the signal "buffer_renamed" is sent by +WeeChat. Data sent as hdata: @@ -706,17 +746,17 @@ hda: [[message_buffer_title_changed]] ==== _buffer_title_changed -It is sent to the client when the signal "buffer_title_changed" is sent by -WeeChat. +This message is sent to the client when the signal "buffer_title_changed" is +sent by WeeChat. Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| number | integer | Buffer number (≥ 1) -| full_name | string | Full name (example: 'irc.freenode.#weechat') -| title | string | Buffer title +| Name | Type | Description +| number | integer | Buffer number (≥ 1) +| full_name | string | Full name (example: 'irc.freenode.#weechat') +| title | string | Buffer title |=== Example: topic changed on channel '#weechat': @@ -737,19 +777,20 @@ hda: [[message_buffer_type_changed]] ==== _buffer_type_changed -It is sent to the client when the signal "buffer_type_changed" is sent by WeeChat. +This message is sent to the client when the signal "buffer_type_changed" is sent +by WeeChat. Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| number | integer | Buffer number (≥ 1) -| full_name | string | Full name (example: 'irc.freenode.#weechat') -| type | integer | Buffer type: 0 = formatted (default), 1 = free content +| Name | Type | Description +| number | integer | Buffer number (≥ 1) +| full_name | string | Full name (example: 'irc.freenode.#weechat') +| type | integer | Buffer type: 0 = formatted (default), 1 = free content |=== -Example: type of buffer 'script.scripts' changed from 'formatted' (0) to free +Example: type of buffer 'script.scripts' changed from formatted (0) to free content (1): [source,python] @@ -768,8 +809,8 @@ hda: [[message_buffer_localvar_added]] ==== _buffer_localvar_added -It is sent to the client when the signal "buffer_localvar_added" is sent by -WeeChat. +This message is sent to the client when the signal "buffer_localvar_added" is +sent by WeeChat. Data sent as hdata: @@ -801,8 +842,8 @@ hda: [[message_buffer_localvar_changed]] ==== _buffer_localvar_changed -It is sent to the client when the signal "buffer_localvar_changed" is sent by -WeeChat. +This message is sent to the client when the signal "buffer_localvar_changed" is +sent by WeeChat. Data sent as hdata: @@ -834,8 +875,8 @@ hda: [[message_buffer_localvar_removed]] ==== _buffer_localvar_removed -It is sent to the client when the signal "buffer_localvar_removed" is sent by -WeeChat. +This message is sent to the client when the signal "buffer_localvar_removed" is +sent by WeeChat. Data sent as hdata: @@ -866,24 +907,25 @@ hda: [[message_buffer_line_added]] ==== _buffer_line_added -It is sent to the client when the signal "buffer_line_added" is sent by WeeChat. +This message is sent to the client when the signal "buffer_line_added" is sent +by WeeChat. Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| buffer | pointer | Buffer pointer -| date | time | Date of message -| date_printed | time | Date when WeeChat displayed message -| displayed | char | 1 if message is displayed, 0 if message is filtered (hidden) -| highlight | char | 1 if line has a highlight, otherwise 0 -| tags_array | array of strings | List of tags for line -| prefix | string | Prefix -| message | string | Message +| Name | Type | Description +| buffer | pointer | Buffer pointer +| date | time | Date of message +| date_printed | time | Date when WeeChat displayed message +| displayed | char | 1 if message is displayed, 0 if message is filtered (hidden) +| highlight | char | 1 if line has a highlight, otherwise 0 +| tags_array | array of strings | List of tags for line +| prefix | string | Prefix +| message | string | Message |=== -Example: new message 'hello!' from nick 'FlashCode' in buffer 'irc.freenode.#weechat': +Example: new message 'hello!' from nick 'FlashCode' on buffer 'irc.freenode.#weechat': [source,python] ---- @@ -907,15 +949,16 @@ hda: [[message_buffer_closing]] ==== _buffer_closing -It is sent to the client when the signal "buffer_closing" is sent by WeeChat. +This message is sent to the client when the signal "buffer_closing" is sent by +WeeChat. Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| number | integer | Buffer number (≥ 1) -| full_name | string | Full name (example: 'irc.freenode.#weechat') +| Name | Type | Description +| number | integer | Buffer number (≥ 1) +| full_name | string | Full name (example: 'irc.freenode.#weechat') |=== Example: buffer 'irc.freenode.#weechat' is being closed by WeeChat: @@ -935,8 +978,8 @@ hda: [[message_nicklist]] ==== _nicklist -It is sent to the client when large updates are made on a nicklist (groups/nicks -added/removed/changed). The message contains full nicklist. +This message is sent to the client when large updates are made on a nicklist +(groups/nicks added/removed/changed). The message contains full nicklist. When small updates are made on a nicklist (for example just add one nick), another message with identifier '_nicklist_diff' is sent (see below). @@ -945,14 +988,14 @@ Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| group | char | 1 for a group, 0 for a nick -| visible | char | 1 if group/nick is displayed, otherwise 0 -| level | integer | Level of group (0 for a nick) -| name | string | Name of group/nick -| color | string | Name color -| prefix | string | Prefix (only for a nick) -| prefix_color | string | Prefix color (only for a nick) +| Name | Type | Description +| group | char | 1 for a group, 0 for a nick +| visible | char | 1 if group/nick is displayed, otherwise 0 +| level | integer | Level of group (0 for a nick) +| name | string | Name of group/nick +| color | string | Name color +| prefix | string | Prefix (only for a nick) +| prefix_color | string | Prefix color (only for a nick) |=== Example: nicklist for buffer 'irc.freenode.#weechat': @@ -1023,25 +1066,25 @@ hda: [[message_nicklist_diff]] ==== _nicklist_diff -_New in version 0.4.1._ +_WeeChat ≥ 0.4.1._ -It is sent to the client when small updates are made on a nicklist (groups/nicks -added/removed/changed). The message contains nicklist differences (between old -nicklist and current one). +This message is sent to the client when small updates are made on a nicklist +(groups/nicks added/removed/changed). The message contains nicklist differences +(between old nicklist and current one). Data sent as hdata: [width="100%",cols="3m,2,10",options="header"] |=== -| Name | Type | Description -| _diff | char | Type of diff (see below) -| group | char | 1 for a group, 0 for a nick -| visible | char | 1 if group/nick is displayed, otherwise 0 -| level | integer | Level of group (0 for a nick) -| name | string | Name of group/nick -| color | string | Name color -| prefix | string | Prefix (only for a nick) -| prefix_color | string | Prefix color (only for a nick) +| Name | Type | Description +| _diff | char | Type of diff (see below) +| group | char | 1 for a group, 0 for a nick +| visible | char | 1 if group/nick is displayed, otherwise 0 +| level | integer | Level of group (0 for a nick) +| name | string | Name of group/nick +| color | string | Name color +| prefix | string | Prefix (only for a nick) +| prefix_color | string | Prefix color (only for a nick) |=== The value of '_diff' can be: @@ -1118,21 +1161,21 @@ hda: [[message_pong]] ==== _pong -_New in version 0.4.2._ +_WeeChat ≥ 0.4.2._ -It is sent to the client when WeeChat receives a "ping" message. +This message is sent to the client when 'relay' receives a "ping" message. -Data sent as string: arguments received in the ping message. +Data sent as string: arguments received in the "ping" message. -The recommended action in client is to measure network lag and disconnect if -network lag is high. +The recommended action in client is to measure the response time and disconnect +if it is high. [[message_upgrade]] ==== _upgrade -_New in version 0.3.8._ +_WeeChat ≥ 0.3.8._ -It is sent to the client when WeeChat is starting upgrade process. +This message is sent to the client when WeeChat is starting upgrade process. There is no data in the message. @@ -1141,15 +1184,16 @@ The recommended action in client is to desynchronize from WeeChat (send command will change). [NOTE] -During WeeChat upgrade, the socket remains opened (except if connection was made -with SSL). +During WeeChat upgrade, the socket remains opened (except if connection uses +SSL). [[message_upgrade_ended]] ==== _upgrade_ended -_New in version 0.3.8._ +_WeeChat ≥ 0.3.8._ -It is sent to the client when WeeChat has finished the upgrade process. +This message is sent to the client when WeeChat has finished the upgrade +process. There is no data in the message. @@ -1159,15 +1203,14 @@ commands sent on startup after the 'init'. [[objects]] === Objects -Objects are identified by 3 letters, called 'type'. Following types are -available: +Objects are identified by 3 letters, called 'type'. Following types are used: [width="100%",cols="^2m,5,10",options="header"] |=== | Type | Value | Length | chr | Signed char | 1 byte | int | Signed integer | 4 bytes -| lon | Signed long integer | 1 byte + length of long as string +| lon | Signed long integer | 1 byte + length of integer as string | str | String | 4 bytes + length of string (without final '\0') | buf | Buffer of bytes | 4 bytes + length of data | ptr | Pointer | 1 byte + length of pointer as string @@ -1176,13 +1219,13 @@ available: | hda | Hdata content | Variable | inf | Info: name + content | Variable | inl | Infolist content | Variable -| arr | Array of values | 3 bytes (type) + number of items + data +| arr | Array of objects | 3 bytes (type) + number of objects + data |=== [[object_char]] ==== Char -A signed char is 1 byte. +A signed char is stored as 1 byte. Example: @@ -1195,8 +1238,8 @@ Example: [[object_integer]] ==== Integer -A signed integer is 4 bytes, encoded as big-endian format (most significant byte -first). +A signed integer is stored as 4 bytes, encoded as big-endian format (most +significant byte first). Range: -2147483648 to 2147483647. @@ -1364,8 +1407,8 @@ objects, and then set of objects (path with pointers, then objects). * 'values': list of values (number of values is number of keys returned for hdata) -Example of hdata with 2 buffers (weechat core and freenode server) and two keys -('number' and 'full_name'): +Example of hdata with two buffers (weechat core and freenode server) and two +keys ('number' and 'full_name'): .... # command @@ -1509,7 +1552,7 @@ An item is: ** 'type': type of variable ('int', 'str', ...) ** 'value': value of variable -Example of infolist with 2 buffers (weechat core and freenode server): +Example of infolist with two buffers (weechat core and freenode server): .... # command @@ -1532,9 +1575,9 @@ infolist buffer [[object_array]] ==== Array -An array is a type (3 bytes) + number of items (integer on 4 bytes) + data. +An array is a type (3 bytes) + number of objects (integer on 4 bytes) + data. -Example of array with 2 strings: +Example of array with two strings: .... ┌─────╥────┬────┬────┬────╥────┬────┬────┬────╥── @@ -1544,13 +1587,13 @@ Example of array with 2 strings: type number of strings length ──╥────┬────┬────╥────┬────┬────┬────╥────┬────┐ - ... ║ 61 │ 62 │ 63 ║ 00 │ 00 │ 00 │ 02 ║ 64 │ 65 │ ────► { "abc", "de" } + ... ║ 61 │ 62 │ 63 ║ 00 │ 00 │ 00 │ 02 ║ 64 │ 65 │ ────► [ "abc", "de" ] ──╨────┴────┴────╨────┴────┴────┴────╨────┴────┘ └────────────┘ └─────────────────┘ └───────┘ 'a' 'b' 'c' length 'd' 'e' .... -Example of array with 3 integers: +Example of array with three integers: .... ┌─────╥────┬────┬────┬────╥────┬────┬────┬────╥── @@ -1560,7 +1603,7 @@ Example of array with 3 integers: type number of integers 123 (0x7B) ──╥────┬────┬────┬────╥────┬────┬────┬────┐ - ... ║ 00 │ 00 │ 01 │ C8 ║ 00 │ 00 │ 03 │ 15 │ ────► { 123, 456, 789 } + ... ║ 00 │ 00 │ 01 │ C8 ║ 00 │ 00 │ 03 │ 15 │ ────► [ 123, 456, 789 ] ──╨────┴────┴────┴────╨────┴────┴────┴────┘ └─────────────────┘ └─────────────────┘ 456 (0x1C8) 789 (0x315) @@ -1617,8 +1660,8 @@ A 'NULL' array: ║ ║ ║ ║ ◄───────────────────────────────╢ ║ measure ║ msg: id: "_pong" ... ║ ║ - lag ║ ║ ║ - ║ ........ ║ ........ ║ +response ║ ║ ║ + time ║ ........ ║ ........ ║ ║ ║ ║ ╟───────────────────────────────► ║ ║ ║ cmd: quit ║ disconnect client ║ diff --git a/doc/fr/CMakeLists.txt b/doc/fr/CMakeLists.txt index d79f085d5..a316637ae 100644 --- a/doc/fr/CMakeLists.txt +++ b/doc/fr/CMakeLists.txt @@ -104,6 +104,17 @@ IF(ENABLE_DOC AND SOURCEHIGHLIGHT_FOUND) ADD_CUSTOM_TARGET(doc-tester-fr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/weechat_tester.fr.html) INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/weechat_tester.fr.html DESTINATION ${SHAREDIR}/doc/${PROJECT_NAME}) + # relay protocol + ADD_CUSTOM_COMMAND( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_protocol.fr.html + COMMAND ${ASCIIDOC_EXECUTABLE} ARGS -a revision="${VERSION}" -a stylesheet=${CMAKE_CURRENT_SOURCE_DIR}/../asciidoc.css -f ${CMAKE_CURRENT_SOURCE_DIR}/../asciidoc.conf -n -o ${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_protocol.fr.html ${CMAKE_CURRENT_SOURCE_DIR}/weechat_relay_protocol.fr.txt + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/weechat_relay_protocol.fr.txt + COMMENT "Building weechat_relay_protocol.fr.html" + ) + ADD_CUSTOM_TARGET(doc-relay-protocol-fr ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_protocol.fr.html) + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/weechat_relay_protocol.fr.html DESTINATION ${SHAREDIR}/doc/${PROJECT_NAME}) + # developer's guide ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/weechat_dev.fr.html diff --git a/doc/fr/Makefile.am b/doc/fr/Makefile.am index 78a4b15c1..2403e2fc8 100644 --- a/doc/fr/Makefile.am +++ b/doc/fr/Makefile.am @@ -29,6 +29,7 @@ EXTRA_DIST = CMakeLists.txt \ weechat_faq.fr.txt \ weechat_quickstart.fr.txt \ weechat_tester.fr.txt \ + weechat_relay_protocol.fr.txt \ weechat_dev.fr.txt \ $(wildcard autogen/user/*.txt) \ $(wildcard autogen/plugin_api/*.txt) @@ -45,6 +46,7 @@ if DOC weechat_faq.fr.html \ weechat_quickstart.fr.html \ weechat_tester.fr.html \ + weechat_relay_protocol.fr.html \ weechat_dev.fr.html doc_install = install-doc doc_uninstall = uninstall-doc @@ -81,6 +83,10 @@ weechat_quickstart.fr.html: weechat_quickstart.fr.txt weechat_tester.fr.html: weechat_tester.fr.txt $(ASCIIDOC) -a revision="$(VERSION)" -a stylesheet=$(abs_top_srcdir)/doc/asciidoc.css -f $(abs_top_srcdir)/doc/asciidoc.conf -n -o weechat_tester.fr.html $(abs_top_srcdir)/doc/fr/weechat_tester.fr.txt +# relay protocol +weechat_relay_protocol.fr.html: weechat_relay_protocol.fr.txt + $(ASCIIDOC) -a revision="$(VERSION)" -a stylesheet=$(abs_top_srcdir)/doc/asciidoc.css -f $(abs_top_srcdir)/doc/asciidoc.conf -n -o weechat_relay_protocol.fr.html $(abs_top_srcdir)/doc/fr/weechat_relay_protocol.fr.txt + # developer's guide weechat_dev.fr.html: weechat_dev.fr.txt $(ASCIIDOC) -a revision="$(VERSION)" -a stylesheet=$(abs_top_srcdir)/doc/asciidoc.css -f $(abs_top_srcdir)/doc/asciidoc.conf -n -o weechat_dev.fr.html $(abs_top_srcdir)/doc/fr/weechat_dev.fr.txt diff --git a/doc/fr/weechat_relay_protocol.fr.txt b/doc/fr/weechat_relay_protocol.fr.txt new file mode 100644 index 000000000..16f28fff2 --- /dev/null +++ b/doc/fr/weechat_relay_protocol.fr.txt @@ -0,0 +1,1704 @@ += Protocole Relay de WeeChat +:author: Sébastien Helleu +:email: flashcode@flashtux.org +:lang: fr +:toc: +:toclevels: 4 + + +Ce document est une spécification du protocole Relay de WeeChat : le protocole +utilisé pour relayer les données de WeeChat aux clients, qui sont surtout des +interfaces distantes. + + +[[introduction]] +== Introduction + +[[terminology]] +=== Terminologie + +Les termes suivants sont utilisés dans ce document : + +* 'relay' : il s'agit de l'extension "relay" de WeeChat, qui agit comme un + "serveur" et autorise les 'clients' à se connecter +* 'client' : il s'agit d'un autre logiciel, connecté au 'relay' via une + connexion réseau; dans la plupart des cas, ce 'client' est une interface + distante. + +[[network_diagram]] +=== Diagramme réseau + +Les 'clients' sont connectés au 'relay' comme dans le diagramme ci-dessous : + +.... + ┌──────────┐ Station de travail + ┌────────┐ ┌───┤ client 1 │ (Linux, Windows, + │ irc │◄──┐ ╔═══════════╤═══════╗ │ └──────────┘ BSD, Mac OS X ...) + └────────┘ └──╢ │ ║◄───┘ ┌──────────┐ + ...... ║ WeeChat │ Relay ║◄───────┤ client 2 │ Appareil mobile + ┌────────┐ ┌──╢ │ ║◄───┐ └──────────┘ (Android, iPhone ...) + │ jabber │◄──┘ ╚═══════════╧═══════╝ │ ...... + └────────┘ │ ┌──────────┐ + ...... └───┤ client N │ Autres appareils + └──────────┘ + + +└────────────┘ └───────────────────┘╘══════╛└────────────────────────────────┘ + serveurs interface ncurses protocole interfaces distantes + relay +.... + +[NOTE] +Tous les clients ici utilisent le protocole 'weechat' dans l'extension 'relay'. +L'extension 'relay' autorise aussi des clients IRC, et 'relay' agit alors comme +un 'proxy IRC' (non décrit dans ce document). + +[[protocol_generalities]] +== Généralités sur le protocole + +* Les connexions du 'client' vers 'relay' sont faites avec des sockets TCP sur + l'IP/port utilisé par 'relay' pour écouter les nouvelles connexions. +* Le nombre de clients est limité par l'option 'relay.network.max_clients'. +* Chaque 'client' est indépendant des autres clients. +* Les messages du 'client' vers 'relay' sont appelés 'commandes', elles sont + envoyées sous forme de texte (une chaîne de caractères). +* Les messages de 'relay' vers le 'client' sont appelés des 'messages', ils sont + envoyés sous forme de données binaires. + +[[commands]] +== Commandes (client → relay) + +Les commandes ont le format : "(id) commande paramètres\n". + +Les champs sont : + +* 'id' : identifiant du message (facultatif) qui sera envoyée dans la réponse de + 'relay'; elle doit être entre parenthèses, et ne doit pas commencer par un + underscore ("_") (les identifiants commençant par un underscore sont réservés + pour les messages 'évènements' de WeeChat) +* 'commande' : une commande (voir le tableau ci-dessous) +* 'paramètres' : paramètres facultatifs pour la commande (plusieurs paramètres + sont séparés par des espaces). + +Liste des commandes disponibles (détail dans les chapitres suivants) : + +[width="80%",cols="^3m,14",options="header"] +|=== +| Commande | Description +| init | Initialiser la connexion avec 'relay' +| hdata | Demander un 'hdata' +| info | Demander une 'info' +| infolist | Demander une 'infolist' +| nicklist | Demander une 'nicklist' (liste de pseudos) +| input | Envoyer des données à un tampon (texte ou commande) +| sync | Synchroniser un/des tampon(s) (recevoir les mises à jour pour le(s) tampon(s)) +| desync | Désynchroniser un/des tampon(s) (stopper les mises à jour pour le(s) tampon(s)) +| quit | Se déconnecter de 'relay' +|=== + +[[command_init]] +=== init + +Initialiser la connexion avec 'relay'. Il doit s'agir de la première commande +envoyée à 'relay'. Si elle n'est pas envoyée, 'relay' coupera la connexion à la +première commande reçue, sans avertissement. + +Syntaxe : + +---- +init [<option>=<valeur>,[<option>=<valeur>,...]] +---- + +Paramètres : + +* 'option' : une des options suivantes : +** 'password' : mot de passe utilisé pour s'authentifier avec 'relay' (option + 'relay.network.password' dans WeeChat) +** 'compression' : type de compression : +*** 'zlib' : activer la compression 'zlib' pour les messages envoyés par 'relay' +*** 'off' : désactiver la compression + +[NOTE] +La compression 'zlib' est activée par défaut si 'relay' supporte la compression +'zlib'. + +Exemples : + +---- +# initialiser et utiliser la compression zlib par défaut (si WeeChat la supporte) +init password=mypass + +# initialiser et désactiver la compression +init password=mypass,compression=off +---- + +[[command_hdata]] +=== hdata + +Demander un 'hdata'. + +Syntaxe : + +---- +(id) hdata <chemin> [<clés>] +---- + +Paramètres : + +* 'chemin' : chemin vers le hdata, avec le format : + "hdata:pointeur/var/var/.../var", la dernière variable est le hdata retourné : +** 'hdata' : nom du hdata +** 'pointeur' : pointeur ("0x12345") ou nom de liste (par exemple : + "gui_buffers") (nombre autorisé, voir ci-dessous) +** 'var' : un nom de variable dans le hdata parent (nom précédent dans le + chemin) (nombre autorisé, voir ci-dessous) +* 'clés' : liste de clés (séparées par des virgules) à retourner dans le hdata + (si non spécifié, toutes les clés sont retournées, ce qui n'est pas recommandé + avec les grosses structures hdata) + +Un nombre est autorisé après le pointeur et les variables, avec le format "(N)". +Les valeurs possibles sont : + +* nombre positif : itérer en utilisant l'élément suivant, N fois +* nombre négatif : itérer en utilisant l'élément précédent, N fois +* '*' : itérer en utilisant l'élément suivant, jusqu'à la fin de la liste + +Exemples : + +---- +# demander tous les tampons, un hdata de type "buffer" est retourné +# les clés "number" et "name" sont retournées pour chaque tampon +hdata buffer:gui_buffers(*) number,name + +# demander toutes les lignes de tous les tampons, un hdata de type "line_data" +# est retourné +# toutes les clés sont retournées +hdata buffer:gui_buffers(*)/lines/first_line(*)/data + +# demander le nom complet du premier tampon +hdata buffer:gui_buffers full_name +---- + +[[command_info]] +=== info + +Demander une 'info'. + +Syntaxe : + +---- +(id) info <nom> [<paramètres>] +---- + +Paramètres : + +* 'nom': nom de l'info à obtenir +* 'paramètres': paramètres pour l'info (facultatif) + +Exemple : + +---- +info version +---- + +[[command_infolist]] +=== infolist + +Demander une 'infolist'. + +[IMPORTANT] +Le contenu de l'infolist est une duplication des données. Dans la mesure du +possible, utilisez plutôt la commande <<command_hdata,hdata>>, qui est un accès +direct aux données (cela est plus rapide, utilise moins de mémoire et retourne +des objets plus petits dans le message). + +Syntaxe : + +---- +(id) infolist <nom> [<pointeur> [<paramètres>]] +---- + +Paramètres : + +* 'nom' : nom de l'infolist à obtenir +* 'pointeur' : pointeur (facultatif) +* 'paramètres' : paramètres (facultatif) + +Exemple : + +---- +infolist buffer +---- + +[[command_nicklist]] +=== nicklist + +Demander une 'nicklist' (liste de pseudos), pour un ou tous les tampons. + +Syntaxe : + +---- +(id) nicklist [<tampon>] +---- + +Paramètres : + +* 'tampon' : pointeur ('0x12345') ou nom complet du tampon (par exemple : + 'core.weechat' ou 'irc.freenode.#weechat') + +Exemples : + +---- +# demander la liste de pseudos pour tous les tampons +nicklist + +# demander la liste de pseudos pour irc.freenode.#weechat +nicklist irc.freenode.#weechat +---- + +[[command_input]] +=== input + +Envoyer des données à un tampon. + +Syntaxe : + +---- +input <tampon> <données> +---- + +Paramètres : + +* 'tampon' : pointeur ('0x12345') ou nom complet du tampon (par exemple : + 'core.weechat' ou 'irc.freenode.#weechat') +* 'données' : données à envoyer au tampon : si elles commencent par '/', + cela sera exécuté comme une commande sur le tampon, sinon le texte est envoyé + comme entrée sur le tampon + +Exemples : + +---- +input core.weechat /help filter +input irc.freenode.#weechat hello guys! +---- + +[[command_sync]] +=== sync + +_Mis à jour dans la version 0.4.1._ + +Synchroniser un ou plusieurs tampons, pour obtenir les mises à jour. + +[IMPORTANT] +Il est recommandé d'utiliser cette commande immédiatement après avoir demandé +les données des tampons (lignes, ...). Elle peut être envoyée dans le même +message (après un caractère de nouvelle ligne : "\n"). + +Syntaxe : + +---- +sync [<tampon>[,<tampon>...] <option>[,<option>...]] +---- + +Paramètres : + +* 'tampon' : pointeur ('0x12345') ou nom complet du tampon (par exemple : + 'core.weechat' ou 'irc.freenode.#weechat'); le nom "*" peut être utilisé pour + spécifier tous les tampons +* 'options' : un ou plusieurs mots-clés, séparés par des virgules (par défaut + 'buffers,upgrade,buffer,nicklist' pour "*" et 'buffer,nicklist' pour un + tampon) : +** 'buffers' : recevoir les signaux à propos des tampons (ouverts/fermés, + déplacés, renommés, mélangés); peut être utilisé seulement avec "*" + _(WeeChat ≥ 0.4.1)_ +** 'upgrade' : recevoir les signaux à propos de la mise à jour de WeeChat + (mise à jour, fin de mise à jour); peut être utilisé seulement avec "*" + _(WeeChat ≥ 0.4.1)_ +** 'buffer' : recevoir les signaux à propos du tampon (nouvelles lignes, type + changé, titre changé, variable locale ajoutée/supprimée, et les même signaux + que 'buffers' pour le tampon) _(mis à jour dans la version 0.4.1)_ +** 'nicklist' : recevoir la liste de pseudos après des changements + +Exemples : + +---- +# synchroniser tous les tampons avec la liste de pseudos +# (les 3 commandes sont équivalentes, mais la première est recommandée pour une +# compatibilité avec les futures versions) +sync +sync * +sync * buffers,upgrade,buffer,nicklist + +# synchroniser le tampon "core" +sync core.buffer + +# synchroniser le canal #weechat, sans la liste de pseudos +sync irc.freenode.#weechat buffer + +# obtenir les signaux généraux + tous les signaux pour le canal #weechat +sync * buffers,upgrade +sync irc.freenode.#weechat +---- + +[[command_desync]] +=== desync + +_Mis à jour dans la version 0.4.1._ + +Désynchroniser un ou plusieurs tampons, pour stopper les mises à jour. + +[NOTE] +Ceci retirera les 'options' pour les tampons. Si des options sont toujours +actives pour les tampons, le client recevra toujours les mises à jour pour ces +tampons. + +Syntaxe : + +---- +desync [<tampon>[,<tampon>...] <option>[,<option>...]] +---- + +Paramètres : + +* 'tampon' : pointeur ('0x12345') ou nom complet du tampon (par exemple : + 'core.weechat' ou 'irc.freenode.#weechat'); le nom "*" peut être utilisé pour + spécifier tous les tampons +* 'options' : un ou plusieurs mots-clés, séparés par des virgules (le défaut est + 'buffers,upgrade,buffer,nicklist' pour "*" et 'buffer,nicklist' pour un + tampon); voir <<command_sync,la commande sync>> pour les valeurs + +[NOTE] +En utilisant le tampon "*", les autres tampons synchronisés (en utilisant un +nom) sont gardés. + +Donc si vous envoyez : "sync *", puis "sync irc.freenode.#weechat", puis +"desync *", les mises à jour sur le canal #weechat seront toujours envoyées par +WeeChat (vous devez le retirer explicitement pour stopper les mises à jour). + +Exemples : + +---- +# désynchroniser tous les tampons +# (les 3 commandes sont équivalentes, mais la première est recommandée pour une +# compatibilité avec les futures versions) +desync +desync * +desync * buffers,upgrade,buffer,nicklist + +# désynchroniser la liste de pseudos pour le canal #weechat +# (garder les mises à jour du tampon) +desync irc.freenode.#weechat nicklist + +# désynchroniser le canal #weechat +desync irc.freenode.#weechat +---- + +[[command_test]] +=== test + +Commande de test : WeeChat répondra avec différents objets. + +Cette commande est utile pour tester le décodage d'objets binaires retournés par +WeeChat. + +[IMPORTANT] +Vous ne devez pas utiliser les pointeurs retournés par cette commande, ils ne +sont pas valides. Cette commande doit être utilisée seulement pour tester le +décodage d'un message envoyé par WeeChat. + +Syntaxe : + +---- +test +---- + +Exemple : + +---- +test +---- + +Objets retournés (dans cet ordre) : + +[width="80%",cols="^3,3m,5m",options="header"] +|=== +| Type | Type (dans le message) | Valeur +| caractère | chr | 65 ("A") +| entier | int | 123456 +| entier | int | -123456 +| long | lon | 1234567890 +| long | lon | -1234567890 +| chaîne | str | "a string" +| chaîne | str | "" +| chaîne | str | NULL +| tampon de données | buf | "buffer" +| tampon de données | buf | NULL +| pointeur | ptr | 0x1234abcd +| pointeur | ptr | NULL +| date/heure | tim | 1321993456 +| tableau de chaînes | arr str | [ "abc", "de" ] +| tableau d'entiers | arr int | [ 123, 456, 789 ] +|=== + +[[command_ping]] +=== ping + +_WeeChat ≥ 0.4.2._ + +Envoyer un ping à WeeChat qui répondra avec un message "_pong" et les mêmes +paramètres. + +Cette commande est pratique pour tester que la connexion avec WeeChat est +toujours active et mesurer le temps de réponse. + +Syntaxe : + +---- +ping [<paramètres>] +---- + +Exemple : + +---- +ping 1370802127000 +---- + +[[command_quit]] +=== quit + +Se déconnecter de 'relay'. + +Syntaxe : + +---- +quit +---- + +Exemple : + +---- +quit +---- + +[[messages]] +== Messages (relay → client) + +Les messages sont envoyés sous forme de données binaires, en utilisant le format +suivant (avec la taille en octets) : + +.... +┌────────╥─────────────╥────╥────────┬─────────╥───────╥────────┬─────────┐ +│ taille ║ compression ║ id ║ type 1 │ objet 1 ║ ... ║ type N │ objet N │ +└────────╨─────────────╨────╨────────┴─────────╨───────╨────────┴─────────┘ + └──────┘ └───────────┘ └──┘ └──────┘ └───────┘ └──────┘ └───────┘ + 4 1 ?? 3 ?? 3 ?? + └────────────────────┘ └────────────────────────────────────────────────┘ + en-tête (5) données compressées (??) + └───────────────────────────────────────────────────────────────────────┘ + 'taille' octets +.... + +* 'taille' (entier non signé) : nombre d'octets du message entier (en incluant + ce champ) +* 'compression' (octet) : drapeau : +** '0x00' : les données qui suivent ne sont pas compressées +** '0x01' : les données qui suivent sont compressées avec 'zlib' +* 'id' (chaîne) : l'identifiant envoyé par le client (avant le nom de la + commande); il peut être vide (chaîne avec une longueur de zéro sans contenu) + si l'identifiant n'était pas donné dans la commande +* 'type' (3 caractères) : un type : 3 lettres (voir le tableau ci-dessous) +* 'objet' : un objet (voir tableau ci-dessous) + +[[message_compression]] +=== Compression + +Si le drapeau de 'compression' est égal à 0x01, alors *toutes* les données après +sont compressées avec 'zlib', et par conséquent doivent être décompressées avant +d'être utilisées. + +[[message_identifier]] +=== Identifiant + +Il y a deux types d'identifiants ('id'): + +* 'id' envoyé par le 'client' : 'relay' répondra avec le même 'id' dans sa + réponse +* 'id' d'un évènement : pour certains évènements, 'relay' enverra un message au + 'client' en utilisant un 'id' spécifique, commençant par underscore (voir le + tableau ci-dessous) + +Les identifiants réservés par WeeChat : + +[width="100%",cols="5,5,3,4,7",options="header"] +|=== +| Identifiant | Reçu avec sync | Données envoyées | + Description | Action recommendée dans le client + +| _buffer_opened | buffers / buffer | hdata: buffer | + Tampon ouvert | Ouvrir le tampon + +| _buffer_moved | buffers / buffer | hdata: buffer | + Tampon déplacé | Déplacer le tampon + +| _buffer_merged | buffers / buffer | hdata: buffer | + Tampon mélangé | Mélanger le tampon + +| _buffer_unmerged | buffers / buffer | hdata: buffer | + Tampon sorti du mélange | Sortir le tampon du mélange + +| _buffer_renamed | buffers / buffer | hdata: buffer | + Tampon renommé | Renommer le tampon + +| _buffer_title_changed | buffers / buffer | hdata: buffer | + Titre du tampon changé | Changer le titre du tampon + +| _buffer_type_changed | buffer | hdata: buffer | + Type de tampon changé | Changer le type de tampon + +| _buffer_localvar_added | buffer | hdata: buffer | + Variable locale ajoutée | Ajouter la variable locale dans le tampon + +| _buffer_localvar_changed | buffer | hdata: buffer | + Variable locale changée | Changer la variable locale dans le tampon + +| _buffer_localvar_removed | buffer | hdata: buffer | + Variable locale supprimée | Supprimer la variable locale du tampon + +| _buffer_line_added | buffer | hdata: line | + Ligne ajoutée dans le tampon | Afficher la ligne dans le tampon + +| _buffer_closing | buffers / buffer | hdata: buffer | + Tampon qui se ferme | Fermer le tampon + +| _nicklist | nicklist | hdata: nicklist_item | + Liste de pseudos pour un tampon | Remplacer la liste de pseudos + +| _nicklist_diff | nicklist | hdata: nicklist_item | + Différence de liste de pseudos pour un tampon | Mettre à jour la liste de pseudos + +| _pong | (always) | string: ping arguments | + Réponse à un "ping" | Mesurer le temps de réponse + +| _upgrade | upgrade | (empty) | + WeeChat se met à jour | Se désynchroniser de from WeeChat (ou quitter) + +| _upgrade_ended | upgrade | (empty) | + WeeChat a été mis à jour | (Re)synchroniser avec WeeChat +|=== + +[[message_buffer_opened]] +==== _buffer_opened + +Ce message est envoyé au client lorsque le signal "buffer_opened" est envoyé par +WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| short_name | chaîne | Nom court (exemple : '#weechat') +| nicklist | entier | 1 si le tampon a une liste de pseudos, sinon 0 +| title | chaîne | Titre du tampon +| local_variables | table de hachage | Variables locales +| prev_buffer | pointeur | Pointeur vers le tampon précédent +| next_buffer | pointeur | Pointeur vers le tampon suivant +|=== + +Exemple : canal '#weechat' rejoint sur freenode, nouveau tampon +'irc.freenode.#weechat': + +[source,python] +---- +id: '_buffer_opened' +hda: + keys: {'number': 'int', 'full_name': 'str', 'short_name': 'str', 'nicklist': 'int', + 'title': 'str', 'local_variables': 'htb', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'} + path: ['buffer'] + item 1: + __path: ['0x35a8a60'] + number: 3 + full_name: 'irc.freenode.#weechat' + short_name: None + nicklist: 0 + title: None + local_variables: {'plugin': 'irc', 'name': 'freenode.#weechat'} + prev_buffer: '0x34e7400' + next_buffer: '0x0' +---- + +[[message_buffer_moved]] +==== _buffer_moved + +Ce message est envoyé au client lorsque le signal "buffer_moved" est envoyé par +WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| prev_buffer | pointeur | Pointeur vers le tampon précédent +| next_buffer | pointeur | Pointeur vers le tampon suivant +|=== + +Exemple : tampon 'irc.freenode.#weechat' déplacé vers le numéro 2 : + +[source,python] +---- +id: '_buffer_moved' +hda: + keys: {'number': 'int', 'full_name': 'str', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'} + path: ['buffer'] + item 1: + __path: ['0x34588c0'] + number: 2 + full_name: 'irc.freenode.#weechat' + prev_buffer: '0x347b9f0' + next_buffer: '0x3471bc0' +---- + +[[message_buffer_merged]] +==== _buffer_merged + +Ce message est envoyé au client lorsque le signal "buffer_merged" est envoyé par +WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| prev_buffer | pointeur | Pointeur vers le tampon précédent +| next_buffer | pointeur | Pointeur vers le tampon suivant +|=== + +Exemple : tampon 'irc.freenode.#weechat' mélangé avec le tampon n°2 : + +[source,python] +---- +id: '_buffer_merged' +hda: + keys: {'number': 'int', 'full_name': 'str', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'} + path: ['buffer'] + item 1: + __path: ['0x4db4c00'] + number: 2 + full_name: 'irc.freenode.#weechat' + prev_buffer: '0x4cef9b0' + next_buffer: '0x0' +---- + +[[message_buffer_unmerged]] +==== _buffer_unmerged + +Ce message est envoyé au client lorsque le signal "buffer_unmerged" est envoyé +par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| prev_buffer | pointeur | Pointeur vers le tampon précédent +| next_buffer | pointeur | Pointeur vers le tampon suivant +|=== + +Exemple : tampon 'irc.freenode.#weechat' sorti du mélange : + +[source,python] +---- +id: '_buffer_unmerged' +hda: + keys: {'number': 'int', 'full_name': 'str', 'prev_buffer': 'ptr', 'next_buffer': 'ptr'} + path: ['buffer'] + item 1: + __path: ['0x4db4c00'] + number: 3 + full_name: 'irc.freenode.#weechat' + prev_buffer: '0x4cef9b0' + next_buffer: '0x0' +---- + +[[message_buffer_renamed]] +==== _buffer_renamed + +Ce message est envoyé au client lorsque le signal "buffer_renamed" est envoyé +par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| short_name | chaîne | Nom court (exemple : '#weechat') +| local_variables | table de hachage | Variables locales +|=== + +Exemple : tampon privé renommé de 'FlashCode' en 'Flash2' : + +[source,python] +---- +id: '_buffer_renamed' +hda: + keys: {'number': 'int', 'full_name': 'str', 'short_name': 'str', 'local_variables': 'htb'} + path: ['buffer'] + item 1: + __path: ['0x4df7b80'] + number: 5 + full_name: 'irc.freenode.Flash2' + short_name: 'Flash2' + local_variables: {'server': 'freenode', 'plugin': 'irc', 'type': 'private', + 'channel': 'FlashCode', 'nick': 'test', 'name': 'local.Flash2'} +---- + +[[message_buffer_title_changed]] +==== _buffer_title_changed + +Ce message est envoyé au client lorsque le signal "buffer_title_changed" est +envoyé par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| title | chaîne | Titre du tampon +|=== + +Exemple : titre changé sur le canal '#weechat' : + +[source,python] +---- +id: '_buffer_title_changed' +hda: + keys: {'number': 'int', 'full_name': 'str', 'title': 'str'} + path: ['buffer'] + item 1: + __path: ['0x4a715d0'] + number: 3 + full_name: 'irc.freenode.#weechat' + title: 'Welcome on #weechat! http://weechat.org/' +---- + +[[message_buffer_type_changed]] +==== _buffer_type_changed + +Ce message est envoyé au client lorsque le signal "buffer_type_changed" est +envoyé par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| type | entier | Type de tampon : 0 = formaté (par défaut), 1 = contenu libre +|=== + +Exemple : type de tampon 'script.scripts' changé de formaté (0) à contenu +libre (1) : + +[source,python] +---- +id: '_buffer_type_changed' +hda: + keys: {'number': 'int', 'full_name': 'str', 'type': 'int'} + path: ['buffer'] + item 1: + __path: ['0x27c9a70'] + number: 4 + full_name: 'script.scripts' + type: 1 +---- + +[[message_buffer_localvar_added]] +==== _buffer_localvar_added + +Ce message est envoyé au client lorsque le signal "buffer_localvar_added" est +envoyé par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Name | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| local_variables | table de hachage | Variables locales +|=== + +Exemple : variable locale 'test' ajoutée dans le tampon +'irc.freenode.#weechat' : + +[source,python] +---- +id='_buffer_localvar_added', objects: +hda: + keys: {'number': 'int', 'full_name': 'str', 'local_variables': 'htb'} + path: ['buffer'] + item 1: + __path: ['0x4a73de0'] + number: 3 + full_name: 'irc.freenode.#weechat' + local_variables: {'server': 'freenode', 'test': 'value', 'plugin': 'irc', + 'type': 'channel', 'channel': '#weechat', 'nick': 'test', + 'name': 'freenode.#weechat'} +---- + +[[message_buffer_localvar_changed]] +==== _buffer_localvar_changed + +Ce message est envoyé au client lorsque le signal "buffer_localvar_changed" est +envoyé par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| local_variables | table de hachage | Variables locales +|=== + +Exemple : variable locale 'test' mise à jour dans le tampon +'irc.freenode.#weechat' : + +[source,python] +---- +id='_buffer_localvar_changed', objects: +hda: + keys: {'number': 'int', 'full_name': 'str', 'local_variables': 'htb'} + path: ['buffer'] + item 1: + __path: ['0x4a73de0'] + number: 3 + full_name: 'irc.freenode.#weechat' + local_variables: {'server': 'local', 'test': 'value2', 'plugin': 'irc', + 'type': 'channel', 'channel': '#weechat', 'nick': 'test', + 'name': 'freenode.#weechat'} +---- + +[[message_buffer_localvar_removed]] +==== _buffer_localvar_removed + +Ce message est envoyé au client lorsque le signal "buffer_localvar_removed" est +envoyé par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +| local_variables | table de hachage | Variables locales +|=== + +Exemple : variable locale 'test' supprimée du tampon 'irc.freenode.#weechat' : + +[source,python] +---- +id: '_buffer_localvar_removed' +hda: + keys: {'number': 'int', 'full_name': 'str', 'local_variables': 'htb'} + path: ['buffer'] + item 1: + __path: ['0x4a73de0'] + number: 3 + full_name: 'irc.freenode.#prout' + local_variables: {'server': 'local', 'plugin': 'irc', 'type': 'channel', + 'channel': '#weechat', 'nick': 'test', 'name': 'freenode.#weechat'} +---- + +[[message_buffer_line_added]] +==== _buffer_line_added + +Ce message est envoyé au client lorsque le signal "buffer_line_added" est envoyé +par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| buffer | pointeur | Pointeur vers le tampon +| date | date/heure | Date du message +| date_printed | date/heure | Date d'affichage du message +| displayed | caractère | 1 si le message est affiché, 0 si le message est filtré (caché) +| highlight | caractère | 1 si la ligne a un highlight, sinon 0 +| tags_array | tableau de chaînes | Liste des étiquettes de la ligne +| prefix | chaîne | Préfixe +| message | chaîne | Message +|=== + +Exemple : nouveau message 'hello!' du pseudo 'FlashCode' sur le tampon +'irc.freenode.#weechat' : + +[source,python] +---- +id: '_buffer_line_added' +hda: + keys: {'buffer': 'ptr', 'date': 'tim', 'date_printed': 'tim', 'displayed': 'chr', + 'highlight': 'chr', 'tags_array': 'arr', 'prefix': 'str', 'message': 'str'} + path: ['line_data'] + item 1: + __path: ['0x4a49600'] + buffer: '0x4a715d0' + date: 1362728993 + date_printed: 1362728993 + displayed: 1 + highlight: 0 + tags_array: ['irc_privmsg', 'notify_message', 'prefix_nick_142', 'nick_FlashCode', 'log1'] + prefix: 'F06@F@00142FlashCode' + message: 'hello!' +---- + +[[message_buffer_closing]] +==== _buffer_closing + +Ce message est envoyé au client lorsque le signal "buffer_closing" est envoyé +par WeeChat. + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| number | entier | Numéro de tampon (≥ 1) +| full_name | chaîne | Nom complet (exemple : 'irc.freenode.#weechat') +|=== + +Exemple : tampon 'irc.freenode.#weechat' en cours de fermeture par WeeChat : + +[source,python] +---- +id: '_buffer_closing' +hda: + keys: {'number': 'int', 'full_name': 'str'} + path: ['buffer'] + item 1: + __path: ['0x4a715d0'] + number: 3 + full_name: 'irc.freenode.#weechat' +---- + +[[message_nicklist]] +==== _nicklist + +Ce message est envoyé au client lorsque de grosses mises à jour sont effectuées +sur la liste de pseudos (groupes/pseudos ajoutés/supprimés/changés). Le message +contient la liste complète des pseudos. + +Lorsque de petites mises à jour sont faites sur la liste de pseudos (par exemple +l'ajout d'un seul pseudo), un autre message avec l'identifiant '_nicklist_diff' +est envoyé (voir ci-dessous). + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| group | caractère | 1 pour un groupe, 0 pour un pseudo +| visible | caractère | 1 si le groupe/pseudo est affiché, sinon 0 +| level | entier | Niveau du groupe (0 pour un pseudo) +| name | chaîne | Nom du groupe/pseudo +| color | chaîne | Couleur du nom +| prefix | chaîne | Préfixe (seulement pour un pseudo) +| prefix_color | chaîne | Couleur du préfixe (seulement pour un pseudo) +|=== + +Exemple : liste de pseudos pour le tampon 'irc.freenode.#weechat' : + +[source,python] +---- +id: '_nicklist' +hda: + keys: {'group': 'chr', 'visible': 'chr', 'level': 'int', 'name': 'str', 'color': 'str', + 'prefix': 'str', 'prefix_color': 'str'} + path: ['buffer', 'nicklist_item'] + item 1: + __path: ['0x4a75cd0', '0x31e95d0'] + group: 1 + visible: 0 + level: 0 + name: 'root' + color: None + prefix: None + prefix_color: None + item 2: + __path: ['0x4a75cd0', '0x41247b0'] + group: 1 + visible: 1 + level: 1 + name: '000|o' + color: 'weechat.color.nicklist_group' + prefix: None + prefix_color: None + item 3: + __path: ['0x4a75cd0', '0x4a60d20'] + group: 0 + visible: 1 + level: 0 + name: 'FlashCode' + color: '142' + prefix: '@' + prefix_color: 'lightgreen' + item 4: + __path: ['0x4a75cd0', '0x4aafaf0'] + group: 1 + visible: 1 + level: 1 + name: '001|v' + color: 'weechat.color.nicklist_group' + prefix: None + prefix_color: None + item 5: + __path: ['0x4a75cd0', '0x4a48d80'] + group: 1 + visible: 1 + level: 1 + name: '999|...' + color: 'weechat.color.nicklist_group' + prefix: None + prefix_color: None + item 6: + __path: ['0x4a75cd0', '0x4a5f560'] + group: 0 + visible: 1 + level: 0 + name: 'test' + color: 'weechat.color.chat_nick_self' + prefix: ' ' + prefix_color: '' +---- + +[[message_nicklist_diff]] +==== _nicklist_diff + +_WeeChat ≥ 0.4.1._ + +Ce message est envoyé au client lorsque de petites mises à jour sont effectuées +sur la liste de pseudos (groupes/pseudos ajoutés/supprimés/changés). Le message +contient les différences de la liste de pseudos (entre l'ancienne liste de +pseudos et la nouvelle). + +Données envoyées dans le hdata : + +[width="100%",cols="3m,2,10",options="header"] +|=== +| Nom | Type | Description +| _diff | caractère | Type de différence (voir ci-dessous) +| group | caractère | 1 pour un groupe, 0 pour un pseudo +| visible | caractère | 1 si le groupe/pseudo est affiché, sinon 0 +| level | entier | Niveau du groupe (0 pour un pseudo) +| name | chaîne | Nom du groupe/pseudo +| color | chaîne | Couleur du nom +| prefix | chaîne | Préfixe (seulement pour un pseudo) +| prefix_color | chaîne | Couleur du préfixe (seulement pour un pseudo) +|=== + +La valeur de '_diff' peut être : + +* `^` : le groupe parent : le(s) groupe(s)/pseudo(s) après celui-ci sont liés à + ce groupe +* `+` : groupe/pseudo ajouté dans le groupe parent +* `-` : groupe/pseudo supprimé du groupe parent +* `*` : groupe/pseudo mis à jour dans le groupe parent + +Exemple : pseudo 'master' ajouté dans le groupe '000|o' (opérateurs de canel sur +un canal IRC), pseudos 'nick1' et 'nick2' ajoutés dans le groupe '999|...' +(utilisateurs standard sur un canal IRC) : + +[source,python] +---- +id: '_nicklist_diff' +hda: + keys: {'_diff': 'chr', 'group': 'chr', 'visible': 'chr', 'level': 'int', 'name': 'str', + 'color': 'str', 'prefix': 'str', 'prefix_color': 'str'} + path: ['buffer', 'nicklist_item'] + item 1: + __path: ['0x46f2ee0', '0x343c9b0'] + _diff: 94 ('^') + group: 1 + visible: 1 + level: 1 + name: '000|o' + color: 'weechat.color.nicklist_group' + prefix: None + prefix_color: None + item 2: + __path: ['0x46f2ee0', '0x47e7f60'] + _diff: 43 ('+') + group: 0 + visible: 1 + level: 0 + name: 'master' + color: 'magenta' + prefix: '@' + prefix_color: 'lightgreen' + item 3: + __path: ['0x46f2ee0', '0x46b8e70'] + _diff: 94 ('^') + group: 1 + visible: 1 + level: 1 + name: '999|...' + color: 'weechat.color.nicklist_group' + prefix: None + prefix_color: None + item 4: + __path: ['0x46f2ee0', '0x3dba240'] + _diff: 43 ('+') + group: 0 + visible: 1 + level: 0 + name: 'nick1' + color: 'green' + prefix: ' ' + prefix_color: '' + item 5: + __path: ['0x46f2ee0', '0x3c379d0'] + _diff: 43 ('+') + group: 0 + visible: 1 + level: 0 + name: 'nick2' + color: 'lightblue' + prefix: ' ' + prefix_color: '' +---- + +[[message_pong]] +==== _pong + +_WeeChat ≥ 0.4.2._ + +Ce message est envoyé au client lorsque 'relay' reçoit un message "ping". + +Données envoyées dans la chaîne : paramètres reçus dans le message "ping". + +L'action recommandée dans le client est de mesurer le temps dé réponse et se +déconnecter si le temps est très long. + +[[message_upgrade]] +==== _upgrade + +_WeeChat ≥ 0.3.8._ + +Ce message est envoyé au client lorsque WeeChat commence sa mise à jour. + +Il n'y a pas de données dans le message. + +L'action recommandée dans le client est de se désynchroniser de WeeChat (envoi +de la commande 'desync'), ou de se déconnecter de WeeChat (car après la mise à +jour, tous les pointeurs changeront). + +[NOTE] +Pendant la mise à jour de WeeChat, le socket reste ouvert (sauf si la connexion +utilise SSL). + +[[message_upgrade_ended]] +==== _upgrade_ended + +_WeeChat ≥ 0.3.8._ + +Ce message est envoyé au client lorsque WeeChat a terminé sa mise à jour. + +Il n'y a pas de données dans le message. + +L'action recommandée dans le client est de se resynchroniser avec WeeChat : +envoyer à nouveau les commandes envoyées au démarrage après 'init'. + +[[objects]] +=== Objets + +Les objets sont identifiés par 3 lettres, appelées 'type'. Les types suivants +sont utilisés : + +[width="100%",cols="^2m,5,10",options="header"] +|=== +| Type | Valeur | Longueur +| chr | Caractère signé | 1 octet +| int | Entier signé | 4 octets +| lon | Entier long signé | 1 octet + longueur de l'entier sous forme de chaîne +| str | Chaîne | 4 octets + longueur de la chaîne (sans le '\0' final) +| buf | Tampon d'octets | 4 octets + longueur des données +| ptr | Pointeur | 1 octet + longueur du pointeur sous forme de chaîne +| tim | Date/heure | 1 octet + longueur de la date/heure sous forme de chaîne +| htb | Table de hachage | Variable +| hda | Contenu du hdata | Variable +| inf | Info: nom + contenu | Variable +| inl | Contenu de l'infolist | Variable +| arr | Tableau d'objets | 3 octets (type) + nombre d'objets + données +|=== + +[[object_char]] +==== Caractère + +Un caractère signé est un octet. + +Exemple : + +.... +┌────┐ +│ 41 │ ────► 65 (0x41: "A") +└────┘ +.... + +[[object_integer]] +==== Entier + +Un entier signé est stocké sur 4 octets, encodé au format "big-endian" (octet le +plus significatif en premier). + +Intervalle : -2147483648 à 2147483647. + +Exemples : + +.... +┌────┬────┬────┬────┐ +│ 00 │ 01 │ E2 │ 40 │ ────► 123456 +└────┴────┴────┴────┘ + +┌────┬────┬────┬────┐ +│ FF │ FE │ 1D │ C0 │ ────► -123456 +└────┴────┴────┴────┘ +.... + +[[object_long_integer]] +==== Entier long + +Un entier long signé est encodé sous forme de chaîne de caractères, avec la +longueur sur un octet. + +Intervalle : -9223372036854775808 à 9223372036854775807. + +Exemples : + +.... +┌────╥────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐ +│ 0A ║ 31 │ 32 │ 33 │ 34 │ 35 │ 36 │ 37 │ 38 │ 39 │ 30 │ ────► 1234567890 +└────╨────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘ + └──┘ └───────────────────────────────────────────────┘ +long. '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' + +┌────╥────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐ +│ 0B ║ 2D │ 31 │ 32 │ 33 │ 34 │ 35 │ 36 │ 37 │ 38 │ 39 │ 30 │ ────► -1234567890 +└────╨────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘ + └──┘ └────────────────────────────────────────────────────┘ +long. '-' '1' '2' '3' '4' '5' '6' '7' '8' '9' '0' +.... + +[[object_string]] +==== Chaîne de caractères + +Une chaîne de caractère est une longueur (un entier sur 4 octets) + le contenu +de la chaîne (sans le '\0' final). + +Exemple : + +.... +┌────┬────┬────┬────╥────┬────┬────┬────┬────┐ +│ 00 │ 00 │ 00 │ 05 ║ 68 │ 65 │ 6C │ 6C │ 6F │ ────► "hello" +└────┴────┴────┴────╨────┴────┴────┴────┴────┘ + └─────────────────┘ └──────────────────────┘ + longueur 'h' 'e' 'l' 'l' 'o' +.... + +Une chaîne vide a une longueur de zéro : + +.... +┌────┬────┬────┬────┐ +│ 00 │ 00 │ 00 │ 00 │ ────► "" +└────┴────┴────┴────┘ + └─────────────────┘ + longueur +.... + +Une chaîne 'NULL' (pointeur NULL en C) a une longueur de -1 : + +.... +┌────┬────┬────┬────┐ +│ FF │ FF │ FF │ FF │ ────► NULL +└────┴────┴────┴────┘ + └─────────────────┘ + longueur +.... + +[[object_buffer]] +==== Tampon de données + +Même format que l'objet <<object_string,chaîne>>; le contenu est simplement un +tableau d'octets. + +[[object_pointer]] +==== Pointeur + +Un pointeur est encodé sous forme de chaîne de caractère (hexadécimal), avec la +longueur sur un octet. + +Exemple : + +.... +┌────╥────┬────┬────┬────┬────┬────┬────┬────┬────┐ +│ 09 ║ 31 │ 61 │ 32 │ 62 │ 33 │ 63 │ 34 │ 64 │ 35 │ ────► 0x1a2b3c4d5 +└────╨────┴────┴────┴────┴────┴────┴────┴────┴────┘ + └──┘ └──────────────────────────────────────────┘ +long. '1' 'a' '2' 'b' '3' 'c' '4' 'd' '5' +.... + +Un pointeur 'NULL' a une longueur de 1 avec la valeur 0 : + +.... +┌────╥────┐ +│ 01 ║ 00 │ ────► NULL (0x0) +└────╨────┘ + └──┘ └──┘ +long. 0 +.... + +[[object_time]] +==== Date/heure + +La date/heure (nombre de secondes) est encodé sous forme de chaîne de +caractères, avec la longueur sur un octet. + +Exemple : + +.... +┌────╥────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐ +│ 0A ║ 31 │ 33 │ 32 │ 31 │ 39 │ 39 │ 33 │ 34 │ 35 │ 36 │ ────► 1321993456 +└────╨────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘ + └──┘ └───────────────────────────────────────────────┘ +long. '1' '3' '2' '1' '9' '9' '3' '4' '5' '6' +.... + +[[object_hashtable]] +==== Table de hachage + +Une table de hachage contient le type pour les clés, le type pour les valeurs, +le nombre d'éléments dans la table de hachage (entier sur 4 octets), et les clés +et valeurs de chaque élément. + +.... +┌───────────┬─────────────┬───────╥───────┬─────────╥─────╥───────┬─────────┐ +│ type_keys │ type_values │ count ║ key 1 │ value 1 ║ ... ║ key N │ value N │ +└───────────┴─────────────┴───────╨───────┴─────────╨─────╨───────┴─────────┘ +.... + +Exemple : + +.... +┌─────┬─────┬───╥──────┬─────╥──────┬─────┐ +│ str │ str │ 2 ║ key1 │ abc ║ key2 │ def │ ────► { 'key1' => 'abc', +└─────┴─────┴───╨──────┴─────╨──────┴─────┘ 'key2' => 'def' } + └───┘ └───┘ └─┘ └──────────┘ └──────────┘ + type type nombre élément 1 élement 2 + clés valeurs +.... + +[[object_hdata]] +==== Hdata + +Un 'hdata' contient un chemin avec les noms de hdata, une liste de clés, le +nombre d'objets, et l'ensemble des objets (chemin avec les pointeurs, puis les +objets). + +.... +┌────────┬──────┬───────╥────────┬─────────────────────╥── +│ h-path │ keys │ count ║ p-path │ value 1 ... value N ║ ... +└────────┴──────┴───────╨────────┴─────────────────────╨── + + ──╥────────┬─────────────────────╥─────┐ + ... ║ p-path │ value 1 ... value N ║ ... │ + ──╨────────┴─────────────────────╨─────┘ +.... + +* 'h-path' (chaîne) : chemin utilise pour atteindre le hdata (exemple : + 'buffer/lines/line/line_data'); le dernier élément du chemin est le hdata + retourné +* 'keys' (chaînes) : chaîne avec une liste de 'clé:type' (séparés par des + virgules), exemple : 'number:int,name:str' +* 'count' (entier) : nombre d'objets +* 'p-path' : chemin avec les pointeurs vers les objets (le nombre de pointeurs + ici est le nombre d'éléments dans le chemin) +* 'values' : liste de valeurs (le nombre de valeurs est le nombre de clés + retournées pour le hdata) + +Exemple de hdata avec deux tampons (tampon "core" weechat et le serveur +freenode) et deux clés ('number' et 'full_name') : + +.... +# commande +hdata buffer:gui_buffers(*) number,full_name + +# réponse +┌────────┬──────────────────────────┬───╥── +│ buffer │ number:int,full_name:str │ 2 ║ ... +└────────┴──────────────────────────┴───╨── + └──────┘ └────────────────────────┘ └─┘ + h-path clés nombre + + ──╥─────────┬───┬──────────────╥─────────┬───┬────────────────────┐ + ... ║ 0x12345 │ 1 │ core.weechat ║ 0x6789a │ 2 │irc.server.freenode │ + ──╨─────────┴───┴──────────────╨─────────┴───┴────────────────────┘ + └──────────────────────────┘ └────────────────────────────────┘ + tampon 1 tampon 2 +.... + +Exemple de hdata avec les lignes du tampon "core" : + +.... +# commande +hdata buffer:gui_buffers(*)/lines/first_line(*)/data + +# réponse +┌─────────────────────────────┬─────┬────╥── +│ buffer/lines/line/line_data │ ... │ 50 ║ ... +└─────────────────────────────┴─────┴────╨── + └───────────────────────────┘ └───┘ └──┘ + h-path (hdata names) clés nombre + + ──╥───────────┬───────────┬───────────┬───────╥── + ... ║ 0x23cf970 │ 0x23cfb60 │ 0x23d5f40 │ ..... ║ ... + ──╨───────────┴───────────┴───────────┴───────╨── + └─────────────────────────────────┘ └─────┘ + p-path (pointeurs) objets + └─────────────────────────────────────────┘ + ligne 1 + + ──╥───────────┬───────────┬───────────┬───────╥──────────────┐ + ... ║ 0x23cf970 │ 0x23cfb60 │ 0x23d6110 │ ..... ║ ............ │ + ──╨───────────┴───────────┴───────────┴───────╨──────────────┘ + └─────────────────────────────────┘ └─────┘ + p-path (pointeurs) objets + └─────────────────────────────────────────┘ └────────────┘ + ligne 2 lignes 3-50 +.... + +Exemple de hdata avec la liste des pseudos : + +.... +# commande +nicklist + +# réponse +┌───────────────────┬── +│ buffer/nick_group │ ... +└───────────────────┴── + └─────────────────┘ + h-path + + ──╥───────────────────────────────────────────────────────────┬────╥── + ... ║ group:chr,visible:chr,name:str,color:str,prefix:str,(...) │ 12 ║ ... + ──╨───────────────────────────────────────────────────────────┴────╨── + └─────────────────────────────────────────────────────────┘ └──┘ + clés nombre + + ──╥─────────┬─────────┬───┬───┬──────┬─┬─┬─┬───╥── + ... ║ 0x12345 │ 0x6789a │ 1 │ 0 │ root │ │ │ │ 0 ║ ... + ──╨─────────┴─────────┴───┴───┴──────┴─┴─┴─┴───╨── + └─────────────────┘ └──────────────────────┘ + p-path objets + └──────────────────────────────────────────┘ + groupe (racine de la liste des pseudos) + + ──╥─────────┬─────────┬───┬───┬───────┬─┬─┬─┬───╥── + ... ║ 0x123cf │ 0x678d4 │ 1 │ 0 │ 000|o │ │ │ │ 1 ║ ... + ──╨─────────┴─────────┴───┴───┴───────┴─┴─┴─┴───╨── + └─────────────────┘ └───────────────────────┘ + p-path objets + └───────────────────────────────────────────┘ + groupe (ops du canal) + + ──╥─────────┬─────────┬───┬───┬──────────┬──────┬───┬────────────┬───╥── + ... ║ 0x128a7 │ 0x67ab2 │ 0 │ 1 │ ChanServ │ blue │ @ │ lightgreen │ 0 ║ ... + ──╨─────────┴─────────┴───┴───┴──────────┴──────┴───┴────────────┴───╨── + └─────────────────┘ └────────────────────────────────────────────┘ + p-path objets + └────────────────────────────────────────────────────────────────┘ + pseudo (@ChanServ) +.... + +[[object_info]] +==== Info + +Une 'info' contient un nom et une valeur (les deux sont des chaînes de +caractères). + +.... +┌──────┬───────┐ +│ name │ value │ +└──────┴───────┘ +.... + +* 'nom' (chaîne) : nom de l'info +* 'value' (chaîne) : valeur + +Exemple de l'info 'version' : + +.... +┌─────────┬───────────────────┐ +│ version │ WeeChat 0.3.7-dev │ +└─────────┴───────────────────┘ +.... + +[[object_infolist]] +==== Infolist + +Une 'infolist' contient un nom, nombre d'éléments, et les éléments (ensemble de +variables). + +.... +┌──────┬───────╥────────╥─────╥────────┐ +│ name │ count ║ item 1 ║ ... ║ item N │ +└──────┴───────╨────────╨─────╨────────┘ +.... + +Un élément est : + +.... +┌───────╥────────┬────────┬─────────╥─────╥────────┬────────┬─────────┐ +│ count ║ name 1 │ type 1 │ value 1 ║ ... ║ name N │ type N │ value N │ +└───────╨────────┴────────┴─────────╨─────╨────────┴────────┴─────────┘ +.... + +* 'name' (chaîne) : nom de l'infolist ('buffer', 'window', 'bar', ...) +* 'count' (entier) : nombre d'éléments +* 'item' : +** 'count' : nombre de variables dans l'élément +** 'name' : nom de variable +** 'type' : type de variable ('int', 'str', ...) +** 'value' : valeur de la variable + +Exemple d'infolist avec deux tampons (tampon "core" weechat et le serveur +freenode) : + +.... +# commande +infolist buffer + +# réponse +┌────────┬───╥────┬─────────┬─────┬─────────┬─────╥── +│ buffer │ 2 ║ 42 │ pointer │ ptr │ 0x12345 │ ... ║ ... +└────────┴───╨────┴─────────┴─────┴─────────┴─────╨── + └──────┘ └─┘ └──────────────────────────────────┘ + nom nombre élément 1 + + ──╥────┬─────────┬─────┬─────────┬─────┐ + ... ║ 42 │ pointer │ ptr │ 0x6789a │ ... │ + ──╨────┴─────────┴─────┴─────────┴─────┘ + └──────────────────────────────────┘ + élément 2 +.... + +[[object_array]] +==== Tableau + +Un tableau est un type (3 octets) + nombre d'objets (entier sur 4 octets) + les +données. + +Exemple de tableau avec deux chaînes de caractères : + +.... +┌─────╥────┬────┬────┬────╥────┬────┬────┬────╥── +│ str ║ 00 │ 00 │ 00 │ 02 ║ 00 │ 00 │ 00 │ 03 ║ ... +└─────╨────┴────┴────┴────╨────┴────┴────┴────╨── + └───┘ └─────────────────┘ └─────────────────┘ + type nombre de chaînes longueur + + ──╥────┬────┬────╥────┬────┬────┬────╥────┬────┐ + ... ║ 61 │ 62 │ 63 ║ 00 │ 00 │ 00 │ 02 ║ 64 │ 65 │ ────► [ "abc", "de" ] + ──╨────┴────┴────╨────┴────┴────┴────╨────┴────┘ + └────────────┘ └─────────────────┘ └───────┘ + 'a' 'b' 'c' longueur 'd' 'e' +.... + +Exemple de tableau avec trois entiers : + +.... +┌─────╥────┬────┬────┬────╥────┬────┬────┬────╥── +│ int ║ 00 │ 00 │ 00 │ 03 ║ 00 │ 00 │ 00 │ 7B ║ ... +└─────╨────┴────┴────┴────╨────┴────┴────┴────╨── + └───┘ └─────────────────┘ └─────────────────┘ + type nombre d'entiers 123 (0x7B) + + ──╥────┬────┬────┬────╥────┬────┬────┬────┐ + ... ║ 00 │ 00 │ 01 │ C8 ║ 00 │ 00 │ 03 │ 15 │ ────► [ 123, 456, 789 ] + ──╨────┴────┴────┴────╨────┴────┴────┴────┘ + └─────────────────┘ └─────────────────┘ + 456 (0x1C8) 789 (0x315) +.... + +Un tableau 'NULL' : + +.... +┌─────╥────┬────┬────┬────┐ +│ str ║ 00 │ 00 │ 00 │ 00 │ ────► NULL +└─────╨────┴────┴────┴────┘ + └───┘ └─────────────────┘ + type nombre de chaînes +.... + +[[typical_session]] +== Session typique + +.... + ┌────────┐ ┌───────┐ ┌─────────┐ + │ Client ├ ─ ─ ─ ─ (réseau)─ ─ ─ ─ ┤ Relay ├────────────────┤ WeeChat │ + └────────┘ └───────┘ └─────────┘ + ║ ║ ║ + ╟───────────────────────────────► ║ ║ + ║ ouverture socket ║ ajout du client ║ + ║ ║ ║ + ╟───────────────────────────────► ║ ║ + ║ cmd: init password=xxx,... ║ init/autoriser client ║ + ║ ║ ║ + ╟───────────────────────────────► ║ ║ + ║ cmd: hdata buffer ... ╟───────────────────────► ║ + ║ sync ... ║ demande de hdata ║ lecture + ║ ║ ║ valeurs + ║ ║ ◄───────────────────────╢ hdata + ║ ◄───────────────────────────────╢ hdata ║ + créat° ║ msg: hda buffer ║ ║ + tampons ║ ║ ║ + ║ ........ ║ ........ ║ + ║ ║ ║ + ╟───────────────────────────────► ║ ║ + ║ cmd: input ... ╟───────────────────────► ║ + ║ ║ envoi données au tampon ║ envoi données + ║ ║ ║ au tampon + ║ ........ ║ ........ ║ + ║ ║ ║ signal + ║ ║ ◄───────────────────────╢ reçu + ║ ◄───────────────────────────────╢ signal XXX ║ (accroché + MAJ ║ msg: id: "_buffer_..." ║ ║ par relay) + tampons ║ ║ ║ + ║ ........ ║ ........ ║ + ║ ║ ║ + ╟───────────────────────────────► ║ ║ + ║ cmd: ping ... ║ ║ + ║ ║ ║ + ║ ◄───────────────────────────────╢ ║ + mesure ║ msg: id: "_pong" ... ║ ║ + temps ║ ║ ║ + réponse ║ ........ ║ ........ ║ + ║ ║ ║ + ╟───────────────────────────────► ║ ║ + ║ cmd: quit ║ déconnexion du client ║ + ║ ║ ║ +.... |