VirtualBox

Changeset 47859 in vbox


Ignore:
Timestamp:
Aug 19, 2013 9:06:45 PM (11 years ago)
Author:
vboxsync
Message:

FE/VBoxManage: Also show guest files when using "watch".

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/doc/manual/en_US/user_VBoxManage.xml

    r47632 r47859  
    32633263        <listitem>
    32643264          <para><emphasis role="bold"><computeroutput>list</computeroutput></emphasis>,
    3265           which lists various guest control information such as open guest sessions and
    3266           guest processes.</para>
     3265          which lists various guest control information such as open guest sessions,
     3266          guest processes and guest files.</para>
    32673267
    32683268          <screen>VBoxManage guestcontrol &lt;uuid|vmname&gt; list
    3269             &lt;all|sessions|processes&gt; [--verbose]</screen>
     3269            &lt;all|sessions|processes|files&gt; [--verbose]</screen>
    32703270
    32713271          <para>where the parameters mean: <glosslist>
     
    32793279
    32803280            <glossentry>
    3281               <glossterm><computeroutput>all|sessions|processes</computeroutput></glossterm>
     3281              <glossterm><computeroutput>all|sessions|processes|files</computeroutput></glossterm>
    32823282
    32833283              <glossdef>
    3284                 <para>Whether to list guest sessions, guest processes or all information
    3285                   available.</para>
     3284                <para>Whether to list guest sessions, guest processes, guest files
     3285                  or all information available. Mandatory.</para>
    32863286              </glossdef>
    32873287            </glossentry>
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp

    r47696 r47859  
    8383    void uninit(void)
    8484    {
     85        mSession.setNull();
    8586    }
    8687
     
    8990        switch (aType)
    9091        {
     92            case VBoxEventType_OnGuestFileRegistered:
     93                break;
     94
     95            case VBoxEventType_OnGuestProcessRegistered:
     96                break;
     97
    9198            case VBoxEventType_OnGuestSessionRegistered:
    9299            {
    93                 ComPtr<IGuestSessionRegisteredEvent> pEvent = aEvent;
    94                 Assert(!pEvent.isNull());
    95 
    96                 ComPtr<IGuestSession> pSession;
    97                 HRESULT rc = pEvent->COMGETTER(Session)(pSession.asOutParam());
    98                 AssertComRCBreakRC(rc);
    99                 AssertBreak(!pSession.isNull());
    100 
    101                 BOOL fRegistered;
    102                 rc = pEvent->COMGETTER(Registered)(&fRegistered);
    103                 AssertComRCBreakRC(rc);
    104 
    105                 Bstr strName;
    106                 rc = pSession->COMGETTER(Name)(strName.asOutParam());
    107                 AssertComRCBreakRC(rc);
    108                 ULONG uID;
    109                 rc = pSession->COMGETTER(Id)(&uID);
    110                 AssertComRCBreakRC(rc);
    111 
    112                 RTPrintf("Session ID=%RU32 \"%s\" %s\n",
    113                          uID, Utf8Str(strName).c_str(),
    114                          fRegistered ? "registered" : "unregistered");
    115 
    116                 pSession.setNull();
     100                HRESULT rc;
     101                do
     102                {
     103                    ComPtr<IGuestSessionRegisteredEvent> pEvent = aEvent;
     104                    Assert(!pEvent.isNull());
     105
     106                    CHECK_ERROR_BREAK(pEvent, COMGETTER(Session)(mSession.asOutParam()));
     107                    AssertBreak(!mSession.isNull());
     108                    BOOL fRegistered;
     109                    CHECK_ERROR_BREAK(pEvent, COMGETTER(Registered)(&fRegistered));
     110                    Bstr strName;
     111                    CHECK_ERROR_BREAK(mSession, COMGETTER(Name)(strName.asOutParam()));
     112                    ULONG uID;
     113                    CHECK_ERROR_BREAK(mSession, COMGETTER(Id)(&uID));
     114
     115                    RTPrintf("Session ID=%RU32 \"%s\" %s\n",
     116                             uID, Utf8Str(strName).c_str(),
     117                             fRegistered ? "registered" : "unregistered");
     118                    if (fRegistered)
     119                    {
     120                    #if 0
     121                        /* Register for IGuestSession events. */
     122                        ComPtr<IEventSource> es;
     123                        CHECK_ERROR_BREAK(pSession, COMGETTER(EventSource)(es.asOutParam()));
     124                        com::SafeArray<VBoxEventType_T> eventTypes;
     125                        eventTypes.push_back(VBoxEventType_OnGuestFileRegistered);
     126                        eventTypes.push_back(VBoxEventType_OnGuestProcessRegistered);
     127                        CHECK_ERROR_BREAK(es, RegisterListener(this, ComSafeArrayAsInParam(eventTypes),
     128                                                               true /* Active listener */));
     129                    #endif
     130                    }
     131                    else
     132                    {
     133                        mSession.setNull();
     134                    }
     135
     136                } while (0);
    117137                break;
    118138            }
     
    124144        return S_OK;
    125145    }
     146
     147protected:
     148
     149    ComPtr<IGuestSession> mSession;
    126150};
    127151typedef ListenerImpl<GuestEventListener> GuestEventListenerImpl;
     
    329353                 "                            [--domain <domain>] [--mode <mode>] [--verbose]\n"
    330354                 "\n"
    331                  "                            list <all|sessions|processes> [--verbose]\n"
     355                 "                            list <all|sessions|processes|files> [--verbose]\n"
    332356                 "\n"
    333357                 /** @todo Add an own help group for "session" and "process" sub commands. */
     
    560584}
    561585
     586/**
     587 * Translates a guest file status to a human readable
     588 * string.
     589 */
     590static const char *ctrlFileStatusToText(FileStatus_T enmStatus)
     591{
     592    switch (enmStatus)
     593    {
     594        case FileStatus_Opening:
     595            return "opening";
     596        case FileStatus_Open:
     597            return "open";
     598        case FileStatus_Closing:
     599            return "closing";
     600        case FileStatus_Closed:
     601            return "closed";
     602        case FileStatus_Down:
     603            return "killed";
     604        case FileStatus_Error:
     605            return "error";
     606        default:
     607            break;
     608    }
     609    return "unknown";
     610}
     611
    562612static int ctrlPrintError(com::ErrorInfo &errorInfo)
    563613{
     
    29793029    bool fListSessions = false;
    29803030    bool fListProcesses = false;
     3031    bool fListFiles = false;
    29813032    if (   !RTStrICmp(pArg->argv[0], "sessions")
    29823033        || !RTStrICmp(pArg->argv[0], "sess"))
     
    29853036             || !RTStrICmp(pArg->argv[0], "procs"))
    29863037        fListSessions = fListProcesses = true; /* Showing processes implies showing sessions. */
     3038    else if (   !RTStrICmp(pArg->argv[0], "files"))
     3039        fListSessions = fListFiles = true;     /* Showing files implies showing sessions. */
    29873040    else if (!RTStrICmp(pArg->argv[0], "all"))
    29883041        fListAll = true;
     
    29983051        {
    29993052            size_t cTotalProcs = 0;
     3053            size_t cTotalFiles = 0;
    30003054
    30013055            SafeIfaceArray <IGuestSession> collSessions;
     
    30493103                            cTotalProcs += collProcesses.size();
    30503104                        }
     3105
     3106                        if (   fListAll
     3107                            || fListFiles)
     3108                        {
     3109                            SafeIfaceArray <IGuestFile> collFiles;
     3110                            CHECK_ERROR_BREAK(pCurSession, COMGETTER(Files)(ComSafeArrayAsOutParam(collFiles)));
     3111                            for (size_t a = 0; a < collFiles.size(); a++)
     3112                            {
     3113                                ComPtr<IGuestFile> pCurFile = collFiles[a];
     3114                                if (!pCurFile.isNull())
     3115                                {
     3116                                    ULONG uID;
     3117                                    CHECK_ERROR_BREAK(pCurFile, COMGETTER(Id)(&uID));
     3118                                    Bstr strName;
     3119                                    CHECK_ERROR_BREAK(pCurFile, COMGETTER(FileName)(strName.asOutParam()));
     3120                                    FileStatus_T fileStatus;
     3121                                    CHECK_ERROR_BREAK(pCurFile, COMGETTER(Status)(&fileStatus));
     3122
     3123                                    RTPrintf("\n\t\tFile #%-03zu PID=%-6RU32 Status=[%s] Name=%ls",
     3124                                             a, uID, ctrlFileStatusToText(fileStatus), strName.raw());
     3125                                }
     3126                            }
     3127
     3128                            cTotalFiles += collFiles.size();
     3129                        }
    30513130                    }
    30523131                }
    30533132
    30543133                RTPrintf("\n\nTotal guest sessions: %zu\n", collSessions.size());
    3055                 RTPrintf("Total guest processes: %zu\n", cTotalProcs);
     3134                if (fListAll || fListProcesses)
     3135                    RTPrintf("Total guest processes: %zu\n", cTotalProcs);
     3136                if (fListAll || fListFiles)
     3137                    RTPrintf("Total guest files: %zu\n", cTotalFiles);
    30563138            }
    30573139            else
     
    34803562    {
    34813563        ComObjPtr<GuestEventListenerImpl> pGuestListener;
    3482 
    3483 
    3484 
    34853564        do
    34863565        {
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