if (!client) {
/* If router did not find such Client ID in its lists then this must
be bogus client or some router in the net is buggy. */
- if (server->server_type == SILC_ROUTER)
+ if (server->server_type != SILC_SERVER)
return FALSE;
/* Take hostname out of nick string if it includes it. */
if (!client) {
/* If router did not find such Client ID in its lists then this must
be bogus client or some router in the net is buggy. */
- if (server->server_type == SILC_ROUTER)
+ if (server->server_type != SILC_SERVER)
return FALSE;
/* Take hostname out of nick string if it includes it. */
if (!client) {
/* If router did not find such Client ID in its lists then this must
be bogus client or some router in the net is buggy. */
- if (server->server_type == SILC_ROUTER)
+ if (server->server_type != SILC_SERVER)
goto error;
/* Take nickname */
server_id, FALSE, NULL);
if (!server_entry) {
/* If router did not find such Server ID in its lists then this must
- be bogus client or some router in the net is buggy. */
- if (server->server_type == SILC_ROUTER)
+ be bogus server or some router in the net is buggy. */
+ if (server->server_type != SILC_SERVER)
goto error;
/* We don't have that server anywhere, add it. */
channel = silc_idlist_find_channel_by_id(server->global_list, channel_id,
NULL);
if (!channel) {
- /* If router did not find such Server ID in its lists then this must
- be bogus client or some router in the net is buggy. */
- if (server->server_type == SILC_ROUTER)
+ /* If router did not find such Channel ID in its lists then this must
+ be bogus channel or some router in the net is buggy. */
+ if (server->server_type != SILC_SERVER)
goto error;
/* We don't have that server anywhere, add it. */
(created == 0 ? "existing" : "created"), channel_name,
silc_id_render(id, SILC_ID_CHANNEL)));
+ /* If the channel is found from global list we must move it to the
+ local list. */
+ entry = silc_idlist_find_channel_by_name(server->global_list,
+ channel_name, &cache);
+ if (entry)
+ silc_idlist_del_channel(server->global_list, entry);
+
/* Add the channel to our local list. */
entry = silc_idlist_add_channel(server->local_list, strdup(channel_name),
SILC_CHANNEL_MODE_NONE, id,
out:
SILC_SERVER_PENDING_EXEC(cmd, SILC_COMMAND_JOIN);
SILC_SERVER_PENDING_DESTRUCTOR(cmd, SILC_COMMAND_JOIN);
- if (client_id)
- silc_free(client_id);
+ silc_free(client_id);
silc_server_command_reply_free(cmd);
if (client_id_list)
if (!channel) {
SilcBuffer idp;
- if (server->server_type == SILC_ROUTER)
+ if (server->server_type != SILC_SERVER)
goto out;
idp = silc_id_payload_encode(channel_id, SILC_ID_CHANNEL);