00001 /********** 00002 This library is free software; you can redistribute it and/or modify it under 00003 the terms of the GNU Lesser General Public License as published by the 00004 Free Software Foundation; either version 2.1 of the License, or (at your 00005 option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.) 00006 00007 This library is distributed in the hope that it will be useful, but WITHOUT 00008 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 00009 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for 00010 more details. 00011 00012 You should have received a copy of the GNU Lesser General Public License 00013 along with this library; if not, write to the Free Software Foundation, Inc., 00014 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00015 **********/ 00016 // "mTunnel" multicast access service 00017 // Copyright (c) 1996-1998 Live Networks, Inc. All rights reserved. 00018 // IO event handlers 00019 // Implementation 00020 00021 #include "IOHandlers.hh" 00022 #include "TunnelEncaps.hh" 00023 00024 //##### TEMP: Use a single buffer, sized for UDP tunnels: 00025 //##### This assumes that the I/O handlers are non-reentrant 00026 static unsigned const maxPacketLength = 50*1024; // bytes 00027 // This is usually overkill, because UDP packets are usually no larger 00028 // than the typical Ethernet MTU (1500 bytes). However, I've seen 00029 // reports of Windows Media Servers sending UDP packets as large as 00030 // 27 kBytes. These will probably undego lots of IP-level 00031 // fragmentation, but that occurs below us. We just have to hope that 00032 // fragments don't get lost. 00033 static unsigned const ioBufferSize 00034 = maxPacketLength + TunnelEncapsulationTrailerMaxSize; 00035 static unsigned char ioBuffer[ioBufferSize]; 00036 00037 00038 void socketReadHandler(Socket* sock, int /*mask*/) { 00039 unsigned bytesRead; 00040 struct sockaddr_in fromAddress; 00041 UsageEnvironment& saveEnv = sock->env(); 00042 // because handleRead(), if it fails, may delete "sock" 00043 if (!sock->handleRead(ioBuffer, ioBufferSize, bytesRead, fromAddress)) { 00044 saveEnv.reportBackgroundError(); 00045 } 00046 }
1.6.3