Changeset 55422 in vbox for trunk/include/VBox
- Timestamp:
- Apr 24, 2015 1:52:33 PM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 99765
- Location:
- trunk/include/VBox
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/GuestHost/DragAndDrop.h
r51211 r55422 60 60 }; 61 61 62 enum Dest 63 { 64 Source = 0, 65 Target 66 }; 67 68 DnDURIObject(void); 62 69 DnDURIObject(Type type, 63 const RTCString &strSrcPath ,64 const RTCString &strDstPath ,65 uint32_t fMode , uint64_t cbSize);70 const RTCString &strSrcPath = "", 71 const RTCString &strDstPath = "", 72 uint32_t fMode = 0, uint64_t cbSize = 0); 66 73 virtual ~DnDURIObject(void); 67 74 … … 69 76 70 77 const RTCString &GetSourcePath(void) const { return m_strSrcPath; } 71 const RTCString &GetDestPath(void) const { return m_strDstPath; } 72 uint32_t GetMode(void) const { return m_fMode; } 78 const RTCString &GetDestPath(void) const { return m_strTgtPath; } 79 uint64_t GetMode(void) const { return m_fMode; } 80 uint64_t GetProcessed(void) const { return m_cbProcessed; } 73 81 uint64_t GetSize(void) const { return m_cbSize; } 74 82 Type GetType(void) const { return m_Type; } … … 76 84 public: 77 85 86 int SetSize(uint64_t uSize) { m_cbSize = uSize; return VINF_SUCCESS; } 87 88 public: 89 90 void Close(void); 78 91 bool IsComplete(void) const; 79 static int RebaseURIPath(RTCString &strPath, const RTCString &strBaseOld, const RTCString &strBaseNew); 80 int Read(void *pvBuf, uint32_t cbToRead, uint32_t *pcbRead); 92 bool IsOpen(void) const; 93 int Open(Dest enmDest, uint64_t fOpen); 94 int OpenEx(const RTCString &strPath, Type enmType, Dest enmDest, uint64_t fMode = 0, uint32_t fFlags = 0); 95 int Read(void *pvBuf, size_t cbBuf, uint32_t *pcbRead); 96 int Write(const void *pvBuf, size_t cbBuf, uint32_t *pcbWritten); 97 98 public: 99 100 static int RebaseURIPath(RTCString &strPath, const RTCString &strBaseOld = "", const RTCString &strBaseNew = ""); 81 101 82 102 protected: … … 88 108 Type m_Type; 89 109 RTCString m_strSrcPath; 90 RTCString m_strDstPath; 91 uint32_t m_fMode; 110 RTCString m_strTgtPath; 111 /** File mode. */ 112 uint64_t m_fMode; 92 113 /** Size (in bytes) to read/write. */ 93 114 uint64_t m_cbSize; -
trunk/include/VBox/HostServices/DragAndDropSvc.h
r55091 r55422 4 4 5 5 /* 6 * Copyright (C) 2011-201 4Oracle Corporation6 * Copyright (C) 2011-2015 Oracle Corporation 7 7 * 8 8 * This file is part of VirtualBox Open Source Edition (OSE), as … … 27 27 #define ___VBox_HostService_DragAndDropSvc_h 28 28 29 #include <VBox/hgcmsvc.h> 29 30 #include <VBox/VMMDev.h> 30 31 #include <VBox/VBoxGuest2.h> … … 86 87 enum eHostFn 87 88 { 89 /** The host just has set a new DnD mode. */ 88 90 HOST_DND_SET_MODE = 100, 89 91 … … 92 94 */ 93 95 96 /** The host entered the VM window for starting an actual 97 * DnD operation. */ 94 98 HOST_DND_HG_EVT_ENTER = 200, 99 /** The host's DnD cursor moved within the VM window. */ 95 100 HOST_DND_HG_EVT_MOVE = 201, 101 /** The host left the guest VM window. */ 96 102 HOST_DND_HG_EVT_LEAVE = 202, 103 /** The host issued a "drop" event, meaning that the host is 104 * ready to transfer data over to the guest. */ 97 105 HOST_DND_HG_EVT_DROPPED = 203, 106 /** The host requested to cancel the current DnD operation. */ 98 107 HOST_DND_HG_EVT_CANCEL = 204, 99 108 /** Gets the actual MIME data, based on 100 * the format(s) specified by HOST_DND_HG_EVT_ENTER. */ 109 * the format(s) specified by HOST_DND_HG_EVT_ENTER. If the guest 110 * supplied buffer too small to send the actual data, the host 111 * will send a HOST_DND_HG_SND_MORE_DATA message as follow-up. */ 101 112 HOST_DND_HG_SND_DATA = 205, 102 113 /** Sent when the actual buffer for HOST_DND_HG_SND_DATA 103 114 * was too small, issued by the DnD host service. */ 104 115 HOST_DND_HG_SND_MORE_DATA = 206, 105 /** Directory entry to be handled onthe guest. */116 /** Directory entry to be sent to the guest. */ 106 117 HOST_DND_HG_SND_DIR = 207, 107 /** File entry to be handled on the guest. */ 108 HOST_DND_HG_SND_FILE = 208, 118 /** File data chunk to send to the guest. */ 119 HOST_DND_HG_SND_FILE_DATA = 208, 120 /** File header to send to the guest. 121 * Note: Only for protocol version 2 and up (>= VBox 5.0). */ 122 HOST_DND_HG_SND_FILE_HDR = 209, 109 123 110 124 /* … … 118 132 * has been started and that the host wants the data in 119 133 * a specific MIME type. */ 120 HOST_DND_GH_EVT_DROPPED ,121 134 HOST_DND_GH_EVT_DROPPED = 601, 135 /** Creates a directory on the guest. */ 122 136 HOST_DND_GH_RECV_DIR = 650, 123 HOST_DND_GH_RECV_FILE = 670 137 /** Retrieves file data from the guest. */ 138 HOST_DND_GH_RECV_FILE_DATA = 670, 139 /** Retrieves a file header from the guest. 140 * Note: Only for protocol version 2 and up (>= VBox 5.0). */ 141 HOST_DND_GH_RECV_FILE_HDR = 671, 142 /** Blow the type up to 32-bit. */ 143 HOST_DND_32BIT_HACK = 0x7fffffff 124 144 }; 125 145 … … 127 147 * The service functions which are called by guest. 128 148 * Note: When adding new functions to this table, make sure that the actual ID 129 * does *not* overlap with the e GuestFn enumeration above!149 * does *not* overlap with the eHostFn enumeration above! 130 150 */ 131 151 enum eGuestFn 132 152 { 153 /* Guest sends a connection request to the HGCM service. 154 * Note: New since protocol version 2. */ 155 GUEST_DND_CONNECT = 10, 156 133 157 /** 134 158 * Guest waits for a new message the host wants to process … … 137 161 GUEST_DND_GET_NEXT_HOST_MSG = 300, 138 162 139 /* H->G */ 163 /* 164 * Host -> Guest operation messages. 165 */ 166 140 167 /** The guest acknowledges that the pending DnD data from 141 168 * the host can be dropped on the currently selected source … … 145 172 * from the host. */ 146 173 GUEST_DND_HG_REQ_DATA = 401, 174 /** Reports back the guest's progress on a host -> guest operation. */ 147 175 GUEST_DND_HG_EVT_PROGRESS = 402, 148 176 149 /* G->H */ 177 /* 178 * Guest -> Host operation messages. 179 */ 180 150 181 /** 151 182 * The guests acknowledges that it currently has a drag'n drop … … 160 191 */ 161 192 GUEST_DND_GH_SND_DATA = 501, 193 /** Reports an error back to the host. */ 162 194 GUEST_DND_GH_EVT_ERROR = 502, 163 195 /** Guest sends a directory entry to the host. */ 164 196 GUEST_DND_GH_SND_DIR = 700, 165 GUEST_DND_GH_SND_FILE = 701 197 /** Guest sends file data to the host. */ 198 /* Note: On protocol version 1 this also contains the file name 199 * and other attributes. */ 200 GUEST_DND_GH_SND_FILE_DATA = 701, 201 /** Guest sends a file header to the host, marking the 202 * beginning of a (new) file transfer. 203 * Note: Available since protocol version 2 (VBox 5.0). */ 204 GUEST_DND_GH_SND_FILE_HDR = 702, 205 /** Blow the type up to 32-bit. */ 206 GUEST_DND_32BIT_HACK = 0x7fffffff 166 207 }; 167 208 168 209 /** 169 * The possible states for the progress operations. 170 */ 171 enum 172 { 173 DND_PROGRESS_RUNNING = 1, 210 * DnD operation progress states. 211 */ 212 typedef enum DNDPROGRESS 213 { 214 DND_PROGRESS_UNKNOWN = 0, 215 DND_PROGRESS_RUNNING = 1, 174 216 DND_PROGRESS_COMPLETE, 175 217 DND_PROGRESS_CANCELLED, 176 DND_PROGRESS_ERROR 177 }; 218 DND_PROGRESS_ERROR, 219 /** Blow the type up to 32-bit. */ 220 DND_PROGRESS_32BIT_HACK = 0x7fffffff 221 } DNDPROGRESS, *PDNDPROGRESS; 178 222 179 223 #pragma pack (1) … … 273 317 } VBOXDNDHGSENDDIRMSG; 274 318 275 typedef struct VBOXDNDHGSENDFILEMSG 276 { 277 VBoxGuestHGCMCallInfo hdr; 278 279 /** 280 * HG File event. 281 * 282 * Used by: 283 * HOST_DND_HG_SND_FILE 284 */ 319 /** 320 * File header event. 321 * Note: Only for protocol version 2 and up. 322 * 323 * Used by: 324 * HOST_DND_HG_SND_FILE_HDR 325 * HOST_DND_GH_SND_FILE_HDR 326 */ 327 typedef struct VBOXDNDHGSENDFILEHDRMSG 328 { 329 VBoxGuestHGCMCallInfo hdr; 330 331 /** Context ID. Unused at the moment. */ 332 HGCMFunctionParameter uContext; /* OUT uint32_t */ 333 /** File path. */ 285 334 HGCMFunctionParameter pvName; /* OUT ptr */ 335 /** Size (in bytes) of file path. */ 286 336 HGCMFunctionParameter cbName; /* OUT uint32_t */ 287 HGCMFunctionParameter pvData; /* OUT ptr */ 288 HGCMFunctionParameter cbData; /* OUT uint32_t */ 337 /** Optional flags; unused at the moment. */ 338 HGCMFunctionParameter uFlags; /* OUT uint32_t */ 339 /** File creation mode. */ 289 340 HGCMFunctionParameter fMode; /* OUT uint32_t */ 290 } VBOXDNDHGSENDFILEMSG; 341 /** Total size (in bytes). */ 342 HGCMFunctionParameter cbTotal; /* OUT uint64_t */ 343 344 } VBOXDNDHGSENDFILEHDRMSG; 345 346 /** 347 * HG: File data (chunk) event. 348 * 349 * Used by: 350 * HOST_DND_HG_SND_FILE 351 */ 352 typedef struct VBOXDNDHGSENDFILEDATAMSG 353 { 354 VBoxGuestHGCMCallInfo hdr; 355 356 union 357 { 358 struct 359 { 360 HGCMFunctionParameter pvName; /* OUT ptr */ 361 HGCMFunctionParameter cbName; /* OUT uint32_t */ 362 HGCMFunctionParameter pvData; /* OUT ptr */ 363 HGCMFunctionParameter cbData; /* OUT uint32_t */ 364 HGCMFunctionParameter fMode; /* OUT uint32_t */ 365 } v1; 366 struct 367 { 368 /** Note: pvName is now part of the VBOXDNDHGSENDFILEHDRMSG message. */ 369 /** Note: cbName is now part of the VBOXDNDHGSENDFILEHDRMSG message. */ 370 HGCMFunctionParameter uContext; /* OUT uint32_t */ 371 HGCMFunctionParameter pvData; /* OUT ptr */ 372 HGCMFunctionParameter cbData; /* OUT uint32_t */ 373 /** Note: fMode is now part of the VBOXDNDHGSENDFILEHDRMSG message. */ 374 } v2; 375 } u; 376 377 } VBOXDNDHGSENDFILEDATAMSG; 291 378 292 379 typedef struct VBOXDNDGHREQPENDINGMSG … … 322 409 */ 323 410 411 /** 412 * The returned command the host wants to 413 * run on the guest. 414 * 415 * Used by: 416 * GUEST_DND_GET_NEXT_HOST_MSG 417 */ 324 418 typedef struct VBOXDNDNEXTMSGMSG 325 419 { 326 420 VBoxGuestHGCMCallInfo hdr; 327 421 328 /**329 * The returned command the host wants to330 * run on the guest.331 *332 * Used by:333 * GUEST_DND_GET_NEXT_HOST_MSG334 */335 422 HGCMFunctionParameter msg; /* OUT uint32_t */ 336 423 /** Number of parameters the message needs. */ … … 342 429 } VBOXDNDNEXTMSGMSG; 343 430 431 /** 432 * Connection request. Used to tell the DnD protocol 433 * version to the (host) service. 434 * 435 * Used by: 436 * GUEST_DND_CONNECT 437 */ 438 typedef struct VBOXDNDCONNECTPMSG 439 { 440 VBoxGuestHGCMCallInfo hdr; 441 442 /** Protocol version to use. */ 443 HGCMFunctionParameter uProtocol; /* OUT uint32_t */ 444 /** Connection flags. Optional. */ 445 HGCMFunctionParameter uFlags; /* OUT uint32_t */ 446 447 } VBOXDNDCONNECTPMSG; 448 449 /** 450 * HG Acknowledge Operation event. 451 * 452 * Used by: 453 * GUEST_DND_HG_ACK_OP 454 */ 344 455 typedef struct VBOXDNDHGACKOPMSG 345 456 { 346 457 VBoxGuestHGCMCallInfo hdr; 347 458 348 /**349 * HG Acknowledge Operation event.350 *351 * Used by:352 * GUEST_DND_HG_ACK_OP353 */354 459 HGCMFunctionParameter uAction; /* OUT uint32_t */ 355 460 } VBOXDNDHGACKOPMSG; 356 461 462 /** 463 * HG request for data event. 464 * 465 * Used by: 466 * GUEST_DND_HG_REQ_DATA 467 */ 357 468 typedef struct VBOXDNDHGREQDATAMSG 358 469 { 359 470 VBoxGuestHGCMCallInfo hdr; 360 471 361 /**362 * HG request for data event.363 *364 * Used by:365 * GUEST_DND_HG_REQ_DATA366 */367 472 HGCMFunctionParameter pFormat; /* OUT ptr */ 368 473 } VBOXDNDHGREQDATAMSG; 369 474 475 typedef struct VBOXDNDHGEVTPROGRESSMSG 476 { 477 VBoxGuestHGCMCallInfo hdr; 478 479 HGCMFunctionParameter uStatus; 480 HGCMFunctionParameter uPercent; 481 HGCMFunctionParameter rc; 482 } VBOXDNDHGEVTPROGRESSMSG; 483 484 /** 485 * GH Acknowledge Pending event. 486 * 487 * Used by: 488 * GUEST_DND_GH_ACK_PENDING 489 */ 370 490 typedef struct VBOXDNDGHACKPENDINGMSG 371 491 { 372 492 VBoxGuestHGCMCallInfo hdr; 373 493 374 /**375 * GH Acknowledge Pending event.376 *377 * Used by:378 * GUEST_DND_GH_ACK_PENDING379 */380 494 HGCMFunctionParameter uDefAction; /* OUT uint32_t */ 381 495 HGCMFunctionParameter uAllActions; /* OUT uint32_t */ … … 383 497 } VBOXDNDGHACKPENDINGMSG; 384 498 499 /** 500 * GH Send Data event. 501 * 502 * Used by: 503 * GUEST_DND_GH_SND_DATA 504 */ 385 505 typedef struct VBOXDNDGHSENDDATAMSG 386 506 { 387 507 VBoxGuestHGCMCallInfo hdr; 388 508 389 /**390 * GH Send Data event.391 *392 * Used by:393 * GUEST_DND_GH_SND_DATA394 */395 509 HGCMFunctionParameter pvData; /* OUT ptr */ 396 510 /** Total bytes to send. This can be more than … … 400 514 } VBOXDNDGHSENDDATAMSG; 401 515 516 /** 517 * GH Directory event. 518 * 519 * Used by: 520 * GUEST_DND_GH_SND_DIR 521 */ 402 522 typedef struct VBOXDNDGHSENDDIRMSG 403 523 { 404 524 VBoxGuestHGCMCallInfo hdr; 405 525 406 /**407 * GH Directory event.408 *409 * Used by:410 * GUEST_DND_HG_SND_DIR411 */412 526 HGCMFunctionParameter pvName; /* OUT ptr */ 413 527 HGCMFunctionParameter cbName; /* OUT uint32_t */ … … 415 529 } VBOXDNDGHSENDDIRMSG; 416 530 417 typedef struct VBOXDNDGHSENDFILEMSG 418 { 419 VBoxGuestHGCMCallInfo hdr; 420 421 /** 422 * GH File event. 423 * 424 * Used by: 425 * GUEST_DND_HG_SND_FILE 426 */ 427 HGCMFunctionParameter pvName; /* OUT ptr */ 428 HGCMFunctionParameter cbName; /* OUT uint32_t */ 429 HGCMFunctionParameter pvData; /* OUT ptr */ 430 HGCMFunctionParameter cbData; /* OUT uint32_t */ 431 HGCMFunctionParameter fMode; /* OUT uint32_t */ 432 } VBOXDNDGHSENDFILEMSG; 433 531 /** 532 * GH File header event. 533 * Note: Only for protocol version 2 and up. 534 * 535 * Used by: 536 * HOST_DND_GH_SND_FILE_HDR 537 */ 538 typedef struct VBOXDNDHGSENDFILEHDRMSG VBOXDNDGHSENDFILEHDRMSG; 539 540 /** 541 * GH File data event. 542 * 543 * Used by: 544 * GUEST_DND_HG_SND_FILE_DATA 545 */ 546 typedef struct VBOXDNDGHSENDFILEDATAMSG 547 { 548 VBoxGuestHGCMCallInfo hdr; 549 550 union 551 { 552 /* Note: Protocol v1 sends the file name + file mode 553 * every time a file data chunk is being sent. */ 554 struct 555 { 556 HGCMFunctionParameter pvName; /* OUT ptr */ 557 HGCMFunctionParameter cbName; /* OUT uint32_t */ 558 HGCMFunctionParameter fMode; /* OUT uint32_t */ 559 HGCMFunctionParameter pvData; /* OUT ptr */ 560 HGCMFunctionParameter cbData; /* OUT uint32_t */ 561 } v1; 562 struct 563 { 564 /** Context ID. Unused at the moment. */ 565 HGCMFunctionParameter uContext; /* OUT uint32_t */ 566 HGCMFunctionParameter pvData; /* OUT ptr */ 567 HGCMFunctionParameter cbData; /* OUT uint32_t */ 568 } v2; 569 } u; 570 571 } VBOXDNDGHSENDFILEDATAMSG; 572 573 /** 574 * GH Error event. 575 * 576 * Used by: 577 * GUEST_DND_GH_EVT_ERROR 578 */ 434 579 typedef struct VBOXDNDGHEVTERRORMSG 435 580 { 436 581 VBoxGuestHGCMCallInfo hdr; 437 582 438 /** 439 * GH Error event. 440 * 441 * Used by: 442 * GUEST_DND_GH_EVT_ERROR 443 */ 444 HGCMFunctionParameter uRC; /* OUT uint32_t */ 583 HGCMFunctionParameter rc; /* OUT uint32_t */ 445 584 } VBOXDNDGHEVTERRORMSG; 446 585 … … 452 591 enum 453 592 { 454 CB_MAGIC_DND_HG_ACK_OP = 0xe2100b93, 455 CB_MAGIC_DND_HG_REQ_DATA = 0x5cb3faf9, 456 CB_MAGIC_DND_HG_EVT_PROGRESS = 0x8c8a6956, 457 CB_MAGIC_DND_GH_ACK_PENDING = 0xbe975a14, 458 CB_MAGIC_DND_GH_SND_DATA = 0x4eb61bff, 459 CB_MAGIC_DND_GH_SND_DIR = 0x411ca754, 460 CB_MAGIC_DND_GH_SND_FILE = 0x65e35eaf, 461 CB_MAGIC_DND_GH_EVT_ERROR = 0x117a87c4 593 CB_MAGIC_DND_HG_GET_NEXT_HOST_MSG = 0x19820126, 594 CB_MAGIC_DND_HG_GET_NEXT_HOST_MSG_DATA = 0x19850630, 595 CB_MAGIC_DND_HG_ACK_OP = 0xe2100b93, 596 CB_MAGIC_DND_HG_REQ_DATA = 0x5cb3faf9, 597 CB_MAGIC_DND_HG_EVT_PROGRESS = 0x8c8a6956, 598 CB_MAGIC_DND_GH_ACK_PENDING = 0xbe975a14, 599 CB_MAGIC_DND_GH_SND_DATA = 0x4eb61bff, 600 CB_MAGIC_DND_GH_SND_DIR = 0x411ca754, 601 CB_MAGIC_DND_GH_SND_FILE_HDR = 0x65e35eaf, 602 CB_MAGIC_DND_GH_SND_FILE_DATA = 0x19840804, 603 CB_MAGIC_DND_GH_EVT_ERROR = 0x117a87c4 462 604 }; 463 605 … … 468 610 /** Context ID to identify callback data. */ 469 611 uint32_t u32ContextID; 470 } VBOXDNDCBHEADERDATA; 471 typedef VBOXDNDCBHEADERDATA *PVBOXDNDCBHEADERDATA; 612 } VBOXDNDCBHEADERDATA, *PVBOXDNDCBHEADERDATA; 613 614 typedef struct VBOXDNDCBHGGETNEXTHOSTMSG 615 { 616 /** Callback data header. */ 617 VBOXDNDCBHEADERDATA hdr; 618 uint32_t uMsg; 619 uint32_t cParms; 620 } VBOXDNDCBHGGETNEXTHOSTMSG, *PVBOXDNDCBHGGETNEXTHOSTMSG; 621 622 typedef struct VBOXDNDCBHGGETNEXTHOSTMSGDATA 623 { 624 /** Callback data header. */ 625 VBOXDNDCBHEADERDATA hdr; 626 uint32_t uMsg; 627 uint32_t cParms; 628 PVBOXHGCMSVCPARM paParms; 629 } VBOXDNDCBHGGETNEXTHOSTMSGDATA, *PVBOXDNDCBHGGETNEXTHOSTMSGDATA; 472 630 473 631 typedef struct VBOXDNDCBHGACKOPDATA … … 476 634 VBOXDNDCBHEADERDATA hdr; 477 635 uint32_t uAction; 478 } VBOXDNDCBHGACKOPDATA; 479 typedef VBOXDNDCBHGACKOPDATA *PVBOXDNDCBHGACKOPDATA; 636 } VBOXDNDCBHGACKOPDATA, *PVBOXDNDCBHGACKOPDATA; 480 637 481 638 typedef struct VBOXDNDCBHGREQDATADATA … … 484 641 VBOXDNDCBHEADERDATA hdr; 485 642 char *pszFormat; 486 } VBOXDNDCBHGREQDATADATA; 487 typedef VBOXDNDCBHGREQDATADATA *PVBOXDNDCBHGREQDATADATA; 643 } VBOXDNDCBHGREQDATADATA, *PVBOXDNDCBHGREQDATADATA; 488 644 489 645 typedef struct VBOXDNDCBHGEVTPROGRESSDATA … … 492 648 VBOXDNDCBHEADERDATA hdr; 493 649 uint32_t uPercentage; 494 uint32_t uState; 495 int rc; 496 } VBOXDNDCBHGEVTPROGRESSDATA; 497 typedef VBOXDNDCBHGEVTPROGRESSDATA *PVBOXDNDCBHGEVTPROGRESSDATA; 650 uint32_t uStatus; 651 uint32_t rc; 652 } VBOXDNDCBHGEVTPROGRESSDATA, *PVBOXDNDCBHGEVTPROGRESSDATA; 498 653 499 654 typedef struct VBOXDNDCBGHACKPENDINGDATA … … 504 659 uint32_t uAllActions; 505 660 char *pszFormat; 506 } VBOXDNDCBGHACKPENDINGDATA; 507 typedef VBOXDNDCBGHACKPENDINGDATA *PVBOXDNDCBGHACKPENDINGDATA; 661 } VBOXDNDCBGHACKPENDINGDATA, *PVBOXDNDCBGHACKPENDINGDATA; 508 662 509 663 typedef struct VBOXDNDCBSNDDATADATA … … 516 670 * with every message because the size can change. */ 517 671 uint32_t cbTotalSize; 518 } VBOXDNDCBSNDDATADATA; 519 typedef VBOXDNDCBSNDDATADATA *PVBOXDNDCBSNDDATADATA; 672 } VBOXDNDCBSNDDATADATA, *PVBOXDNDCBSNDDATADATA; 520 673 521 674 typedef struct VBOXDNDCBSNDDIRDATA … … 526 679 uint32_t cbPath; 527 680 uint32_t fMode; 528 } VBOXDNDCBSNDDIRDATA; 529 typedef VBOXDNDCBSNDDIRDATA *PVBOXDNDCBSNDDIRDATA; 530 531 typedef struct VBOXDNDCBSNDFILEDATA 532 { 533 /** Callback data header. */ 534 VBOXDNDCBHEADERDATA hdr; 681 } VBOXDNDCBSNDDIRDATA, *PVBOXDNDCBSNDDIRDATA; 682 683 /* Note: Only for protocol version 2 and up (>= VBox 5.0). */ 684 typedef struct VBOXDNDCBSNDFILEHDRDATA 685 { 686 /** Callback data header. */ 687 VBOXDNDCBHEADERDATA hdr; 688 /** File path (name). */ 535 689 char *pszFilePath; 690 /** Size (in bytes) of file path. */ 536 691 uint32_t cbFilePath; 692 /** Total size (in bytes) of this file. */ 693 uint64_t cbSize; 694 /** File (creation) mode. */ 537 695 uint32_t fMode; 538 void *pvData; 539 uint32_t cbData; 540 } VBOXDNDCBSNDFILEDATA; 541 typedef VBOXDNDCBSNDFILEDATA *PVBOXDNDCBSNDFILEDATA; 696 /** Additional flags. Not used at the moment. */ 697 uint32_t fFlags; 698 } VBOXDNDCBSNDFILEHDRDATA, *PVBOXDNDCBSNDFILEHDRDATA; 699 700 typedef struct VBOXDNDCBSNDFILEDATADATA 701 { 702 /** Callback data header. */ 703 VBOXDNDCBHEADERDATA hdr; 704 /** Current file data chunk. */ 705 void *pvData; 706 /** Size (in bytes) of current data chunk. */ 707 uint32_t cbData; 708 union 709 { 710 struct 711 { 712 /** File path (name). */ 713 char *pszFilePath; 714 /** Size (in bytes) of file path. */ 715 uint32_t cbFilePath; 716 /** File (creation) mode. */ 717 uint32_t fMode; 718 } v1; 719 /* Note: Protocol version 2 has the file attributes (name, size, 720 mode, ...) in the VBOXDNDCBSNDFILEHDRDATA structure. */ 721 } u; 722 } VBOXDNDCBSNDFILEDATADATA, *PVBOXDNDCBSNDFILEDATADATA; 542 723 543 724 typedef struct VBOXDNDCBEVTERRORDATA … … 546 727 VBOXDNDCBHEADERDATA hdr; 547 728 int32_t rc; 548 } VBOXDNDCBEVTERRORDATA; 549 typedef VBOXDNDCBEVTERRORDATA *PVBOXDNDCBEVTERRORDATA; 729 } VBOXDNDCBEVTERRORDATA, *PVBOXDNDCBEVTERRORDATA; 550 730 551 731 } /* namespace DragAndDropSvc */ -
trunk/include/VBox/HostServices/Service.h
r55353 r55422 4 4 5 5 /* 6 * Copyright (C) 2011-201 2Oracle Corporation6 * Copyright (C) 2011-2015 Oracle Corporation 7 7 * 8 8 * This file is part of VirtualBox Open Source Edition (OSE), as … … 50 50 initData(uMsg, cParms, aParms); 51 51 } 52 ~Message() 52 53 virtual ~Message(void) 53 54 { 54 55 cleanup(); … … 90 91 return VINF_SUCCESS; 91 92 } 93 92 94 int getParmU64Info(uint32_t iParm, uint64_t *pu64Info) const 93 95 { … … 100 102 return VINF_SUCCESS; 101 103 } 104 102 105 int getParmPtrInfo(uint32_t iParm, void **ppvAddr, uint32_t *pcSize) const 103 106 { … … 113 116 } 114 117 115 int copyParms(uint32_t cParms, PVBOXHGCMSVCPARM paParmsSrc, PVBOXHGCMSVCPARM paParmsDst) const118 static int copyParms(uint32_t cParms, PVBOXHGCMSVCPARM paParmsSrc, PVBOXHGCMSVCPARM paParmsDst) 116 119 { 117 120 return copyParmsInternal(cParms, paParmsSrc, paParmsDst, false /* fCreatePtrs */); … … 119 122 120 123 private: 124 121 125 uint32_t m_uMsg; 122 126 uint32_t m_cParms; … … 149 153 } 150 154 151 int copyParmsInternal(uint32_t cParms, PVBOXHGCMSVCPARM paParmsSrc, PVBOXHGCMSVCPARM paParmsDst, bool fCreatePtrs) const155 static int copyParmsInternal(uint32_t cParms, PVBOXHGCMSVCPARM paParmsSrc, PVBOXHGCMSVCPARM paParmsDst, bool fCreatePtrs) 152 156 { 153 157 int rc = VINF_SUCCESS; … … 188 192 /* No, but we have to check if there is enough room. */ 189 193 if (paParmsDst[i].u.pointer.size < paParmsSrc[i].u.pointer.size) 194 { 190 195 rc = VERR_BUFFER_OVERFLOW; 196 break; 197 } 191 198 } 199 192 200 if ( paParmsDst[i].u.pointer.addr 193 201 && paParmsSrc[i].u.pointer.size > 0 194 202 && paParmsDst[i].u.pointer.size > 0) 203 { 195 204 memcpy(paParmsDst[i].u.pointer.addr, 196 205 paParmsSrc[i].u.pointer.addr, 197 206 RT_MIN(paParmsDst[i].u.pointer.size, paParmsSrc[i].u.pointer.size)); 207 } 198 208 break; 199 209 } … … 236 246 { 237 247 public: 238 Client(uint32_t uClientId, VBOXHGCMCALLHANDLE hHandle, uint32_t uMsg, uint32_t cParms, VBOXHGCMSVCPARM aParms[]) 248 Client(uint32_t uClientId, VBOXHGCMCALLHANDLE hHandle = NULL, 249 uint32_t uMsg = 0, uint32_t cParms = 0, VBOXHGCMSVCPARM aParms[] = NULL) 239 250 : m_uClientId(uClientId) 251 , m_uProtocol(0) 240 252 , m_hHandle(hHandle) 241 253 , m_uMsg(uMsg) … … 243 255 , m_paParms(aParms) {} 244 256 245 VBOXHGCMCALLHANDLE handle() const { return m_hHandle; } 246 uint32_t message() const { return m_uMsg; } 247 uint32_t clientId() const { return m_uClientId; } 257 public: 258 259 VBOXHGCMCALLHANDLE handle(void) const { return m_hHandle; } 260 uint32_t message(void) const { return m_uMsg; } 261 uint32_t clientId(void) const { return m_uClientId; } 262 uint32_t protocol(void) const { return m_uProtocol; } 263 264 public: 265 266 int setProtocol(uint32_t uProtocol) { m_uProtocol = uProtocol; return VINF_SUCCESS; } 267 268 public: 248 269 249 270 int addMessageInfo(uint32_t uMsg, uint32_t cParms) … … 259 280 int addMessageInfo(const Message *pMessage) 260 281 { 282 AssertPtrReturn(pMessage, VERR_INVALID_POINTER); 261 283 if (m_cParms != 3) 262 284 return VERR_INVALID_PARAMETER; … … 269 291 int addMessage(const Message *pMessage) 270 292 { 293 AssertPtrReturn(pMessage, VERR_INVALID_POINTER); 271 294 return pMessage->getData(m_uMsg, m_cParms, m_paParms); 272 295 } 296 273 297 private: 298 274 299 uint32_t m_uClientId; 300 /** Optional protocol version the client uses. */ 301 uint32_t m_uProtocol; 275 302 VBOXHGCMCALLHANDLE m_hHandle; 276 303 uint32_t m_uMsg; -
trunk/include/VBox/VBoxGuestLib.h
r54010 r55422 4 4 5 5 /* 6 * Copyright (C) 2006-201 4Oracle Corporation6 * Copyright (C) 2006-2015 Oracle Corporation 7 7 * 8 8 * This file is part of VirtualBox Open Source Edition (OSE), as … … 606 606 * Structure containing the context required for 607 607 * either retrieving or sending a HGCM guest control 608 * command from or to the host.608 * commands from or to the host. 609 609 * 610 610 * Note: Do not change parameter order without also … … 713 713 /** @name Drag and Drop 714 714 * @{ */ 715 /** 716 * Structure containing the context required for 717 * either retrieving or sending a HGCM guest drag'n drop 718 * commands from or to the host. 719 * 720 * Note: Do not change parameter order without also 721 * adapting all structure initializers. 722 */ 723 typedef struct VBGLR3GUESTDNDCMDCTX 724 { 725 /** @todo This struct could be handy if we want to implement 726 * a second communication channel, e.g. via TCP/IP. 727 * Use a union for the HGCM stuff then. */ 728 729 /** IN: HGCM client ID to use for communication. */ 730 uint32_t uClientID; 731 /** IN: Protocol version to use. */ 732 uint32_t uProtocol; 733 /** OUT: Number of parameters retrieved. */ 734 uint32_t uNumParms; 735 } VBGLR3GUESTDNDCMDCTX, *PVBGLR3GUESTDNDCMDCTX; 736 715 737 typedef struct VBGLR3DNDHGCMEVENT 716 738 { 717 uint32_t uType; /** The event type this struct contains */718 uint32_t uScreenId; /** Screen ID this request belongs to */719 char *pszFormats; /** Format list (\r\n separated) */720 uint32_t cbFormats; /** Size of pszFormats (\0 included) */739 uint32_t uType; /** The event type this struct contains. */ 740 uint32_t uScreenId; /** Screen ID this request belongs to. */ 741 char *pszFormats; /** Format list (\r\n separated). */ 742 uint32_t cbFormats; /** Size of pszFormats (\0 included). */ 721 743 union 722 744 { 723 745 struct 724 746 { 725 uint32_t uXpos; /** X position of guest screen */726 uint32_t uYpos; /** Y position of guest screen */727 uint32_t uDefAction; /** Proposed DnD action */728 uint32_t uAllActions; /** Allowed DnD actions */729 } a; /** Values used in init, move and drop event type*/747 uint32_t uXpos; /** X position of guest screen. */ 748 uint32_t uYpos; /** Y position of guest screen. */ 749 uint32_t uDefAction; /** Proposed DnD action. */ 750 uint32_t uAllActions; /** Allowed DnD actions. */ 751 } a; /** Values used in init, move and drop event type. */ 730 752 struct 731 753 { 732 void *pvData; /** Data request */733 size_t cbData; /** Size of pvData */734 } b; /** Values used in drop data event type*/735 } u;754 void *pvData; /** Data request. */ 755 size_t cbData; /** Size of pvData. */ 756 } b; /** Values used in drop data event type. */ 757 } u; 736 758 } VBGLR3DNDHGCMEVENT; 737 759 typedef VBGLR3DNDHGCMEVENT *PVBGLR3DNDHGCMEVENT; 738 760 typedef const PVBGLR3DNDHGCMEVENT CPVBGLR3DNDHGCMEVENT; 739 VBGLR3DECL(int) VbglR3DnDConnect(uint32_t *pu32ClientId); 740 VBGLR3DECL(int) VbglR3DnDDisconnect(uint32_t u32ClientId); 741 742 VBGLR3DECL(int) VbglR3DnDProcessNextMessage(uint32_t u32ClientId, CPVBGLR3DNDHGCMEVENT pEvent); 743 744 VBGLR3DECL(int) VbglR3DnDHGAcknowledgeOperation(uint32_t u32ClientId, uint32_t uAction); 745 VBGLR3DECL(int) VbglR3DnDHGRequestData(uint32_t u32ClientId, const char* pcszFormat); 761 VBGLR3DECL(int) VbglR3DnDConnect(PVBGLR3GUESTDNDCMDCTX pCtx); 762 VBGLR3DECL(int) VbglR3DnDDisconnect(PVBGLR3GUESTDNDCMDCTX pCtx); 763 764 VBGLR3DECL(int) VbglR3DnDProcessNextMessage(PVBGLR3GUESTDNDCMDCTX pCtx, CPVBGLR3DNDHGCMEVENT pEvent); 765 766 VBGLR3DECL(int) VbglR3DnDHGAcknowledgeOperation(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uAction); 767 VBGLR3DECL(int) VbglR3DnDHGRequestData(PVBGLR3GUESTDNDCMDCTX pCtx, const char* pcszFormat); 768 VBGLR3DECL(int) VbglR3DnDHGSetProgress(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uStatus, uint8_t uPercent, int rcErr); 746 769 # ifdef VBOX_WITH_DRAG_AND_DROP_GH 747 VBGLR3DECL(int) VbglR3DnDGHAcknowledgePending( uint32_t u32ClientId, uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats);748 VBGLR3DECL(int) VbglR3DnDGHSendData( uint32_t u32ClientId, const char *pszFormat, void *pvData, uint32_t cbData);749 VBGLR3DECL(int) VbglR3DnDGHSendError( uint32_t u32ClientId, int rcOp);770 VBGLR3DECL(int) VbglR3DnDGHAcknowledgePending(PVBGLR3GUESTDNDCMDCTX pCtx, uint32_t uDefAction, uint32_t uAllActions, const char* pcszFormats); 771 VBGLR3DECL(int) VbglR3DnDGHSendData(PVBGLR3GUESTDNDCMDCTX pCtx, const char *pszFormat, void *pvData, uint32_t cbData); 772 VBGLR3DECL(int) VbglR3DnDGHSendError(PVBGLR3GUESTDNDCMDCTX pCtx, int rcOp); 750 773 # endif /* VBOX_WITH_DRAG_AND_DROP_GH */ 751 774 /** @} */
Note:
See TracChangeset
for help on using the changeset viewer.