VirtualBox

Changeset 71021 in vbox for trunk


Ignore:
Timestamp:
Feb 15, 2018 1:50:20 PM (7 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:6699 Better error handling for guest control console

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlInterface.cpp

    r71019 r71021  
    3232
    3333
    34 #define SUCCESS_RETURN(strMessage){   \
    35     emit sigOutputString(strMessage); \
    36     return true;                      \
    37 }
    38 
    39 #define ERROR_RETURN(strMessage){      \
    40     emit sigOutputString(strMessage);  \
    41     return false;                      \
    42 }
    43 
    4434#define GCTLCMD_COMMON_OPT_USER             999 /**< The --username option number. */
    4535#define GCTLCMD_COMMON_OPT_PASSWORD         998 /**< The --password option number. */
     
    5747        { "--verbose",              'v',                                RTGETOPT_REQ_NOTHING },
    5848
    59 
    60 /** Common option definitions. */
     49#define HANDLE_COMMON_OPTION_DEFS()                   \
     50    case GCTLCMD_COMMON_OPT_USER:                     \
     51        commandData.m_strUserName = ValueUnion.psz;   \
     52        break;                                        \
     53    case GCTLCMD_COMMON_OPT_PASSWORD:                 \
     54        commandData.m_strPassword = ValueUnion.psz;   \
     55        break;
     56
     57QString generateErrorString(int getOptErrorCode, const RTGETOPTUNION &valueUnion)
     58{
     59    QString errorString;
     60    if(valueUnion.pDef)
     61    {
     62        if(valueUnion.pDef->pszLong)
     63        {
     64            errorString = QString(valueUnion.pDef->pszLong);
     65        }
     66    }
     67
     68    switch (getOptErrorCode)
     69    {
     70        case (VERR_GETOPT_UNKNOWN_OPTION):
     71            errorString = errorString.append("RTGetOpt: Command line option not recognized.");
     72            break;
     73        case (VERR_GETOPT_REQUIRED_ARGUMENT_MISSING):
     74            errorString = errorString.append("RTGetOpt: Command line option needs argument.");
     75            break;
     76        case (VERR_GETOPT_INVALID_ARGUMENT_FORMAT):
     77            errorString = errorString.append("RTGetOpt: Command line option has argument with bad format.");
     78            break;
     79        case (VINF_GETOPT_NOT_OPTION):
     80            errorString = errorString.append("RTGetOpt: Not an option.");
     81            break;
     82        case (VERR_GETOPT_INDEX_MISSING):
     83            errorString = errorString.append("RTGetOpt: Command line option needs an index.");
     84            break;
     85        default:
     86            break;
     87    }
     88    return errorString;
     89}
     90
     91/** Common option definitions: */
    6192class CommandData
    6293{
     
    106137
    107138    CommandData commandData;
    108     parseCommonOptions(argc, argv, commandData);
     139    //parseCommonOptions(argc, argv, commandData);
    109140
    110141    static const RTGETOPTDEF s_aOptions[] =
    111142    {
     143        GCTLCMD_COMMON_OPTION_DEFS()
    112144        { "--sessionname",                   GCTLCMD_COMMON_OPT_SESSION_NAME,         RTGETOPT_REQ_STRING  },
    113145        { "--sessionid",                     GCTLCMD_COMMON_OPT_SESSION_ID,           RTGETOPT_REQ_UINT32  },
     
    127159    RTGETOPTUNION ValueUnion;
    128160    RTGETOPTSTATE GetState;
    129     RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 0, 0);
     161    RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 1 /* ignore 0th element (command) */, 0);
    130162    while ((ch = RTGetOpt(&GetState, &ValueUnion)))
    131163    {
    132164        switch (ch)
    133165        {
     166            HANDLE_COMMON_OPTION_DEFS()
    134167            case GCTLCMD_COMMON_OPT_SESSION_NAME:
    135168                sessionNameGiven = true;
     
    144177                break;
    145178            default:
    146                 break;
     179            {
     180                emit sigOutputString(generateErrorString(ch, ValueUnion));
     181                return false;
     182                printf("hoppala %d\n", ch);
     183                break;
     184            }
    147185        }
    148186    }
     
    150188    if (sessionNameGiven && commandData.m_strSessionName.isEmpty())
    151189    {
    152         emit sigOutputString(QString("'Session Name' is not name valid\n").append(m_strHelp));
     190        emit sigOutputString(QString(m_strHelp).append("'Session Name' is not name valid\n"));
    153191        return false;
    154192    }
     
    158196    if (sessionIdGiven && sessionNameGiven)
    159197    {
    160         emit sigOutputString(QString("Both 'Session Name' and 'Session Id' are supplied\n").append(m_strHelp));
     198        emit sigOutputString(QString(m_strHelp).append("Both 'Session Name' and 'Session Id' are supplied\n"));
    161199        return false;
    162200    }
     
    166204        if (!findSession(commandData.m_uSessionId, guestSession))
    167205        {
    168             emit sigOutputString(QString("No session with id %1 found.\n").arg(commandData.m_uSessionId).append(m_strHelp));
     206            emit sigOutputString(QString(m_strHelp).append("No session with id %1 found.\n").arg(commandData.m_uSessionId));
    169207            return false;
    170208        }
     
    207245{
    208246    CommandData commandData;
    209     if (!parseCommonOptions(argc, argv, commandData))
    210         return false;
    211247
    212248    static const RTGETOPTDEF s_aOptions[] =
     
    223259        switch (ch)
    224260        {
     261            HANDLE_COMMON_OPTION_DEFS()
    225262            case GCTLCMD_COMMON_OPT_SESSION_NAME:
    226263                commandData.m_strSessionName  = ValueUnion.psz;
     
    238275    if (!createSession(commandData, guestSession))
    239276        return false;
    240     return true;
    241 }
    242 
    243 bool UIGuestControlInterface::parseCommonOptions(int argc, char** argv, CommandData& commandData)
    244 {
    245     static const RTGETOPTDEF s_aOptions[] =
    246     {
    247         { "--username",             GCTLCMD_COMMON_OPT_USER,            RTGETOPT_REQ_STRING  },
    248         { "--passwordfile",         GCTLCMD_COMMON_OPT_PASSWORD_FILE,   RTGETOPT_REQ_STRING  },
    249         { "--password",             GCTLCMD_COMMON_OPT_PASSWORD,        RTGETOPT_REQ_STRING  },
    250         { "--domain",               GCTLCMD_COMMON_OPT_DOMAIN,          RTGETOPT_REQ_STRING  },
    251         { "--quiet",                'q',                                RTGETOPT_REQ_NOTHING },
    252         { "--verbose",              'v',                                RTGETOPT_REQ_NOTHING },
    253     };
    254 
    255 
    256     int ch;
    257     RTGETOPTUNION ValueUnion;
    258     RTGETOPTSTATE GetState;
    259     RTGetOptInit(&GetState, argc, argv, s_aOptions, RT_ELEMENTS(s_aOptions), 0, 0);
    260     while ((ch = RTGetOpt(&GetState, &ValueUnion)))
    261     {
    262         switch (ch)
    263         {
    264             /* Username: */
    265             case GCTLCMD_COMMON_OPT_USER:
    266                 commandData.m_strUserName = ValueUnion.psz;
    267                 break;
    268             /* Paaword: */
    269             case GCTLCMD_COMMON_OPT_PASSWORD:
    270                 commandData.m_strPassword = ValueUnion.psz;
    271                 break;
    272             default:
    273                 break;
    274         }
    275     }
    276 
    277277    return true;
    278278}
     
    341341                     else
    342342                     {
    343                          emit sigOutputString(QString("Unknown Command '%1'\n").arg(ValueUnion.psz).append(m_strHelp));
     343                         emit sigOutputString(QString(m_strHelp).append("\nSyntax Error. Unknown Command '%1'").arg(ValueUnion.psz));
    344344                         RTGetOptArgvFree(argv);
    345345                         return;
     
    398398    }
    399399    /* Wait session to start: */
    400     const ULONG waitTimeout = 1;//2000;
     400    const ULONG waitTimeout = 2000;
    401401    KGuestSessionWaitResult waitResult = guestSession.WaitFor(KGuestSessionWaitForFlag_Start, waitTimeout);
    402402    if (waitResult != KGuestSessionWaitResult_Start)
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIGuestControlInterface.h

    r71016 r71021  
    11/* $Id$ */
    22/** @file
    3  * VBox Qt GUI - UIInformationConfiguration class declaration.
     3 * VBox Qt GUI - UIGuestControlInterface class declaration.
    44 */
    55
     
    6666    /* Handles the 'create' session command */
    6767    bool handleCreate(int, char**);
    68     bool parseCommonOptions(int argc, char** argv, CommandData& commandData);
     68
    6969
    7070    CGuest        m_comGuest;
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/guestctrl/UIInformationGuestSession.h

    r70998 r71021  
    11/* $Id$ */
    22/** @file
    3  * VBox Qt GUI - UIInformationConfiguration class declaration.
     3 * VBox Qt GUI - UIInformationGuestSession class declaration.
    44 */
    55
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette