コード例 #1
0
static void rx_loop()
{
    int ret;
	
	while (!the_working_paras.need_exit)
	{
	    ret=fd_readable(the_working_paras.sockfd, 0, 10000);
	    if (ret<=0)
    	{
    	    if (ret<0 && !the_working_paras.no_verbose)
    	        ERR_DBG_PRINT("test fd failed");

			continue;
    	}

        ret=read(the_working_paras.sockfd
			,the_working_paras.buf
			,sizeof(the_working_paras.buf));
		INC_STAT(the_stat_data.rx_times_total);

		if (ret>0)
		{
			INC_STAT(the_stat_data.rx_times_succ);
			INC_STAT_VALUE(the_stat_data.rx_bytes, ret);

			if (!the_working_paras.no_verbose)
			{
			    printf("[%"PRIu64"]got %d bytes\n"
					,the_stat_data.rx_times_succ
					,ret);

                if (!the_working_paras.no_prt_pkt)
            	{
					printf("the data contents is:\n");
					print_mem(the_working_paras.buf, ret);
            	}
			}

		}
		else
		{
			INC_STAT(the_stat_data.rx_times_fail);

			if (!the_working_paras.no_verbose)
			    ERR_DBG_PRINT("rx failed");

			break;
		}
		
		printf("\n\n");
		continue;

	}
}
コード例 #2
0
int read_input(int is_password)
{
    char c, two_byes[2];
    int ret;

READ_BYTE:
    if (!fd_readable(fd_pty_slave, 0, 50000))
            return 0;
    ret=read_reliable(fd_pty_slave, &c, 1);
    if (ret<0) return -1;
    if (ret!=1) goto READ_BYTE;
    if (c==0x00 || c==0x0a) goto READ_BYTE;
    if (c==0x08 && shell_buf_cur_len>0)
    {
        back_input(1);
        goto READ_BYTE;
    }

    if (c==0x1b)
    {
        ret=read_certain_bytes(fd_pty_slave, two_byes, 2);
        if (ret<0) return -1;
        if (two_byes[0]==0x5b && two_byes[1]==0x41)
            history_cmd_roll_prev();
        else if (two_byes[0]==0x5b && two_byes[1]==0x42)
            history_cmd_roll_next();

        goto READ_BYTE;

    }

    if (c==0x0d) goto EXIT;

    if (c!=' ' && !isgraph(c)) goto READ_BYTE;

        shell_buf[shell_buf_cur_len++]=c;
        if (is_password) c='*';
        printf_to_fd(fd_pty_slave, "%c", c);
        goto READ_BYTE;


EXIT:
    printf_to_fd(fd_pty_slave, "\n");
    shell_buf[shell_buf_cur_len] = 0;
    return 1;
}
コード例 #3
0
static void rxtx_loop()
{
    int ret, send_ret;
	struct sockaddr_in  peer_addr;
    char peer_ip[32];
	uint16_t peer_port;
	while (!the_working_paras.need_exit)
	{
	    ret=fd_readable(the_working_paras.sockfd, 0, 10000);
	    if (ret<=0)
    	{
    	    if (ret<0 && !the_working_paras.no_verbose)
    	        ERR_DBG_PRINT("test fd failed");

			continue;
    	}

        ret=udp_socket_recvfrom(the_working_paras.sockfd
			,the_working_paras.buf
			,sizeof(the_working_paras.buf)
			,&peer_addr);
		INC_STAT(the_stat_data.rx_times_total);

		if (ret>0)
		{
			INC_STAT(the_stat_data.rx_pkts);
			INC_STAT_VALUE(the_stat_data.rx_bytes, ret);

			if (!the_working_paras.no_verbose)
			{
			    resolve_sockaddr(&peer_addr, peer_ip, sizeof(peer_ip), &peer_port);
			    printf("[%"PRIu64"]got %d bytes from %s:%d\n"
					,the_stat_data.rx_pkts
					,ret
					,peer_ip
					,(int)peer_port);

                if (!the_working_paras.no_prt_pkt)
            	{
					printf("the data contents is:\n");
					print_mem(the_working_paras.buf, ret);
            	}
			}
			
			if (!the_working_paras.only_recv)
			{
				if (!the_working_paras.no_verbose)
				{
				    printf("try send back %d bytes to %s:%d\n"
						,ret
						,peer_ip
						,(int)peer_port);

				}
			    send_ret=udp_socket_sendto(the_working_paras.sockfd, the_working_paras.buf, ret, &peer_addr);
				INC_STAT(the_stat_data.tx_pkts_total);
				INC_STAT_VALUE(the_stat_data.tx_bytes_total, ret);

				if (send_ret==ret)
				{
				    INC_STAT(the_stat_data.tx_pkts_succ);
			        INC_STAT_VALUE(the_stat_data.tx_bytes_succ, ret);
				}
				else if (send_ret<=0)
				{
				    INC_STAT(the_stat_data.tx_pkts_fail);
			        INC_STAT_VALUE(the_stat_data.tx_bytes_fail, ret);

					if (!the_working_paras.no_verbose)
					    ERR_DBG_PRINT("tx failed");

				}
				else
					DBG_PRINT_QUIT("abnormal event: udp packet was partly sent!");
			}

		}
		else
		{
			INC_STAT(the_stat_data.rx_times_fail);

			if (!the_working_paras.no_verbose)
			    ERR_DBG_PRINT("rx failed");
		}

		printf("\n\n");
		continue;

	}
}