00001
00002 #ifndef OSCL_DNS_METHOD_H_INCLUDED
00003 #define OSCL_DNS_METHOD_H_INCLUDED
00004
00005 #include "osclconfig_io.h"
00006 #include "oscl_socket_types.h"
00007 #include "oscl_scheduler_ao.h"
00008 #include "oscl_dns.h"
00009 #include "pvlogger.h"
00010
00011 class OsclDNSObserver;
00012 class OsclDNSRequestAO;
00013 class OsclSocketServ;
00014 class OsclDNSI;
00015 class OsclDNS;
00016
00020 class OsclDNSMethod : public OsclTimerObject
00021 {
00022 public:
00023 OsclDNSMethod(Oscl_DefAlloc &a, const char *name, TPVDNSFxn fxn)
00024 : OsclTimerObject(OsclActiveObject::EPriorityNominal, name)
00025 , iDNSObserver(NULL)
00026 , iId(0)
00027 , iAlloc(a)
00028 , iDNSFxn(fxn)
00029 , iDNSRequestAO(NULL)
00030 {
00031 iLogger = PVLogger::GetLoggerObject("oscldns");
00032 }
00033
00034 void Abort();
00035 void AbortAll();
00036 void CancelMethod();
00037 void Run();
00038
00039 OsclDNSObserver *iDNSObserver;
00040 uint32 iId;
00041 Oscl_DefAlloc &iAlloc;
00042 TPVDNSFxn iDNSFxn;
00043 PVLogger* iLogger;
00044
00045 protected:
00046 void ConstructL(
00047 OsclDNSObserver*aObserver,
00048 OsclDNSRequestAO *aAO,
00049 uint32 aId);
00050
00051 bool StartMethod(int32 aTimeoutMsec);
00052 void MethodDone();
00053
00054 OsclDNSRequestAO *iDNSRequestAO;
00055 };
00056
00057
00061 class OsclDNSRequestAO : public OsclActiveObject
00062 {
00063 protected:
00064
00065 OsclDNSRequestAO(const char *name)
00066 : OsclActiveObject(OsclActiveObject::EPriorityNominal, name)
00067 , iDNSI(NULL)
00068 , iDNSMethod(NULL)
00069 , iSocketError(0)
00070 {
00071 }
00072
00073 void ConstructL(
00074 OsclDNSI *aDNS,
00075 OsclDNSMethod *aMethod)
00076 {
00077 if (!aMethod)
00078 OsclError::Leave(OsclErrGeneral);
00079 iDNSMethod = aMethod;
00080 iLogger = iDNSMethod->iLogger;
00081 if (!aDNS)
00082 OsclError::Leave(OsclErrGeneral);
00083 iDNSI = aDNS;
00084 }
00085
00086 void Abort()
00087 {
00088 Cancel();
00089 RemoveFromScheduler();
00090 }
00091 void NewRequest();
00092 void RequestDone();
00093 int GetSocketError();
00094 OsclSocketServI *Serv();
00095 void DoCancel();
00096 void Run();
00097
00098 virtual void Success() {}
00099 virtual void Failure() {}
00100 virtual void Cancelled() {}
00101
00102 OsclDNSI *iDNSI;
00103 OsclDNSMethod *iDNSMethod;
00104 int32 iSocketError;
00105 PVLogger* iLogger;
00106
00107 friend class OsclDNSI;
00108 friend class OsclDNSMethod;
00109 friend class OsclDNSRequest;
00110 friend class GetHostByNameParam;
00111 };
00112
00113 #endif
00114