void updateClientInfo(struct info info_ary[], int info_num, struct client* clnt, struct info info){
    int idx;

    idx = getClientInfo(info_ary, info_num, clnt->info.name);
    updateInfo(info_ary, idx, info);
    clnt->info = info;
    saveClientInfo(clnt);
}
int main(int argc, char *argv[])
{
    int client, listener;
    int accepted_bytes;
    struct sockaddr_in addr;
    struct sockaddr_in clientaddr;
    struct hostent* clientInfo;
    char accepted_data[1024];
    char *clientInfoName;

    if (argc < 2)
    {
        error("ERROR, no parametres provided");
    }

    listener = createSocket();

    bindSocket( listener, &addr, argv[1]);
    printf("Starts at port %s", argv[1]);
    fflush(stdout);
    listen(listener, 1);

    while(1)
    {
        clientaddr.sin_family = AF_INET;

        socklen_t client_addr_len = sizeof( clientaddr );

        client = accept(listener, (struct sockaddr*)& clientaddr, &client_addr_len );
        if( client < 0 )
        {
            continue;
        }
        clientInfo = gethostbyaddr( &clientaddr.sin_addr, sizeof ( struct in_addr ) , AF_INET);
        clientInfoName = getClientInfo(*clientInfo);
        send(client, clientInfoName, strlen( clientInfoName ), 0);
        while(1)
        {
            accepted_bytes = recv(client, accepted_data, 1024, 0);
            if( accepted_bytes <= 0) break;
            send(client, accepted_data, accepted_bytes, 0);
        }
        free(clientInfoName);
        close(client);
    }

    close(listener);
    return 1;
}
struct client* addClient(struct info info[], int* info_num, struct client clnt[], int* clnt_num,  int socket, char* name){
    struct client* new_clnt;
    int idx;

    pthread_mutex_lock(&clnt_lock);
    new_clnt = &(clnt[*clnt_num]);
    *clnt_num += 1;

    new_clnt->socket = socket;

    if((idx = getClientInfo(info, *info_num, name)) == -1){
        new_clnt->info = newInfo(name);
        addInfo(info, info_num, new_clnt->info);
    }else{
        new_clnt->info = info[idx];
    }
    pthread_mutex_unlock(&clnt_lock);

    return new_clnt;
}
示例#4
0
 QString Client::getCaption() const
 {
     return getClientInfo()->caption;
 }
示例#5
0
 QString Client::getDevice() const
 {
     return getClientInfo()->deviceType;
 }
示例#6
0
 QString Client::getOs() const
 {
     return getClientInfo()->os;
 }
示例#7
0
 QByteArray Client::getIdHash() const
 {
     return getClientInfo()->hash;
 }