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>
63 class SDPSessionDescription;
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()
629 const SDPSessionDescription * sdp = NULL
644 const PString & callID,
691 void Build(PString & pduStr, PINDEX & pduLen);
711 void SetSDP(SDPSessionDescription * sdp);
832 const PString & aor = PString::Empty(),
833 const PString & remote = PString::Empty()
837 const PString & defaultUser,
838 const PTimeInterval & defaultExpire
876 virtual void Work() = 0;
878 bool GetTarget(PSafePtr<SIPTransaction> & transaction);
879 bool GetTarget(PSafePtr<SIPConnection> & connection);
880 bool GetTarget(PSafePtr<SIPHandler> & handler);
890 typedef PQueuedThreadPool<SIPWorkItem> BaseClass;
894 : BaseClass(maxWorkers, 0, threadName, PThread::HighPriority)
900 template <
class Target_T>
915 PSafePtr<Target_T> target;
917 PTRACE_CONTEXT_ID_PUSH_THREAD(target);
919 PTRACE(4,
"SIP\tHandled timeout");
928 template <
class Target_T>
929 class SIPPoolTimer :
public PPoolTimerArg3<SIPTimeoutWorkItem<Target_T>,
932 void (Target_T::*)(),
936 typedef PPoolTimerArg3<Work_T, SIPEndPoint &, PString, void (Target_T::*)(), SIPWorkItem> BaseClass;
942 : BaseClass(pool, ep, token, callback)
960 PSafeObject &
object,
1018 const PString & transactionID
1019 ) :
SIP_PDU(method, transport, transactionID) { }
1023 const PString & transactionID
1027 const PObject & other
1052 bool deleteOwner =
false,
1053 const PString & transactionID = PString::Empty()
1101 Terminated_RetriesExceeded,
1102 Terminated_TransportError,
1103 Terminated_Cancelled,
1126 #define OPAL_PROXY_PARAM "OPAL-proxy"
1127 #define OPAL_LOCAL_ID_PARAM "OPAL-local-id"
1128 #define OPAL_INTERFACE_PARAM "OPAL-interface"
1148 virtual bool Send();
1225 e_CannotRegisterMultipleContacts,
1229 e_CannotRegisterPrivateContacts,
1233 e_HasApplicationLayerGateway,
1265 const PString & callId,
1275 ostream &
operator<<(ostream & strm, SIPRegister::CompatibilityModes mode);
1322 virtual Comparison
InternalCompare(PINDEX offset, PINDEX length,
const char * cstr)
const;
1348 bool LoadAndValidate(
1350 const PXML::ValidationInfo * validator,
1351 PXML::Options options = PXML::WithNS
1357 const char * extra = NULL
1419 unsigned m_expectedSequenceNumber;
1448 const SIPEventPackage & eventPackage,
1449 const PString & state,
1450 const PString & body
1467 const PString & sipIfMatch,
1469 const PString & body
1485 const SIPURL & referred_by,
1549 void Construct(
const Params & params);
1551 Params m_parameters;
1568 :
m_acceptContent(
"application/sdp, application/media_control+xml, application/dtmf, application/dtmf-relay")
1604 Params(
const PString & contentType = PString::Empty(),
1605 const PString & body = PString::Empty())
1655 const PString & rack
1664 #endif // OPAL_SIP_SIPPDU_H