Author: sayer
Date: 2010-03-05 13:27:58 +0100 (Fri, 05 Mar 2010)
New Revision: 1652
Removed:
trunk/core/AmIcmpWatcher.cpp
trunk/core/AmIcmpWatcher.h
Modified:
trunk/core/AmRtpStream.cpp
trunk/core/AmRtpStream.h
trunk/core/CMakeLists.txt
trunk/core/sems.cpp
Log:
removed ICMP watcher.
icmpwatcher has not been used for some time, as it is a
quite dangerous method of checking for the remote party
(in the beginning of a call due to delays in signalling,
the port on the remote end could for example still be not
open for some time)
Deleted: trunk/core/AmIcmpWatcher.cpp
===================================================================
--- trunk/core/AmIcmpWatcher.cpp 2010-03-05 11:45:59 UTC (rev 1651)
+++ trunk/core/AmIcmpWatcher.cpp 2010-03-05 12:27:58 UTC (rev 1652)
@@ -1,173 +0,0 @@
-#include "AmIcmpWatcher.h"
-#include "AmRtpStream.h"
-#include "log.h"
-
-#include <string>
-
-#include <unistd.h>
-#include <string.h>
-#include <errno.h>
-
-#include <arpa/inet.h>
-#include <sys/socket.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/in.h>
-#include <netinet/ip_icmp.h>
-
-#define __FAVOR_BSD /* only for linux */
-#include <netinet/udp.h>
-
-AmIcmpWatcher* AmIcmpWatcher::_instance=0;
-
-AmIcmpWatcher* AmIcmpWatcher::instance()
-{
- if(!_instance)
- _instance = new AmIcmpWatcher();
-
- return _instance;
-}
-
-AmIcmpWatcher::AmIcmpWatcher()
- : raw_sd(-1)
-{
-}
-
-AmIcmpWatcher::~AmIcmpWatcher()
-{
- if(raw_sd != -1)
- close(raw_sd);
-}
-
-void AmIcmpWatcher::run()
-{
- raw_sd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP);
- if(raw_sd == -1){
- ERROR("ICMP Watcher: could not create RAW socket: %s\n",strerror(errno));
- ERROR("ICMP Watcher: try to run SEMS as root or suid.\n");
- return;
- }
-
- int raw_sz;
- char msg_buf[ICMP_BUF_SIZE];
-
- struct sockaddr_in from;
- socklen_t from_len;
- char from_str[INET_ADDRSTRLEN];
-
- struct ip *ip_hdr1,*ip_hdr2;
- size_t hlen_ip1,hlen_ip2;
-
- struct icmp* icmp_hdr;
- size_t icmp_len;
- std::string icmp_type_str;
-
- char src_str[INET_ADDRSTRLEN];
- char dst_str[INET_ADDRSTRLEN];
-
- while(true){
-
- from_len = sizeof(from);
- raw_sz = recvfrom(raw_sd, msg_buf, ICMP_BUF_SIZE, 0,
- (struct sockaddr*)&from, &from_len);
-
- inet_ntop(AF_INET,&from.sin_addr,from_str,INET_ADDRSTRLEN);
-
- ip_hdr1 = (struct ip*)msg_buf;
- hlen_ip1 = ip_hdr1->ip_hl << 2; /* convert to bytes */
-
- icmp_hdr = (struct icmp*)(msg_buf + hlen_ip1);
- icmp_len = raw_sz - hlen_ip1;
-
- /* if ICMP smaller than minimal length */
- if(icmp_len < 8){
- ERROR("icmp_len < 8\n");
- continue;
- }
-
- // DBG("%d bytes ICMP from %s: type = %d code = %d\n",
- // raw_sz,from_str,icmp_hdr->icmp_type,icmp_hdr->icmp_code);
-
- switch(icmp_hdr->icmp_type){
- case ICMP_UNREACH:
- icmp_type_str = "Destination Unreachable";
- break;
- case ICMP_SOURCEQUENCH:
- icmp_type_str = "Source Quench";
- break;
- case ICMP_TIMXCEED:
- icmp_type_str = "Time Exceeded";
- break;
- default:
- continue;
- }
-
- /* if ICMP smaller than expected length */
- if(icmp_len < 8 + 20 + 8){
- ERROR("icmp_len < 8 + 20 + 8\n");
- continue;
- }
-
- ip_hdr2 = (struct ip*)(msg_buf + hlen_ip1 + 8);
- hlen_ip2 = ip_hdr2->ip_hl << 2;
-
- inet_ntop(AF_INET,&ip_hdr2->ip_src,src_str,INET_ADDRSTRLEN);
- inet_ntop(AF_INET,&ip_hdr2->ip_dst,dst_str,INET_ADDRSTRLEN);
-
- if(ip_hdr2->ip_p == IPPROTO_UDP){
-
- struct udphdr* udp_hdr =
- (struct udphdr*)(msg_buf + hlen_ip1 + 8 + hlen_ip2);
-
- int srcport = ntohs(udp_hdr->uh_sport);
- int dstport = ntohs(udp_hdr->uh_dport);
-
- stream_map_m.lock();
- std::map<int,AmRtpStream*>::iterator str_it = stream_map.find(srcport);
-
- if(str_it != stream_map.end()){
-
- DBG("ICMP from %s: type='%s' src=%s:%d dst=%s:%d\n",
- from_str,icmp_type_str.c_str(),
- src_str,srcport,dst_str,dstport);
-
- IcmpReporter* rep = new IcmpReporter(str_it->second);
- rep->start();
- AmThreadWatcher::instance()->add(rep);
- }
- stream_map_m.unlock();
- }
- }
-}
-
-void AmIcmpWatcher::on_stop()
-{
-}
-
-void AmIcmpWatcher::addStream(int localport, AmRtpStream* str)
-{
- stream_map_m.lock();
- stream_map[localport] = str;
- stream_map_m.unlock();
-}
-
-void AmIcmpWatcher::removeStream(int localport)
-{
- stream_map_m.lock();
- stream_map.erase(localport);
- stream_map_m.unlock();
-}
-
-void IcmpReporter::run()
-{
- rtp_str->icmpError();
-}
-
-void IcmpReporter::on_stop()
-{
-}
-
-IcmpReporter::IcmpReporter(AmRtpStream* str)
- : rtp_str(str)
-{
-}
Deleted: trunk/core/AmIcmpWatcher.h
===================================================================
--- trunk/core/AmIcmpWatcher.h 2010-03-05 11:45:59 UTC (rev 1651)
+++ trunk/core/AmIcmpWatcher.h 2010-03-05 12:27:58 UTC (rev 1652)
@@ -1,76 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (C) 2002-2003 Fhg Fokus
- *
- * This file is part of sems, a free SIP media server.
- *
- * sems is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- * [email protected]
- *
- * sems is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-/** @file AmIcmpWatcher.h */
-#ifndef _AmIcmpWatcher_h_
-#define _AmIcmpWatcher_h_
-
-#include "AmThread.h"
-
-#include <map>
-
-#define ICMP_BUF_SIZE 512
-
-class AmRtpStream;
-
-/** \brief thread that watches ICMP reports */
-class AmIcmpWatcher: public AmThread
-{
- static AmIcmpWatcher* _instance;
-
- /* RAW socket descriptor */
- int raw_sd;
-
- /* RTP Stream map */
- std::map<int,AmRtpStream*> stream_map;
- AmMutex stream_map_m;
-
- /* constructor & destructor are
- * private as we want a singleton.
- */
- AmIcmpWatcher();
- ~AmIcmpWatcher();
-
- void run();
- void on_stop();
-
- public:
- static AmIcmpWatcher* instance();
- void addStream(int localport, AmRtpStream* str);
- void removeStream(int localport);
-};
-
-/** \brief one-shot thread: report an ICMP error to the rtp stream */
-class IcmpReporter: public AmThread
-{
- AmRtpStream* rtp_str;
- void run();
- void on_stop();
- public:
- IcmpReporter(AmRtpStream* str);
-};
-
-#endif
Modified: trunk/core/AmRtpStream.cpp
===================================================================
--- trunk/core/AmRtpStream.cpp 2010-03-05 11:45:59 UTC (rev 1651)
+++ trunk/core/AmRtpStream.cpp 2010-03-05 12:27:58 UTC (rev 1652)
@@ -27,7 +27,6 @@
#include "AmRtpStream.h"
#include "AmRtpPacket.h"
-#include "AmIcmpWatcher.h"
#include "AmRtpReceiver.h"
#include "AmConfig.h"
#include "AmPlugIn.h"
@@ -161,7 +160,6 @@
l_sd = sd;
l_port = port;
- //AmIcmpWatcher::instance()->addStream(l_port,this);
AmRtpReceiver::instance()->addStream(l_sd,this);
DBG("local rtp port set to %i\n",l_port);
}
@@ -489,15 +487,6 @@
return hold;
}
-void AmRtpStream::icmpError()
-{
- if(!passive){
- // AmIcmpWatcher::instance()->removeStream(l_port);
- if(session)
- session->stop();
- }
-}
-
AmRtpPacket* AmRtpStream::newPacket() {
return mem.newPacket();
}
Modified: trunk/core/AmRtpStream.h
===================================================================
--- trunk/core/AmRtpStream.h 2010-03-05 11:45:59 UTC (rev 1651)
+++ trunk/core/AmRtpStream.h 2010-03-05 12:27:58 UTC (rev 1652)
@@ -257,11 +257,6 @@
bool getMonitorRTPTimeout() { return monitor_rtp_timeout; }
/**
- * Report an ICMP error.
- */
- void icmpError();
-
- /**
* Insert an RTP packet to the buffer.
* Note: memory is owned by this instance.
*/
Modified: trunk/core/CMakeLists.txt
===================================================================
--- trunk/core/CMakeLists.txt 2010-03-05 11:45:59 UTC (rev 1651)
+++ trunk/core/CMakeLists.txt 2010-03-05 12:27:58 UTC (rev 1652)
@@ -18,7 +18,6 @@
AmEvent.cpp
AmEventDispatcher.cpp
AmEventQueue.cpp
- AmIcmpWatcher.cpp
AmJitterBuffer.cpp
AmMediaProcessor.cpp
AmMultiPartyMixer.cpp
Modified: trunk/core/sems.cpp
===================================================================
--- trunk/core/sems.cpp 2010-03-05 11:45:59 UTC (rev 1651)
+++ trunk/core/sems.cpp 2010-03-05 12:27:58 UTC (rev 1652)
@@ -32,7 +32,6 @@
#include "AmSessionContainer.h"
#include "AmServer.h"
#include "AmMediaProcessor.h"
-#include "AmIcmpWatcher.h"
#include "AmRtpReceiver.h"
#include "AmEventDispatcher.h"
_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev