示例#1
0
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");

}
示例#2
0
void
ManagedWidget::Clear()
{
  Unprepare();

  delete widget;
  widget = NULL;
}
示例#3
0
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;
}
示例#4
0
    /**
     * 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;
    }
示例#5
0
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;
}
示例#6
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;
}
示例#7
0
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;
};
示例#9
0
CTcpSocket::~CTcpSocket()
{
	if (m_socket != INVALID_SOCKET)
		Unprepare();
}
示例#10
0
void CTcpSocket::OnClose()
{
	Unprepare();
}
示例#11
0
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;
}