www.pudn.com > openh323-v1_15_1-src.zip > rfc2833.h
/*
* rfc2833.h
*
* Open Phone Abstraction Library (OPAL)
* Formally known as the Open H323 project.
*
* Copyright (c) 2001 Equivalence Pty. Ltd.
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Open Phone Abstraction Library.
*
* The Initial Developer of the Original Code is Equivalence Pty. Ltd.
*
* Contributor(s): ______________________________________.
*
* $Log: rfc2833.h,v $
* Revision 1.3 2002/09/16 01:14:15 robertj
* Added #define so can select if #pragma interface/implementation is used on
* platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan.
*
* Revision 1.2 2002/09/03 06:19:37 robertj
* Normalised the multi-include header prevention ifdef/define symbol.
*
* Revision 1.1 2002/01/23 05:06:23 robertj
* Added RFC2833 support as separate class
*
*/
#ifndef __OPAL_RFC2833_H
#define __OPAL_RFC2833_H
#ifdef P_USE_PRAGMA
#pragma interface
#endif
#include "rtp.h"
///////////////////////////////////////////////////////////////////////////////
class OpalRFC2833Info : public PObject {
PCLASSINFO(OpalRFC2833Info, PObject);
public:
OpalRFC2833Info(
char tone,
unsigned duration = 0,
unsigned timestamp = 0
);
char GetTone() const { return tone; }
unsigned GetDuration() const { return duration; }
unsigned GetTimestamp() const { return timestamp; }
BOOL IsToneStart() const { return duration == 0; }
protected:
char tone;
unsigned duration;
unsigned timestamp;
};
class OpalRFC2833 : public PObject {
PCLASSINFO(OpalRFC2833, PObject);
public:
OpalRFC2833(
const PNotifier & receiveNotifier
);
virtual BOOL SendTone(
char tone, /// DTMF tone code
unsigned duration /// Duration of tone in milliseconds
);
virtual BOOL BeginTransmit(
char tone /// DTMF tone code
);
virtual BOOL EndTransmit();
virtual void OnStartReceive(
char tone
);
virtual void OnEndReceive(
char tone,
unsigned duration,
unsigned timestamp
);
RTP_DataFrame::PayloadTypes GetPayloadType() const { return payloadType; }
void SetPayloadType(
RTP_DataFrame::PayloadTypes type /// new payload type
) { payloadType = type; }
const PNotifier & GetReceiveHandler() const { return receiveHandler; }
const PNotifier & GetTransmitHandler() const { return transmitHandler; }
protected:
PDECLARE_NOTIFIER(RTP_DataFrame, OpalRFC2833, ReceivedPacket);
PDECLARE_NOTIFIER(RTP_DataFrame, OpalRFC2833, TransmitPacket);
PDECLARE_NOTIFIER(PTimer, OpalRFC2833, ReceiveTimeout);
PDECLARE_NOTIFIER(PTimer, OpalRFC2833, TransmitEnded);
RTP_DataFrame::PayloadTypes payloadType;
PMutex mutex;
PNotifier receiveNotifier;
BOOL receiveComplete;
BYTE receivedTone;
unsigned receivedDuration;
unsigned receiveTimestamp;
PTimer receiveTimer;
PNotifier receiveHandler;
enum {
TransmitIdle,
TransmitActive,
TransmitEnding
} transmitState;
BYTE transmitCode;
unsigned transmitTimestamp;
PTimer transmitTimer;
PNotifier transmitHandler;
};
#endif // __OPAL_RFC2833_H
/////////////////////////////////////////////////////////////////////////////