lidep.h

Go to the documentation of this file.
00001 /*
00002  * lidep.h
00003  *
00004  * Line Interface Device EndPoint
00005  *
00006  * Open Phone Abstraction Library
00007  *
00008  * Copyright (c) 2001 Equivalence Pty. Ltd.
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Open H323 Library.
00021  *
00022  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
00023  *
00024  * Portions of this code were written with the assisance of funding from 
00025  * Quicknet Technologies, Inc. http://www.quicknet.net.
00026  * 
00027  * Contributor(s): ______________________________________.
00028  *
00029  * $Revision: 27154 $
00030  * $Author: rjongbloed $
00031  * $Date: 2012-03-07 19:21:33 -0600 (Wed, 07 Mar 2012) $
00032  */
00033 
00034 #ifndef OPAL_LIDS_LIDEP_H
00035 #define OPAL_LIDS_LIDEP_H
00036 
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040 
00041 #include <opal/buildopts.h>
00042 
00043 #if OPAL_LID
00044 
00045 #include <opal/endpoint.h>
00046 #include <lids/lid.h>
00047 #include <codec/silencedetect.h>
00048 
00049 
00050 class OpalLineConnection;
00051 
00052 
00057 class OpalLineEndPoint : public OpalEndPoint
00058 {
00059   PCLASSINFO(OpalLineEndPoint, OpalEndPoint);
00060 
00061   public:
00066     OpalLineEndPoint(
00067       OpalManager & manager   
00068     );
00069 
00071     ~OpalLineEndPoint();
00073 
00105     virtual PSafePtr<OpalConnection> MakeConnection(
00106       OpalCall & call,          
00107       const PString & party,    
00108       void * userData = NULL,   
00109       unsigned int options = 0,  
00110       OpalConnection::StringOptions * stringOptions  = NULL 
00111     );
00112 
00122     virtual OpalMediaFormatList GetMediaFormats() const;
00124 
00127     virtual OpalLineConnection * CreateConnection(
00128       OpalCall & call,        
00129       OpalLine & line,        
00130       void * userData,        
00131       const PString & number  
00132     );
00134 
00141     PSafePtr<OpalLineConnection> GetLIDConnectionWithLock(
00142       const PString & token,     
00143       PSafetyMode mode = PSafeReadWrite   
00144     ) { return PSafePtrCast<OpalConnection, OpalLineConnection>(GetConnectionWithLock(token, mode)); }
00145 
00153     PBoolean AddLine(
00154       OpalLine * line
00155     );
00156 
00160     void RemoveLine(
00161       OpalLine * line
00162     );
00163 
00164     
00169     const PList<OpalLine> & GetLines() const { return lines;};
00170     
00174     void RemoveLine(
00175       const PString & token
00176     );
00177 
00182     void RemoveAllLines();
00183 
00193     virtual PBoolean AddLinesFromDevice(
00194       OpalLineInterfaceDevice & device  
00195     );
00196 
00200     void RemoveLinesFromDevice(
00201       OpalLineInterfaceDevice & device  
00202     );
00203 
00209     PBoolean AddDeviceNames(
00210       const PStringArray & descriptors  
00211     );
00212 
00222     PBoolean AddDeviceName(
00223       const PString & descriptor  
00224     );
00225 
00228     const OpalLineInterfaceDevice * GetDeviceByName(
00229       const PString & descriptor  
00230     );
00231 
00243     virtual PBoolean AddDevice(
00244       OpalLineInterfaceDevice * device    
00245     );
00246 
00250     void RemoveDevice(
00251       OpalLineInterfaceDevice * device  
00252     );
00253 
00256     void RemoveDevices() { RemoveAllLines(); }
00257 
00265     OpalLine * GetLine(
00266       const PString & lineName,  
00267       bool enableAudio = false,  
00268       bool terminating = true    
00269     );
00270 
00274     void SetDefaultLine(
00275       const PString & lineName  
00276     );
00277 
00283     bool SetCountryCode(
00284       OpalLineInterfaceDevice::T35CountryCodes country   
00285     );
00286 
00289     bool SetCountryCodeName(
00290       const PString & countryName   
00291     );
00293 
00294 
00295   protected:
00296     PDECLARE_NOTIFIER(PThread, OpalLineEndPoint, MonitorLines);
00297     virtual void MonitorLine(OpalLine & line);
00298 
00299     OpalLIDList  devices;
00300     OpalLineList lines;
00301     PString      defaultLine;
00302     PMutex       linesMutex;
00303     PThread    * monitorThread;
00304     PSyncPoint   exitFlag;
00305 };
00306 
00307 
00310 class OpalLineConnection : public OpalConnection
00311 {
00312   PCLASSINFO(OpalLineConnection, OpalConnection);
00313 
00314   public:
00319     OpalLineConnection(
00320       OpalCall & call,              
00321       OpalLineEndPoint & endpoint,   
00322       OpalLine & line,              
00323       const PString & number        
00324     );
00326 
00331     virtual PString GetPrefixName() const;
00332 
00341     virtual bool IsNetworkConnection() const { return !line.IsTerminal(); }
00342 
00349     virtual PBoolean SetUpConnection();
00350 
00361     virtual PBoolean SetAlerting(
00362       const PString & calleeName,   
00363       PBoolean withMedia                
00364     );
00365 
00370     virtual PBoolean SetConnected();
00371 
00390     virtual void OnReleased();
00391 
00398     virtual PString GetDestinationAddress();
00399 
00406     virtual OpalMediaFormatList GetMediaFormats() const;
00407 
00422     virtual OpalMediaStream * CreateMediaStream(
00423       const OpalMediaFormat & mediaFormat, 
00424       unsigned sessionID,                  
00425       PBoolean isSource                        
00426     );
00427 
00440     virtual PBoolean OnOpenMediaStream(
00441       OpalMediaStream & stream    
00442     );
00443 
00451     virtual void OnClosedMediaStream(
00452       const OpalMediaStream & stream     
00453     );
00454 
00457     virtual PBoolean SetAudioVolume(
00458       PBoolean source,                  
00459       unsigned percentage           
00460     );
00461 
00465     virtual unsigned GetAudioSignalLevel(
00466       PBoolean source                   
00467     );
00468 
00476     virtual PBoolean SendUserInputString(
00477       const PString & value                   
00478     );
00479 
00486     virtual PBoolean SendUserInputTone(
00487       char tone,    
00488       int duration  
00489     );
00490 
00497     virtual PBoolean PromptUserInput(
00498       PBoolean play   
00499     );
00501 
00506     void StartIncoming();
00507 
00510     virtual void Monitor();
00512 
00513 
00518     OpalLine & GetLine() { return line; }
00519 
00523     OpalLineInterfaceDevice::CallProgressTones GetPromptTone() const { return m_promptTone; }
00524 
00527     void SetPromptTone(OpalLineInterfaceDevice::CallProgressTones tone) { m_promptTone = tone; }
00528 
00531     void setDialDelay(
00532       unsigned int uiDialDelay  
00533     ) { m_dialParams.m_dialStartDelay = uiDialDelay;}
00534 
00538     unsigned int getDialDelay() const { return m_dialParams.m_dialStartDelay; }
00540         
00541   protected:
00542     OpalLineEndPoint & endpoint;
00543     OpalLine        & line;
00544     bool              wasOffHook;
00545     unsigned          minimumRingCount;
00546     PString           m_dialedNumber;
00547     OpalLineInterfaceDevice::DialParams m_dialParams;
00548     OpalLineInterfaceDevice::CallProgressTones m_promptTone;
00549 
00550     PDECLARE_NOTIFIER(PThread, OpalLineConnection, HandleIncoming);
00551     PThread         * handlerThread;
00552 };
00553 
00554 
00558 class OpalLineMediaStream : public OpalMediaStream
00559 {
00560     PCLASSINFO(OpalLineMediaStream, OpalMediaStream);
00561   public:
00566     OpalLineMediaStream(
00567       OpalLineConnection & conn,            
00568       const OpalMediaFormat & mediaFormat, 
00569       unsigned sessionID,                  
00570       PBoolean isSource,                       
00571       OpalLine & line                      
00572     );
00574 
00575     ~OpalLineMediaStream();
00576 
00577 
00585     virtual PBoolean Open();
00586 
00592     virtual PBoolean ReadPacket(
00593       RTP_DataFrame & packet
00594     );
00595 
00601     virtual PBoolean WritePacket(
00602       RTP_DataFrame & packet
00603     );
00604 
00608     virtual PBoolean ReadData(
00609       BYTE * data,      
00610       PINDEX size,      
00611       PINDEX & length   
00612     );
00613 
00617     virtual PBoolean WriteData(
00618       const BYTE * data,   
00619       PINDEX length,       
00620       PINDEX & written     
00621     );
00622 
00628     virtual PBoolean SetDataSize(
00629       PINDEX dataSize,  
00630       PINDEX frameTime  
00631     );
00632 
00636     virtual PBoolean IsSynchronous() const;
00637 
00648     virtual PBoolean RequiresPatchThread(
00649       OpalMediaStream * stream  
00650     ) const;
00652 
00657     OpalLine & GetLine() { return line; }
00659 
00660   protected:
00661     virtual void InternalClose();
00662 
00663     OpalLine & line;
00664     bool       notUsingRTP;
00665     bool       useDeblocking;
00666     unsigned   missedCount;
00667     BYTE       lastSID[4];
00668     bool       lastFrameWasSignal;
00669     unsigned   directLineNumber;
00670 };
00671 
00672 
00673 class OpalLineSilenceDetector : public OpalSilenceDetector
00674 {
00675     PCLASSINFO(OpalLineSilenceDetector, OpalSilenceDetector);
00676   public:
00681     OpalLineSilenceDetector(
00682       OpalLine & line,        
00683       const Params & newParam 
00684     );
00686 
00697     virtual unsigned GetAverageSignalLevel(
00698       const BYTE * buffer,  
00699       PINDEX size           
00700     );
00702 
00703   protected:
00704     OpalLine & line;
00705 };
00706 
00707 
00708 #endif // OPAL_LID
00709 
00710 #endif // OPAL_LIDS_LIDEP_H
00711 
00712 
00713 // End of File ///////////////////////////////////////////////////////////////

Generated on 21 Jun 2013 for OPAL by  doxygen 1.4.7