void CACMStream::Convert(LPVOID src, DWORD size) { m_mmr = 0; if (m_hdr->fdwStatus & ACMSTREAMHEADER_STATUSF_PREPARED) { if (src != m_hdr->pbSrc || size > m_hdr->dwSrcUser) { Unprepare(); Prepare(src, size); } } else { Prepare(src, size); } m_mmr = acmStreamConvert(m_strm, m_hdr, ACM_STREAMCONVERTF_END| ACM_STREAMCONVERTF_START); if (m_mmr) raiseError(m_mmr, "Error during conversion"); }
void ManagedWidget::Clear() { Unprepare(); delete widget; widget = NULL; }
BOOL CTcpSocket::Call(ULONG uPeerIP, HWND hWnd, int iPort) { SOCKADDR_IN addr; int err; m_hWnd = hWnd; m_iPort = (iPort == 0) ? TCP_DEFAULT_PORT : iPort; if (Prepare() == FALSE) return FALSE; // Create a socket for this connection. m_socket = WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO, m_pTcpInfo, 0, 0); if (m_socket == INVALID_SOCKET) { OutputDebugString(_T("Could not open a socket in Call\n")); goto Error; } else { // Set up socket for windows message event notification. WSAAsyncSelect(m_socket, m_hWnd, WM_TCP_SOCKET_CONNECT, FD_CONNECT); } addr.sin_family = AF_INET; addr.sin_port = htons(m_iPort); addr.sin_addr.s_addr = uPeerIP; err = WSAConnect(m_socket, (SOCKADDR *)&addr, m_pTcpInfo->iMaxSockAddr, NULL, NULL, NULL, NULL); if (err == SOCKET_ERROR) { err = WSAGetLastError(); if (err != WSAEWOULDBLOCK) { OutputDebugString(_T("WSAConnect failed\n")); goto Error; } } else { OutputDebugString(_T("WSAConnect should have returned SOCKET_ERROR\n")); goto Error; } m_uPeerIP = addr.sin_addr.s_addr; m_strPeerName = inet_ntoa(addr.sin_addr); OutputDebugString(_T("Calling ") + m_strPeerName + _T("\n")); return TRUE; Error: Unprepare(); return FALSE; }
/** * Delete the #Widget or #Window object. */ void Delete() { Unprepare(); if (type == Type::WIDGET) { assert(widget != nullptr); assert(window == nullptr); assert(!shown); assert(!prepared); delete widget; return; } delete window; }
ULONG CTcpSocket::OnConnect(LPARAM lParam) { int err; DWORD dwThreadId; // needed for CreateThread err = WSAGETSELECTERROR(lParam); // Check to see if there was an error on the connection attempt. if (err) { // Some kind of error occurred. if (err == WSAECONNREFUSED) { OutputDebugString(m_strPeerName + _T(" 处没有应用程序应答\n")); } else { OutputDebugString(m_strPeerName + _T(" 没有在网络上\n")); } goto Error; } WSAAsyncSelect(m_socket, m_hWnd, 0, 0); // Put Connection in Event Object Notification Mode. WSAEventSelect(m_socket, m_hNetEvent, FD_READ | FD_WRITE | FD_CLOSE); // Start the I/O thread, and save the thread handle. m_hIOThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, this, 0, &dwThreadId); if (m_hIOThread == NULL) { OutputDebugString(_T("CreateThread() failed in OnConnect()\n")); goto Error; } OutputDebugString(m_strPeerName + _T(" joined the meeting\n")); return m_uPeerIP; Error: Unprepare(); return 0; }
BOOL CTcpSocket::Prepare() { m_hNetEvent = CreateEvent(NULL, FALSE, FALSE, NULL); m_hOutputEvent = CreateEvent(NULL, FALSE, FALSE, NULL); m_hQuitEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (!m_hNetEvent || !m_hOutputEvent || !m_hQuitEvent) { OutputDebugString(_T("CreateEvent fail in Prepare connection data\n")); goto Error; } m_eventArray[0] = m_hNetEvent; m_eventArray[1] = m_hOutputEvent; m_eventArray[2] = m_hQuitEvent; return TRUE; Error: Unprepare(); return FALSE; }
CACMStream::~CACMStream() { Unprepare(); Close(); }
// prepares the comm interface for use - MUST be invoked before any data can be sent/received void CCommunicationInterface::PrepareForUse(BOOL bUseNetwork, BOOL bClient) { // clear the network conditions emulation data _pbsSend.Clear(); _pbsRecv.Clear(); // if the network is already initialized, shut it down before proceeding if (cm_bNetworkInitialized) { Unprepare(); } // make sure winsock is off (could be on if enumeration was triggered) GameAgent_EnumCancel(); EndWinsock(); if (bUseNetwork) { CPrintF(TRANSV("Initializing TCP/IP...\n")); if (bClient) { CPrintF(TRANSV(" opening as client\n")); } else { CPrintF(TRANSV(" opening as server\n")); } // make sure winsock is on InitWinsock(); // no address by default cm_ulLocalHost = 0; // if there is a desired local address if (net_strLocalHost!="") { CPrintF(TRANSV(" user forced local address: %s\n"), (const char*)net_strLocalHost); // use that address cm_strName = net_strLocalHost; cm_ulLocalHost = StringToAddress(cm_strName); // if invalid if (cm_ulLocalHost==0 || cm_ulLocalHost==-1) { cm_ulLocalHost=0; // report it CPrintF(TRANSV(" requested local address is invalid\n")); } } // if no valid desired local address CPrintF(TRANSV(" getting local addresses\n")); // get default char hostname[256]; gethostname(hostname, sizeof(hostname)-1); cm_strName = hostname; // lookup the host HOSTENT *phe = gethostbyname(cm_strName); // if succeeded if (phe!=NULL) { // get the addresses cm_strAddress = ""; for(INDEX i=0; phe->h_addr_list[i]!=NULL; i++) { if (i>0) { cm_strAddress += ", "; } cm_strAddress += inet_ntoa(*(const in_addr *)phe->h_addr_list[i]); } } CPrintF(TRANSV(" local addresses: %s (%s)\n"), (const char *) cm_strName, (const char *) cm_strAddress); CPrintF(TRANSV(" port: %d\n"), net_iPort); // try to open master UDP socket try { OpenSocket_t(cm_ulLocalHost, bClient?0:net_iPort); cci_pbMasterInput.pb_ppbsStats = NULL; cci_pbMasterOutput.pb_ppbsStats = NULL; cm_ciBroadcast.SetLocal(NULL); CPrintF(TRANSV(" opened socket: \n")); } catch (char *strError) { CPrintF(TRANSV(" cannot open UDP socket: %s\n"), strError); } } cm_bNetworkInitialized = cci_bWinSockOpen; };
CTcpSocket::~CTcpSocket() { if (m_socket != INVALID_SOCKET) Unprepare(); }
void CTcpSocket::OnClose() { Unprepare(); }
ULONG CTcpSocket::Accept(SOCKET socketListen, LPARAM lParam, HWND hWnd, int iPort) { SOCKADDR_IN addr; int iAddrLen = sizeof(addr); int err; DWORD dwThreadId; // needed for CreateThread err = WSAGETSELECTERROR(lParam); // Check to see if there was an error on the connection attempt. if (err) { // Some kind of error occurred. if (err == WSAENETDOWN) { OutputDebugString(_T("The network is down\n")); } else { OutputDebugString(_T("Unknown error on FD_ACCEPT\n")); } return 0; } m_hWnd = hWnd; m_iPort = (iPort == 0) ? TCP_DEFAULT_PORT : iPort; if (Prepare() == FALSE) return 0; m_socket = WSAAccept(socketListen, (SOCKADDR *)&addr, &iAddrLen, NULL, (DWORD)NULL); if (m_socket == INVALID_SOCKET) { err = WSAGetLastError(); if (err != WSAECONNREFUSED) { OutputDebugString(_T("WSAAccept failed\n")); goto Error; } else { OutputDebugString(_T("The connection attempt has been refused\n")); goto Error; } } m_uPeerIP = addr.sin_addr.s_addr; m_strPeerName = inet_ntoa(addr.sin_addr); WSAAsyncSelect(m_socket, m_hWnd, 0, 0); // Put Connection in Event Object Notification Mode. WSAEventSelect(m_socket, m_hNetEvent, FD_READ | FD_WRITE | FD_CLOSE); // Start the I/O thread, and save the thread handle. m_hIOThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunc, this, 0, &dwThreadId); if (m_hIOThread == NULL) { OutputDebugString(_T("CreateThread() failed in HandleAcceptMessage()\n")); goto Error; } OutputDebugString(m_strPeerName + _T(" joined the meeting\n")); return m_uPeerIP; Error: Unprepare(); return 0; }