Example #1
0
static void server_process(int max, fd_set* set)
{
    msg_group_t* group;
    struct iphdr* ipHdr;
    vector_t v;
    vector_functor_t f = {
        vector_dummy_dup,
        NULL
    };

    if (!this.use_udp && FD_ISSET(this.remotefd, set)) accept_and_check();
    vector_init(&v, f);
    if (this.use_udp)
    {
        if (FD_ISSET(this.remotefd, set)) udp_process(&v);
    }
    else tcp_process(set, &v);
    ++this.msg_ttl;
    remove_clients(&v, "closed");
    vector_free(&v);
    if (LOCAL_HAVE_DATA(set))
    {
        unsigned char buffer[2048];
        ssize_t readen = 0;

#ifdef WIN32
        ReadFile(this.localfd, buffer, sizeof(buffer), &readen, NULL);
#else
        readen = read(this.localfd, buffer, sizeof(buffer));
#endif
        if (readen > 0)
        {
            ssize_t idx;
            ipHdr = (struct iphdr*)buffer;
            idx = active_vector_lookup(&this.clients, compare_clients_by_local_ip, (void*)(long)ipHdr->daddr, sizeof(ipHdr->daddr));
            if (idx >= 0)
            {
                client_t* client;
                size_t len;
                active_vector_get(&this.clients, idx, (void**)&client, &len);
                group = new_msg_group(buffer, (unsigned short)readen);
                if (group)
                {
                    ssize_t written = send_msg_group(client, group);
                    msg_group_free(group);
                    SYSLOG(LOG_INFO, "send msg length: %ld", written);
                }
            }
        }
    }
}
Example #2
0
void msg_group_free_hash_val(void* val, size_t len)
{
    msg_group_free(val);
}
Example #3
0
void msg_group_free_hash(void* key, size_t key_len, void* val, size_t val_len)
{
    msg_group_free(val);
}