Exemplo n.º 1
0
int main(int argc, char *argv[])
{

    if (getuid()) {
        fprintf(stderr, "the ftpserver must started by root\n");
        exit(EXIT_FAILURE); 
    }

    if (signal(SIGCHLD, handle_sigchld) == SIG_ERR)
        ERR_EXIT("signal");
    parse_load_file("ftpserver.conf");
    printf("parse_load_file success\n");
//    printconfig();
    
    ip_to_clients = hash_alloc(256, hash_func);
    pid_to_ip = hash_alloc(256, hash_func);
    int listenfd; 
    listenfd = tcp_server(listen_address, listen_port);
    
    printf("tcp_server success, listenfd = %d\n", listenfd);
    int connfd;
    pid_t   pid;
    session_t sess;
    while (1) {
        struct sockaddr_in addr;
        connfd = accept_time_out(listenfd, &addr, accept_timeout);
        if (connfd == -1) {
        //    printf("don't has connection in %d seconds\n", accept_timeout);
            continue;
        }
        
        uint32_t ip = addr.sin_addr.s_addr;
        printf("connect success\n");
        session_init(&sess);
        num_of_clients++;
        sess.curr_clients = num_of_clients;
        sess.curr_ip_clients = add_ip_to_hash(ip_to_clients, ip);
        sess.ip = ip;
        p_sess = &sess;
        pid = fork();
        if (pid == -1) {
            ERR_EXIT("fork error");
        } else if (pid == 0) {   //子进程
            close(listenfd); 
            sess.peerfd = connfd;
            session_begin(&sess);   //建立一个会话
            exit(EXIT_SUCCESS);
        } else {                //父进程
            close(connfd);
            hash_add_entry(pid_to_ip, &pid, sizeof(pid), &ip, sizeof(ip));
        }
    }
    return 0;
}
void  ConfigFmThs :: SetRxSearchAfThs
(
    const char *file, UINT fd
)
{
    int index;
    struct NAME_MAP *found;
    char **grps = NULL;
    char **grps_cpy = NULL;

    keyfile = get_key_file();

    ALOGD("%s: file name is: %s\n", __func__, file);
    if(!parse_load_file(keyfile, file)) {
       ALOGE("Error in loading threshold file\n");
    }else {
       grps_cpy = grps = get_grps(keyfile);
       if(grps != NULL) {
          while(*grps != NULL) {
              ALOGE("Search grp: %s\n", *grps);
              found = (NAME_MAP *)bsearch(*grps, GRPS_MAP, MAX_GRPS,
                             sizeof(NAME_MAP), compare_name);
              if(found != NULL) {
                 ALOGE("Found group: %s\n", found->name);
                 switch(found->num) {
                 case AF_THS:
                      set_af_ths(fd);
                      break;
                 case SRCH_THS:
                      set_srch_ths(fd);
                      break;
                 case HYBRD_SRCH_LIST:
                      set_hybrd_list(fd);
                      break;
                 case BAND_CFG:
                      set_band_cfgs(fd);
                      break;
                 }
              }
              grps++;
          }
       }else {
          ALOGE("No of groups found is zero\n");
       }
       free_strs(grps_cpy);
    }
    free_key_file(keyfile);
    keyfile = NULL;
}