/* Initialize the scheduler */
client->schedule =
silc_schedule_init(client->internal->params->task_max ?
- client->internal->params->task_max : 200);
+ client->internal->params->task_max : 200, client);
if (!client->schedule)
return FALSE;
{
int i;
- SILC_LOG_DEBUG(("Deleting connection %s%d", conn->remote_host,
- conn->remote_port));
-
for (i = 0; i < client->internal->conns_count; i++)
if (client->internal->conns[i] == conn) {
if (conn->pending_commands)
silc_dlist_uninit(conn->pending_commands);
silc_free(conn->remote_host);
- silc_dlist_uninit(conn->ftp_sessions);
+ if (conn->ftp_sessions)
+ silc_dlist_uninit(conn->ftp_sessions);
silc_free(conn);
client->internal->conns[i] = NULL;
conn->local_entry->nickname = conn->nickname;
if (!conn->local_entry->username)
conn->local_entry->username = strdup(client->username);
- if (!conn->local_entry->hostname)
- conn->local_entry->hostname = strdup(client->hostname);
if (!conn->local_entry->server)
conn->local_entry->server = strdup(conn->remote_host);
conn->local_entry->id = conn->local_id;
(void *)conn->local_entry, 0, NULL);
if (connecting) {
- if (!conn->params.detach_data) {
- SilcBuffer sidp;
+ SilcBuffer sidp;
+
+ /* Issue IDENTIFY command for itself to get resolved hostname
+ correctly from server. */
+ silc_client_command_register(client, SILC_COMMAND_IDENTIFY, NULL, NULL,
+ silc_client_command_reply_identify_i, 0,
+ ++conn->cmd_ident);
+ sidp = silc_id_payload_encode(conn->local_entry->id, SILC_ID_CLIENT);
+ silc_client_command_send(client, conn, SILC_COMMAND_IDENTIFY,
+ conn->cmd_ident, 1, 5, sidp->data, sidp->len);
+ silc_buffer_free(sidp);
+ if (!conn->params.detach_data) {
/* Send NICK command if the nickname was set by the application (and is
not same as the username). Send this with little timeout. */
if (client->nickname && strcmp(client->nickname, client->username))