Example #1
0
/*==============================================================================
 * - T_shell()
 *
 * - the shell task entry
 */
void T_shell ()
{
    char usr_cmd_line[_CMD_LEN_MAX];
    char *start_cmd = NULL;

    banner();

    _shell_cmd_init();      /* i, exit ... */

    yaffs_init();           /* cd, ls, pwd ... */
    vi_cmd_init();          /* vi */
    net_init();
    tetris_cmd_init();      /* tetris */
    lian_cmd_init();        /* lianliankan */
    date_cmd_init();        /* show and set date */
    cal_cmd_init();			/* calculator expression */
    gui_init();
    ios_init();
    media_init();
    wtd_cmd_init();
#if 0
    fat_cmd_init();         /* fatls */
    usb_cmd_init();         /* usb.start ... */
#endif

    serial_puts("\n-> ");


    FOREVER {
        _get_cmd_line(usr_cmd_line);

        start_cmd = _del_front_space(usr_cmd_line);

        /*
         * cmd_line have no char except blank
         */
        if (strlen(start_cmd) == 0) {
            serial_puts("-> ");
            continue;
        }

        /*
         * deal with cmd_line
         */
        if (cmd_do(start_cmd) == CMD_EXIT) {
            serial_puts("\nAu Revoir!\n");
            break;
        } else {
            serial_puts("\n-> ");
        }
    }
}
Example #2
0
File: main.c Project: yhcting/ylisp
void*
_packet_handler(void* arg) {
	struct _packet*	  p = (struct _packet*) arg;
	yldynb_t	  cmd;
	yldynb_t	  data;
	assert(p);
	yldynb_init(&cmd,  256);
	yldynb_init(&data, 4096);

	if (0 > pdu_parser(&cmd, &data, p->data, p->sz))
		goto done;

	if (0 > cmd_do(yldynb_buf(&cmd), yldynb_buf(&data), yldynb_sz(&data)))
		goto done;

 done:
	yldynb_clean(&cmd);
	yldynb_clean(&data);
	free(p->data);
	free(p);
	return NULL;
}
Example #3
0
/*==============================================================================
 * - T_telnet_server_start()
 *
 * - fake telnet server task
 */
void T_telnet_server_start ()
{
    int                 socket_id;
    struct sockaddr_in  serv_addr;
    struct sockaddr_in  clnt_addr;
    char                recv_buff[256];
    int                 recv_len;
    socklen_t           addr_len = sizeof(struct sockaddr_in);
    int                 lwip_ret;
    char               *start_cmd;

    socket_id = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (socket_id < 0) {
        serial_printf("telnet: socket() failed!\n");
        return;
    }

    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_len    = sizeof(struct sockaddr_in);
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port   = htons(TELNET_PORT);
    serv_addr.sin_addr.s_addr = INADDR_ANY;

    lwip_ret = bind(socket_id, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
    if (lwip_ret < 0) {
        serial_printf("telnet: bind() failed!\n");
        goto over;
    }

    FOREVER {
        recv_len = recvfrom (socket_id, recv_buff, sizeof(recv_buff), 0, (struct sockaddr *)&clnt_addr, &addr_len);
        if (recv_len <= 0) {
            if (errno != ETIMEDOUT && errno != EWOULDBLOCK) {
                serial_printf("telnet: recvfrom () failed!\n");
                goto over;
            }
            continue;
        }

        _G_telnet_open = 1;       /* when serial_putc() stor in _G_telnet_buffer */
        _G_telnet_buf_context = 0;                  /* clear output buffer */

        /*
         * delete user input head space char
         */
        recv_buff[recv_len] = '\0';                 /* terminal user data */
        start_cmd = recv_buff;
        while (isspace(*start_cmd)) {
        	start_cmd++;
        }

        if (strlen(start_cmd) == 0) { /* cmd_line have no char except blank */
            serial_puts("-> ");
        } else {                      /* deal with cmd_line */

            if ((strncmp(start_cmd, "vi", 2)) == 0 && 
                    ((strlen(start_cmd) == 2) || (isspace(start_cmd[2])))) {           /* is "vi" command */
                serial_puts("\nDon't use VI!");
            } else {
                cmd_do(start_cmd);
            }
            serial_puts("\n-> ");
        }

        sendto (socket_id, _G_telnet_buffer, _G_telnet_buf_context, 0, (const struct sockaddr *)&clnt_addr, addr_len);
        _G_telnet_open = 0;       /* when serial_putc() not stor int _G_telnet_buffer */
    }

over:
    _G_telnet_open = 0;
    close(socket_id);
}