Changeset 87068 in vbox
- Timestamp:
- Dec 9, 2020 2:53:08 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 141837
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/GuestHost/SharedClipboard-transfers.h
r87067 r87068 913 913 int ShClTransferHttpServerCreateEx(PSHCLHTTPSERVER pSrv, uint16_t uPort); 914 914 int ShClTransferHttpServerDestroy(PSHCLHTTPSERVER pSrv); 915 void ShClTransferHttpServerInit(PSHCLHTTPSERVER pSrv); 915 916 int ShClTransferHttpServerRegisterTransfer(PSHCLHTTPSERVER pSrv, PSHCLTRANSFER pTransfer); 916 917 int ShClTransferHttpServerUnregisterTransfer(PSHCLHTTPSERVER pSrv, PSHCLTRANSFER pTransfer); -
trunk/src/VBox/GuestHost/SharedClipboard/clipboard-transfers-http.cpp
r87067 r87068 182 182 } 183 183 184 /** 185 * Destroys a Shared Clipboard HTTP server instance, internal version. 186 * 187 * @returns VBox status code. 188 * @param pSrv Shared Clipboard HTTP server instance to destroy. 189 */ 184 190 int shClTransferHttpServerDestroyInternal(PSHCLHTTPSERVER pSrv) 185 191 { … … 195 201 RTHttpServerResponseDestroy(&pSrv->Resp); 196 202 203 pSrv->hHTTPServer = NIL_RTHTTPSERVER; 204 197 205 return RTCritSectDelete(&pSrv->CritSect); 198 206 } 199 207 208 /** 209 * Locks the critical section of a Shared Clipboard HTTP server instance. 210 * 211 * @param pSrv Shared Clipboard HTTP server instance to lock. 212 */ 200 213 DECLINLINE(void) shClTransferHttpServerLock(PSHCLHTTPSERVER pSrv) 201 214 { … … 204 217 } 205 218 219 /** 220 * Unlocks the critical section of a Shared Clipboard HTTP server instance. 221 * 222 * @param pSrv Shared Clipboard HTTP server instance to unlock. 223 */ 206 224 DECLINLINE(void) shClTransferHttpServerUnlock(PSHCLHTTPSERVER pSrv) 207 225 { … … 209 227 AssertRC(rc2); 210 228 } 211 212 213 /*********************************************************************************************************************************214 * Public functions *215 *********************************************************************************************************************************/216 229 217 230 /** … … 230 243 } 231 244 245 246 /********************************************************************************************************************************* 247 * Public functions * 248 *********************************************************************************************************************************/ 249 250 /** 251 * Initializes a new Shared Clipboard HTTP server instance. 252 * 253 * @param pSrv HTTP server instance to initialize. 254 */ 255 void ShClTransferHttpServerInit(PSHCLHTTPSERVER pSrv) 256 { 257 AssertPtrReturnVoid(pSrv); 258 259 shClTransferHttpServerInitInternal(pSrv); 260 } 261 232 262 /** 233 263 * Creates a new Shared Clipboard HTTP server instance, extended version. … … 240 270 { 241 271 AssertPtrReturn(pSrv, VERR_INVALID_POINTER); 242 243 shClTransferHttpServerInitInternal(pSrv);244 272 245 273 RTHTTPSERVERCALLBACKS Callbacks; … … 374 402 AssertReturn(cch, VERR_BUFFER_OVERFLOW); 375 403 404 pSrvTx->pTransfer = pTransfer; 405 376 406 RTListAppend(&pSrv->lstTransfers, &pSrvTx->Node); 377 378 407 pSrv->cTransfers++; 408 409 LogFunc(("pTransfer=%p, idTransfer=%RU16, szPath=%s -> %RU32 transfers\n", 410 pSrvTx->pTransfer, pSrvTx->pTransfer->State.uID, pSrvTx->szPathVirtual, pSrv->cTransfers)); 411 412 LogRel2(("Shared Clipboard: Registered HTTP transfer %RU16, now %RU32 HTTP transfers total\n", 413 pTransfer->State.uID, pSrv->cTransfers)); 379 414 } 380 415 } … … 385 420 shClTransferHttpServerUnlock(pSrv); 386 421 422 LogFlowFuncLeaveRC(rc); 387 423 return rc; 388 424 } … … 403 439 404 440 AssertReturn(pSrv->cTransfers, VERR_WRONG_ORDER); 441 442 int rc = VINF_SUCCESS; 405 443 406 444 PSHCLHTTPSERVERTRANSFER pSrvTx; … … 418 456 pSrv->cTransfers--; 419 457 420 shClTransferHttpServerUnlock(pSrv); 421 return VINF_SUCCESS; 458 LogFunc(("pTransfer=%p, idTransfer=%RU16, szPath=%s -> %RU32 transfers\n", 459 pSrvTx->pTransfer, pSrvTx->pTransfer->State.uID, pSrvTx->szPathVirtual, pSrv->cTransfers)); 460 461 LogRel2(("Shared Clipboard: Unregistered HTTP transfer %RU16, now %RU32 HTTP transfers total\n", 462 pTransfer->State.uID, pSrv->cTransfers)); 463 464 rc = VINF_SUCCESS; 465 break; 422 466 } 423 467 } 424 468 425 469 shClTransferHttpServerUnlock(pSrv); 426 return VERR_NOT_FOUND; 470 471 LogFlowFuncLeaveRC(rc); 472 return rc; 427 473 } 428 474 -
trunk/src/VBox/GuestHost/SharedClipboard/clipboard-transfers.cpp
r87036 r87068 1142 1142 1143 1143 /** 1144 * Creates a n Clipboard transfer.1144 * Creates a clipboard transfer. 1145 1145 * 1146 1146 * @returns VBox status code. … … 1208 1208 1209 1209 /** 1210 * Destroys a n Clipboard transfer context struct.1210 * Destroys a clipboard transfer context struct. 1211 1211 * 1212 1212 * @returns VBox status code. … … 2660 2660 RT_ZERO(pTransferCtx->bmTransferIds); 2661 2661 2662 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP 2663 ShClTransferHttpServerInit(&pTransferCtx->HttpServer); 2664 #endif 2662 2665 ShClTransferCtxReset(pTransferCtx); 2663 2666 } … … 2709 2712 RTListForEach(&pTransferCtx->List, pTransfer, SHCLTRANSFER, Node) 2710 2713 ShClTransferReset(pTransfer); 2714 2715 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP 2716 /* @todo Anything to do here? */ 2717 #endif 2711 2718 } 2712 2719 … … 2813 2820 pTransferCtx->cTransfers++; 2814 2821 2822 int rc = VINF_SUCCESS; 2823 2824 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP 2825 if (!ShClTransferHttpServerIsRunning(&pTransferCtx->HttpServer)) /* Only one HTTP server per transfer context. */ 2826 rc = ShClTransferHttpServerCreate(&pTransferCtx->HttpServer, NULL /* puPort */); 2827 2828 if (RT_SUCCESS(rc)) 2829 rc = ShClTransferHttpServerRegisterTransfer(&pTransferCtx->HttpServer, pTransfer); 2830 #endif 2831 2815 2832 if (pidTransfer) 2816 2833 *pidTransfer = idTransfer; 2817 2834 2818 return VINF_SUCCESS; 2835 LogFlowFuncLeaveRC(rc); 2836 return rc; 2819 2837 } 2820 2838 … … 2851 2869 2852 2870 /** 2871 * Removes a transfer from a transfer context. 2872 * 2873 * @param pTransferCtx Transfer context to remove transfer from. 2874 * @param pTransfer Transfer to remove. 2875 */ 2876 static void shclTransferCtxTransferRemove(PSHCLTRANSFERCTX pTransferCtx, PSHCLTRANSFER pTransfer) 2877 { 2878 RTListNodeRemove(&pTransfer->Node); 2879 2880 Assert(pTransferCtx->cTransfers); 2881 pTransferCtx->cTransfers--; 2882 2883 Assert(pTransferCtx->cTransfers >= pTransferCtx->cRunning); 2884 2885 LogFlowFunc(("Now %RU32 transfers left\n", pTransferCtx->cTransfers)); 2886 2887 #ifdef VBOX_WITH_SHARED_CLIPBOARD_TRANSFERS_HTTP 2888 if (ShClTransferHttpServerIsRunning(&pTransferCtx->HttpServer)) 2889 { 2890 /* Try unregistering transfer (if it was registered before). */ 2891 int rc2 = ShClTransferHttpServerUnregisterTransfer(&pTransferCtx->HttpServer, pTransfer); 2892 if (RT_SUCCESS(rc2)) 2893 { 2894 /* No more registered transfers left? Tear down the HTTP server instance then. */ 2895 if (pTransferCtx->cTransfers == 0) 2896 rc2 = ShClTransferHttpServerDestroy(&pTransferCtx->HttpServer); 2897 } 2898 AssertRC(rc2); 2899 } 2900 #endif 2901 } 2902 2903 /** 2853 2904 * Unregisters a transfer from an Transfer context. 2854 2905 * 2855 2906 * @retval VINF_SUCCESS on success. 2856 2907 * @retval VERR_NOT_FOUND if the transfer ID was not found. 2857 * @param pTransferCtx 2908 * @param pTransferCtx Transfer context to unregister transfer from. 2858 2909 * @param idTransfer Transfer ID to unregister. 2859 2910 */ … … 2868 2919 if (pTransfer) 2869 2920 { 2870 RTListNodeRemove(&pTransfer->Node); 2871 2872 Assert(pTransferCtx->cTransfers); 2873 pTransferCtx->cTransfers--; 2874 2875 Assert(pTransferCtx->cTransfers >= pTransferCtx->cRunning); 2876 2877 LogFlowFunc(("Now %RU32 transfers left\n", pTransferCtx->cTransfers)); 2921 shclTransferCtxTransferRemove(pTransferCtx, pTransfer); 2878 2922 } 2879 2923 else … … 2888 2932 * This can be due to transfers which only have been announced but not / never being run. 2889 2933 * 2890 * @param pTransferCtx 2934 * @param pTransferCtx Transfer context to cleanup transfers for. 2891 2935 */ 2892 2936 void ShClTransferCtxCleanup(PSHCLTRANSFERCTX pTransferCtx) … … 2906 2950 if (ShClTransferGetStatus(pTransfer) != SHCLTRANSFERSTATUS_STARTED) 2907 2951 { 2952 shclTransferCtxTransferRemove(pTransferCtx, pTransfer); 2953 2908 2954 ShClTransferDestroy(pTransfer); 2909 RTListNodeRemove(&pTransfer->Node);2910 2955 2911 2956 RTMemFree(pTransfer); 2912 2957 pTransfer = NULL; 2913 2914 Assert(pTransferCtx->cTransfers);2915 pTransferCtx->cTransfers--;2916 2958 } 2917 2959 } … … 2922 2964 * 2923 2965 * @returns \c if maximum has been reached, \c false if not. 2924 * @param pTransferCtx 2966 * @param pTransferCtx Transfer context to determine value for. 2925 2967 */ 2926 2968 bool ShClTransferCtxTransfersMaximumReached(PSHCLTRANSFERCTX pTransferCtx)
Note:
See TracChangeset
for help on using the changeset viewer.