X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fpacket_receive.c;fp=apps%2Fsilcd%2Fpacket_receive.c;h=1a1be10d11fd3ceadf491f74c762d5ea2ac04cc3;hb=c08107c80b816558a1c48ada27eaf23840793157;hp=e2e98bc66ba2610164323da924698f42eae4e524;hpb=e1d9ce9886ca71287f2634784fb766fad31b7744;p=silc.git diff --git a/apps/silcd/packet_receive.c b/apps/silcd/packet_receive.c index e2e98bc6..1a1be10d 100644 --- a/apps/silcd/packet_receive.c +++ b/apps/silcd/packet_receive.c @@ -69,7 +69,8 @@ void silc_server_notify(SilcServer server, /* Get the route to the client */ dst_sock = silc_server_get_client_route(server, packet->dst_id, - packet->dst_id_len, NULL, &idata); + packet->dst_id_len, NULL, + &idata, NULL); if (dst_sock) /* Relay the packet */ silc_server_relay_packet(server, dst_sock, idata->send_key, @@ -1439,6 +1440,7 @@ void silc_server_private_message(SilcServer server, { SilcSocketConnection dst_sock; SilcIDListData idata; + SilcClientEntry client; SILC_LOG_DEBUG(("Start")); @@ -1448,7 +1450,8 @@ void silc_server_private_message(SilcServer server, /* Get the route to the client */ dst_sock = silc_server_get_client_route(server, packet->dst_id, - packet->dst_id_len, NULL, &idata); + packet->dst_id_len, NULL, + &idata, &client); if (!dst_sock) { /* Send IDENTIFY command reply with error status to indicate that such destination ID does not exist or is invalid */ @@ -1478,6 +1481,13 @@ void silc_server_private_message(SilcServer server, return; } + /* Check whether destination client wishes to receive private messages */ + if (client && !(packet->flags & SILC_PACKET_FLAG_PRIVMSG_KEY) && + client->mode & SILC_UMODE_BLOCK_PRIVMSG) { + SILC_LOG_DEBUG(("Client blocks private messages, discarding packet")); + return; + } + /* Send the private message */ silc_server_send_private_message(server, dst_sock, idata->send_key, idata->hmac_send, idata->psn_send++, @@ -1507,7 +1517,8 @@ void silc_server_private_message_key(SilcServer server, /* Get the route to the client */ dst_sock = silc_server_get_client_route(server, packet->dst_id, - packet->dst_id_len, NULL, &idata); + packet->dst_id_len, NULL, + &idata, NULL); if (!dst_sock) return; @@ -2710,7 +2721,8 @@ void silc_server_key_agreement(SilcServer server, /* Get the route to the client */ dst_sock = silc_server_get_client_route(server, packet->dst_id, - packet->dst_id_len, NULL, &idata); + packet->dst_id_len, NULL, + &idata, NULL); if (!dst_sock) return; @@ -2827,7 +2839,8 @@ void silc_server_ftp(SilcServer server, /* Get the route to the client */ dst_sock = silc_server_get_client_route(server, packet->dst_id, - packet->dst_id_len, NULL, &idata); + packet->dst_id_len, NULL, + &idata, NULL); if (!dst_sock) return;