diff options
author | Henri Herscher <henri@oreka.org> | 2007-07-12 15:39:17 +0000 |
---|---|---|
committer | Henri Herscher <henri@oreka.org> | 2007-07-12 15:39:17 +0000 |
commit | 9b20567589624aad4bb85308352252c32ca675cb (patch) | |
tree | f6f841181c50626591cd841db99a1f7aecc87242 /orkaudio/audiocaptureplugins/voip/VoIp.cpp | |
parent | ed63e37f8466f27a990f7310bbcf1faf86697e9a (diff) |
Now possible to setup orkaudio with pcap filter.
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@453 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiocaptureplugins/voip/VoIp.cpp')
-rw-r--r-- | orkaudio/audiocaptureplugins/voip/VoIp.cpp | 55 |
1 files changed, 48 insertions, 7 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp index 5569688..a0518b9 100644 --- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp +++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp @@ -90,6 +90,7 @@ private: void OpenPcapFile(CStdString& filename); void OpenPcapDirectory(CStdString& path); void SetPcapSocketBufferSize(pcap_t* pcapHandle); + char* ApplyPcapFilter(); pcap_t* m_pcapHandle; std::list<pcap_t*> m_pcapHandles; @@ -1907,6 +1908,31 @@ void VoIp::OpenPcapDirectory(CStdString& path) } +char* VoIp::ApplyPcapFilter() +{ + struct bpf_program fp; + char* error = NULL; + CStdString logMsg; + + if(DLLCONFIG.m_pcapFilter.size()) + { + if(pcap_compile(m_pcapHandle,&fp, (PSTR)(PCSTR)DLLCONFIG.m_pcapFilter,1,0) == -1) + { + error = pcap_geterr(m_pcapHandle); + logMsg.Format("pcap_compile: Please check your PcapFilter in config.xml; pcap handle:%x", m_pcapHandle); + LOG4CXX_ERROR(s_packetLog, logMsg); + + } + if(error == NULL && pcap_setfilter(m_pcapHandle,&fp) == -1) + { + error = pcap_geterr(m_pcapHandle); + logMsg.Format("pcap_setfilter: Please check your PcapFilter in config.xml; pcap handle:%x", m_pcapHandle); + LOG4CXX_ERROR(s_packetLog, logMsg); + } + } + return error; +} + void VoIp::OpenPcapFile(CStdString& filename) { CStdString logMsg; @@ -1916,15 +1942,20 @@ void VoIp::OpenPcapFile(CStdString& filename) // Open device char * error = NULL; - if ((m_pcapHandle = pcap_open_offline((PCSTR)filename , error)) == NULL) + m_pcapHandle = pcap_open_offline((PCSTR)filename , error); + + if(error == NULL) + { + error = ApplyPcapFilter(); + } + if(error) { - LOG4CXX_ERROR(s_packetLog, "pcap error when opening file:" + filename + "; error message:" + error); + LOG4CXX_ERROR(s_packetLog, "pcap error when opening file:" + filename + "; pcap error:" + error); } else { logMsg.Format("Successfully opened file. pcap handle:%x", m_pcapHandle); LOG4CXX_INFO(s_packetLog, logMsg); - m_pcapHandles.push_back(m_pcapHandle); } } @@ -1994,8 +2025,13 @@ void VoIp::OpenDevices() if(DLLCONFIG.IsDeviceWanted(device->name)) { // Open device - if ((m_pcapHandle = pcap_open_live(device->name, 1500, PROMISCUOUS, - 500, error)) == NULL) + m_pcapHandle = pcap_open_live(device->name, 1500, PROMISCUOUS, 500, error); + + if(error == NULL) + { + error = ApplyPcapFilter(); + } + if(error) { LOG4CXX_ERROR(s_packetLog, CStdString("pcap error when opening device; error message:") + error); } @@ -2020,8 +2056,13 @@ void VoIp::OpenDevices() // Let's open the default device if(defaultDevice) { - if ((m_pcapHandle = pcap_open_live(defaultDevice->name, 1500, PROMISCUOUS, - 500, error)) == NULL) + m_pcapHandle = pcap_open_live(defaultDevice->name, 1500, PROMISCUOUS, 500, error); + + if(error == NULL) + { + error = ApplyPcapFilter(); + } + if(error) { logMsg.Format("pcap error when opening default device:%s", defaultDevice->name); LOG4CXX_ERROR(s_packetLog, logMsg); |