projects
/
silc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
updates.
[silc.git]
/
apps
/
silcd
/
packet_send.c
diff --git
a/apps/silcd/packet_send.c
b/apps/silcd/packet_send.c
index 535ebc0ed5c3cee2c3695426dda5aa807d186a7d..c6fcdf1ab07baf5a52f7411dbedb003265a8af0f 100644
(file)
--- a/
apps/silcd/packet_send.c
+++ b/
apps/silcd/packet_send.c
@@
-448,6
+448,7
@@
void silc_server_packet_send_to_channel(SilcServer server,
SilcHashTableList htl;
SilcIDListData idata;
uint32 routed_count = 0;
SilcHashTableList htl;
SilcIDListData idata;
uint32 routed_count = 0;
+ bool gone = FALSE;
/* This doesn't send channel message packets */
assert(type != SILC_PACKET_CHANNEL_MESSAGE);
/* This doesn't send channel message packets */
assert(type != SILC_PACKET_CHANNEL_MESSAGE);
@@
-515,6
+516,13
@@
void silc_server_packet_send_to_channel(SilcServer server,
if (sender && sock == sender)
continue;
if (sender && sock == sender)
continue;
+ /* Route only once to router */
+ if (sock->type == SILC_SOCKET_TYPE_ROUTER) {
+ if (gone)
+ continue;
+ gone = TRUE;
+ }
+
/* Send the packet */
silc_server_packet_send_to_channel_real(server, sock, &packetdata,
idata->send_key,
/* Send the packet */
silc_server_packet_send_to_channel_real(server, sock, &packetdata,
idata->send_key,
@@
-962,7
+970,7
@@
void silc_server_send_error(SilcServer server,
void silc_server_send_notify(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcNotifyType type,
uint32 argc, ...)
{
SilcNotifyType type,
uint32 argc, ...)
{
@@
-992,7
+1000,7
@@
void silc_server_send_notify(SilcServer server,
void silc_server_send_notify_args(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_args(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcNotifyType type,
uint32 argc,
SilcBuffer args)
SilcNotifyType type,
uint32 argc,
SilcBuffer args)
@@
-1011,7
+1019,7
@@
void silc_server_send_notify_args(SilcServer server,
void silc_server_send_notify_channel_change(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_channel_change(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelID *old_id,
SilcChannelID *new_id)
{
SilcChannelID *old_id,
SilcChannelID *new_id)
{
@@
-1032,7
+1040,7
@@
void silc_server_send_notify_channel_change(SilcServer server,
void silc_server_send_notify_nick_change(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_nick_change(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcClientID *old_id,
SilcClientID *new_id)
{
SilcClientID *old_id,
SilcClientID *new_id)
{
@@
-1053,7
+1061,7
@@
void silc_server_send_notify_nick_change(SilcServer server,
void silc_server_send_notify_join(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_join(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelEntry channel,
SilcClientID *client_id)
{
SilcChannelEntry channel,
SilcClientID *client_id)
{
@@
-1073,7
+1081,7
@@
void silc_server_send_notify_join(SilcServer server,
void silc_server_send_notify_leave(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_leave(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelEntry channel,
SilcClientID *client_id)
{
SilcChannelEntry channel,
SilcClientID *client_id)
{
@@
-1092,7
+1100,7
@@
void silc_server_send_notify_leave(SilcServer server,
void silc_server_send_notify_cmode(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_cmode(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelEntry channel,
uint32 mode_mask,
void *id, SilcIdType id_type,
SilcChannelEntry channel,
uint32 mode_mask,
void *id, SilcIdType id_type,
@@
-1119,7
+1127,7
@@
void silc_server_send_notify_cmode(SilcServer server,
void silc_server_send_notify_cumode(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_cumode(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelEntry channel,
uint32 mode_mask,
void *id, SilcIdType id_type,
SilcChannelEntry channel,
uint32 mode_mask,
void *id, SilcIdType id_type,
@@
-1149,7
+1157,7
@@
void silc_server_send_notify_cumode(SilcServer server,
void silc_server_send_notify_signoff(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_signoff(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcClientID *client_id,
char *message)
{
SilcClientID *client_id,
char *message)
{
@@
-1170,7
+1178,7
@@
void silc_server_send_notify_signoff(SilcServer server,
void silc_server_send_notify_topic_set(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_topic_set(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelEntry channel,
SilcClientID *client_id,
char *topic)
SilcChannelEntry channel,
SilcClientID *client_id,
char *topic)
@@
-1179,7
+1187,7
@@
void silc_server_send_notify_topic_set(SilcServer server,
idp = silc_id_payload_encode((void *)client_id, SILC_ID_CLIENT);
silc_server_send_notify(server, sock, broadcast,
idp = silc_id_payload_encode((void *)client_id, SILC_ID_CLIENT);
silc_server_send_notify(server, sock, broadcast,
- SILC_NOTIFY_TYPE_
SERVER_SIGNOFF
,
+ SILC_NOTIFY_TYPE_
TOPIC_SET
,
topic ? 2 : 1,
idp->data, idp->len,
topic, topic ? strlen(topic) : 0);
topic ? 2 : 1,
idp->data, idp->len,
topic, topic ? strlen(topic) : 0);
@@
-1193,7
+1201,7
@@
void silc_server_send_notify_topic_set(SilcServer server,
void silc_server_send_notify_kicked(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_kicked(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelEntry channel,
SilcClientID *client_id,
char *comment)
SilcChannelEntry channel,
SilcClientID *client_id,
char *comment)
@@
-1214,7
+1222,7
@@
void silc_server_send_notify_kicked(SilcServer server,
void silc_server_send_notify_killed(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_killed(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcClientID *client_id,
char *comment)
{
SilcClientID *client_id,
char *comment)
{
@@
-1234,7
+1242,7
@@
void silc_server_send_notify_killed(SilcServer server,
void silc_server_send_notify_umode(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_umode(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcClientID *client_id,
uint32 mode_mask)
{
SilcClientID *client_id,
uint32 mode_mask)
{
@@
-1257,7
+1265,7
@@
void silc_server_send_notify_umode(SilcServer server,
void silc_server_send_notify_ban(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_ban(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelEntry channel,
char *add, char *del)
{
SilcChannelEntry channel,
char *add, char *del)
{
@@
-1279,7
+1287,7
@@
void silc_server_send_notify_ban(SilcServer server,
void silc_server_send_notify_invite(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_invite(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
SilcChannelEntry channel,
SilcClientID *client_id,
char *add, char *del)
SilcChannelEntry channel,
SilcClientID *client_id,
char *add, char *del)
@@
-1303,7
+1311,7
@@
void silc_server_send_notify_invite(SilcServer server,
void silc_server_send_notify_dest(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_notify_dest(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
void *dest_id,
SilcIdType dest_id_type,
SilcNotifyType type,
void *dest_id,
SilcIdType dest_id_type,
SilcNotifyType type,
@@
-1315,7
+1323,8
@@
void silc_server_send_notify_dest(SilcServer server,
va_start(ap, argc);
packet = silc_notify_payload_encode(type, argc, ap);
va_start(ap, argc);
packet = silc_notify_payload_encode(type, argc, ap);
- silc_server_packet_send_dest(server, sock, SILC_PACKET_NOTIFY, 0,
+ silc_server_packet_send_dest(server, sock, SILC_PACKET_NOTIFY,
+ broadcast ? SILC_PACKET_FLAG_BROADCAST : 0,
dest_id, dest_id_type,
packet->data, packet->len, FALSE);
silc_buffer_free(packet);
dest_id, dest_id_type,
packet->data, packet->len, FALSE);
silc_buffer_free(packet);
@@
-1508,7
+1517,7
@@
void silc_server_send_notify_on_channels(SilcServer server,
void silc_server_send_new_id(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_new_id(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
void *id, SilcIdType id_type,
uint32 id_len)
{
void *id, SilcIdType id_type,
uint32 id_len)
{
@@
-1538,7
+1547,7
@@
void silc_server_send_new_id(SilcServer server,
void silc_server_send_new_channel(SilcServer server,
SilcSocketConnection sock,
void silc_server_send_new_channel(SilcServer server,
SilcSocketConnection sock,
-
int
broadcast,
+
bool
broadcast,
char *channel_name,
void *channel_id,
uint32 channel_id_len,
char *channel_name,
void *channel_id,
uint32 channel_id_len,