SSLChannel(OpalDTLSSRTPSession & session, PUDPSocket * socket, PQueueChannel & queue, bool isServer) : PSSLChannelDTLS(*DTLSContextSingleton()) , m_session(session) { SetVerifyMode(PSSLContext::VerifyPeerMandatory, PCREATE_NOTIFIER2_EXT(session, OpalDTLSSRTPSession, OnVerify, PSSLChannel::VerifyInfo &)); queue.Open(2000); Open(&queue, socket, false, false); SetReadTimeout(2000); if (isServer) Accept(); else Connect(); }
/** * Read n bytes. * * @param sk Socket. * @param buf Buffer. * @param n Number of bytes to read. * @return True if successful. */ static bool ReadBytes(const int sk, char* buf, const size_t n) { char* ptr = buf; while (ptr < buf + n) { if (!SetReadTimeout(sk)) { return false; } auto ret = recv(sk, ptr, ptr - buf + n, 0); if (ret <= 0) { LOG(ERROR) << "unable to receive on socket"; return false; } ptr += ret; } return true; }
NTSTATUS SetIrpTimeout( PC0C_IO_PORT pIoPort, PIRP pIrp) { PIO_STACK_LOCATION pIrpStack = IoGetCurrentIrpStackLocation(pIrp); switch (pIrpStack->MajorFunction) { case IRP_MJ_WRITE: return SetWriteTimeout(pIoPort, pIrp); case IRP_MJ_DEVICE_CONTROL: switch (pIrpStack->Parameters.DeviceIoControl.IoControlCode) { case IOCTL_SERIAL_XOFF_COUNTER: case IOCTL_SERIAL_IMMEDIATE_CHAR: return SetWriteTimeout(pIoPort, pIrp); } break; case IRP_MJ_READ: return SetReadTimeout(pIoPort, pIrp); } return STATUS_PENDING; }
BOOL CSerial::Init(DWORD dwBaudRate) { DCB dcb; if(!GetCommState(m_hDev, &dcb)) { //RETAILMSG(DBGMSG, (L"Serial::Init() error GetCommState()\r\n") ); return FALSE; } dcb.DCBlength = sizeof(dcb); dcb.BaudRate = dwBaudRate; dcb.fParity = FALSE; dcb.fNull = FALSE; dcb.StopBits = ONESTOPBIT; dcb.Parity = NOPARITY; dcb.ByteSize = 8; // dcb.EvtChar = '@'; //×¢²áÒ»¸öʼþ×Ö·û if(!SetCommState(m_hDev, &dcb)) { //RETAILMSG(DBGMSG, (L"Serial::Init() error SetCommState()\r\n") ); return FALSE; } if(!SetupComm(m_hDev, 4096, 4096)) { //RETAILMSG(DBGMSG, (L"Serial::Init() error SetupComm()\r\n") ); return FALSE; } SetReadTimeout(100,100); return TRUE; }