32 #ifndef OPAL_SIP_SIPPDU_H
33 #define OPAL_SIP_SIPPDU_H
43 #include <ptclib/mime.h>
44 #include <ptclib/url.h>
45 #include <ptclib/http.h>
46 #include <ptclib/pxml.h>
47 #include <ptclib/threadpool.h>
88 ) { PURL::operator=(url);
return *
this; }
94 const char * defaultScheme = NULL
98 ) { Parse(cstr);
return *
this; }
104 const char * defaultScheme = NULL
108 ) { Parse(str);
return *
this; }
120 const PString & name,
122 WORD listenerPort = 0,
123 const char * scheme = NULL
128 WORD listenerPort = 0,
129 const char * scheme = NULL
179 PINDEX dnsEntry = P_MAX_INDEX
212 const PString & tag = PString::Empty(),
221 const PString & name,
224 const char * scheme);
229 const char * defaultScheme
235 const char * defaultScheme
250 bool reversed =
false
298 virtual void PrintOn(ostream & strm)
const;
299 virtual bool InternalAddMIME(
const PString & fieldName,
const PString & fieldValue);
303 PCaselessString
GetContentType(
bool includeParameters =
false)
const;
345 void SetVia(
const PString & v);
364 void SetCSeq(
const PString & v);
367 void SetDate(
const PString & v);
371 unsigned GetExpires(
unsigned dflt = UINT_MAX)
const;
431 void GetAlertInfo(PString & info,
int & appearance)
const;
432 void SetAlertInfo(
const PString & info,
int appearance);
443 const PString & fieldName,
444 const PString & paramName,
445 const PString & defaultValue = PString::Empty()
453 const PString & fieldName,
454 const PString & paramName,
455 const PString & newValue
461 const PString & fieldValue,
462 const PString & paramName,
463 const PString & defaultValue = PString::Empty()
471 const PString & fieldValue,
472 const PString & paramName,
473 const PString & newValue
478 void AddTokenSet(
const char * field,
const PString & token);
479 void SetTokenSet(
const char * field,
const PStringSet & tokens);
516 PCLASSINFO(
SIP_PDU, PSafeObject);
617 const PString & transactionID = PString::Empty()
641 const PString & callID,
688 void Build(PString & pduStr, PINDEX & pduLen);
827 const PString & aor = PString::Empty(),
828 const PString & remote = PString::Empty()
832 const PString & defaultUser,
833 const PTimeInterval & defaultExpire
871 virtual void Work() = 0;
873 bool GetTarget(PSafePtr<SIPTransaction> & transaction);
874 bool GetTarget(PSafePtr<SIPConnection> & connection);
875 bool GetTarget(PSafePtr<SIPHandler> & handler);
885 typedef PQueuedThreadPool<SIPWorkItem> BaseClass;
889 : BaseClass(maxWorkers, 0, threadName, PThread::HighPriority)
895 template <
class Target_T>
910 PSafePtr<Target_T> target;
912 PTRACE_CONTEXT_ID_PUSH_THREAD(target);
914 PTRACE(4,
"SIP\tHandled timeout");
923 template <
class Target_T>
924 class SIPPoolTimer :
public PPoolTimerArg3<SIPTimeoutWorkItem<Target_T>,
927 void (Target_T::*)(),
931 typedef PPoolTimerArg3<Work_T, SIPEndPoint &, PString, void (Target_T::*)(), SIPWorkItem> BaseClass;
937 : BaseClass(pool, ep, token, callback)
955 PSafeObject &
object,
1013 const PString & transactionID
1014 ) :
SIP_PDU(method, transport, transactionID) { }
1018 const PString & transactionID
1022 const PObject & other
1047 bool deleteOwner =
false,
1048 const PString & transactionID = PString::Empty()
1096 Terminated_RetriesExceeded,
1097 Terminated_TransportError,
1098 Terminated_Cancelled,
1121 #define OPAL_PROXY_PARAM "OPAL-proxy"
1122 #define OPAL_LOCAL_ID_PARAM "OPAL-local-id"
1123 #define OPAL_INTERFACE_PARAM "OPAL-interface"
1143 virtual bool Send();
1220 e_CannotRegisterMultipleContacts,
1224 e_CannotRegisterPrivateContacts,
1228 e_HasApplicationLayerGateway,
1260 const PString & callId,
1270 ostream &
operator<<(ostream & strm, SIPRegister::CompatibilityModes mode);
1317 virtual Comparison
InternalCompare(PINDEX offset, PINDEX length,
const char * cstr)
const;
1342 bool LoadAndValidate(
1344 const PXML::ValidationInfo * validator,
1345 PXML::Options options = PXML::WithNS
1351 const char * extra = NULL
1413 unsigned m_expectedSequenceNumber;
1442 const SIPEventPackage & eventPackage,
1443 const PString & state,
1444 const PString & body
1461 const PString & sipIfMatch,
1463 const PString & body
1479 const SIPURL & referred_by,
1543 void Construct(
const Params & params);
1545 Params m_parameters;
1562 :
m_acceptContent(
"application/sdp, application/media_control+xml, application/dtmf, application/dtmf-relay")
1598 Params(
const PString & contentType = PString::Empty(),
1599 const PString & body = PString::Empty())
1649 const PString & rack
1658 #endif // OPAL_SIP_SIPPDU_H