main.h
上传用户:wgl386701
上传日期:2007-01-06
资源大小:22k
文件大小:8k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * main.h
  3.  *
  4.  * PWLib application header file for Voxilla
  5.  *
  6.  * A H.323 "net telephone" application.
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions of this code were written with the assisance of funding from
  25.  * Vovida Networks, Inc. http://www.vovida.com.
  26.  *
  27.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  28.  * All Rights Reserved.
  29.  *
  30.  * Contributor(s): ______________________________________.
  31.  *
  32.  * $Log: main.h,v $
  33.  * Revision 1.11  2000/05/25 12:06:17  robertj
  34.  * Added PConfigArgs class so can save program arguments to config files.
  35.  *
  36.  * Revision 1.10  2000/05/10 05:14:25  robertj
  37.  * Changed capabilities so has a function to get name of codec, instead of relying on PrintOn.
  38.  *
  39.  * Revision 1.9  2000/05/09 11:22:15  craigs
  40.  * Fixed problems caused by new jitter buffer code
  41.  * and fixed OGM problems
  42.  *
  43.  * Revision 1.8  2000/04/25 23:34:22  craigs
  44.  * Added lots of new code, including outgoing and incoming
  45.  * multiplexors, and the start of an IVR system
  46.  *
  47.  * Revision 1.7  2000/01/13 04:03:45  robertj
  48.  * Added video transmission
  49.  *
  50.  * Revision 1.6  1999/11/11 00:27:49  robertj
  51.  * Changed OnAnswerCall() call back function  to allow for asyncronous response.
  52.  *
  53.  * Revision 1.5  1999/11/06 13:27:49  craigs
  54.  * Added extra output and changed for new library changes
  55.  *
  56.  * Revision 1.4  1999/10/24 12:50:37  craigs
  57.  * Fixed G723.1 capability, and added ability for discrete OGMs
  58.  *
  59.  * Revision 1.3  1999/10/24 03:08:49  craigs
  60.  * Fixed problem with recording zero length messages, and added autodelete of files
  61.  *
  62.  * Revision 1.2  1999/10/22 09:56:41  craigs
  63.  * Fixed compile warning
  64.  *
  65.  * Revision 1.1  1999/10/11 00:15:18  craigs
  66.  * Initial version
  67.  *
  68.  *
  69.  */
  70. #ifndef _Voxilla_MAIN_H
  71. #define _Voxilla_MAIN_H
  72. #include <h323.h>
  73. #include <h323pdu.h>
  74. #include <h245.h>
  75. #include <gsmcodec.h>
  76. #include <lid.h>
  77. class OpenAm : public PProcess
  78. {
  79.   PCLASSINFO(OpenAm, PProcess)
  80.   public:
  81.     OpenAm();
  82.     ~OpenAm();
  83.     void Main();
  84.     void RecordFile(PArgList & args);
  85.   protected:
  86.     long GetCodec(const PString & codecname);
  87.     OpalLineInterfaceDevice * GetDevice(const PString & device);
  88. };
  89. class MyH323EndPoint : public H323EndPoint
  90. {
  91.   PCLASSINFO(MyH323EndPoint, H323EndPoint);
  92.   public:
  93.     MyH323EndPoint(unsigned callLimit,
  94.                    const PString & runCmd,
  95.                    const PDirectory & dir,
  96.                    int flags);
  97.     // overrides from H323EndPoint
  98.     virtual H323Connection * CreateConnection(unsigned callReference);
  99.     // new functions
  100.     virtual void ListenForIncomingCalls();
  101.     virtual void AwaitTermination();
  102.     PString    GetGSMOGM() const            { return gsmOgm; }
  103.     void       SetGSMOGM(const PString & s) { gsmOgm = s; }
  104.     PString    GetG711OGM() const            { return g711Ogm; }
  105.     void       SetG711OGM(const PString & s) { g711Ogm = s; }
  106.     PString    GetG7231OGM() const            { return g7231Ogm; }
  107.     void       SetG7231OGM(const PString & s) { g7231Ogm = s; }
  108.     unsigned   GetCallLimit() const { return callLimit; }
  109.     PString    GetRunCmd() const    { return runCmd; }
  110.     PDirectory GetDirectory() const { return dir; }
  111.     enum {
  112.       DeleteAfterRecord = 0x01,
  113.       NoRecordG7231     = 0x02
  114.     };
  115.     BOOL       GetDeleteAfterRecord() const   { return flags & DeleteAfterRecord; }
  116.     BOOL       GetNoRecordG7231() const       { return flags & NoRecordG7231; }
  117.   protected:
  118.     unsigned callLimit;
  119.     PString g711Ogm, gsmOgm, g7231Ogm, runCmd;
  120.     PDirectory dir;
  121.     int flags;
  122. };
  123. class RecordFile;
  124. class MyH323Connection;
  125. PQUEUE(PStringQueue, PString);
  126. class OGMChannel : public PIndirectChannel
  127. {
  128.   PCLASSINFO(OGMChannel, PIndirectChannel);
  129.   public:
  130.     OGMChannel(MyH323Connection & conn);
  131.     BOOL Read(void * buffer, PINDEX amount);
  132.     void PlayFile(PFile * chan);
  133.     BOOL Close();
  134.     void SetIsPCM(BOOL _isPCM)              { isPCM = _isPCM; }
  135.     void SetExtension(const PString & _ext) { ext = _ext; }
  136.     PString GetExtension() const            { return ext; }
  137.     void QueueFile(const PString & cmd);
  138.     void FlushQueue();
  139.     void SetRecordTrigger();
  140.     void SetHangupTrigger();
  141.   protected:
  142.     void CreateSilence(void * buffer, PINDEX amount);
  143.     PStringQueue playQueue;
  144.     MyH323Connection & conn;
  145.     PMutex chanMutex;
  146.     BOOL isPCM;
  147.     PString ext;
  148.     PTime lastTime;
  149.     int silentCount;
  150.     int totalData;
  151.     BOOL recordTrigger, hangupTrigger;
  152.     BOOL closed;
  153. };
  154. class MyH323Connection : public H323Connection
  155. {
  156.   PCLASSINFO(MyH323Connection, H323Connection);
  157.   public:
  158.     MyH323Connection(MyH323EndPoint &, unsigned);
  159.     ~MyH323Connection();
  160.     // overrides from H323Connection
  161.     BOOL OpenAudioChannel(BOOL, unsigned, H323AudioCodec & codec);
  162.     AnswerCallResponse OnAnswerCall(const PString &, const H323SignalPDU &, H323SignalPDU &);
  163.     BOOL OnStartLogicalChannel(H323Channel & channel);
  164.     void OnUserInputString(const PString & value);
  165.     // new functions
  166.     void StartRecording();
  167.     void Hangup();
  168.   protected:
  169.     void OnUserInputChar(char ch);
  170.     BOOL StartMenu(int menuNumber);
  171.     BOOL ProcessMenuCmd(const PString & cmdStr);
  172.     const MyH323EndPoint & ep;
  173.     PString product;
  174.     PTime   callStartTime;
  175.     PTime   recordStartTime;
  176.     PString basename;
  177.     PFilePath recordFn;
  178.     PString transmitCodecName, receiveCodecName;
  179.     BOOL    recordTrigger;
  180.     PMutex  connMutex;
  181.     RecordFile * recordFile;
  182.     OGMChannel * ogmChannel;
  183.     PString digits, lastDigits;
  184.     int currentMenu;
  185.     PStringList menuNames;
  186. };
  187. class RecordFile : public PFile
  188. {
  189.   PCLASSINFO(RecordFile, PFile)
  190.   public:
  191.     RecordFile(MyH323Connection & conn, const PFilePath & fn, unsigned callLimit);
  192.     ~RecordFile();
  193.     BOOL Write(const void * buf, PINDEX len);
  194.     BOOL Close();
  195.     void StartRecording();
  196.     BOOL WasRecordStarted() const { return recordStarted; }
  197.   protected:
  198.     MyH323Connection & conn;
  199.     PTime finishTime;
  200.     PFilePath fn;
  201.     unsigned callLimit;
  202.     BOOL recordStarted;
  203.     BOOL closed;
  204. };
  205. class G7231_File_Codec : public H323AudioCodec
  206. {
  207.   PCLASSINFO(G7231_File_Codec, H323AudioCodec);
  208.   public:
  209.     G7231_File_Codec(Direction dir);
  210.     unsigned GetBandwidth() const;
  211.       
  212.     BOOL Read(BYTE * buffer, unsigned & length, RTP_DataFrame &);
  213.     BOOL Write(const BYTE * buffer, unsigned length, const RTP_DataFrame & rtp, unsigned & frames);
  214. };  
  215. class G7231_File_Capability : public H323AudioCapability
  216. {
  217.   PCLASSINFO(G7231_File_Capability, H323AudioCapability)
  218.   public:
  219.     G7231_File_Capability();
  220.     unsigned GetSubType() const { return H245_AudioCapability::e_g7231; }
  221.     H323Codec * CreateCodec(H323Codec::Direction direction) const;
  222.     PString GetFormatName() const;
  223.     BOOL OnSendingPDU(H245_AudioCapability & cap, unsigned packetSize) const;
  224.     BOOL OnReceivedPDU(const H245_AudioCapability & pdu, unsigned & packetSize);
  225.     PObject * Clone() const;
  226. };
  227. #endif  // _Voxilla_MAIN_H
  228. // End of File ///////////////////////////////////////////////////////////////