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
301 virtual void PrintOn(ostream & strm)
const;
302 virtual bool InternalAddMIME(
const PString & fieldName,
const PString & fieldValue);
306 PCaselessString
GetContentType(
bool includeParameters =
false)
const;
348 void SetVia(
const PString & v);
367 void SetCSeq(
const PString & v);
370 void SetDate(
const PString & v);
374 unsigned GetExpires(
unsigned dflt = UINT_MAX)
const;
434 void GetAlertInfo(PString & info,
int & appearance)
const;
435 void SetAlertInfo(
const PString & info,
int appearance);
446 const PString & fieldName,
447 const PString & paramName,
448 const PString & defaultValue = PString::Empty()
456 const PString & fieldName,
457 const PString & paramName,
458 const PString & newValue
464 const PString & fieldValue,
465 const PString & paramName,
466 const PString & defaultValue = PString::Empty()
474 const PString & fieldValue,
475 const PString & paramName,
476 const PString & newValue
481 void AddTokenSet(
const char * field,
const PString & token);
482 void SetTokenSet(
const char * field,
const PStringSet & tokens);
519 PCLASSINFO(
SIP_PDU, PSafeObject);
620 const PString & transactionID = PString::Empty()
644 const PString & callID,
691 void Build(PString & pduStr, PINDEX & pduLen);
831 const PString & aor = PString::Empty(),
832 const PString & remote = PString::Empty()
836 const PString & defaultUser,
837 const PTimeInterval & defaultExpire
875 virtual void Work() = 0;
877 bool GetTarget(PSafePtr<SIPTransaction> & transaction);
878 bool GetTarget(PSafePtr<SIPConnection> & connection);
879 bool GetTarget(PSafePtr<SIPHandler> & handler);
889 typedef PQueuedThreadPool<SIPWorkItem> BaseClass;
893 : BaseClass(maxWorkers, 0, threadName, PThread::HighPriority)
899 template <
class Target_T>
914 PSafePtr<Target_T> target;
916 PTRACE_CONTEXT_ID_PUSH_THREAD(target);
918 PTRACE(4,
"SIP\tHandled timeout");
927 template <
class Target_T>
928 class SIPPoolTimer :
public PPoolTimerArg3<SIPTimeoutWorkItem<Target_T>,
931 void (Target_T::*)(),
935 typedef PPoolTimerArg3<Work_T, SIPEndPoint &, PString, void (Target_T::*)(), SIPWorkItem> BaseClass;
941 : BaseClass(pool, ep, token, callback)
959 PSafeObject &
object,
1017 const PString & transactionID
1018 ) :
SIP_PDU(method, transport, transactionID) { }
1022 const PString & transactionID
1026 const PObject & other
1051 bool deleteOwner =
false,
1052 const PString & transactionID = PString::Empty()
1100 Terminated_RetriesExceeded,
1101 Terminated_TransportError,
1102 Terminated_Cancelled,
1125 #define OPAL_PROXY_PARAM "OPAL-proxy"
1126 #define OPAL_LOCAL_ID_PARAM "OPAL-local-id"
1127 #define OPAL_INTERFACE_PARAM "OPAL-interface"
1147 virtual bool Send();
1224 e_CannotRegisterMultipleContacts,
1228 e_CannotRegisterPrivateContacts,
1232 e_HasApplicationLayerGateway,
1264 const PString & callId,
1274 ostream &
operator<<(ostream & strm, SIPRegister::CompatibilityModes mode);
1321 virtual Comparison
InternalCompare(PINDEX offset, PINDEX length,
const char * cstr)
const;
1346 bool LoadAndValidate(
1348 const PXML::ValidationInfo * validator,
1349 PXML::Options options = PXML::WithNS
1355 const char * extra = NULL
1417 unsigned m_expectedSequenceNumber;
1446 const SIPEventPackage & eventPackage,
1447 const PString & state,
1448 const PString & body
1465 const PString & sipIfMatch,
1467 const PString & body
1483 const SIPURL & referred_by,
1547 void Construct(
const Params & params);
1549 Params m_parameters;
1566 :
m_acceptContent(
"application/sdp, application/media_control+xml, application/dtmf, application/dtmf-relay")
1602 Params(
const PString & contentType = PString::Empty(),
1603 const PString & body = PString::Empty())
1653 const PString & rack
1662 #endif // OPAL_SIP_SIPPDU_H