summaryrefslogtreecommitdiff
path: root/orkaudio/audiocaptureplugins/voip/VoIp.cpp
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2007-07-12 15:39:17 +0000
committerHenri Herscher <henri@oreka.org>2007-07-12 15:39:17 +0000
commit9b20567589624aad4bb85308352252c32ca675cb (patch)
treef6f841181c50626591cd841db99a1f7aecc87242 /orkaudio/audiocaptureplugins/voip/VoIp.cpp
parented63e37f8466f27a990f7310bbcf1faf86697e9a (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.cpp55
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);