00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #ifndef __OPAL_RFC2833_H
00042 #define __OPAL_RFC2833_H
00043
00044 #ifdef P_USE_PRAGMA
00045 #pragma interface
00046 #endif
00047
00048
00049 #include "rtp.h"
00050
00051
00053
00054 class OpalRFC2833Info : public PObject {
00055 PCLASSINFO(OpalRFC2833Info, PObject);
00056 public:
00057 OpalRFC2833Info(
00058 char tone,
00059 unsigned duration = 0,
00060 unsigned timestamp = 0
00061 );
00062
00063 char GetTone() const { return tone; }
00064 unsigned GetDuration() const { return duration; }
00065 unsigned GetTimestamp() const { return timestamp; }
00066 BOOL IsToneStart() const { return duration == 0; }
00067
00068 protected:
00069 char tone;
00070 unsigned duration;
00071 unsigned timestamp;
00072 };
00073
00074
00075 class OpalRFC2833 : public PObject {
00076 PCLASSINFO(OpalRFC2833, PObject);
00077 public:
00078 OpalRFC2833(
00079 const PNotifier & receiveNotifier
00080 );
00081
00082 virtual BOOL SendTone(
00083 char tone,
00084 unsigned duration
00085 );
00086
00087 virtual BOOL BeginTransmit(
00088 char tone
00089 );
00090 virtual BOOL EndTransmit();
00091
00092 virtual void OnStartReceive(
00093 char tone
00094 );
00095 virtual void OnEndReceive(
00096 char tone,
00097 unsigned duration,
00098 unsigned timestamp
00099 );
00100
00101 RTP_DataFrame::PayloadTypes GetPayloadType() const { return payloadType; }
00102
00103 void SetPayloadType(
00104 RTP_DataFrame::PayloadTypes type
00105 ) { payloadType = type; }
00106
00107 const PNotifier & GetReceiveHandler() const { return receiveHandler; }
00108 const PNotifier & GetTransmitHandler() const { return transmitHandler; }
00109
00110 protected:
00111 PDECLARE_NOTIFIER(RTP_DataFrame, OpalRFC2833, ReceivedPacket);
00112 PDECLARE_NOTIFIER(RTP_DataFrame, OpalRFC2833, TransmitPacket);
00113 PDECLARE_NOTIFIER(PTimer, OpalRFC2833, ReceiveTimeout);
00114 PDECLARE_NOTIFIER(PTimer, OpalRFC2833, TransmitEnded);
00115
00116 RTP_DataFrame::PayloadTypes payloadType;
00117
00118 PMutex mutex;
00119
00120 PNotifier receiveNotifier;
00121 BOOL receiveComplete;
00122 BYTE receivedTone;
00123 unsigned receivedDuration;
00124 unsigned receiveTimestamp;
00125 PTimer receiveTimer;
00126 PNotifier receiveHandler;
00127
00128 enum {
00129 TransmitIdle,
00130 TransmitActive,
00131 TransmitEnding
00132 } transmitState;
00133 BYTE transmitCode;
00134 unsigned transmitTimestamp;
00135 PTimer transmitTimer;
00136 PNotifier transmitHandler;
00137 };
00138
00139
00140 #endif // __OPAL_RFC2833_H
00141
00142