SilcClientEntry client_entry;
SilcClientEntry client_entry2;
SilcChannelEntry channel;
+ SilcChannelUser chu;
SilcIDCacheEntry id_cache = NULL;
unsigned char *tmp;
unsigned int tmp_len, mode;
channel = (SilcChannelEntry)id_cache->context;
/* Add client to channel */
- for (i = 0; i < channel->clients_count; i++) {
- if (channel->clients[i].client == NULL) {
- channel->clients[channel->clients_count].client = client_entry;
- channel->clients_count++;
- break;
- }
- }
-
- if (i == channel->clients_count) {
- channel->clients = silc_realloc(channel->clients,
- sizeof(*channel->clients) *
- (channel->clients_count + 1));
- channel->clients[channel->clients_count].client = client_entry;
- channel->clients[channel->clients_count].mode = 0;
- channel->clients_count++;
- }
+ chu = silc_calloc(1, sizeof(*chu));
+ chu->client = client_entry;
+ silc_list_add(channel->clients, chu);
/* XXX add support for multiple same nicks on same channel. Check
for them here */
channel = (SilcChannelEntry)id_cache->context;
/* Remove client from channel */
- for (i = 0; i < channel->clients_count; i++) {
- if (channel->clients[i].client == client_entry) {
- channel->clients[i].client = NULL;
- channel->clients_count--;
+ silc_list_start(channel->clients);
+ while ((chu = silc_list_get(channel->clients)) != SILC_LIST_END) {
+ if (chu->client == client_entry) {
+ silc_list_del(channel->clients, chu);
+ silc_free(chu);
break;
}
}
channel = (SilcChannelEntry)id_cache->context;
/* Save the mode */
- for (i = 0; i < channel->clients_count; i++) {
- if (channel->clients[i].client == client_entry2) {
- channel->clients[i].mode = mode;
+ silc_list_start(channel->clients);
+ while ((chu = silc_list_get(channel->clients)) != SILC_LIST_END) {
+ if (chu->client == client_entry) {
+ chu->mode = mode;
break;
}
}
channel->channel_name = channel_name;
channel->id = silc_id_payload_get_id(idp);
channel->mode = mode;
+ silc_list_init(channel->clients, struct SilcChannelUserStruct, next);
+
conn->current_channel = channel;
/* Put it to the ID cache */
SilcChannelPayload payload = NULL;
SilcChannelID *id = NULL;
SilcChannelEntry channel;
+ SilcChannelUser chu;
SilcIDCacheEntry id_cache = NULL;
SilcClientID *client_id = NULL;
int i;
/* Find nickname */
nickname = "[unknown]";
- for (i = 0; i < channel->clients_count; i++) {
- if (channel->clients[i].client &&
- !SILC_ID_CLIENT_COMPARE(channel->clients[i].client->id, client_id))
- nickname = channel->clients[i].client->nickname;
+ silc_list_start(channel->clients);
+ while ((chu = silc_list_get(channel->clients)) != SILC_LIST_END) {
+ if (!SILC_ID_CLIENT_COMPARE(chu->client->id, client_id)) {
+ nickname = chu->client->nickname;
+ break;
+ }
}
/* Pass the message to application */
SilcIDCacheEntry id_cache;
SilcIDCacheList list;
SilcChannelEntry channel;
+ SilcChannelUser chu;
int i;
if (!silc_idcache_find_by_id(conn->channel_cache, SILC_ID_CACHE_ANY,
while (channel) {
/* Remove client from channel */
- for (i = 0; i < channel->clients_count; i++) {
- if (channel->clients[i].client == client_entry) {
- channel->clients[i].client = NULL;
- channel->clients_count--;
+ silc_list_start(channel->clients);
+ while ((chu = silc_list_get(channel->clients)) != SILC_LIST_END) {
+ if (chu->client == client_entry) {
+ silc_list_del(channel->clients, chu);
+ silc_free(chu);
break;
}
}
SilcIDCacheEntry id_cache;
SilcIDCacheList list;
SilcChannelEntry channel;
+ SilcChannelUser chu;
int i;
if (!silc_idcache_find_by_id(conn->channel_cache, SILC_ID_CACHE_ANY,
while (channel) {
- /* Remove client from channel */
- for (i = 0; i < channel->clients_count; i++) {
- if (channel->clients[i].client == old) {
- channel->clients[i].client = new;
+ /* Replace client entry */
+ silc_list_start(channel->clients);
+ while ((chu = silc_list_get(channel->clients)) != SILC_LIST_END) {
+ if (chu->client == old) {
+ chu->client = new;
break;
}
}