char *realname = NULL;
uint32 idle = 0, mode = 0;
SilcBuffer channels = NULL;
+ unsigned char *fingerprint;
+ uint32 fingerprint_len;
argc = silc_argument_get_arg_num(cmd->args);
if (tmp)
SILC_GET32_MSB(idle, tmp);
+ fingerprint = silc_argument_get_arg_type(cmd->args, 9, &fingerprint_len);
+
/* Check if we have this client cached already. */
if (!silc_idcache_find_by_id_one_ext(conn->client_cache, (void *)client_id,
NULL, NULL,
silc_free(client_id);
}
+ if (fingerprint && !client_entry->fingerprint) {
+ client_entry->fingerprint =
+ silc_calloc(fingerprint_len,
+ sizeof(*client_entry->fingerprint));
+ memcpy(client_entry->fingerprint, fingerprint, fingerprint_len);
+ client_entry->fingerprint_len = fingerprint_len;
+ }
+
if (client_entry->status & SILC_CLIENT_STATUS_RESOLVING)
client_entry->status &= ~SILC_CLIENT_STATUS_RESOLVING;
curtime = time(NULL);
id = silc_id_str2id(cmd->packet->src_id, cmd->packet->src_id_len,
cmd->packet->src_id_type);
- if (!id) {
+ if (!id || !conn->ping) {
COMMAND_REPLY_ERROR;
goto out;
}
for (i = 0; i < conn->ping_count; i++) {
+ if (!conn->ping[i].dest_id)
+ continue;
if (SILC_ID_SERVER_COMPARE(conn->ping[i].dest_id, id)) {
diff = curtime - conn->ping[i].start_time;
cmd->client->ops->say(cmd->client, conn, SILC_CLIENT_MESSAGE_INFO,