Exemple #1
0
void tcp_reverse_proxy(int server_port, const char* printer, int printer_port)
{
    int servfd, clifd;
    struct sockaddr_in servaddr, cliaddr;

    servfd = tcp_create_socket();
    tcp_bind_and_listen(servfd, server_port);

    while (1) {
        long timestamp;
        socklen_t length = sizeof(cliaddr);
        clifd = accept(servfd, (struct sockaddr*)&cliaddr, &length);
        if (clifd < 0) {
            printf("error comes when call accept!\n");
            break;
        }
        pthread_t id = 0;
        tcp_server_thread_info* pinfo = new tcp_server_thread_info();
        bzero(pinfo, sizeof(tcp_server_thread_info));

        strcpy(pinfo->printer, printer);
        pinfo->printer_port = printer_port;
        pinfo->accepted_socket = clifd;

        int ret = pthread_create(&id, NULL, tcp_server_handler, pinfo);
        if (ret != 0) {
            printf ("Create pthread error!\n");
            exit (1);
        }
    }
}
Exemple #2
0
void tcp_reverse_proxy(int server_port, const char* stamp, int stamp_port, int waf_mode, char *logname)
{
	int servfd, clifd;
	struct sockaddr_in cliaddr;

 	servfd = tcp_create_socket(server_port);
 	tcp_bind_and_listen(servfd, server_port);

 	while (1) 
	{
        	socklen_t length = sizeof(cliaddr);

        	clifd = accept(servfd, (struct sockaddr*)&cliaddr, &length);

        	if (clifd < 0) 
		{
            		DEBUG("Error when call accept()\n");
            		break;
        	}

        	pthread_t id = 0;
        	struct tcp_server_thread_info *pinfo =(struct tcp_server_thread_info *) xmalloc(sizeof(struct tcp_server_thread_info));
        	bzero(pinfo, sizeof(struct tcp_server_thread_info));

        	strcpy(pinfo->stamp, stamp);
        	pinfo->stamp_port = stamp_port;
        	pinfo->accepted_socket = clifd;
		strcpy(pinfo->log_reg,logname);
        	pinfo->wafmode = waf_mode;

        	int ret = pthread_create(&id, NULL, tcp_server_handler, pinfo);
 
       		if (ret != 0) 
		{
            		DEBUG("Create pthread error!\n");
            		exit (1);
        	}
// tcp_server_handler() use free() at pinfo pointer, if call free() here causes double free

    	}
}