⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conn.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    }        // get local host name    struct hostent* hptr;        theErr = get_host_by_name(pHostname, hptr);    if (FAILED(theErr))    { 	goto bail;    }    HX_ASSERT(hptr);#ifndef _MACINTOSH    if (hptr->h_addrtype == AF_INET)     {	// get # of interfaces	UINT32 ulIFCount = 0;    	for (pptr = hptr->h_addr_list; *pptr != NULL; pptr++)     	{	    ulIFCount++;	}	if (ulIFCount > ulNumInterfaces)	{	    // tell the user how many it needs.	    ulNumInterfaces = ulIFCount;	    theErr = HXR_BUFFERTOOSMALL;	    goto bail;	}		ulNumInterfaces= 0;	for (pptr = hptr->h_addr_list; *pptr != NULL; pptr++)	{	    pulInterfaces[ulNumInterfaces++] = DwToHost(*(UINT32*)*pptr);	}	HX_ASSERT(ulNumInterfaces == ulIFCount);	theErr = HXR_OK;    }    else    {	theErr = HXR_UNEXPECTED;    }#endifbail:        return theErr;    }#if defined(HELIX_FEATURE_SECURECONN)CHXMapPtrToPtr secureconnhelper::zm_ConnMap;// xxxbobclark yeesh, why this is required I'm still working on.// Yuck nonetheless.void WasteTime(){#ifdef _MACINTOSH	ULONG32 startTix = HX_GET_TICKCOUNT();	while (CALCULATE_ELAPSED_TICKS(startTix, HX_GET_TICKCOUNT()) < 200)	{//	    EventRecord er;//	    ::EventAvail(everyEvent, &er);	}#endif}conn*secureconnhelper::GetConn(LONG32 fakeFD){    conn* pConn = (conn*)zm_ConnMap[(void*)fakeFD];        HX_ASSERT(pConn != NULL);        return pConn;}voidsecureconnhelper::SetConn(LONG32 fakeFD, conn* pConn){    HX_ASSERT(zm_ConnMap[(void*)fakeFD] == NULL);        zm_ConnMap[(void*)fakeFD] = pConn;}long secureconnhelper::readCallback(LONG32 fakeFD, void* buff, LONG32 len){    conn* pConn = GetConn(fakeFD);        HX_RESULT result = HXR_FAIL;        if (pConn)    {	UINT16 bytes = (UINT16) len;	result = pConn->read(buff, &bytes);		WasteTime();		if (result == HXR_OK)	{	    return bytes;	}    }    return -1;}long secureconnhelper::writeCallback(LONG32 fakeFD, void* buff, LONG32 len){    conn* pConn = GetConn(fakeFD);        HX_RESULT result = HXR_FAIL;        if (pConn)    {	UINT16 bytes = (UINT16) len;	result = pConn->write(buff, &bytes);		WasteTime();		if (result == HXR_OK)	{	    return bytes;	}    }    return -1;}void secureconnhelper::closeCallback(LONG32 fakeFD){    conn* pConn = GetConn(fakeFD);        if (pConn)    {	pConn->done();    }}LONG32 secureconn::zm_Count = 0;secureconn::secureconn(IHXSSL* pHXSSL)  : m_lRefCount(0)  , m_pActualConn(0)  , m_FakeFD(-1)  , m_pHXSSL(NULL){    m_pActualConn = conn::new_socket(HX_TCP_SOCKET);    m_FakeFD = ++zm_Count;    secureconnhelper::SetConn(m_FakeFD, m_pActualConn);    m_pHXSSL = pHXSSL;    HX_ASSERT(m_pHXSSL != NULL);    m_pHXSSL->AddRef();        m_pHXSSL->SetCallbacks((void*)secureconnhelper::readCallback,                           (void*)secureconnhelper::writeCallback,                           (void*)secureconnhelper::closeCallback);        m_pHXSSL->Initialize();}secureconn::~secureconn(){    HX_ASSERT(m_pActualConn != NULL);    m_pHXSSL->Shutdown();        HX_RELEASE(m_pHXSSL);    if (m_pActualConn)    {        m_pActualConn->Release();        m_pActualConn = NULL;    }}ULONG32	secureconn::AddRef(){    return InterlockedIncrement(&m_lRefCount);}ULONG32 secureconn::Release(){    if (InterlockedDecrement(&m_lRefCount) > 0)    {        return m_lRefCount;    }    delete this;    return 0;}HX_RESULTsecureconn::connect(const char* host, UINT16 port, UINT16 blocking, ULONG32 ulPlatform){    HX_ASSERT(m_pActualConn != NULL);    HX_ASSERT(m_pHXSSL != NULL);        HX_RESULT result = m_pActualConn->connect(host, port, blocking, ulPlatform);    WasteTime();        if (result == HXR_OK)    {	result = m_pHXSSL->PostConnect(m_FakeFD);    }        return result;}HX_RESULTsecureconn::read(void* buf, UINT16* size){    HX_ASSERT(m_pActualConn != NULL);        HX_ASSERT(m_pHXSSL != NULL);        LONG32 len = *size;        len = m_pHXSSL->Read(m_FakeFD, buf, len);        if (len == -1) return HXR_FAIL;        *size = (UINT16) len;    return HXR_OK;}HX_RESULTsecureconn::write(void* buf, UINT16* size){    HX_ASSERT(m_pActualConn != NULL);    HX_ASSERT(m_pHXSSL != NULL);        LONG32 len = *size;        len = m_pHXSSL->Write(m_FakeFD, buf, len);        if (len == -1) return HXR_FAIL;        *size = (UINT16) len;    return HXR_OK;}HX_RESULT secureconn::blocking(){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->blocking();}HX_RESULT secureconn::nonblocking(){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->nonblocking();}HX_RESULT secureconn::readfrom(REF(IHXBuffer*)   pBuffer,					 REF(UINT32)	    ulAddress,					 REF(UINT16)	    ulPort){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->readfrom(pBuffer, ulAddress, ulPort);}HX_RESULT secureconn::writeto(void 		*buf,					 UINT16 	*len, 					 ULONG32 	addr,					 UINT16 	port){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->writeto(buf, len, addr, port);}ULONG32 secureconn::get_addr(){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->get_addr();}UINT16 secureconn::get_local_port(){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->get_local_port();}HX_RESULTsecureconn::dns_find_ip_addr(const char * host, UINT16 blocking){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->dns_find_ip_addr(host, blocking);}BOOLsecureconn::dns_ip_addr_found(BOOL * valid, ULONG32 *addr){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->dns_ip_addr_found(valid, addr);}voidsecureconn::done(){    HX_ASSERT(m_pActualConn != NULL);        m_pActualConn->done();}HX_RESULTsecureconn::init(UINT32		local_addr,		UINT16 		port, 		 UINT16 	blocking){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->init(local_addr, port, blocking);}HX_RESULTsecureconn::listen(ULONG32	ulLocalAddr,		 UINT16		port,		 UINT16 	backlog,		 UINT16		blocking,		 ULONG32	ulPlatform){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->listen(ulLocalAddr, port, backlog, blocking, ulPlatform);}HX_RESULTsecureconn::join_multicast_group(ULONG32 addr, ULONG32 if_addr){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->join_multicast_group(addr, if_addr);}HX_RESULTsecureconn::leave_multicast_group(ULONG32 addr, ULONG32 if_addr){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->leave_multicast_group(addr, if_addr);}HX_RESULTsecureconn::set_broadcast(BOOL enable){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->set_broadcast(enable);}HX_RESULTsecureconn::set_multicast_if(UINT32 ulInterface){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->set_multicast_if(ulInterface);}HX_RESULTsecureconn::last_error(){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->last_error();}#ifdef _MACINTOSHHX_RESULTsecureconn::GetEndpoint(REF(void*) pRef){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->GetEndpoint(pRef);}HX_RESULTsecureconn::SetupEndpoint(BOOL bWait){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->SetupEndpoint(bWait);}#endifvoidsecureconn::set_callback(HXAsyncNetCallback* pCallback){    HX_ASSERT(m_pActualConn != NULL);        m_pActualConn->set_callback(pCallback);}UINT16secureconn::connection_open(){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->connection_open();}intsecureconn::get_sock(){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->get_sock();}voidsecureconn::set_sock(int theSock){    HX_ASSERT(m_pActualConn != NULL);        m_pActualConn->set_sock(theSock);}BOOLsecureconn::set_receive_buf_size(int DesiredSize){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->set_receive_buf_size(DesiredSize);}HX_RESULTsecureconn::reuse_addr(BOOL enable){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->reuse_addr(enable);}HX_RESULTsecureconn::reuse_port(BOOL enable){    HX_ASSERT(m_pActualConn != NULL);        return m_pActualConn->reuse_port(enable);}#endif /* HELIX_FEATURE_SECURECONN */#ifdef TESTING#include "conn.h"int opt_debug = 0xff;int main( int argc, char **argv ){	conn *m_conn = 0;	HX_RESULT theErr = HXR_OK;	m_conn = conn::new_socket( HX_TCP_SOCKET );	if ( m_conn )	{		// XXXAAK -- local addr binding stuff		theErr = m_conn->init( INADDR_ANY, argc > 2 ? atoi(argv[2]) : 7071, 1);		if ( !theErr )		{			theErr = m_conn->connect( argc > 1 ? argv[1] : "localhost",					argc > 2 ? atoi(argv[2]) : 7071,					1);			printf("connect(): %s, port: %d, theErr: %d, errno: %d\n", 				argc > 1 ? argv[1] : "localhost",				argc > 2 ? atoi(argv[2]) : 7071,				theErr, errno );		}		else			printf("Couldn't init port: %d, theErr: %d\n",					argc > 2 ? atoi(argv[2]) : 7071,					theErr);	}	else		printf("Couldn't create a new TCP socket!\n");	exit(0);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -