Exemple #1
0
void		multi_client(int sock)
{
	int					quit;
	int					cs;
	t_sockaddr_in		csin;
	unsigned int		cslen;
	pid_t				pid;

	cs = accept(sock, (t_sockaddr *)&csin, &cslen);
	write(1, "A CLIENT HAS JOINED.\n", sizeof("A CLIENT HAS JOINED.\n"));
	pid = fork();
	if (pid == -1)
	{
		write(2, "FORK FAILED.\n", sizeof("FORK FAILED.\n"));
		exit(-1);
	}
	if (pid > 0)
		multi_client(sock);
	else
	{
		quit = 0;
		while (!quit)
			quit = loop_command(cs);
		close(cs);
		write(1, "A CLIENT HAS LEFT.\n", sizeof("A CLIENT HAS LEFT.\n"));
		exit(1);
	}
}
Exemple #2
0
cmd_err_t console_parse_cmd( char* line )
{
    const command_t* cmd_ptr = NULL;
    char* params[MAX_PARAMS];
    uint32_t param_cnt = 0;
    char    copy[strlen(line) + 1];

    /* Copy original buffer into local buffer, as tokenize will change the original string */
    strcpy( copy, line );

    cmd_err_t err = ERR_CMD_OK;

    /* First call to strtok. */
    params[param_cnt++] = strtok( copy, console_delimit_string );

    if ( params[0] == NULL ) /* no command entered */
    {
        err = ERR_NO_CMD;
    }
    else
    {
        /* find the command */
        for ( cmd_ptr = console_command_table; cmd_ptr->name != NULL; cmd_ptr++ )
        {
            if ( strcmp( params[0], cmd_ptr->name ) == 0 )
            {
                break;
            }
        }

        if ( cmd_ptr->name == NULL )
        {
            err = ERR_UNKNOWN_CMD;
        }
        else if ( strcmp(cmd_ptr->name, "loop") == 0 )
        {
            loop_command( line );
        }
        else
        {
            /* determine argument delimit string */
            char* delimit;
            if ( cmd_ptr->delimit != NULL )
            {
                delimit = cmd_ptr->delimit;
            }
            else
            {
                delimit = console_delimit_string;
            }

            /* parse arguments */
            while ( ( ( params[param_cnt] = strtok( NULL, delimit ) ) != NULL ) )
            {
                param_cnt++;
                if ( param_cnt > ( MAX_PARAMS - 1 ) )
                {
                    err = ERR_TOO_MANY_ARGS;
                    break;
                }
            }

            /* check arguments */
            if ( ( param_cnt - 1 ) < cmd_ptr->arg_count )
            {
                err = ERR_INSUFFICENT_ARGS;
            }

            /* run command */
            if ( ( err == ERR_CMD_OK ) && ( cmd_ptr->command != NULL ) )
            {
                platform_enable_mcu_powersave();

                err = (cmd_err_t) cmd_ptr->command( param_cnt, params );

                platform_disable_mcu_powersave();
            }
        }

        /* process errors */
        if ( err != ERR_CMD_OK )
        {
            if ((err <=0) && (err > ERR_LAST_ERROR))
            {
                printf( "ERROR: %s\r\n", console_error_strings[-err] );
            }
            if ( err != ERR_UNKNOWN_CMD )
            {
                printf("Usage: %s %s\r\n",cmd_ptr->name, cmd_ptr->format);
            }
        }
    }

    return err;
}
cmd_err_t console_parse_cmd( const char* line )
{
    const command_t* cmd_ptr = NULL;
    char* params[MAX_PARAMS];
    uint32_t param_cnt = 0;
    char* saveptr = NULL;
    char copy[strlen(line) + 1];

    /* Copy original buffer into local buffer, as tokenize will change the original string */
    strcpy( copy, line );

    cmd_err_t err = ERR_CMD_OK;

    /* First call to strtok. */
    params[param_cnt++] = strtok_r( copy, cons.console_delimit_string, &saveptr );

    if ( params[0] == NULL ) /* no command entered */
    {
        err = ERR_NO_CMD;
    }
    else
    {
        /* find the command */
        if ( (cmd_ptr = console_lookup_command(params[0])) == NULL )
        {
            err = ERR_UNKNOWN_CMD;
        }
        else if ( strcmp(cmd_ptr->name, "loop") == 0 )
        {
            loop_command( line );
        }
        else
        {
            uint32_t i = 0;
            /* determine argument delimit string */
            const char* delimit;
            if ( cmd_ptr->delimit != NULL )
            {
                delimit = cmd_ptr->delimit;
            }
            else
            {
                delimit = cons.console_delimit_string;
            }

            /* parse arguments */
            while ( saveptr != NULL && saveptr[ 0 ] != '\0' )
            {
                wiced_bool_t encap_flag = WICED_FALSE;

                /* Check for delimiters first */
                while ( saveptr[ 0 ] != '\0' )
                {
                    wiced_bool_t delimiter_flag = WICED_FALSE;

                    for ( i = 0; i < strlen( delimit ); i++ )
                    {
                        if ( saveptr[ 0 ] == delimit[ i ] )
                        {
                            saveptr++;
                            delimiter_flag = WICED_TRUE;
                            break;
                        }
                    }
                    if ( delimiter_flag == WICED_FALSE )
                    {
                        break;
                    }
                }
                /* Then check for encapsulation */
                for ( i = 0; i < ( sizeof( console_encapsulate_string ) / sizeof( console_encapsulate_string[ 0 ] ) ); i++ )
                {
                    /* If encapsulated, get encapsulated token */
                    if ( saveptr[ 0 ] == console_encapsulate_string[ i ][ 0 ] )
                    {
                        encap_flag = WICED_TRUE;
                        params[ param_cnt ] = strtok_r( NULL, (char *) console_encapsulate_string[ i ], &saveptr );
                        break;
                    }
                }
                /* Else not encapsulated, check for token */
                if ( encap_flag == WICED_FALSE )
                {
                    params[ param_cnt ] = strtok_r( NULL, (char *) delimit, &saveptr );
                }

                if ( params[ param_cnt ] != NULL )
                {
                    param_cnt++;
                    if ( param_cnt > ( MAX_PARAMS - 1 ) )
                    {
                        err = ERR_TOO_MANY_ARGS;
                        break;
                    }
                }
            }
            if ( err == ERR_CMD_OK )
            {
                params[ param_cnt ] = NULL;
            }

            /* check arguments */
            if ( ( param_cnt - 1 ) < cmd_ptr->arg_count )
            {
                err = ERR_INSUFFICENT_ARGS;
            }

            /* run command */
            if ( ( err == ERR_CMD_OK ) && ( cmd_ptr->command != NULL ) )
            {
                err = (cmd_err_t) cmd_ptr->command( param_cnt, params );
            }
        }

        /* process errors */
        if ( err != ERR_CMD_OK )
        {
            if ((err <=0) && (err > ERR_LAST_ERROR))
            {
                printf( "ERROR: %s\r\n", console_error_strings[-err] );
            }
            if ( err != ERR_UNKNOWN_CMD )
            {
                printf("Usage: %s %s\r\n",cmd_ptr->name, cmd_ptr->format);
            }
        }
    }

    return err;
}