📄 preftran.cpp
字号:
outString = inString.NthField('.', nFields - 2); outString += "."; outString += inString.NthField('.', nFields - 1); outString += "."; outString += inString.NthField('.', nFields); } pOutString = new CHXString(outString); } return pOutString;}TransportModeHXPreferredTransportManager::GetTransportPreferred(HXPreferredTransport* pPrefTransport){ TransportMode transportMode = UnknownMode; if (PTC_INTERNAL == pPrefTransport->m_prefTransportClass) { if (PTP_RTSP == pPrefTransport->m_prefTransportProtocol) { transportMode = GetHigherTransport(m_rtspTransportTypeStartWith, m_internalTransportType); } else if (PTP_PNM == pPrefTransport->m_prefTransportProtocol) { transportMode = GetHigherTransport(m_pnmTransportTypeStartWith, m_internalTransportType); } else { HX_ASSERT(FALSE); } } else if (PTC_EXTERNAL == pPrefTransport->m_prefTransportClass) { if (PTP_RTSP == pPrefTransport->m_prefTransportProtocol) { transportMode = m_rtspTransportTypeStartWith; // GetHigherTransport(m_rtspTransportTypeStartWith,// m_externalTransportType); } else if (PTP_PNM == pPrefTransport->m_prefTransportProtocol) { transportMode = m_pnmTransportTypeStartWith;// GetHigherTransport(m_pnmTransportTypeStartWith,// m_externalTransportType); } else { HX_ASSERT(FALSE); } } return transportMode;}TransportModeHXPreferredTransportManager::GetHigherTransport(TransportMode mode1, TransportMode mode2){ if (mode1 < mode2) { return mode2; } else { return mode1; } } TransportModeHXPreferredTransportManager::GetLowerTransport(TransportMode mode1, TransportMode mode2){ if (mode1 > mode2) { return mode2; } else { return mode1; } }PreferredTransportClassHXPreferredTransportManager::GetTransportClass(const char* pszHostName, UINT32 ulHostAddress){ HX_RESULT rc = HXR_OK; PreferredTransportClass prefTransportClass = PTC_EXTERNAL; // Internal server is defined as: // a. a media server on the same network subnet as the client, or // b. a media server on a network subnet that meets the "Peer Subnet" criteria // (either as an explicit entry or by meeting wildcard criteria), or // c. a media server that meets the "Proxy Exclude" criteria // (either as an explicit entry or by meeting wildcard criteria) if ((m_ulSubnetMask && m_ulSubnet && ((ulHostAddress & m_ulSubnetMask) == m_ulSubnet)) || m_pSubnetManager->IsSubnet(pszHostName) #if defined(HELIX_FEATURE_PROXYMGR) || m_pProxyManager->IsExemptionHost((char*)pszHostName)#endif /* HELIX_FEATURE_PROXYMGR */ ) { prefTransportClass = PTC_INTERNAL; } return prefTransportClass;}voidHXPreferredTransportManager::InitTransportTypeStartWith(UINT32 ulTransportMask, TransportMode& transportStartWith){ transportStartWith = UnknownMode; if (ulTransportMask & ATTEMPT_MULTICAST) { transportStartWith = MulticastMode; } else if (ulTransportMask & ATTEMPT_UDP) { transportStartWith = UDPMode; } else if (ulTransportMask & ATTEMPT_TCP) { transportStartWith = TCPMode; } else if (ulTransportMask & ATTEMPT_HTTPCLOAK) { transportStartWith = HTTPCloakMode; } else { HX_ASSERT(FALSE); } return;}HX_RESULTHXPreferredTransportManager::OpenPrefTransport(void){ HX_RESULT hr = HXR_OK; char* pszHostName = NULL; char* pszClass = NULL; char* pszProtocol = NULL; char* pszTransport = NULL; char* pszTransportMask = NULL; char* pszCloakPort = NULL; char* pszExpires = NULL; char* pszHTTPNG = NULL; char* pszPlaybacks = NULL; char* pszUnknownField = NULL; char buffer[LINE_BUFFER_SIZE] = {0}; /* Flawfinder: ignore */ UINT32 ulBytesRead = 0; UINT32 ulIAddress = 0; FILE* fp = NULL; HXPreferredTransport* pTransport = NULL; PreferredTransportClass transportClass = PTC_UNKNOWN; if (!m_pszFile) { hr = HXR_FAILED; goto cleanup; }#ifdef _WINDOWS if (!m_pLock) {#ifdef THREADS_SUPPORTED HXEvent::MakeEvent(m_pLock, RM_PREFTRAN_FILE_LOCK, FALSE);#else HXEvent::MakeStubEvent(m_pLock, RM_PREFTRAN_FILE_LOCK, FALSE);#endif } else { m_pLock->Wait(); }#endif /* _WINDOWS */ if (!(fp = fopen(m_pszFile, "r+b"))) { hr = HXR_FAILED; goto cleanup; }#if defined (_UNIX) && !defined(_SUN) && !defined(_SCO_UW) && !defined(_HPUX) && !defined(_IRIX) && !defined(_AIX) && !defined(_OSF1) m_fileID = fileno(fp); flock(m_fileID, LOCK_EX);#endif /* _UNIX */ /* line format is: * * hostname \t class \t protocol \t transport \t cloakport \t time * * hostname - string(null by default) * class - transport class(PTC_Internal by default) * protocol - protocol type(RTSP vs PNM) * transport - preferred transport(UDPMode by default) * cloakport - cloak port * time - time of last used or modified */ while (HXR_OK == FileReadLine(fp, &buffer[0], LINE_BUFFER_SIZE, &ulBytesRead)) { if (*buffer == '#' || *buffer == CR || *buffer == LF || *buffer == 0) { continue; } pszHostName = buffer; if(!(pszClass = strchr(pszHostName, '\t'))) { continue; } *pszClass++ = '\0'; if(*pszClass == CR || *pszClass == LF || *pszClass == 0) { continue; } if (0 == strcasecmp(pszHostName, "localhost")) { transportClass = (PreferredTransportClass)atoi(pszClass); if(!(pszTransport = strchr(pszClass, '\t'))) { continue; } *pszTransport++ = '\0'; if(*pszTransport == CR || *pszTransport == LF || *pszTransport == 0) { continue; } if(!(pszProtocol = strchr(pszTransport, '\t'))) { continue; } *pszProtocol++ = '\0'; if(*pszProtocol == CR || *pszProtocol == LF || *pszProtocol == 0) { continue; } if(!(pszTransportMask = strchr(pszProtocol, '\t'))) { continue; } *pszTransportMask++ = '\0'; if(*pszTransportMask == CR || *pszTransportMask == LF || *pszTransportMask == 0) { continue; } if(!(pszExpires = strchr(pszTransportMask, '\t'))) { continue; } *pszExpires++ = '\0'; if(*pszExpires == CR || *pszExpires == LF || *pszExpires == 0) { continue; } if (!(pszUnknownField = strchr(pszExpires, '\t'))) { // remove the '\n' from the end of the entry pszExpires = ::StripLine(pszExpires); } else { *pszUnknownField++ = '\0'; } if (PTC_INTERNAL == transportClass) { m_internalTransportType = (TransportMode)atoi(pszTransport);#ifdef _MACINTOSH m_ulRTSPTransportMask = atoi64(pszTransportMask); m_lastRTSPPreferencesModifiedTime = (time_t)atoi64(pszExpires);#else m_ulRTSPTransportMask = atol(pszTransportMask); m_lastRTSPPreferencesModifiedTime = atol(pszExpires);#endif } else if (PTC_EXTERNAL == transportClass) { m_externalTransportType = (TransportMode)atoi(pszTransport);#ifdef _MACINTOSH m_ulPNMTransportMask = atoi64(pszTransportMask); m_lastPNMPreferencesModifiedTime = (time_t)atoi64(pszExpires);#else m_ulPNMTransportMask = atol(pszTransportMask); m_lastPNMPreferencesModifiedTime = atol(pszExpires);#endif } else { HX_ASSERT(FALSE); } } else { if(!(pszProtocol = strchr(pszClass, '\t'))) { continue; } *pszProtocol++ = '\0'; if(*pszProtocol == CR || *pszProtocol == LF || *pszProtocol == 0) { continue; } if(!(pszTransport = strchr(pszProtocol, '\t'))) { continue; } *pszTransport++ = '\0'; if(*pszTransport == CR || *pszTransport == LF || *pszTransport == 0) { continue; } if(!(pszCloakPort = strchr(pszTransport, '\t'))) { continue; } *pszCloakPort++ = '\0'; if(*pszCloakPort == CR || *pszCloakPort == LF || *pszCloakPort == 0) { continue; } if(!(pszExpires = strchr(pszCloakPort, '\t'))) { continue; } *pszExpires++ = '\0'; if(*pszExpires == CR || *pszExpires == LF || *pszExpires == 0) { continue; } if(!(pszHTTPNG = strchr(pszExpires, '\t'))) { continue; } *pszHTTPNG++ = '\0'; if(*pszHTTPNG == CR || *pszHTTPNG == LF || *pszHTTPNG == 0) { continue; } if (!(pszPlaybacks = strchr(pszHTTPNG, '\t'))) { continue; } *pszPlaybacks++ = '\0'; if(*pszPlaybacks == CR || *pszPlaybacks == LF || *pszPlaybacks == 0) { continue; } if (!(pszUnknownField = strchr(pszPlaybacks, '\t'))) { // remove the '\n' from the end of the entry pszPlaybacks = ::StripLine(pszPlaybacks); } else { *pszUnknownField++ = '\0'; } // construct a new preferred transport struct pTransport = new HXPreferredTransport(this); pTransport->AddRef(); pTransport->m_pHost = new CHXString(pszHostName); pTransport->m_prefTransportClass = (PreferredTransportClass)atoi(pszClass); pTransport->m_prefTransportProtocol = (PreferredTransportProtocol)atoi(pszProtocol); pTransport->m_prefTransportType = (TransportMode)atoi(pszTransport); pTransport->m_uCloakPort = atoi(pszCloakPort);#ifdef _MACINTOSH pTransport->m_lastUsedTime = (time_t)atoi64(pszExpires);#else pTransport->m_lastUsedTime = atol(pszExpires);#endif pTransport->m_bHTTPNG = atoi(pszHTTPNG); pTransport->m_uPlaybacks = atoi(pszPlaybacks); pTransport->m_state = PTS_READY; if (!m_pPrefHostTransportList) { m_pPrefHostTransportList = new CHXSimpleList(); } m_pPrefHostTransportList->AddTail(pTransport); } }cleanup:#if defined (_UNIX) && !defined(_SUN) && !defined(_SCO_UW) && !defined(_HPUX) && !defined(_IRIX) && !defined(_AIX) && !defined(_OSF1) flock(m_fileID, LOCK_UN);#endif /* _UNIX */ if (fp) { fclose(fp); }#ifdef _WINDOWS if (m_pLock) { m_pLock->SignalEvent(); }#endif /* _WINDOWS */ return hr;}HX_RESULT HXPreferredTransportManager::SavePrefTransport(void){ HX_RESULT hr = HXR_OK; FILE* fp = NULL; UINT32 ulTransportMask = 0; HXPreferredTransport* pTransport = NULL; CHXSimpleList::Iterator i; if (!m_pszFile) { goto cleanup; }#ifdef _WINDOWS if (!m_pLock) {#ifdef THREADS_SUPPORTED HXEvent::MakeEvent(m_pLock, RM_PREFTRAN_FILE_LOCK, FALSE);#else HXEvent::MakeStubEvent(m_pLock, RM_PREFTRAN_FILE_LOCK, FALSE);#endif } else { m_pLock->Wait(); }#endif /* _WINDOWS */ if (!(fp = fopen(m_pszFile, "w"))) { hr = HXR_FAILED; goto cleanup; }#ifdef _UNIX //Make the permisions on the cookies file User read/write only. if( chmod( m_pszFile, S_IRUSR | S_IWUSR ) != 0 ) { HX_ASSERT( "Can't change permision on cookies file." == NULL ); } #endif #if defined (_UNIX) && !defined(_SUN) && !defined(_SCO_UW) && !defined(_HPUX) && !defined(_IRIX) && !defined(_AIX) && !defined(_OSF1) m_fileID = fileno(fp); flock(m_fileID, LOCK_EX);#endif /* _UNIX */ fwrite(RM_PREFTRAN_CAPTION, sizeof(char), strlen(RM_PREFTRAN_CAPTION), fp); // save preferred class information first FileWriteClass(fp, PTC_INTERNAL, m_internalTransportType, PTP_RTSP, m_ulRTSPTransportMask, m_lastRTSPPreferencesModifiedTime); FileWriteClass(fp, PTC_EXTERNAL, m_externalTransportType, PTP_PNM, m_ulPNMTransportMask, m_lastPNMPreferencesModifiedTime); // save preferred host information if (m_pPrefHostTransportList) { for (i = m_pPrefHostTransportList->Begin(); i != m_pPrefHostTransportList->End(); ++i) { pTransport = (HXPreferredTransport*)(*i); if (pTransport->m_pHost && PTS_READY == pTransport->m_state) { FileWriteLine(fp, pTransport); } } } m_bSave = FALSE; cleanup:#if defined (_UNIX) && !defined(_SUN) && !defined(_SCO_UW) && !defined(_HPUX) && !defined(_IRIX) && !defined(_AIX) && !defined(_OSF1) flock(m_fileID, LOCK_UN);#endif /* _UNIX */ if (fp) { fclose(fp); }#ifdef _WINDOWS if (m_pLock) { m_pLock->SignalEvent(); }#endif /* _WINDOWS */ return(hr);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -