static int Client_read(client_t *client);
static int Client_write(client_t *client);
static int Client_send_udp(client_t *client, uint8_t *data, int len);
+static client_t *Client_find_by_fd(int fd);
void Client_free(client_t *client);
declare_list(clients);
}
}
-int Client_read_fd(int fd)
+client_t *Client_find_by_session(int session_id)
{
struct dlist *itr;
- client_t *client = NULL;
list_iterate(itr, &clients) {
- if (fd == list_get_entry(itr, client_t, node)->tcpfd) {
- client = list_get_entry(itr, client_t, node);
- break;
+ client_t *client = list_get_entry(itr, client_t, node);
+
+ if (client->sessionId == session_id) {
+ return client;
+ }
+ }
+
+ return NULL;
+}
+
+client_t *Client_find_by_fd(int fd)
+{
+ struct dlist *itr;
+
+ list_iterate(itr, &clients) {
+ client_t *client = list_get_entry(itr, client_t, node);
+
+ if (client->tcpfd == fd) {
+ return client;
}
}
+
+ return NULL;
+}
+
+int Client_read_fd(int fd)
+{
+ client_t *client;
+
+ client = Client_find_by_fd(fd);
+
if (client != NULL)
return Client_read(client);
else
int Client_write_fd(int fd)
{
- struct dlist *itr;
- client_t *client = NULL;
+ client_t *client;
+
+ client = Client_find_by_fd(fd);
- list_iterate(itr, &clients) {
- if(fd == list_get_entry(itr, client_t, node)->tcpfd) {
- client = list_get_entry(itr, client_t, node);
- break;
- }
- }
if (client != NULL)
return Client_write(client);
else
return c;
}
-void Client_textmessage(client_t *client, char *text)
+void Client_textmessage(client_t *client, const char *text)
{
char *message;
uint32_t *tree_id;
message_t *sendmsg = NULL;
- message = Memory_safeMalloc(1, strlen(text) + 1);
+ message = strdup(text);
+
+ if (message == NULL)
+ Log_fatal("Out of memory");
+
tree_id = Memory_safeMalloc(1, sizeof(uint32_t));
*tree_id = 0;
sendmsg = Msg_create(TextMessage);
sendmsg->payload.textMessage->message = message;
sendmsg->payload.textMessage->n_tree_id = 1;
sendmsg->payload.textMessage->tree_id = tree_id;
- strcpy(message, text);
+
Client_send_message(client, sendmsg);
}
int offset, packetsize;
voicetarget_t *vt;
- channel_t *ch = (channel_t *)client->channel;
+ channel_t *ch = client->channel;
struct dlist *itr;
if (!client->authenticated || client->mute || client->self_mute || ch->silent)
}
/* Sessions */
for (i = 0; i < TARGET_MAX_SESSIONS && vt->sessions[i] != -1; i++) {
- client_t *c;
+ client_t *c = NULL;
buffer[0] = (uint8_t) (type | 2);
Log_debug("Whisper session %d", vt->sessions[i]);
- while (Client_iterate(&c) != NULL) {
- if (c->sessionId == vt->sessions[i]) {
- Client_send_voice(client, c, buffer, pds->offset + 1, poslen);
- break;
- }
+
+ c = Client_find_by_session(vt->sessions[i]);
+
+ if (c != NULL) {
+ Client_send_voice(client, c, buffer, pds->offset + 1, poslen);
}
}
}