00001 #ifndef REGPROCESSOR_H
00002 #define REGPROCESSOR_H
00003
00004 #ifndef _PTLIB_H
00005 #include <ptlib.h>
00006 #endif
00007
00008 #include <opal/buildopts.h>
00009
00010 #include <ptclib/random.h>
00011 #include <opal/connection.h>
00012
00013 #include <iax2/frame.h>
00014 #include <iax2/processor.h>
00015 #include <iax2/iedata.h>
00016 #include <iax2/remote.h>
00017 #include <iax2/safestrings.h>
00018 #include <iax2/sound.h>
00019
00020 class IAX2EndPoint;
00021 class IAX2Connection;
00022
00023 class IAX2RegProcessor : public IAX2Processor
00024 {
00025 PCLASSINFO(IAX2RegProcessor, IAX2Processor);
00026
00027 public:
00029 IAX2RegProcessor( IAX2EndPoint & ep,
00030 const PString & host,
00031 const PString & username,
00032 const PString & password,
00033 PINDEX inRegistrationRefreshTime
00034 );
00035
00037 virtual ~IAX2RegProcessor();
00038
00042 void Unregister();
00043
00044 PString GetHost() const { return host; };
00045 PString GetUserName() const { return userName; };
00046 PString GetPassword() const { return password; };
00047
00048 protected:
00049 PString host;
00050 PString userName;
00051 PString password;
00052
00053 INT registrationRefreshTime;
00054
00056 enum RegistrationState {
00057 registrationStart = 1,
00058 registrationHappening,
00059 registrationUnregisterStart,
00060 registrationUnregistering,
00061 registrationUnregistered,
00063 registrationWait
00064 };
00065
00067 RegistrationState registrationState;
00068
00071 PMutex stateMutex;
00072
00073 #ifdef DOC_PLUS_PLUS
00074
00075 void OnDoRegistration(PTimer &, INT);
00076 #else
00077 PDECLARE_NOTIFIER(PTimer, IAX2RegProcessor, OnDoRegistration);
00078 #endif
00079
00081 PTimer registrationTimer;
00082
00084 void ProcessIaxCmdRegAuth(IAX2FullFrameProtocol * src);
00085
00087 void ProcessIaxCmdRegAck(IAX2FullFrameProtocol * src);
00088
00090 void ProcessIaxCmdRegRej(IAX2FullFrameProtocol * src);
00091
00094 void ProcessIaxCmdUnRegAuth(IAX2FullFrameProtocol * src);
00095
00097 void ProcessIaxCmdUnRegAck(IAX2FullFrameProtocol * src);
00098
00100 void ProcessIaxCmdUnRegRej(IAX2FullFrameProtocol * src);
00101
00104 void OnNoResponseTimeout();
00105
00108 void PrintOn(ostream & strm) const;
00109
00111 virtual void ProcessLists();
00112
00115 virtual void ProcessFullFrame(IAX2FullFrame & fullFrame);
00116
00118 virtual void ProcessNetworkFrame(IAX2MiniFrame * src);
00119
00122 virtual PBoolean ProcessNetworkFrame(IAX2FullFrameProtocol * src);
00123
00129 void ResetCall();
00130
00137 virtual PBoolean IncomingMessageOutOfOrder(IAX2FullFrame *)
00138 { return PFalse; };
00139
00140
00143 PRandom regRandom;
00144 };
00145
00146 #endif // REGPROCESSOR_H