void CMultiXL2Link::OnAcceptCompleted(CMultiXL2Link &Listener)
{
	int	IoError	=	MultiXNoError;
	m_LinkType		=	Listener.m_LinkType;
	m_MaxReadSize	=	Listener.m_MaxReadSize;
	m_OpenMode		=	MultiXOpenModeAccept;
#ifdef	OPENSSL_SUPPORT
	if(Listener.m_pOpenSSLIF)
	{
		IoError	=	Listener.m_pOpenSSLIF->Accept(&m_pOpenSSLIF);
	}
#endif
	
	GetConnectionParams(m_LocalName,m_LocalPort,m_RemoteName,m_RemotePort);
	Connected()	=	true;
	ConnectPending()	=	false;
	WritePending()	=	false;
	ReadPending()	=	false;

	CMultiXL2Event	*Event	=	new	CMultiXL2Event(CMultiXEvent::L2AcceptCompleted,Owner(),Owner()->UpperLayer());
	Event->L2LinkID()	=	Listener.ID();
	Event->IoError()	=	IoError;
	if(IoError	==	MultiXNoError)
	{
		Event->NewL2LinkID()	=	ID();
		Read();
	}	else
	{
		Close();
	}
	Owner()->MultiX().QueueEvent(Event);

	Read();
}
void CMultiXL2Link::OnConnectCompleted(MultiXError IoError)
{
	if(IoError	==	MultiXNoError)
	{
		if(!ClosePending())
		{
			GetConnectionParams(m_LocalName,m_LocalPort,m_RemoteName,m_RemotePort);
			Connected()	=	true;
			ConnectPending()	=	false;
			WritePending()	=	false;
			ReadPending()	=	false;
#ifdef	OPENSSL_SUPPORT
			if(m_pOpenSSLIF)
			{
				IoError	=	m_pOpenSSLIF->Connect(m_RemoteName);
			}
#endif
		}	else
			return;
	}
	CMultiXL2Event	*Event	=	new	CMultiXL2Event(CMultiXEvent::L2ConnectCompleted,Owner(),Owner()->UpperLayer());
	Event->L2LinkID()	=	ID();
	Event->IoError()	=	IoError;
	Owner()->MultiX().QueueEvent(Event);
	if(IoError	==	0)
		Read();
}
IPTVStreamHandlerReadHelper::IPTVStreamHandlerReadHelper(
    IPTVStreamHandler *p, QUdpSocket *s, uint stream) :
    m_parent(p), m_socket(s), m_sender(p->m_sender[stream]),
    m_stream(stream)
{
    connect(m_socket, SIGNAL(readyRead()),
            this,     SLOT(ReadPending()));
}
void CMultiXL2Link::OnReadCompleted(CMultiXBuffer &BytesRead, MultiXError IoError)
{
	if(IoError)
	{
		this->Close();
		return;
	}
	CMultiXBuffer	*Buf	=	NULL;

#ifdef	OPENSSL_SUPPORT
	if(m_pOpenSSLIF)
	{
		this->QueueSSLData(NULL);
		m_LastError	=	m_pOpenSSLIF->WriteBytesReceived(BytesRead);
		if(m_LastError)
		{
			Close();
			return;
		}
		CMultiXBuffer	*Received	=	Owner()->MultiX().AllocateBuffer();
		m_LastError	=	m_pOpenSSLIF->ReadBytesReceived(*Received);
		if(m_LastError	!=	MultiXNoError)
		{
			Received->ReturnBuffer();
			Close();
			return;
		}
		if(Received->Length()	>	0)
			Buf	=	Received->Clone();
		Received->ReturnBuffer();
	}	else
	{
		Buf	=	BytesRead.Clone();
	}
#else
	Buf	=	BytesRead.Clone();
#endif


	if(Buf)
	{
		CMultiXL2Event	*Event	=	new	CMultiXL2Event(CMultiXEvent::L2NewBlockReceived,Owner(),Owner()->UpperLayer());
		Event->L2LinkID()	=	ID();
		Event->IoError()	=	MultiXNoError;
		Event->Buf()	=	Buf->Clone();
		Owner()->MultiX().QueueEvent(Event);
		Buf->ReturnBuffer();
	}
	ReadPending()	=	false;
	Read();
}
bool CMultiXL2Link::Read()
{
	if(ReadPending())
	{
		m_LastError	=	L2ErrReadPending;
		return	false;
	}
	if(!Connected())
	{
		m_LastError	=	L2ErrLinkNotConnected;
		return	false;
	}

	CMultiXL1ReadReq	L1Req(Owner(),Owner()->LowerLayer());
	L1Req.m_L1LinkID		=	m_L1LinkID;
	if(!Owner()->LowerLayer()->RequestHandler(L1Req))
	{
		m_LastError	=	Owner()->LowerLayer()->GetLastError();
		return	false;
	}
	ReadPending()	=	true;
	return	SendNext();
}
Exemple #6
0
MythUDPListener::MythUDPListener()
{
    uint udp_port = gCoreContext->GetNumSetting("UDPNotifyPort", 0);
    m_socket = new QUdpSocket(this);
    connect(m_socket, SIGNAL(readyRead()),
            this,     SLOT(ReadPending()));
    if (m_socket->bind(udp_port))
    {
        VERBOSE(VB_GENERAL, LOC +  QString("bound to port %1").arg(udp_port));
    }
    else
    {
        VERBOSE(VB_GENERAL, LOC +
            QString("failed to bind to port %1").arg(udp_port));
    }
}