projects
/
silc.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
51f4341
)
Added the user limit to the CMODE_CHANGE notify and CMODE and
author
Pekka Riikonen
<priikone@silcnet.org>
Tue, 24 Feb 2004 14:33:16 +0000
(14:33 +0000)
committer
Pekka Riikonen
<priikone@silcnet.org>
Tue, 24 Feb 2004 14:33:16 +0000
(14:33 +0000)
JOIN command replys.
CHANGES
patch
|
blob
|
history
TODO
patch
|
blob
|
history
apps/silcd/command.c
patch
|
blob
|
history
apps/silcd/command_reply.c
patch
|
blob
|
history
apps/silcd/packet_receive.c
patch
|
blob
|
history
apps/silcd/packet_send.c
patch
|
blob
|
history
apps/silcd/server.c
patch
|
blob
|
history
apps/silcd/server_util.c
patch
|
blob
|
history
diff --git
a/CHANGES
b/CHANGES
index f8015a5a55b19e443ae898aa561f222b561a66b6..6f4632f58c0abec9a11d883aaa4ab556d991a6d5 100644
(file)
--- a/
CHANGES
+++ b/
CHANGES
@@
-1,3
+1,10
@@
+Tue Feb 24 16:49:10 EET 2004 Pekka Riikonen <priikone@silcnet.org>
+
+ * Implemented the user limit to the CMODE_CHANGE notify,
+ CMODE command reply and JOIN command reply in server.
+ Affected files are silcd/server.c, command.c, command_reply.c,
+ packet_send.c and packet_receive.c.
+
Mon Feb 23 23:31:15 EET 2004 Pekka Riikonen <priikone@silcnet.org>
* Defined SILC_STRFMT_END that must be used now with
Mon Feb 23 23:31:15 EET 2004 Pekka Riikonen <priikone@silcnet.org>
* Defined SILC_STRFMT_END that must be used now with
diff --git
a/TODO
b/TODO
index 30e93ec0565b6de7d1fd065d7979603a10d895a2..a3d03c37983074c788daaaa9ffb47a15960569f7 100644
(file)
--- a/
TODO
+++ b/
TODO
@@
-17,9
+17,6
@@
TODO for SILC Server 1.0
o stringprep (RFC3454) for UTF-8 strings + all other UTF-8 string things.
o stringprep (RFC3454) for UTF-8 strings + all other UTF-8 string things.
- o <user limit> to CMODE_CHANGE notify, and JOIN and CMODE command
- replies.
-
o Check that founder key is distributed ok during backup resuming.
o Testing
o Check that founder key is distributed ok during backup resuming.
o Testing
diff --git
a/apps/silcd/command.c
b/apps/silcd/command.c
index 767a0dd390450fce4c8bd1e57daccad32d01979c..8fefc1cb8105f3b21af13cb41de25716d84089ce 100644
(file)
--- a/
apps/silcd/command.c
+++ b/
apps/silcd/command.c
@@
-1839,7
+1839,7
@@
static void silc_server_command_join_channel(SilcServer server,
SilcSocketConnection sock = cmd->sock;
unsigned char *tmp;
SilcUInt32 tmp_len, user_count;
SilcSocketConnection sock = cmd->sock;
unsigned char *tmp;
SilcUInt32 tmp_len, user_count;
- unsigned char *passphrase = NULL, mode[4], tmp2[4], tmp3[4];
+ unsigned char *passphrase = NULL, mode[4], tmp2[4], tmp3[4]
, ulimit[4]
;
SilcClientEntry client;
SilcChannelClientEntry chl;
SilcBuffer reply, chidp, clidp, keyp = NULL;
SilcClientEntry client;
SilcChannelClientEntry chl;
SilcBuffer reply, chidp, clidp, keyp = NULL;
@@
-2124,6
+2124,8
@@
static void silc_server_command_join_channel(SilcServer server,
SILC_PUT32_MSB(channel->mode, mode);
SILC_PUT32_MSB(created, tmp2);
SILC_PUT32_MSB(user_count, tmp3);
SILC_PUT32_MSB(channel->mode, mode);
SILC_PUT32_MSB(created, tmp2);
SILC_PUT32_MSB(user_count, tmp3);
+ if (channel->mode & SILC_CHANNEL_MODE_ULIMIT)
+ SILC_PUT32_MSB(channel->user_limit, ulimit);
if (!(channel->mode & SILC_CHANNEL_MODE_PRIVKEY)) {
tmp = silc_id_id2str(channel->id, SILC_ID_CHANNEL);
if (!(channel->mode & SILC_CHANNEL_MODE_PRIVKEY)) {
tmp = silc_id_id2str(channel->id, SILC_ID_CHANNEL);
@@
-2182,7
+2184,7
@@
static void silc_server_command_join_channel(SilcServer server,
reply =
silc_command_reply_payload_encode_va(SILC_COMMAND_JOIN,
reply =
silc_command_reply_payload_encode_va(SILC_COMMAND_JOIN,
- SILC_STATUS_OK, 0, ident, 1
5
,
+ SILC_STATUS_OK, 0, ident, 1
6
,
2, channel->channel_name,
strlen(channel->channel_name),
3, chidp->data, chidp->len,
2, channel->channel_name,
strlen(channel->channel_name),
3, chidp->data, chidp->len,
@@
-2209,7
+2211,13
@@
static void silc_server_command_join_channel(SilcServer server,
15, fkey ? fkey->data : NULL,
fkey ? fkey->len : 0,
16, chpklist ? chpklist->data : NULL,
15, fkey ? fkey->data : NULL,
fkey ? fkey->len : 0,
16, chpklist ? chpklist->data : NULL,
- chpklist ? chpklist->len : 0);
+ chpklist ? chpklist->len : 0,
+ 17, (channel->mode &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ ulimit : NULL),
+ (channel->mode &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ sizeof(ulimit) : 0));
/* Send command reply */
silc_server_packet_send(server, sock, SILC_PACKET_COMMAND_REPLY, 0,
/* Send command reply */
silc_server_packet_send(server, sock, SILC_PACKET_COMMAND_REPLY, 0,
@@
-2762,7
+2770,7
@@
SILC_SERVER_CMD_FUNC(cmode)
SilcChannelClientEntry chl;
SilcBuffer packet, cidp;
unsigned char *tmp, *tmp_id, *tmp_mask, *chpkdata = NULL;
SilcChannelClientEntry chl;
SilcBuffer packet, cidp;
unsigned char *tmp, *tmp_id, *tmp_mask, *chpkdata = NULL;
- char *cipher = NULL, *hmac = NULL, *passphrase = NULL;
+ char *cipher = NULL, *hmac = NULL, *passphrase = NULL
, ulimit[4]
;
SilcUInt32 mode_mask = 0, old_mask = 0, tmp_len, tmp_len2, chpklen;
SilcUInt16 ident = silc_command_get_ident(cmd->payload);
bool set_mask = FALSE, set_chpk = FALSE;
SilcUInt32 mode_mask = 0, old_mask = 0, tmp_len, tmp_len2, chpklen;
SilcUInt16 ident = silc_command_get_ident(cmd->payload);
bool set_mask = FALSE, set_chpk = FALSE;
@@
-3190,8
+3198,10
@@
SILC_SERVER_CMD_FUNC(cmode)
/* Send CMODE_CHANGE notify. */
cidp = silc_id_payload_encode(client->id, SILC_ID_CLIENT);
/* Send CMODE_CHANGE notify. */
cidp = silc_id_payload_encode(client->id, SILC_ID_CLIENT);
+ if (mode_mask & SILC_CHANNEL_MODE_ULIMIT)
+ SILC_PUT32_MSB(channel->user_limit, ulimit);
silc_server_send_notify_to_channel(server, NULL, channel, FALSE, TRUE,
silc_server_send_notify_to_channel(server, NULL, channel, FALSE, TRUE,
- SILC_NOTIFY_TYPE_CMODE_CHANGE,
7
,
+ SILC_NOTIFY_TYPE_CMODE_CHANGE,
8
,
cidp->data, cidp->len,
tmp_mask, 4,
cipher, cipher ? strlen(cipher) : 0,
cidp->data, cidp->len,
tmp_mask, 4,
cipher, cipher ? strlen(cipher) : 0,
@@
-3201,7
+3211,11
@@
SILC_SERVER_CMD_FUNC(cmode)
fkey ? fkey->data : NULL,
fkey ? fkey->len : 0,
chpkdata ? chpkdata : NULL,
fkey ? fkey->data : NULL,
fkey ? fkey->len : 0,
chpkdata ? chpkdata : NULL,
- chpkdata ? chpklen : 0);
+ chpkdata ? chpklen : 0,
+ mode_mask & SILC_CHANNEL_MODE_ULIMIT ?
+ ulimit : NULL,
+ mode_mask & SILC_CHANNEL_MODE_ULIMIT ?
+ sizeof(ulimit) : 0);
/* Set CMODE notify type to network */
if (chpkdata && chpklen)
/* Set CMODE notify type to network */
if (chpkdata && chpklen)
@@
-3217,14
+3231,21
@@
SILC_SERVER_CMD_FUNC(cmode)
/* Send command reply to sender */
packet = silc_command_reply_payload_encode_va(SILC_COMMAND_CMODE,
/* Send command reply to sender */
packet = silc_command_reply_payload_encode_va(SILC_COMMAND_CMODE,
- SILC_STATUS_OK, 0, ident,
4
,
+ SILC_STATUS_OK, 0, ident,
5
,
2, tmp_id, tmp_len2,
3, tmp_mask, 4,
4, fkey ? fkey->data : NULL,
fkey ? fkey->len : 0,
5, chpklist ? chpklist->data :
NULL, chpklist ? chpklist->len
2, tmp_id, tmp_len2,
3, tmp_mask, 4,
4, fkey ? fkey->data : NULL,
fkey ? fkey->len : 0,
5, chpklist ? chpklist->data :
NULL, chpklist ? chpklist->len
- : 0);
+ : 0,
+ 7, (mode_mask &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ ulimit : NULL),
+ (mode_mask &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ sizeof(ulimit) : 0));
+
silc_server_packet_send(server, cmd->sock, SILC_PACKET_COMMAND_REPLY, 0,
packet->data, packet->len, FALSE);
silc_server_packet_send(server, cmd->sock, SILC_PACKET_COMMAND_REPLY, 0,
packet->data, packet->len, FALSE);
diff --git
a/apps/silcd/command_reply.c
b/apps/silcd/command_reply.c
index 15e9c9307a8353995679bb1b746759f969a03db3..9acb1ed8f49cc788ea9d7f15346b3016df3f27de 100644
(file)
--- a/
apps/silcd/command_reply.c
+++ b/
apps/silcd/command_reply.c
@@
-1146,6
+1146,11
@@
SILC_SERVER_CMD_REPLY_FUNC(join)
if (tmp && server->server_type == SILC_SERVER)
silc_server_set_channel_pk_list(server, NULL, entry, tmp, len);
if (tmp && server->server_type == SILC_SERVER)
silc_server_set_channel_pk_list(server, NULL, entry, tmp, len);
+ /* The the user limit */
+ tmp = silc_argument_get_arg_type(cmd->args, 17, &len);
+ if (tmp && len == 4)
+ SILC_GET32_MSB(entry->user_limit, tmp);
+
/* If channel was not created we know there is global users on the
channel. */
entry->global_users = (created == 0 ? TRUE : FALSE);
/* If channel was not created we know there is global users on the
channel. */
entry->global_users = (created == 0 ? TRUE : FALSE);
diff --git
a/apps/silcd/packet_receive.c
b/apps/silcd/packet_receive.c
index 8a2e2ca2877d9f602d7211302022c82813b3dcad..5b6fefc8c84a43275838ded44816b4c2fd56847e 100644
(file)
--- a/
apps/silcd/packet_receive.c
+++ b/
apps/silcd/packet_receive.c
@@
-628,7
+628,7
@@
void silc_server_notify(SilcServer server,
mode & SILC_CHANNEL_MODE_CHANNEL_AUTH) {
SilcBuffer chpklist;
SilcBuffer sidp;
mode & SILC_CHANNEL_MODE_CHANNEL_AUTH) {
SilcBuffer chpklist;
SilcBuffer sidp;
- unsigned char mask[4];
+ unsigned char mask[4]
, ulimit[4]
;
SILC_LOG_DEBUG(("Channel public key list received from router"));
tmp = silc_argument_get_arg_type(args, 7, &tmp_len);
SILC_LOG_DEBUG(("Channel public key list received from router"));
tmp = silc_argument_get_arg_type(args, 7, &tmp_len);
@@
-644,8
+644,10
@@
void silc_server_notify(SilcServer server,
break;
sidp = silc_id_payload_encode(server->router->id, SILC_ID_SERVER);
SILC_PUT32_MSB(channel->mode, mask);
break;
sidp = silc_id_payload_encode(server->router->id, SILC_ID_SERVER);
SILC_PUT32_MSB(channel->mode, mask);
+ if (channel->mode & SILC_CHANNEL_MODE_ULIMIT)
+ SILC_PUT32_MSB(channel->user_limit, ulimit);
silc_server_send_notify_to_channel(server, NULL, channel, FALSE, TRUE,
silc_server_send_notify_to_channel(server, NULL, channel, FALSE, TRUE,
- SILC_NOTIFY_TYPE_CMODE_CHANGE,
7
,
+ SILC_NOTIFY_TYPE_CMODE_CHANGE,
8
,
sidp->data, sidp->len,
mask, 4,
channel->cipher,
sidp->data, sidp->len,
mask, 4,
channel->cipher,
@@
-658,7
+660,13
@@
void silc_server_notify(SilcServer server,
channel->passphrase ?
strlen(channel->passphrase) : 0,
NULL, 0,
channel->passphrase ?
strlen(channel->passphrase) : 0,
NULL, 0,
- chpklist->data, chpklist->len);
+ chpklist->data, chpklist->len,
+ (channel->mode &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ ulimit : NULL),
+ (channel->mode &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ sizeof(ulimit) : 0));
silc_buffer_free(sidp);
silc_buffer_free(chpklist);
goto out;
silc_buffer_free(sidp);
silc_buffer_free(chpklist);
goto out;
@@
-813,6
+821,11
@@
void silc_server_notify(SilcServer server,
}
}
}
}
+ /* Get the user limit */
+ tmp = silc_argument_get_arg_type(args, 8, &tmp_len);
+ if (tmp && tmp_len == 4 && mode & SILC_CHANNEL_MODE_ULIMIT)
+ SILC_GET32_MSB(channel->user_limit, tmp);
+
/* Send the same notify to the channel */
silc_server_packet_send_to_channel(server, NULL, channel, packet->type,
FALSE, TRUE, packet->buffer->data,
/* Send the same notify to the channel */
silc_server_packet_send_to_channel(server, NULL, channel, packet->type,
FALSE, TRUE, packet->buffer->data,
diff --git
a/apps/silcd/packet_send.c
b/apps/silcd/packet_send.c
index 17460378593c6a874c2d1ec646621873797245da..68cff9dee0e953c4cede321751a660c2201fc60d 100644
(file)
--- a/
apps/silcd/packet_send.c
+++ b/
apps/silcd/packet_send.c
@@
-1314,16
+1314,18
@@
void silc_server_send_notify_cmode(SilcServer server,
SilcBuffer channel_pubkeys)
{
SilcBuffer idp, fkey = NULL;
SilcBuffer channel_pubkeys)
{
SilcBuffer idp, fkey = NULL;
- unsigned char mode[4];
+ unsigned char mode[4]
, ulimit[4]
;
idp = silc_id_payload_encode((void *)id, id_type);
SILC_PUT32_MSB(mode_mask, mode);
if (founder_key)
fkey = silc_pkcs_public_key_payload_encode(founder_key);
idp = silc_id_payload_encode((void *)id, id_type);
SILC_PUT32_MSB(mode_mask, mode);
if (founder_key)
fkey = silc_pkcs_public_key_payload_encode(founder_key);
+ if (channel->mode & SILC_CHANNEL_MODE_ULIMIT)
+ SILC_PUT32_MSB(channel->user_limit, ulimit);
silc_server_send_notify_dest(server, sock, broadcast, (void *)channel->id,
SILC_ID_CHANNEL, SILC_NOTIFY_TYPE_CMODE_CHANGE,
silc_server_send_notify_dest(server, sock, broadcast, (void *)channel->id,
SILC_ID_CHANNEL, SILC_NOTIFY_TYPE_CMODE_CHANGE,
-
7
, idp->data, idp->len,
+
8
, idp->data, idp->len,
mode, 4,
cipher, cipher ? strlen(cipher) : 0,
hmac, hmac ? strlen(hmac) : 0,
mode, 4,
cipher, cipher ? strlen(cipher) : 0,
hmac, hmac ? strlen(hmac) : 0,
@@
-1331,7
+1333,11
@@
void silc_server_send_notify_cmode(SilcServer server,
strlen(passphrase) : 0,
fkey ? fkey->data : NULL, fkey ? fkey->len : 0,
channel_pubkeys ? channel_pubkeys->data : NULL,
strlen(passphrase) : 0,
fkey ? fkey->data : NULL, fkey ? fkey->len : 0,
channel_pubkeys ? channel_pubkeys->data : NULL,
- channel_pubkeys ? channel_pubkeys->len : 0);
+ channel_pubkeys ? channel_pubkeys->len : 0,
+ mode_mask & SILC_CHANNEL_MODE_ULIMIT ?
+ ulimit : NULL,
+ mode_mask & SILC_CHANNEL_MODE_ULIMIT ?
+ sizeof(ulimit) : 0);
silc_buffer_free(fkey);
silc_buffer_free(idp);
}
silc_buffer_free(fkey);
silc_buffer_free(idp);
}
diff --git
a/apps/silcd/server.c
b/apps/silcd/server.c
index 083206bc5df1d8f1eee6222fbe63457f109841b3..3c26fcf57baa52942be64f833db1a7572c6824d8 100644
(file)
--- a/
apps/silcd/server.c
+++ b/
apps/silcd/server.c
@@
-982,7
+982,7
@@
SILC_TASK_CALLBACK(silc_server_connection_established)
silc_schedule_task_del_by_fd(server->schedule, sock);
silc_schedule_unset_listen_fd(server->schedule, sock);
silc_schedule_task_del_by_fd(server->schedule, sock);
silc_schedule_unset_listen_fd(server->schedule, sock);
- if (silc_net_get_socket_opt(sock, SOL_SOCKET, SO_ERROR, &opt, &optlen) ||
+ if (silc_net_get_socket_opt(sock, SOL_SOCKET, SO_ERROR, &opt, &optlen) ||
(opt != 0)) {
SILC_LOG_ERROR(("Could not connect to router %s:%d: %s",
sconn->remote_host, sconn->remote_port,
(opt != 0)) {
SILC_LOG_ERROR(("Could not connect to router %s:%d: %s",
sconn->remote_host, sconn->remote_port,
@@
-4615,7
+4615,7
@@
void silc_server_announce_get_channel_users(SilcServer server,
SilcBuffer chidp, clidp, csidp;
SilcBuffer tmp, fkey = NULL, chpklist;
int len;
SilcBuffer chidp, clidp, csidp;
SilcBuffer tmp, fkey = NULL, chpklist;
int len;
- unsigned char mode[4];
+ unsigned char mode[4]
, ulimit[4]
;
char *hmac;
SILC_LOG_DEBUG(("Start"));
char *hmac;
SILC_LOG_DEBUG(("Start"));
@@
-4626,12
+4626,14
@@
void silc_server_announce_get_channel_users(SilcServer server,
/* CMODE notify */
SILC_PUT32_MSB(channel->mode, mode);
/* CMODE notify */
SILC_PUT32_MSB(channel->mode, mode);
+ if (channel->mode & SILC_CHANNEL_MODE_ULIMIT)
+ SILC_PUT32_MSB(channel->user_limit, ulimit);
hmac = channel->hmac ? (char *)silc_hmac_get_name(channel->hmac) : NULL;
if (channel->founder_key)
fkey = silc_pkcs_public_key_payload_encode(channel->founder_key);
tmp =
silc_server_announce_encode_notify(SILC_NOTIFY_TYPE_CMODE_CHANGE,
hmac = channel->hmac ? (char *)silc_hmac_get_name(channel->hmac) : NULL;
if (channel->founder_key)
fkey = silc_pkcs_public_key_payload_encode(channel->founder_key);
tmp =
silc_server_announce_encode_notify(SILC_NOTIFY_TYPE_CMODE_CHANGE,
-
7
, csidp->data, csidp->len,
+
8
, csidp->data, csidp->len,
mode, sizeof(mode),
NULL, 0,
hmac, hmac ? strlen(hmac) : 0,
mode, sizeof(mode),
NULL, 0,
hmac, hmac ? strlen(hmac) : 0,
@@
-4641,7
+4643,13
@@
void silc_server_announce_get_channel_users(SilcServer server,
fkey ? fkey->data : NULL,
fkey ? fkey->len : 0,
chpklist ? chpklist->data : NULL,
fkey ? fkey->data : NULL,
fkey ? fkey->len : 0,
chpklist ? chpklist->data : NULL,
- chpklist ? chpklist->len : 0);
+ chpklist ? chpklist->len : 0,
+ (channel->mode &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ ulimit : NULL),
+ (channel->mode &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ sizeof(ulimit) : 0));
len = tmp->len;
*channel_modes =
silc_buffer_realloc(*channel_modes,
len = tmp->len;
*channel_modes =
silc_buffer_realloc(*channel_modes,
diff --git
a/apps/silcd/server_util.c
b/apps/silcd/server_util.c
index ab8248974b4f6a0efff9de35a6bce5b3105b3d2a..048757d3aa5f47cffd99cfc57e31db10fc021c3a 100644
(file)
--- a/
apps/silcd/server_util.c
+++ b/
apps/silcd/server_util.c
@@
-2274,7
+2274,7
@@
SilcStatus silc_server_set_channel_pk_list(SilcServer server,
if (chpk && type == 0x03 && channel->channel_pubkeys &&
server->server_type != SILC_ROUTER) {
SilcBuffer sidp;
if (chpk && type == 0x03 && channel->channel_pubkeys &&
server->server_type != SILC_ROUTER) {
SilcBuffer sidp;
- unsigned char mask[4];
+ unsigned char mask[4]
, ulimit[4]
;
SILC_LOG_DEBUG(("Router enforces its list, remove old list"));
silc_hash_table_free(channel->channel_pubkeys);
SILC_LOG_DEBUG(("Router enforces its list, remove old list"));
silc_hash_table_free(channel->channel_pubkeys);
@@
-2283,8
+2283,10
@@
SilcStatus silc_server_set_channel_pk_list(SilcServer server,
/* Send notify that removes the old list */
sidp = silc_id_payload_encode(server->id, SILC_ID_SERVER);
SILC_PUT32_MSB((channel->mode & (~SILC_CHANNEL_MODE_CHANNEL_AUTH)), mask);
/* Send notify that removes the old list */
sidp = silc_id_payload_encode(server->id, SILC_ID_SERVER);
SILC_PUT32_MSB((channel->mode & (~SILC_CHANNEL_MODE_CHANNEL_AUTH)), mask);
+ if (channel->mode & SILC_CHANNEL_MODE_ULIMIT)
+ SILC_PUT32_MSB(channel->user_limit, ulimit);
silc_server_send_notify_to_channel(server, NULL, channel, FALSE, TRUE,
silc_server_send_notify_to_channel(server, NULL, channel, FALSE, TRUE,
- SILC_NOTIFY_TYPE_CMODE_CHANGE,
7
,
+ SILC_NOTIFY_TYPE_CMODE_CHANGE,
8
,
sidp->data, sidp->len,
mask, 4,
channel->cipher,
sidp->data, sidp->len,
mask, 4,
channel->cipher,
@@
-2296,7
+2298,13
@@
SilcStatus silc_server_set_channel_pk_list(SilcServer server,
channel->passphrase,
channel->passphrase ?
strlen(channel->passphrase) : 0,
channel->passphrase,
channel->passphrase ?
strlen(channel->passphrase) : 0,
- NULL, 0, NULL, 0);
+ NULL, 0, NULL, 0,
+ (channel->mode &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ ulimit : NULL),
+ (channel->mode &
+ SILC_CHANNEL_MODE_ULIMIT ?
+ sizeof(ulimit) : 0));
silc_buffer_free(sidp);
}
silc_buffer_free(sidp);
}