mirror of
https://github.com/weechat/weechat.git
synced 2026-07-06 16:25:42 +02:00
relay: add object type "arr" (array) in WeeChat protocol
This commit is contained in:
@@ -50,6 +50,7 @@ Version 0.3.9 (under dev!)
|
||||
* python: fix detection of python (first try "python2.x" and then "python")
|
||||
(bug #36835)
|
||||
* python: fix crash when unloading a script without pointer to interpreter
|
||||
* relay: add object type "arr" (array) in WeeChat protocol
|
||||
* relay: fix freeze when writing on relay socket (use non-blocking sockets in
|
||||
relay for irc and weechat protocols) (bug #36655)
|
||||
* ruby: detect ruby version 1.9.3 in cmake and autotools
|
||||
|
||||
@@ -519,6 +519,7 @@ 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
|
||||
|=====================================================
|
||||
|
||||
[[object_char]]
|
||||
@@ -831,6 +832,42 @@ infolist buffer
|
||||
name count item 1 item 2
|
||||
.......................................
|
||||
|
||||
[[object_array]]
|
||||
Array
|
||||
^^^^^
|
||||
|
||||
An array is a type (3 bytes) + number of items (integer on 4 bytes) + data.
|
||||
|
||||
Example of array with 2 strings:
|
||||
|
||||
.......................................
|
||||
┌─────╥────┬────┬────┬────╥────┬────┬────┬────╥────┬────┬────╥────┬────┬────┬────╥────┬────┐
|
||||
│ str ║ 00 │ 00 │ 00 │ 02 ║ 00 │ 00 │ 00 │ 03 ║ 61 │ 62 │ 63 ║ 00 │ 00 │ 00 │ 02 ║ 64 │ 65 │ ────► { "abc", "de" }
|
||||
└─────╨────┴────┴────┴────╨────┴────┴────┴────╨────┴────┴────╨────┴────┴────┴────╨────┴────┘
|
||||
└───┘ └─────────────────┘ └─────────────────┘ └────────────┘ └─────────────────┘ └───────┘
|
||||
type number of strings length 'a' 'b' 'c' length 'd' 'e'
|
||||
.......................................
|
||||
|
||||
Example of array with 3 integers:
|
||||
|
||||
.......................................
|
||||
┌─────╥────┬────┬────┬────╥────┬────┬────┬────╥────┬────┬────┬────╥────┬────┬────┬────┐
|
||||
│ int ║ 00 │ 00 │ 00 │ 03 ║ 00 │ 00 │ 00 │ 7B ║ 00 │ 00 │ 01 │ C8 ║ 00 │ 00 │ 03 │ 15 │ ────► { 123, 456, 789 }
|
||||
└─────╨────┴────┴────┴────╨────┴────┴────┴────╨────┴────┴────┴────╨────┴────┴────┴────┘
|
||||
└───┘ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||
type number of integers 123 (0x7B) 456 (0x1C8) 789 (0x315)
|
||||
.......................................
|
||||
|
||||
A 'NULL' array:
|
||||
|
||||
.......................................
|
||||
┌─────╥────┬────┬────┬────┐
|
||||
│ str ║ 00 │ 00 │ 00 │ 00 │ ────► NULL
|
||||
└─────╨────┴────┴────┴────┘
|
||||
└───┘ └─────────────────┘
|
||||
type number of strings
|
||||
.......................................
|
||||
|
||||
[[typical_session]]
|
||||
Typical session
|
||||
---------------
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -34,6 +34,7 @@
|
||||
#define RELAY_WEECHAT_MSG_OBJ_HDATA "hda"
|
||||
#define RELAY_WEECHAT_MSG_OBJ_INFO "inf"
|
||||
#define RELAY_WEECHAT_MSG_OBJ_INFOLIST "inl"
|
||||
#define RELAY_WEECHAT_MSG_OBJ_ARRAY "arr"
|
||||
|
||||
struct t_relay_weechat_msg
|
||||
{
|
||||
|
||||
@@ -808,26 +808,62 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(test)
|
||||
msg = relay_weechat_msg_new (id);
|
||||
if (msg)
|
||||
{
|
||||
/* char */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_CHAR);
|
||||
relay_weechat_msg_add_char (msg, 'A');
|
||||
|
||||
/* integer */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_INT);
|
||||
relay_weechat_msg_add_int (msg, 123456);
|
||||
|
||||
/* long */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_LONG);
|
||||
relay_weechat_msg_add_long (msg, 1234567890L);
|
||||
|
||||
/* string */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_STRING);
|
||||
relay_weechat_msg_add_string (msg, "a string");
|
||||
|
||||
/* empty string */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_STRING);
|
||||
relay_weechat_msg_add_string (msg, "");
|
||||
|
||||
/* NULL string */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_STRING);
|
||||
relay_weechat_msg_add_string (msg, NULL);
|
||||
|
||||
/* buffer */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_BUFFER);
|
||||
relay_weechat_msg_add_buffer (msg, "buffer", 6);
|
||||
|
||||
/* NULL buffer */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_BUFFER);
|
||||
relay_weechat_msg_add_buffer (msg, NULL, 0);
|
||||
|
||||
/* pointer */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_POINTER);
|
||||
relay_weechat_msg_add_pointer (msg, &msg);
|
||||
|
||||
/* time */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_TIME);
|
||||
relay_weechat_msg_add_time (msg, 1321993456);
|
||||
|
||||
/* array of strings: { "abc", "de" } */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_ARRAY);
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_STRING);
|
||||
relay_weechat_msg_add_int (msg, 2);
|
||||
relay_weechat_msg_add_string (msg, "abc");
|
||||
relay_weechat_msg_add_string (msg, "de");
|
||||
|
||||
/* array of integers: { 123, 456, 789 } */
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_ARRAY);
|
||||
relay_weechat_msg_add_type (msg, RELAY_WEECHAT_MSG_OBJ_INT);
|
||||
relay_weechat_msg_add_int (msg, 3);
|
||||
relay_weechat_msg_add_int (msg, 123);
|
||||
relay_weechat_msg_add_int (msg, 456);
|
||||
relay_weechat_msg_add_int (msg, 789);
|
||||
|
||||
/* send message */
|
||||
relay_weechat_msg_send (client, msg);
|
||||
relay_weechat_msg_free (msg);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user