Changeset 90912 in vbox
- Timestamp:
- Aug 26, 2021 1:38:34 PM (3 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 6 edited
-
Devices/Audio/AudioTestService.h (modified) (1 diff)
-
Devices/Audio/AudioTestServiceTcp.cpp (modified) (10 diffs)
-
Devices/Audio/DrvHostAudioValidationKit.cpp (modified) (1 diff)
-
Devices/Audio/testcase/tstAudioTestService.cpp (modified) (2 diffs)
-
ValidationKit/utils/audio/vkatCommon.cpp (modified) (7 diffs)
-
ValidationKit/utils/audio/vkatInternal.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/AudioTestService.h
r90830 r90912 178 178 int AudioTestSvcShutdown(PATSSERVER pThis); 179 179 180 /** 181 * Enumeration for the server connection mode. 182 * Only applies to certain transport implementation like TCP/IP. 183 */ 184 typedef enum ATSCONNMODE 185 { 186 /** Both: Uses parallel client and server connection methods (via threads). */ 187 ATSCONNMODE_BOTH = 0, 188 /** Client only: Connects to a server. */ 189 ATSCONNMODE_CLIENT, 190 /** Server only: Listens for new incoming client connections. */ 191 ATSCONNMODE_SERVER, 192 /** 32bit hack. */ 193 ATSCONNMODE_32BIT_HACK = 0x7fffffff 194 } ATSCONNMODE; 195 180 196 /** TCP/IP options for the ATS server. 181 197 * @todo Make this more abstract later. */ 182 198 enum ATSTCPOPT 183 199 { 184 ATSTCPOPT_ MODE = 5000,200 ATSTCPOPT_CONN_MODE = 5000, 185 201 ATSTCPOPT_BIND_ADDRESS, 186 202 ATSTCPOPT_BIND_PORT, -
trunk/src/VBox/Devices/Audio/AudioTestServiceTcp.cpp
r90887 r90912 68 68 69 69 /** 70 * Enumeration for the TCP/IP connection mode.71 */72 typedef enum ATSTCPMODE73 {74 /** Both: Uses parallel client and server connection methods (via threads). */75 ATSTCPMODE_BOTH = 0,76 /** Client only: Connects to a server. */77 ATSTCPMODE_CLIENT,78 /** Server only: Listens for new incoming client connections. */79 ATSTCPMODE_SERVER80 } ATSTCPMODE;81 82 /**83 70 * Structure for keeping Audio Test Service (ATS) transport instance-specific data. 84 71 */ … … 88 75 RTCRITSECT CritSect; 89 76 /** Connection mode to use. */ 90 ATS TCPMODE enmMode;77 ATSCONNMODE enmConnMode; 91 78 /** The addresses to bind to. Empty string means any. */ 92 79 char szBindAddr[256]; … … 314 301 int rc; 315 302 316 LogFunc(("enm Mode=%#x\n", pThis->enmMode));317 318 if (pThis->enm Mode == ATSTCPMODE_SERVER)303 LogFunc(("enmConnMode=%#x\n", pThis->enmConnMode)); 304 305 if (pThis->enmConnMode == ATSCONNMODE_SERVER) 319 306 { 320 307 pClient->fFromServer = true; … … 322 309 LogFunc(("RTTcpServerListen2 -> %Rrc\n", rc)); 323 310 } 324 else if (pThis->enm Mode == ATSTCPMODE_CLIENT)311 else if (pThis->enmConnMode == ATSCONNMODE_CLIENT) 325 312 { 326 313 pClient->fFromServer = false; … … 339 326 else 340 327 { 341 Assert(pThis->enm Mode == ATSTCPMODE_BOTH);328 Assert(pThis->enmConnMode == ATSCONNMODE_BOTH); 342 329 343 330 /* … … 731 718 int rc = VINF_SUCCESS; 732 719 733 if (pThis->enm Mode != ATSTCPMODE_CLIENT)720 if (pThis->enmConnMode != ATSCONNMODE_CLIENT) 734 721 { 735 722 rc = RTTcpServerCreateEx(pThis->szBindAddr[0] ? pThis->szBindAddr : NULL, pThis->uBindPort, &pThis->pTcpServer); … … 771 758 switch (ch) 772 759 { 773 case ATSTCPOPT_MODE: 774 if (!strcmp(pVal->psz, "both")) 775 pThis->enmMode = ATSTCPMODE_BOTH; 776 else if (!strcmp(pVal->psz, "client")) 777 pThis->enmMode = ATSTCPMODE_CLIENT; 778 else if (!strcmp(pVal->psz, "server")) 779 pThis->enmMode = ATSTCPMODE_SERVER; 780 else 781 return RTMsgErrorRc(VERR_INVALID_PARAMETER, "Invalid TCP mode: '%s'\n", pVal->psz); 760 case ATSTCPOPT_CONN_MODE: 761 pThis->enmConnMode = (ATSCONNMODE)pVal->u32; 782 762 return VINF_SUCCESS; 783 763 … … 818 798 { 819 799 RTStrmPrintf(pStream, 820 " --tcp- mode <both|client|server>\n"821 " Selects the mode of operation.\n"822 " Default: both\n"823 " --tcp-bind-addr ess<address>\n"800 " --tcp-conn-mode <0=both|1=client|2=server>\n" 801 " Selects the connection mode.\n" 802 " Default: 0 (both)\n" 803 " --tcp-bind-addr[ess] <address>\n" 824 804 " The address(es) to listen to TCP connection on. Empty string\n" 825 805 " means any address, this is the default.\n" … … 827 807 " The port to listen to TCP connections on.\n" 828 808 " Default: %u\n" 829 " --tcp-connect-addr ess<address>\n"809 " --tcp-connect-addr[ess] <address>\n" 830 810 " The address of the server to try connect to in client mode.\n" 831 811 " Default: " ATS_TCP_DEF_CONNECT_GUEST_STR "\n" … … 839 819 static const RTGETOPTDEF g_TcpOpts[] = 840 820 { 841 { "--tcp-mode", ATSTCPOPT_MODE, RTGETOPT_REQ_STRING }, 821 { "--tcp-conn-mode", ATSTCPOPT_CONN_MODE, RTGETOPT_REQ_STRING }, 822 { "--tcp-bind-addr", ATSTCPOPT_BIND_ADDRESS, RTGETOPT_REQ_STRING }, 842 823 { "--tcp-bind-address", ATSTCPOPT_BIND_ADDRESS, RTGETOPT_REQ_STRING }, 843 824 { "--tcp-bind-port", ATSTCPOPT_BIND_PORT, RTGETOPT_REQ_UINT16 }, 825 { "--tcp-connect-addr", ATSTCPOPT_CONNECT_ADDRESS, RTGETOPT_REQ_STRING }, 844 826 { "--tcp-connect-address", ATSTCPOPT_CONNECT_ADDRESS, RTGETOPT_REQ_STRING }, 845 827 { "--tcp-connect-port", ATSTCPOPT_CONNECT_PORT, RTGETOPT_REQ_UINT16 } -
trunk/src/VBox/Devices/Audio/DrvHostAudioValidationKit.cpp
r90765 r90912 1114 1114 RT_ZERO(Val); 1115 1115 1116 Val. psz = "server"; /** @ŧodo No client connection mode needed here (yet). Make this configurable via CFGM. */1117 rc2 = AudioTestSvcHandleOption(&pThis->Srv, ATSTCPOPT_ MODE, &Val);1116 Val.u32 = ATSCONNMODE_SERVER; /** @todo No client connection mode needed here (yet). Make this configurable via CFGM. */ 1117 rc2 = AudioTestSvcHandleOption(&pThis->Srv, ATSTCPOPT_CONN_MODE, &Val); 1118 1118 AssertRC(rc2); 1119 1119 -
trunk/src/VBox/Devices/Audio/testcase/tstAudioTestService.cpp
r90555 r90912 84 84 85 85 Val.psz = "server"; 86 rc = AudioTestSvcHandleOption(&Srv, ATSTCPOPT_ MODE, &Val);86 rc = AudioTestSvcHandleOption(&Srv, ATSTCPOPT_CONN_MODE, &Val); 87 87 RTTEST_CHECK_RC_OK(hTest, rc); 88 88 … … 118 118 119 119 Val.psz = "client"; 120 rc = AudioTestSvcClientHandleOption(&Client, ATSTCPOPT_ MODE, &Val);120 rc = AudioTestSvcClientHandleOption(&Client, ATSTCPOPT_CONN_MODE, &Val); 121 121 RTTEST_CHECK_RC_OK(hTest, rc); 122 122 -
trunk/src/VBox/ValidationKit/utils/audio/vkatCommon.cpp
r90898 r90912 693 693 RT_ZERO(Val); 694 694 695 int rc; 696 697 if (!pTcpOpts->szBindAddr[0]) 698 { 699 Val.psz = "client"; 700 } 701 else if (!pTcpOpts->szConnectAddr[0]) 702 { 703 Val.psz = "server"; 704 } 705 else 706 Val.psz = "both"; 707 708 rc = AudioTestSvcClientHandleOption(pClient, ATSTCPOPT_MODE, &Val); 695 Val.u32 = pTcpOpts->enmConnMode; 696 int rc = AudioTestSvcClientHandleOption(pClient, ATSTCPOPT_CONN_MODE, &Val); 709 697 AssertRCReturn(rc, rc); 710 698 711 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Connecting %s (connection mode '%s') ...\n", pszWhat, Val.psz); 712 713 if ( !RTStrCmp(Val.psz, "client") 714 || !RTStrCmp(Val.psz, "both")) 715 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Connecting to %s:%RU32\n", pTcpOpts->szConnectAddr, pTcpOpts->uConnectPort); 716 717 if ( !RTStrCmp(Val.psz, "server") 718 || !RTStrCmp(Val.psz, "both")) 719 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Listening at %s:%RU32\n", pTcpOpts->szBindAddr, pTcpOpts->uBindPort); 720 721 if (pTcpOpts->szBindAddr[0]) 722 { 723 Val.psz = pTcpOpts->szBindAddr; 724 rc = AudioTestSvcClientHandleOption(pClient, ATSTCPOPT_BIND_ADDRESS, &Val); 725 AssertRCReturn(rc, rc); 726 } 727 728 if (pTcpOpts->uBindPort) 729 { 699 if ( pTcpOpts->enmConnMode == ATSCONNMODE_BOTH 700 || pTcpOpts->enmConnMode == ATSCONNMODE_SERVER) 701 { 702 Assert(pTcpOpts->uBindPort); /* Always set by the caller. */ 730 703 Val.u16 = pTcpOpts->uBindPort; 731 704 rc = AudioTestSvcClientHandleOption(pClient, ATSTCPOPT_BIND_PORT, &Val); 732 705 AssertRCReturn(rc, rc); 733 } 734 735 if (pTcpOpts->szConnectAddr[0]) 736 { 737 Val.psz = pTcpOpts->szConnectAddr; 738 rc = AudioTestSvcClientHandleOption(pClient, ATSTCPOPT_CONNECT_ADDRESS, &Val); 739 AssertRCReturn(rc, rc); 740 } 741 742 if (pTcpOpts->uConnectPort) 743 { 706 707 if (pTcpOpts->szBindAddr[0]) 708 { 709 Val.psz = pTcpOpts->szBindAddr; 710 rc = AudioTestSvcClientHandleOption(pClient, ATSTCPOPT_BIND_ADDRESS, &Val); 711 AssertRCReturn(rc, rc); 712 } 713 else 714 { 715 RTTestFailed(g_hTest, "No bind address specified!\n"); 716 return VERR_INVALID_PARAMETER; 717 } 718 719 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Connecting %s by listening as server at %s:%RU32 ...\n", 720 pszWhat, pTcpOpts->szBindAddr, pTcpOpts->uBindPort); 721 } 722 723 724 if ( pTcpOpts->enmConnMode == ATSCONNMODE_BOTH 725 || pTcpOpts->enmConnMode == ATSCONNMODE_CLIENT) 726 { 727 Assert(pTcpOpts->uConnectPort); /* Always set by the caller. */ 744 728 Val.u16 = pTcpOpts->uConnectPort; 745 729 rc = AudioTestSvcClientHandleOption(pClient, ATSTCPOPT_CONNECT_PORT, &Val); 746 730 AssertRCReturn(rc, rc); 731 732 if (pTcpOpts->szConnectAddr[0]) 733 { 734 Val.psz = pTcpOpts->szConnectAddr; 735 rc = AudioTestSvcClientHandleOption(pClient, ATSTCPOPT_CONNECT_ADDRESS, &Val); 736 AssertRCReturn(rc, rc); 737 } 738 else 739 { 740 RTTestFailed(g_hTest, "No connect address specified!\n"); 741 return VERR_INVALID_PARAMETER; 742 } 743 744 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Connecting %s by connecting as client to %s:%RU32 ...\n", 745 pszWhat, pTcpOpts->szConnectAddr, pTcpOpts->uConnectPort); 747 746 } 748 747 … … 773 772 RT_ZERO(Val); 774 773 775 if (pTcpOpts->szBindAddr[0]) 776 { 777 Val.psz = pTcpOpts->szBindAddr; 778 AudioTestSvcHandleOption(pSrv, ATSTCPOPT_BIND_ADDRESS, &Val); 779 } 780 781 if (pTcpOpts->uBindPort) 782 { 774 Val.u32 = pTcpOpts->enmConnMode; 775 AudioTestSvcHandleOption(pSrv, ATSTCPOPT_CONN_MODE, &Val); 776 777 if ( pTcpOpts->enmConnMode == ATSCONNMODE_BOTH 778 || pTcpOpts->enmConnMode == ATSCONNMODE_SERVER) 779 { 780 Assert(pTcpOpts->uBindPort); /* Always set by the caller. */ 783 781 Val.u16 = pTcpOpts->uBindPort; 784 782 AudioTestSvcHandleOption(pSrv, ATSTCPOPT_BIND_PORT, &Val); 785 } 786 787 if (pTcpOpts->szConnectAddr[0]) 788 { 789 Val.psz = pTcpOpts->szConnectAddr; 790 AudioTestSvcHandleOption(pSrv, ATSTCPOPT_CONNECT_ADDRESS, &Val); 791 } 792 793 if (pTcpOpts->uConnectPort) 794 { 783 784 if (pTcpOpts->szBindAddr[0]) 785 { 786 Val.psz = pTcpOpts->szBindAddr; 787 AudioTestSvcHandleOption(pSrv, ATSTCPOPT_BIND_ADDRESS, &Val); 788 } 789 else 790 { 791 RTTestFailed(g_hTest, "No bind address specified!\n"); 792 return VERR_INVALID_PARAMETER; 793 } 794 795 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Starting server for %s at %s:%RU32 ...\n", 796 pszDesc, pTcpOpts->szBindAddr, pTcpOpts->uBindPort); 797 } 798 799 800 if ( pTcpOpts->enmConnMode == ATSCONNMODE_BOTH 801 || pTcpOpts->enmConnMode == ATSCONNMODE_CLIENT) 802 { 803 Assert(pTcpOpts->uConnectPort); /* Always set by the caller. */ 795 804 Val.u16 = pTcpOpts->uConnectPort; 796 805 AudioTestSvcHandleOption(pSrv, ATSTCPOPT_CONNECT_PORT, &Val); 797 } 798 799 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Starting server for %s at %s:%RU32 ...\n", 800 pszDesc, pTcpOpts->szBindAddr[0] ? pTcpOpts->szBindAddr : "0.0.0.0", pTcpOpts->uBindPort); 801 if (pTcpOpts->szConnectAddr[0]) 802 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Trying %s to connect as client to %s:%RU32 ...\n", 803 pszDesc, pTcpOpts->szConnectAddr[0] ? pTcpOpts->szConnectAddr : "0.0.0.0", pTcpOpts->uConnectPort); 806 807 if (pTcpOpts->szConnectAddr[0]) 808 { 809 Val.psz = pTcpOpts->szConnectAddr; 810 AudioTestSvcHandleOption(pSrv, ATSTCPOPT_CONNECT_ADDRESS, &Val); 811 } 812 else 813 { 814 RTTestFailed(g_hTest, "No connect address specified!\n"); 815 return VERR_INVALID_PARAMETER; 816 } 817 818 RTTestPrintf(g_hTest, RTTESTLVL_ALWAYS, "Starting server for %s by connecting as client to %s:%RU32 ...\n", 819 pszDesc, pTcpOpts->szConnectAddr, pTcpOpts->uConnectPort); 820 } 804 821 805 822 int rc = AudioTestSvcInit(pSrv, pCallbacks); … … 897 914 && !pTstEnv->TcpOpts.szBindAddr[0]) 898 915 RTStrCopy(pTstEnv->TcpOpts.szBindAddr, sizeof(pTstEnv->TcpOpts.szBindAddr), "0.0.0.0"); 916 917 /* 918 * Determine connection mode based on set variables. 919 */ 920 if ( pTstEnv->TcpOpts.szBindAddr[0] 921 && pTstEnv->TcpOpts.szConnectAddr[0]) 922 { 923 pTstEnv->TcpOpts.enmConnMode = ATSCONNMODE_BOTH; 924 } 925 else if (pTstEnv->TcpOpts.szBindAddr[0]) 926 pTstEnv->TcpOpts.enmConnMode = ATSCONNMODE_SERVER; 927 else /* "Reversed mode", i.e. used for NATed VMs. */ 928 pTstEnv->TcpOpts.enmConnMode = ATSCONNMODE_CLIENT; 899 929 900 930 /* Set a back reference to the test environment for the callback context. */ … … 923 953 pTstEnv->TcpOpts.uConnectPort = ATS_TCP_DEF_CONNECT_PORT_GUEST; 924 954 925 /**926 * Note: Don't set pTstEnv->TcpOpts.szTcpConnectAddr by default here, as this specifies what connection mode927 * (client / server / both) we use on the guest.928 */929 930 955 /* 931 956 * Start the ATS (Audio Test Service) on the guest side. … … 935 960 * Note that we have to bind to "0.0.0.0" by default so that the host can connect to it. 936 961 */ 937 rc = audioTestEnvConfigureAndStartTcpServer(&pTstEnv->Srv, &Callbacks, " Guest ATS", &pTstEnv->TcpOpts);962 rc = audioTestEnvConfigureAndStartTcpServer(&pTstEnv->Srv, &Callbacks, "guest", &pTstEnv->TcpOpts); 938 963 } 939 964 else /* Host mode */ … … 955 980 if (RT_SUCCESS(rc)) 956 981 rc = audioTestEnvConnectViaTcp(pTstEnv, &pTstEnv->u.Host.AtsClGuest, 957 " Host -> Guest ATS", &pTstEnv->TcpOpts);982 "host -> guest", &pTstEnv->TcpOpts); 958 983 if (RT_SUCCESS(rc)) 959 984 { 960 985 AUDIOTESTENVTCPOPTS ValKitTcpOpts; 961 986 RT_ZERO(ValKitTcpOpts); 987 988 /* We only connect as client to the Validation Kit audio driver ATS. */ 989 ValKitTcpOpts.enmConnMode = ATSCONNMODE_CLIENT; 962 990 963 991 /* For now we ASSUME that the Validation Kit audio driver ATS runs on the same host as VKAT (this binary) runs on. */ … … 968 996 if (RT_SUCCESS(rc)) 969 997 rc = audioTestEnvConnectViaTcp(pTstEnv, &pTstEnv->u.Host.AtsClValKit, 970 " Host -> Validation Kit Host Audio Driver ATS", &ValKitTcpOpts);998 "host -> valkit", &ValKitTcpOpts); 971 999 } 972 1000 } -
trunk/src/VBox/ValidationKit/utils/audio/vkatInternal.h
r90894 r90912 182 182 typedef struct AUDIOTESTENVTCPOPTS 183 183 { 184 /** Connection mode(s) to use. */ 185 ATSCONNMODE enmConnMode; 184 186 /** Bind address (server mode). When empty, "0.0.0.0" (any host) will be used. */ 185 187 char szBindAddr[128];
Note:
See TracChangeset
for help on using the changeset viewer.

