static void silc_client_notify_by_server_pending(void *context, void *context2)
{
SilcClientNotifyResolve res = (SilcClientNotifyResolve)context;
+ SilcClientCommandReplyContext reply =
+ (SilcClientCommandReplyContext)context2;
+
+ if (reply) {
+ SilcCommandStatus status;
+ unsigned char *tmp = silc_argument_get_arg_type(reply->args, 1, NULL);
+ SILC_GET16_MSB(status, tmp);
+ if (status != SILC_STATUS_OK) {
+ silc_socket_free(res->sock);
+ return;
+ }
+ }
+
silc_client_notify_by_server(res->context, res->sock, res->packet);
silc_socket_free(res->sock);
}
/* If nickname or username hasn't been resolved, do so */
if (!client_entry->nickname || !client_entry->username) {
- if (client_entry->status & SILC_CLIENT_STATUS_RESOLVING)
+ if (client_entry->status & SILC_CLIENT_STATUS_RESOLVING) {
+ client_entry->status &= ~SILC_CLIENT_STATUS_RESOLVING;
goto out;
+ }
client_entry->status |= SILC_CLIENT_STATUS_RESOLVING;
silc_client_notify_by_server_resolve(client, conn, packet, client_id);
goto out;
client->ops->notify(client, conn, type, client_entry, tmp);
/* Free data */
- silc_client_del_client_entry(client, client_entry);
+ silc_client_del_client_entry(client, conn, client_entry);
break;
case SILC_NOTIFY_TYPE_TOPIC_SET:
client->ops->notify(client, conn, type, client_entry, client_entry2);
/* Free data */
- silc_client_del_client_entry(client, client_entry);
+ silc_client_del_client_entry(client, conn, client_entry);
break;
case SILC_NOTIFY_TYPE_CMODE_CHANGE: