00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _RTP_INTERFACE_HH
00024 #define _RTP_INTERFACE_HH
00025
00026 #ifndef _MEDIA_HH
00027 #include <Media.hh>
00028 #endif
00029 #ifndef _GROUPSOCK_HH
00030 #include "Groupsock.hh"
00031 #endif
00032
00033
00034
00035 typedef void AuxHandlerFunc(void* clientData, unsigned char* packet,
00036 unsigned& packetSize);
00037
00038 typedef void ServerRequestAlternativeByteHandler(void* instance, u_int8_t requestByte);
00039
00040
00041
00042
00043 class tcpStreamRecord {
00044 public:
00045 tcpStreamRecord(int streamSocketNum, unsigned char streamChannelId,
00046 tcpStreamRecord* next);
00047 virtual ~tcpStreamRecord();
00048
00049 public:
00050 tcpStreamRecord* fNext;
00051 int fStreamSocketNum;
00052 unsigned char fStreamChannelId;
00053 };
00054
00055 class RTPInterface {
00056 public:
00057 RTPInterface(Medium* owner, Groupsock* gs);
00058 virtual ~RTPInterface();
00059
00060 Groupsock* gs() const { return fGS; }
00061
00062 void setStreamSocket(int sockNum, unsigned char streamChannelId);
00063 void addStreamSocket(int sockNum, unsigned char streamChannelId);
00064 void removeStreamSocket(int sockNum, unsigned char streamChannelId);
00065 void setServerRequestAlternativeByteHandler(int socketNum, ServerRequestAlternativeByteHandler* handler, void* clientData);
00066
00067 Boolean sendPacket(unsigned char* packet, unsigned packetSize);
00068 void startNetworkReading(TaskScheduler::BackgroundHandlerProc*
00069 handlerProc);
00070 Boolean handleRead(unsigned char* buffer, unsigned bufferMaxSize,
00071 unsigned& bytesRead, struct sockaddr_in& fromAddress, Boolean& packetReadWasIncomplete);
00072 void stopNetworkReading();
00073
00074 UsageEnvironment& envir() const { return fOwner->envir(); }
00075
00076 void setAuxilliaryReadHandler(AuxHandlerFunc* handlerFunc,
00077 void* handlerClientData) {
00078 fAuxReadHandlerFunc = handlerFunc;
00079 fAuxReadHandlerClientData = handlerClientData;
00080 }
00081
00082
00083 int nextTCPReadStreamSocketNum() const { return fNextTCPReadStreamSocketNum; }
00084 unsigned char nextTCPReadStreamChannelId() const { return fNextTCPReadStreamChannelId; }
00085
00086 private:
00087 friend class SocketDescriptor;
00088 Medium* fOwner;
00089 Groupsock* fGS;
00090 tcpStreamRecord* fTCPStreams;
00091
00092 unsigned short fNextTCPReadSize;
00093
00094 int fNextTCPReadStreamSocketNum;
00095 unsigned char fNextTCPReadStreamChannelId;
00096 TaskScheduler::BackgroundHandlerProc* fReadHandlerProc;
00097
00098 AuxHandlerFunc* fAuxReadHandlerFunc;
00099 void* fAuxReadHandlerClientData;
00100 };
00101
00102 #endif