00001 /* 00002 * 00003 * 00004 * Inter Asterisk Exchange 2 00005 * 00006 * Class definition for describing the entity that sends all packets 00007 * for all calls 00008 * 00009 * Open Phone Abstraction Library (OPAL) 00010 * 00011 * Copyright (c) 2005 Indranet Technologies Ltd. 00012 * 00013 * The contents of this file are subject to the Mozilla Public License 00014 * Version 1.0 (the "License"); you may not use this file except in 00015 * compliance with the License. You may obtain a copy of the License at 00016 * http://www.mozilla.org/MPL/ 00017 * 00018 * Software distributed under the License is distributed on an "AS IS" 00019 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See 00020 * the License for the specific language governing rights and limitations 00021 * under the License. 00022 * 00023 * The Original Code is Open Phone Abstraction Library. 00024 * 00025 * The Initial Developer of the Original Code is Indranet Technologies Ltd. 00026 * 00027 * The author of this code is Derek J Smithies 00028 * 00029 * $Log: transmit.h,v $ 00030 * Revision 1.6 2007/04/19 06:17:21 csoutheren 00031 * Fixes for precompiled headers with gcc 00032 * 00033 * Revision 1.5 2007/01/23 02:08:25 dereksmithies 00034 * Handle Vnak frames correctly. handle iseqno and oseqno correctly. 00035 * 00036 * Revision 1.4 2007/01/09 03:32:23 dereksmithies 00037 * Tidy up and improve the close down process - make it more robust. 00038 * Alter level of several PTRACE statements. Add Terminate() method to transmitter and receiver. 00039 * 00040 * Revision 1.3 2006/06/16 01:47:08 dereksmithies 00041 * Get the OnHold features of IAX2 to work correctly. 00042 * Thanks to Stephen Cook, (sitiveni@gmail.com) for this work. 00043 * 00044 * Revision 1.2 2005/08/26 03:07:38 dereksmithies 00045 * Change naming convention, so all class names contain the string "IAX2" 00046 * 00047 * Revision 1.1 2005/07/30 07:01:32 csoutheren 00048 * Added implementation of IAX2 (Inter Asterisk Exchange 2) protocol 00049 * Thanks to Derek Smithies of Indranet Technologies Ltd. for 00050 * writing and contributing this code 00051 * 00052 * 00053 * 00054 * 00055 */ 00056 00057 #ifndef TRANSMIT_H 00058 #define TRANSMIT_H 00059 00060 #ifndef _PTLIB_H 00061 #include <ptlib.h> 00062 #endif 00063 00064 #include <opal/buildopts.h> 00065 00066 #include <ptlib/sockets.h> 00067 00068 #include <iax2/frame.h> 00069 #include <iax2/iax2ep.h> 00070 00071 #ifdef P_USE_PRAGMA 00072 #pragma interface 00073 #endif 00074 00084 class IAX2Transmit : public PThread 00085 { 00086 PCLASSINFO(IAX2Transmit, PThread); 00087 public: 00090 00094 IAX2Transmit(IAX2EndPoint & _newEndpoint, PUDPSocket & _newSocket); 00095 00099 ~IAX2Transmit(); 00101 00104 00106 virtual void Terminate(); 00107 00111 void SendFrame(IAX2Frame *newFrame); 00112 00115 void ProcessLists() { activate.Signal(); } 00116 00120 void AckReceived(); 00121 00124 virtual void Main(); 00125 00130 void PurgeMatchingFullFrames(IAX2Frame *frame); 00131 00135 void SendVnakRequestedFrames(IAX2FullFrameProtocol &src); 00136 00138 void ReportLists(PString & answer, bool getFullReport=false); 00140 00141 protected: 00142 00145 void ProcessAckingList(); 00146 00148 void ProcessSendList(); 00149 00151 IAX2EndPoint &ep; 00152 00154 PUDPSocket & sock; 00155 00157 PSyncPoint activate; 00158 00163 IAX2ActiveFrameList ackingFrames; 00164 00166 IAX2ActiveFrameList sendNowFrames; 00167 00169 PBoolean keepGoing; 00170 }; 00171 00172 #endif // IAX2_TRANSMIT_H 00173 /* The comment below is magic for those who use emacs to edit this file. */ 00174 /* With the comment below, the tab key does auto indent to 4 spaces. */ 00175 00176 /* 00177 * Local Variables: 00178 * mode:c 00179 * c-basic-offset:2 00180 * End: 00181 */ 00182