sipxtacklib  Version 3.3
SipMessage.h
Go to the documentation of this file.
1 //
2 //
3 // Copyright (C) 2005-2012 SIPez LLC. All rights reserved.
4 //
5 // Copyright (C) 2005, 2006 SIPfoundry Inc.
6 // Licensed by SIPfoundry under the LGPL license.
7 //
8 // Copyright (C) 2004-2006 Pingtel Corp. All rights reserved.
9 // Licensed to SIPfoundry under a Contributor Agreement.
10 //
11 // $$
13 
14 // Author: Dan Petrie (dpetrie AT SIPez DOT com)
15 
16 #ifndef _SipMessage_h_
17 #define _SipMessage_h_
18 
19 // SYSTEM INCLUDES
20 //#include <...>
21 
22 // APPLICATION INCLUDES
23 #include <utl/UtlHashBag.h>
24 #include <os/OsSocket.h>
25 #include <net/HttpMessage.h>
26 #include <net/SdpBody.h>
27 #include <sdp/SdpCodec.h>
28 #include <net/Url.h>
29 #include <net/SmimeBody.h>
30 #include <tapi/sipXtapi.h>
31 #include <tapi/sipXtapiEvents.h>
32 
33 
34 class UtlHashMap;
35 class SipUserAgent;
36 class SipRegInfoBody; // for RFC 3680
37 
38 
39 // DEFINES
40 
41 // SIP extensions
42 #define SIP_CALL_CONTROL_EXTENSION "sip-cc"
43 #define SIP_SESSION_TIMER_EXTENSION "timer"
44 #define SIP_REPLACES_EXTENSION "replaces"
45 #define SIP_JOIN_EXTENSION "join"
46 
47 // SIP Methods
48 #define SIP_INVITE_METHOD "INVITE"
49 #define SIP_ACK_METHOD "ACK"
50 #define SIP_BYE_METHOD "BYE"
51 #define SIP_CANCEL_METHOD "CANCEL"
52 #define SIP_INFO_METHOD "INFO"
53 #define SIP_NOTIFY_METHOD "NOTIFY"
54 #define SIP_OPTIONS_METHOD "OPTIONS"
55 #define SIP_REFER_METHOD "REFER"
56 #define SIP_REGISTER_METHOD "REGISTER"
57 #define SIP_SUBSCRIBE_METHOD "SUBSCRIBE"
58 #define SIP_PING_METHOD "PING"
59 
60 
61 //Simple Methods
62 #define SIP_MESSAGE_METHOD "MESSAGE"
63 #define SIP_DO_METHOD "DO"
64 #define SIP_PUBLISH_METHOD "PUBLISH"
65 
66 // SIP Fields
67 #define SIP_ACCEPT_FIELD "ACCEPT"
68 #define SIP_ACCEPT_ENCODING_FIELD HTTP_ACCEPT_ENCODING_FIELD
69 #define SIP_ACCEPT_LANGUAGE_FIELD HTTP_ACCEPT_LANGUAGE_FIELD
70 #define SIP_ALLOW_FIELD "ALLOW"
71 #define SIP_ALSO_FIELD "ALSO"
72 #define SIP_CALLID_FIELD "CALL-ID"
73 #define SIP_CONFIG_ALLOW_FIELD "CONFIG_ALLOW"
74 #define SIP_CONFIG_REQUIRE_FIELD "CONFIG_REQUIRE"
75 #define SIP_SHORT_CALLID_FIELD "i"
76 #define SIP_CONTACT_FIELD "CONTACT"
77 #define SIP_SHORT_CONTACT_FIELD "m"
78 #define SIP_CONTENT_LENGTH_FIELD HTTP_CONTENT_LENGTH_FIELD
79 #define SIP_SHORT_CONTENT_LENGTH_FIELD "l"
80 #define SIP_CONTENT_TYPE_FIELD HTTP_CONTENT_TYPE_FIELD
81 #define SIP_SHORT_CONTENT_TYPE_FIELD "c"
82 #define SIP_CONTENT_ENCODING_FIELD "CONTENT-ENCODING"
83 #define SIP_SHORT_CONTENT_ENCODING_FIELD "e"
84 #define SIP_CSEQ_FIELD "CSEQ"
85 #define SIP_DIVERSION_FIELD "DIVERSION" // draft-levy-sip-diversion-08 Diversion header
86 #define SIP_EVENT_FIELD "EVENT"
87 #define SIP_SHORT_EVENT_FIELD "o"
88 #define SIP_EXPIRES_FIELD "EXPIRES"
89 #define SIP_FROM_FIELD "FROM"
90 #define SIP_IF_MATCH_FIELD "SIP-IF-MATCH"
91 #define SIP_SHORT_FROM_FIELD "f"
92 #define SIP_MAX_FORWARDS_FIELD "MAX-FORWARDS"
93 #define SIP_P_ASSERTED_IDENTITY_FIELD "P-ASSERTED-IDENTITY"
94 #define SIP_Q_FIELD "Q"
95 #define SIP_REASON_FIELD "REASON" // RFC 3326 Reason header
96 #define SIP_RECORD_ROUTE_FIELD "RECORD-ROUTE"
97 #define SIP_REFER_TO_FIELD "REFER-TO"
98 #define SIP_SHORT_REFER_TO_FIELD "r"
99 #define SIP_REFERRED_BY_FIELD "REFERRED-BY"
100 #define SIP_SHORT_REFERRED_BY_FIELD "b"
101 #define SIP_REPLACES_FIELD "REPLACES"
102 #define SIP_REQUEST_DISPOSITION_FIELD "REQUEST-DISPOSITION"
103 #define SIP_REQUESTED_BY_FIELD "REQUESTED-BY"
104 #define SIP_REQUIRE_FIELD "REQUIRE"
105 #define SIP_PROXY_REQUIRE_FIELD "PROXY-REQUIRE"
106 #define SIP_ROUTE_FIELD "ROUTE"
107 #define SIP_SERVER_FIELD "SERVER"
108 #define SIP_SESSION_EXPIRES_FIELD "SESSION-EXPIRES"
109 #define SIP_IF_MATCH_FIELD "SIP-IF-MATCH"
110 #define SIP_ETAG_FIELD "SIP-ETAG"
111 #define SIP_SUBJECT_FIELD "SUBJECT"
112 #define SIP_SHORT_SUBJECT_FIELD "s"
113 #define SIP_SUBSCRIPTION_STATE_FIELD "SUBSCRIPTION-STATE"
114 #define SIP_SUPPORTED_FIELD "SUPPORTED"
115 #define SIP_SHORT_SUPPORTED_FIELD "k"
116 #define SIP_TO_FIELD "TO"
117 #define SIP_SHORT_TO_FIELD "t"
118 #define SIP_UNSUPPORTED_FIELD "UNSUPPORTED"
119 #define SIP_USER_AGENT_FIELD HTTP_USER_AGENT_FIELD
120 #define SIP_VIA_FIELD "VIA"
121 #define SIP_SHORT_VIA_FIELD "v"
122 #define SIP_WARNING_FIELD "WARNING"
123 #define SIP_MIN_EXPIRES_FIELD "MIN-EXPIRES"
124 
126 #define SIP_LINE_IDENTIFIER "LINEID"
127 #define SIPX_IMPLIED_SUB "sipx-implied"
128 // Response codes and text
129 #define SIP_TRYING_CODE 100
130 #define SIP_TRYING_TEXT "Trying"
131 
132 #define SIP_RINGING_CODE 180
133 #define SIP_RINGING_TEXT "Ringing"
134 
135 #define SIP_QUEUED_CODE 182
136 #define SIP_QUEUED_TEXT "Queued"
137 
138 #define SIP_EARLY_MEDIA_CODE 183
139 #define SIP_EARLY_MEDIA_TEXT "Session Progress"
140 
141 #define SIP_2XX_CLASS_CODE 200
142 
143 #define SIP_OK_CODE 200
144 #define SIP_OK_TEXT "OK"
145 
146 #define SIP_ACCEPTED_CODE 202
147 #define SIP_ACCEPTED_TEXT "Accepted"
148 
149 #define SIP_3XX_CLASS_CODE 300
150 
151 #define SIP_MULTI_CHOICE_CODE 300
152 #define SIP_MULTI_CHOICE_TEXT "Multiple Choices"
153 
154 #define SIP_PERMANENT_MOVE_CODE 301
155 #define SIP_PERMANENT_MOVE_TEXT "Moved Permanently"
156 
157 #define SIP_TEMPORARY_MOVE_CODE 302
158 #define SIP_TEMPORARY_MOVE_TEXT "Moved Temporarily"
159 
160 #define SIP_USE_PROXY_CODE 305
161 #define SIP_USE_PROXY_TXT "Use Proxy"
162 
163 #define SIP_4XX_CLASS_CODE 400
164 
165 #define SIP_BAD_REQUEST_CODE 400
166 #define SIP_BAD_REQUEST_TEXT "Bad Request"
167 
168 #define SIP_FORBIDDEN_CODE 403
169 #define SIP_FORBIDDEN_TEXT "Forbidden"
170 
171 #define SIP_NOT_FOUND_CODE 404
172 #define SIP_NOT_FOUND_TEXT "Not Found"
173 
174 #define SIP_BAD_METHOD_CODE 405
175 #define SIP_BAD_METHOD_TEXT "Method Not Allowed"
176 
177 #define SIP_REQUEST_TIMEOUT_CODE 408
178 #define SIP_REQUEST_TIMEOUT_TEXT "Request timeout"
179 
180 #define SIP_CONDITIONAL_REQUEST_FAILED_CODE 412
181 #define SIP_CONDITIONAL_REQUEST_FAILED_TEXT "Conditional Request Failed"
182 
183 #define SIP_BAD_MEDIA_CODE 415
184 #define SIP_BAD_MEDIA_TEXT "Unsupported Media Type or Content Encoding"
185 
186 #define SIP_UNSUPPORTED_URI_SCHEME_CODE 416
187 #define SIP_UNSUPPORTED_URI_SCHEME_TEXT "Unsupported URI Scheme"
188 
189 #define SIP_BAD_EXTENSION_CODE 420
190 #define SIP_BAD_EXTENSION_TEXT "Extension Not Supported"
191 
192 #define SIP_TOO_BRIEF_CODE 423
193 #define SIP_TOO_BRIEF_TEXT "Registration Too Brief"
194 #define SIP_SUB_TOO_BRIEF_TEXT "Subscription Too Brief"
195 
196 #define SIP_BAD_TRANSACTION_CODE 481
197 #define SIP_BAD_TRANSACTION_TEXT "Transaction Does Not Exist"
198 
199 #define SIP_LOOP_DETECTED_CODE 482
200 #define SIP_LOOP_DETECTED_TEXT "Loop Detected"
201 
202 #define SIP_TOO_MANY_HOPS_CODE 483
203 #define SIP_TOO_MANY_HOPS_TEXT "Too many hops"
204 
205 #define SIP_BAD_ADDRESS_CODE 484
206 #define SIP_BAD_ADDRESS_TEXT "Address Incomplete"
207 
208 #define SIP_BUSY_CODE 486
209 #define SIP_BUSY_TEXT "Busy Here"
210 
211 #define SIP_REQUEST_TERMINATED_CODE 487
212 #define SIP_REQUEST_TERMINATED_TEXT "Request Terminated"
213 
214 #define SIP_REQUEST_NOT_ACCEPTABLE_HERE_CODE 488
215 #define SIP_REQUEST_NOT_ACCEPTABLE_HERE_TEXT "Not Acceptable Here"
216 
217 #define SIP_BAD_EVENT_CODE 489
218 #define SIP_BAD_EVENT_TEXT "Requested Event Type Is Not Supported"
219 
220 #define SIP_REQUEST_PENDING_CODE 491
221 #define SIP_REQUEST_PENDING_TEXT "Request Pending"
222 
223 #define SIP_REQUEST_UNDECIPHERABLE_CODE 493
224 #define SIP_REQUEST_UNDECIPHERABLE_TEXT "Request Contained an Undecipherable S/MIME body"
225 
226 #define SIP_5XX_CLASS_CODE 500
227 
228 #define SIP_SERVER_INTERNAL_ERROR_CODE 500
229 #define SIP_SERVER_INTERNAL_ERROR_TEXT "Internal Server Error"
230 
231 #define SIP_UNIMPLEMENTED_METHOD_CODE 501
232 #define SIP_UNIMPLEMENTED_METHOD_TEXT "Not Implemented"
233 
234 #define SIP_SERVICE_UNAVAILABLE_CODE 503
235 #define SIP_SERVICE_UNAVAILABLE_TEXT "Service Unavailable"
236 
237 #define SIP_BAD_VERSION_CODE 505
238 #define SIP_BAD_VERSION_TEXT "Version Not Supported"
239 
240 #define SIP_6XX_CLASS_CODE 600
241 
242 #define SIP_GLOBAL_BUSY_CODE 600
243 #define SIP_GLOBAL_BUSY_TEXT "Busy Everywhere"
244 
245 #define SIP_DECLINE_CODE 603
246 #define SIP_DECLINE_TEXT "Declined"
247 
248 // Warning codes
249 #define SIP_WARN_MEDIA_NAVAIL_CODE 304
250 #define SIP_WARN_MEDIA_NAVAIL_TEXT "Media type not available"
251 #define SIP_WARN_MEDIA_INCOMPAT_CODE 305
252 #define SIP_WARN_MEDIA_INCOMPAT_TEXT "Insufficient compatible media types"
253 #define SIP_WARN_MISC_CODE 399
254 
255 // Transport stuff
256 #define SIP_PORT 5060
257 #define SIP_TLS_PORT 5061
258 #define SIP_PROTOCOL_VERSION "SIP/2.0"
259 #define SIP_SUBFIELD_SEPARATOR " "
260 #define SIP_SUBFIELD_SEPARATORS "\t "
261 #define SIP_MULTIFIELD_SEPARATOR ","
262 #define SIP_SINGLE_SPACE " "
263 #define SIP_MULTIFIELD_SEPARATORS "\t ,"
264 #define SIP_TRANSPORT_UDP "UDP"
265 #define SIP_TRANSPORT_TCP "TCP"
266 #define SIP_TRANSPORT_TLS "TLS"
267 #define SIP_URL_TYPE "SIP:"
268 #define SIPS_URL_TYPE "SIPS:"
269 #define SIP_DEFAULT_MAX_FORWARDS 70
270 
271 // Caller preference request dispostions tokens
272 #define SIP_DISPOSITION_QUEUE "QUEUE"
273 
274 // NOTIFY method event types
275 #define SIP_EVENT_MESSAGE_SUMMARY "message-summary"
276 #define SIP_EVENT_SIMPLE_MESSAGE_SUMMARY "simple-message-summary"
277 #define SIP_EVENT_CHECK_SYNC "check-sync"
278 #define SIP_EVENT_REFER "refer"
279 #define SIP_EVENT_CONFIG "sip-config"
280 #define SIP_EVENT_UA_PROFILE "ua-profile"
281 #define SIP_EVENT_REGISTER "reg" // RFC 3680
282 #define SIP_EVENT_PRESENCE "presence"
283 
284 // Event Header Parameters
285 #define SIP_EVENT_PARAMETER_PROFILE_TYPE "profile-type"
286 #define SIP_EVENT_PARAMETER_VENDOR "vendor"
287 #define SIP_EVENT_PARAMETER_MODEL "model"
288 #define SIP_EVENT_PARAMETER_VERSION "version"
289 
290 // NOTIFY Subscription-State values
291 #define SIP_SUBSCRIPTION_ACTIVE "active"
292 #define SIP_SUBSCRIPTION_PENDING "pending"
293 #define SIP_SUBSCRIPTION_TERMINATED "terminated"
294 
295 // The following are used for the REFER NOTIFY message body contents
296 #define CONTENT_TYPE_SIP_APPLICATION "application/sip"
297 #define CONTENT_TYPE_MESSAGE_SIPFRAG "message/sipfrag"
298 #define CONTENT_TYPE_SIMPLE_MESSAGE_SUMMARY "application/simple-message-summary"
299 #define CONTENT_TYPE_XPRESSA_SCRIPT "text/xpressa-script"
300 #define CONTENT_TYPE_VQ_RTCP_XR "application/vq-rtcpxr"
301 
302 // Added for RFC 3680
303 #define CONTENT_TYPE_REG_INFO "application/reg-info+xml"
304 
305 #define SIP_REFER_SUCCESS_STATUS "SIP/2.0 200 OK\r\n"
306 #define SIP_REFER_FAILURE_STATUS "SIP/2.0 503 Service Unavailable\r\n"
307 
308 //Added for Diversion header reason parameters
309 
310 #define SIP_DIVERSION_UNKNOWN "unknown"
311 #define SIP_DIVERSION_BUSY "user-busy"
312 #define SIP_DIVERSION_UNAVAILABLE "unavailable"
313 #define SIP_DIVERSION_UNCONDITIONAL "unconditional"
314 #define SIP_DIVERSION_TIMEOFDAY "time-of-day"
315 #define SIP_DIVERSION_DND "do-not-disturb"
316 #define SIP_DIVERSION_DEFLECTION "deflection"
317 #define SIP_DIVERSION_OTOFSERVICE "out-of-service"
318 #define SIP_DIVERSION_FOLLOWME "follow-me"
319 #define SIP_DIVERSION_AWAY "away"
320 
321 // Session-Timer refresher parameter values
322 #define SIP_REFRESHER_UAC "uac"
323 #define SIP_REFRESHER_UAS "uas"
324 
325 // MACROS
326 // EXTERNAL FUNCTIONS
327 // EXTERNAL VARIABLES
328 // CONSTANTS
329 // STRUCTS
330 // TYPEDEFS
331 // FORWARD DECLARATIONS
332 class SipTransaction;
333 
335 
344 {
345 /* //////////////////////////// PUBLIC //////////////////////////////////// */
346 public:
347  // See sipXcall's CpCallManager for more defines
348 
350  {
353  };
354 
355 /* ============================ CREATORS ================================== */
356 
358  SipMessage(const char* messageBytes = NULL,
359  int byteCount = -1);
360 
362  SipMessage(OsSocket* inSocket,
363  int bufferSize = HTTP_DEFAULT_SOCKET_BUFFER_SIZE);
364 
366  SipMessage(const SipMessage& rSipMessage);
367 
369  SipMessage& operator=(const SipMessage& rhs);
370 
371  virtual
372  ~SipMessage();
373  //:Destructor
374 
375 /* ============================ MANIPULATORS ============================== */
376 
377  static UtlBoolean getShortName( const char* longFieldName,
378  UtlString* shortFieldName );
379 
380  static UtlBoolean getLongName( const char* shortFieldName,
381  UtlString* longFieldName );
382 
383  void replaceShortFieldNames();
384 
385  void replaceLongFieldNames();
386 
387 /* ============================ ACCESSORS ================================= */
388 
390 
391  static void buildSipUrl(UtlString* url, const char* address,
392  int port = PORT_NONE,
393  const char* protocol = NULL,
394  const char* user = NULL,
395  const char* userLabel = NULL,
396  const char* tag = NULL);
397 
398  static void buildReplacesField(UtlString& replacesField,
399  const char* callId,
400  const char* fromField,
401  const char* toFIeld);
402 
403  static UtlBoolean parseParameterFromUri(const char* uri,
404  const char* parameterName,
405  UtlString* parameterValue);
406 
407  static void setUriParameter(UtlString* uri, const char* parameterName,
408  const char* parameterValue);
409 
410  static void parseAddressFromUri(const char* uri, UtlString* address,
411  int* port, UtlString* protocol,
412  UtlString* user = NULL,
413  UtlString* userLabel = NULL,
414  UtlString* tag = NULL);
415 
416  static void ParseContactFields(const SipMessage *sipResponse,
417  const SipMessage* ipRequest,
418  const UtlString& subFieldName,
419  int& subFieldValue);
420 
421  static void setUriTag(UtlString* uri, const char* tagValue);
422 
423  static UtlBoolean getViaTag(const char* viaField,
424  const char* tagName,
425  UtlString& tagValue);
427 
429 
430  void setSipRequestFirstHeaderLine(const char* method,
431  const char* uri,
432  const char* protocolVersion = SIP_PROTOCOL_VERSION);
433 
434  void changeUri(const char* uri);
435 
436  void getUri(UtlString* address, int* port,
437  UtlString* protocol,
438  UtlString* user = NULL) const;
440 
441 
443 
447  void setAckData(const char* uri,
448  const char* fromAddress,
449  const char* toAddress,
450  const char* callId,
451  int sequenceNumber = 1);
452 
453  void setAckData(const SipMessage* inviteResponse,
454  const SipMessage* inviteRequest,
455  const char* contactUri = NULL,
456  int sessionExpiresSeconds = 0);
457 
458  void setAckErrorData(const SipMessage* inviteResponse);
459 
460  void setByeData(const char* uri,
461  const char* fromAddress,
462  const char* toAddress,
463  const char* callId,
464  const char* localContact,
465  int sequenceNumber = 1);
466 
467  void setByeData(const SipMessage* inviteResponse,
468  const char * lastRespContact,
469  UtlBoolean byeToCallee,
470  int localSequenceNumber,
471  const char* routeField,
472  const char* alsoInviteUri,
473  const char* localContact);
474 
475  void setCancelData(const char* fromAddress, const char* toAddress,
476  const char* callId,
477  int sequenceNumber = 1,
478  const char* localContact=NULL);
479 
480  void setCancelData(const SipMessage* inviteResponse,
481  const char* localContact=NULL);
482 
483  void setInviteData(const char* fromAddress,
484  const char* toAddress,
485  const char * farEndContact,
486  const char* contactUrl,
487  const char* callId,
488  int sequenceNumber = 1,
489  int sessionReinviteTimer = 0);
490 
491  void setInviteData(const SipMessage* previousInvite,
492  const char* newUri);
493 
494  void setReinviteData(SipMessage* invite,
495  const char* farEndContact,
496  const char* contactUrl,
497  UtlBoolean inviteFromThisSide,
498  const char* routeField,
499  int sequenceNumber,
500  int sessionReinviteTimer);
501 
502  void setOptionsData(const SipMessage* inviteRequest,
503  const char* LastRespContact,
504  UtlBoolean optionsToCallee,
505  int localCSequenceNumber,
506  const char* routeField,
507  const char* localContact);
508 
509  void setNotifyData(SipMessage *subscribeRequest,
510  int lastLocalSequenceNumber,
511  const char* route,
512  const char* stateField = NULL,
513  const char* eventField = NULL,
514  const char* id = NULL);
515 
516  void setNotifyData( const char* uri,
517  const char* fromField,
518  const char* toField,
519  const char* callId,
520  int lastNotifyCseq,
521  const char* eventtype,
522  const char* id,
523  const char* state,
524  const char* contact,
525  const char* routeField);
526 
527  void setSubscribeData( const char* uri,
528  const char* fromField,
529  const char* toField,
530  const char* callId,
531  int cseq,
532  const char* eventField,
533  const char* acceptField,
534  const char* id,
535  const char* contact,
536  const char* routeField,
537  int expiresInSeconds);
538 
539  void setEnrollmentData(const char* uri,
540  const char* fromField,
541  const char* toField,
542  const char* callId,
543  int CSequenceNum,
544  const char* contactUrl,
545  const char* protocolField,
546  const char* profileField,
547  int expiresInSeconds = -1);
548 
549  /* RFC 3428 - MWI*/
551  UtlString& msgSummaryData,
552  const char* msgAccountUri,
553  UtlBoolean bNewMsgs=FALSE,
554  UtlBoolean bVoiceMsgs=FALSE,
555  UtlBoolean bFaxMsgs=FALSE,
556  UtlBoolean bEmailMsgs=FALSE,
557  int numNewMsgs=-1,
558  int numOldMsgs=-1,
559  int numFaxNewMsgs=-1,
560  int numFaxOldMsgs=-1,
561  int numEmailNewMsgs=-1,
562  int numEmailOldMsgs=-1);
563 
564  /* RFC 3428 - MWI */
565  void setMWIData(const char *method,
566  const char* fromField,
567  const char* toField,
568  const char* uri,
569  const char* contactUrl,
570  const char* callId,
571  int CSeq,
572  UtlString bodyString);
573 
574  /* RFC 3680 - Registration event */
575  void setRegInfoData(const char *method,
576  const char* fromField,
577  const char* toField,
578  const char* uri,
579  const char* contactUrl,
580  const char* callId,
581  int CSeq,
582  SipRegInfoBody& regInfoBody);
583 
584  void setVoicemailData(const char* fromField,
585  const char* toField,
586  const char* Uri,
587  const char* contactUrl,
588  const char* callId,
589  int CSeq,
590  int subscribePeriod = -1);
591 
592 
593  void setReferData(const SipMessage* inviteResponse,
594  UtlBoolean byeToCallee,
595  int localSequenceNumber,
596  const char* routeField,
597  const char* contactUrl,
598  const char* remoteContactUrl,
599  const char* transferTargetAddress,
600  const char* targetCallId);
601 
602  void setRegisterData(const char* registererUri,
603  const char* registerAsUri,
604  const char* registrarServerUri,
605  const char* takeCallsAtUri,
606  const char* callId,
607  int sequenceNumber,
608  int expiresInSeconds = -1);
609 
610  void setRequestData(const char* method,
611  const char* uri,
612  const char* fromAddress,
613  const char* toAddress,
614  const char* callId,
615  int sequenceNumber = 1,
616  const char* contactUrl = NULL);
617 
619  void setPublishData( const char* uri,
620  const char* fromField,
621  const char* toField,
622  const char* callId,
623  int cseq,
624  const char* eventField,
625  const char* id,
626  const char* sipIfMatchField,
627  int expiresInSeconds,
628  const char* contact);
651 
652  void addSdpBody(int nRtpContacts,
653  UtlString hostAddresses[],
654  int rtpAudioPorts[],
655  int rtcpAudiopPorts[],
656  int rtpVideoPorts[],
657  int rtcpVideoPorts[],
658  RTP_TRANSPORT transportTypes[],
659  int numRtpCodecs,
660  SdpCodec* rtpCodecs[],
661  SdpSrtpParameters* srtpParams,
662  int videoBandwidth,
663  int videoFramerate,
664  const SipMessage* pRequest = NULL,
665  const RTP_TRANSPORT rtpTransportOptions = RTP_TRANSPORT_UDP);
666 
667  void setSecurityAttributes(const SIPXTACK_SECURITY_ATTRIBUTES* const pSecurity);
668  SIPXTACK_SECURITY_ATTRIBUTES* const getSecurityAttributes() const { return mpSecurity; }
669  bool fireSecurityEvent(const void* pEventData,
670  const enum SIPX_SECURITY_EVENT,
671  const enum SIPX_SECURITY_CAUSE,
672  SIPXTACK_SECURITY_ATTRIBUTES* const pSecurity,
673  void* pCert = NULL,
674  char* szSubjectAltName = NULL) const;
675  bool smimeEncryptSdp(const void *pEventData) ;
676 
678  const SdpBody* getSdpBody(SIPXTACK_SECURITY_ATTRIBUTES* const pSecurity = NULL,
679  const void* pEventData = NULL) const;
680 
681 
683 
687  void setResponseData(const SipMessage* request,
688  int responseCode,
689  const char* responseText,
690  const char* localContact = NULL);
691 
692  void setResponseData(int statusCode, const char* statusText,
693  const char* fromAddress,
694  const char* toAddress,
695  const char* callId,
696  int sequenceNumber,
697  const char* sequenceMethod,
698  const char* localContact = NULL);
699 
700  void setOkResponseData(const SipMessage* request,
701  const char* localContact = NULL);
702 
703  void setRequestTerminatedResponseData(const SipMessage* request);
704 
705  virtual void setRequestUnauthorized(const SipMessage* request,
706  const char* authenticationScheme,
707  const char* authenticationRealm,
708  const char* authenticationNonce = NULL,
709  const char* authenticationOpaque = NULL,
710  enum HttpEndpointEnum authEntity = SERVER);
711 
712  void setTryingResponseData(const SipMessage* request);
713 
715  void setInviteBadCodecs(const SipMessage* inviteRequest,
716  SipUserAgent* ua
721  );
722 
723  void setInviteForbidden(const SipMessage* request);
724 
725  void setRequestBadMethod(const SipMessage* request,
726  const char* allowedMethods);
727 
728  void setRequestUnimplemented(const SipMessage* request);
729 
730  void setRequestBadExtension(const SipMessage* request,
731  const char* unsuportedExtensions);
732 
733  void setRequestBadAddress(const SipMessage* request);
734 
735  void setRequestBadVersion(const SipMessage* request);
736 
737  void setRequestBadRequest(const SipMessage* request);
738 
739  void setRequestBadUrlType(const SipMessage* request);
740 
741  void setRequestBadContentEncoding(const SipMessage* request,
742  const char* allowedEncodings);
743 
744  void setInviteRingingData(const char* fromAddress, const char* toAddress,
745  const char* callId,
746  int sequenceNumber = 1);
747 
748  void setInviteRingingData(const SipMessage* inviteRequest);
749 
750  void setQueuedResponseData(const SipMessage* inviteRequest);
751 
752  void setRequestPendingData(const SipMessage* inviteRequest);
753 
754  void setForwardResponseData(const SipMessage* inviteRequest,
755  const char* forwardAddress);
756 
757  void setInviteBusyData(const char* fromAddress, const char* toAddress,
758  const char* callId,
759  int sequenceNumber = 1);
760 
761  void setBadTransactionData(const SipMessage* inviteRequest);
762 
763  void setLoopDetectedData(const SipMessage* inviteRequest);
764 
765  void setInviteBusyData(const SipMessage* inviteRequest);
766 
767  void setInviteErrorData(const SipMessage* inviteRequest, int errorCode, const UtlString& errorText);
768 
769  void setInviteOkData(const SipMessage* inviteRequest,
770  int maxSessionExpiresSeconds,
771  const char* localContact = NULL);
772 
773  // Copy INVITE Record-Route headers to 200 OK Route headers, returns Route count
774  int setInviteOkRoutes(const SipMessage& inviteRequest);
775 
776  void setByeErrorData(const SipMessage* byeRequest);
777 
778  void setReferOkData(const SipMessage* referRequest);
779 
780  void setReferDeclinedData(const SipMessage* referRequest);
781 
782  void setReferFailedData(const SipMessage* referRequest);
783 
784  void setEventData(void* pEventData) { mpEventData = pEventData; }
786 
787 
789 
790  UtlBoolean getFieldSubfield(const char* fieldName, int subfieldIndex,
791  UtlString* subfieldValue) const;
792 
793  UtlBoolean getContactUri(int addressIndex, UtlString* uri) const;
794 
795  UtlBoolean getContactField(int addressIndex,
796  UtlString& contactField) const;
797 
798  UtlBoolean getContactEntry(int addressIndex,
799  UtlString* uriAndParameters) const;
800 
801  UtlBoolean getContactAddress(int addressIndex,
802  UtlString* contactAddress,
803  int* contactPort,
804  UtlString* protocol,
805  UtlString* user = NULL,
806  UtlString* userLabel = NULL) const;
807 
808  void setViaFromRequest(const SipMessage* request);
809 
811  void setReceivedViaParams(const UtlString& fromIpAddress,
812  int fromPort
813  );
814 
815  void addVia(const char* domainName,
816  int port,
817  const char* protocol,
818  const char* branchId = NULL,
819  const bool bIncludeRport = false,
820  const char* customRouteId = NULL) ;
821 
822  void addViaField(const char* viaField, UtlBoolean afterOtherVias = TRUE);
823 
824  void setLastViaTag(const char* tagValue,
825  const char* tagName = "received");
826 
827  void setCallIdField(const char* callId = NULL);
828 
829  void setCSeqField(int sequenceNumber, const char* method);
830  void incrementCSeqNumber();
831 
832  void setFromField(const char* fromField);
833 
834  void setFromField(const char* fromAddress, int fromPort,
835  const char* fromProtocol = NULL,
836  const char* fromUser = NULL,
837  const char* fromLabel = NULL);
838 
839  void setRawToField(const char* toField);
840 
841  void setRawFromField(const char* toField);
842 
843  void setToField(const char* toAddress, int toPort,
844  const char* fromProtocol = NULL,
845  const char* toUser = NULL,
846  const char* toLabel = NULL);
847  void setToFieldTag(const char* tagValue);
848 
849  void setToFieldTag(int tagValue);
850 
852  void removeToFieldTag();
853 
854  void setExpiresField(int expiresInSeconds);
855 
856  void setMinExpiresField(int minimumExpiresInSeconds);
857 
858  void setContactField(const char* contactField, int index = 0);
859 
860  void setRequestDispositionField(const char* dispositionField);
861 
862  void addRequestDisposition(const char* dispositionToken);
863 
864  void setWarningField(int code, const char* hostname, const char* text);
865 
866  void getFromLabel(UtlString* fromLabel) const;
867 
868  void getToLabel(UtlString* toLabel) const;
869 
870  void getFromField(UtlString* fromField) const;
871 
872  void getFromUri(UtlString* uri) const;
873 
874  void getFromUrl(Url& url) const;
875 
876  void getFromAddress(UtlString* fromAddress, int* fromPort, UtlString* protocol,
877  UtlString* user = NULL, UtlString* userLabel = NULL,
878  UtlString* tag = NULL) const;
879 
881 
889  UtlBoolean getPAssertedIdentityField(UtlString& identity, int index = 0) const;
890 
893 
895  void addPAssertedIdentityField(const UtlString& identity);
896 
897  UtlBoolean getResponseSendAddress(UtlString& address,
898  int& port,
899  UtlString& protocol) const;
900 
901  static void convertProtocolStringToEnum(const char* protocolString,
902  OsSocket::IpProtocolSocketType& protocolEnum);
903 
904  static void convertProtocolEnumToString(OsSocket::IpProtocolSocketType protocolEnum,
905  UtlString& protocolString);
906 
907  UtlBoolean getWarningCode(int* warningCode, int index = 0) const;
908 
909  // Retrieves the index-th Via: header as it appears in the message,
910  // but does not parse Via: headers for ",".
911  // You probably want to use getViaFieldSubField().
912  UtlBoolean getViaField(UtlString* viaField, int index) const;
913 
914  // Retrieves the index-th logical Via: header value, folding together
915  // all the Via: headers and parsing ",".
916  UtlBoolean getViaFieldSubField(UtlString* viaSubField, int subFieldIndex) const;
917 
918  void getLastVia(UtlString* viaAddress,
919  int* viaPort,
920  UtlString* protocol,
921  int* recievedPort = NULL,
922  UtlBoolean* receivedSet = NULL,
923  UtlBoolean* maddrSet = NULL,
924  UtlBoolean* receivedPortSet = NULL) const;
925 
926  UtlBoolean removeLastVia();
927 
928  void getToField(UtlString* toField) const;
929 
930  void getToUri(UtlString* uri) const;
931 
932  void getToUrl(Url& url) const;
933 
934  void getToAddress(UtlString* toAddress,
935  int* toPort,
936  UtlString* protocol,
937  UtlString* user = NULL,
938  UtlString* userLabel = NULL,
939  UtlString* tag = NULL) const;
940 
941  void getCallIdField(UtlString* callId) const;
942 
943  void getDialogHandle(UtlString& dialogHandle) const;
944 
945  UtlBoolean getCSeqField(int* sequenceNum, UtlString* sequenceMethod) const;
946 
947  UtlBoolean getRequireExtension(int extensionIndex, UtlString* extension) const;
948 
949  UtlBoolean getProxyRequireExtension(int extensionIndex, UtlString* extension) const;
950 
951  void addRequireExtension(const char* extension);
952 
953  UtlBoolean getContentEncodingField(UtlString* contentEncodingField) const;
954 
956  UtlBoolean getEventField(UtlString* eventType,
957  UtlString* eventId = NULL, //< set to the 'id' parameter value if not NULL
958  UtlHashMap* params = NULL //< holds parameter name/value pairs if not NULL
959  ) const;
960 
961  UtlBoolean getEventField(UtlString& eventField) const;
962 
963  void setEventField(const char* eventField);
964 
965  UtlBoolean getExpiresField(int* expiresInSeconds) const;
966 
967  UtlBoolean getRequestDispositionField(UtlString* dispositionField) const;
968 
969  UtlBoolean getRequestDisposition(int tokenIndex,
970  UtlString* dispositionToken) const;
971 
972  UtlBoolean getSessionExpires(int* sessionExpiresSeconds, UtlString* refresher) const;
973 
974  void setSessionExpires(int sessionExpiresSeconds, const char* refresher = NULL);
975 
976  UtlBoolean getSupportedField(UtlString& supportedField) const;
977 
978  void setSupportedField(const char* supportedField);
979 
981  UtlBoolean isInSupportedField(const char* token) const;
982 
984  UtlBoolean getSipIfMatchField(UtlString& sipIfMatchField) const;
985 
987  void setSipIfMatchField(const char* sipIfMatchField);
988 
990  UtlBoolean getSipETagField(UtlString& sipETagField) const;
991 
993  void setSipETagField(const char* sipETagField);
994 
995  const UtlString& getLocalIp() const;
996 
997  void setLocalIp(const UtlString& localIp);
998 
999  void setTransportInfo(const SipMessage* pMsg) ;
1000 
1002 
1004 
1005  UtlBoolean getMaxForwards(int& maxForwards) const;
1006 
1007  void setMaxForwards(int maxForwards);
1008 
1009  void decrementMaxForwards();
1010 
1011  UtlBoolean getRecordRouteField(int index,
1012  UtlString* recordRouteField) const;
1013 
1014  UtlBoolean getRecordRouteUri(int index, UtlString* recordRouteUri) const;
1015 
1016  void setRecordRouteField(const char* recordRouteField, int index);
1017 
1018  void addRecordRouteUri(const char* recordRouteUri);
1019 
1020  // isClientMsgStrictRouted returns whether or not a message
1021  // is set up such that it requires strict routing.
1022  // This is appropriate only when acting as a UAC
1023  UtlBoolean isClientMsgStrictRouted() const;
1024 
1025  UtlBoolean getRouteField(UtlString* routeField) const;
1026 
1027  UtlBoolean getRouteUri(int index, UtlString* routeUri) const;
1028 
1029  void addRouteUri(const char* routeUri);
1030 
1031  void addLastRouteUri(const char* routeUri);
1032 
1033  UtlBoolean getLastRouteUri(UtlString& routeUri,
1034  int& lastIndex);
1035 
1036  UtlBoolean removeRouteUri(int index, UtlString* routeUri);
1037 
1038  void setRouteField(const char* routeField);
1039 
1040  UtlBoolean buildRouteField(UtlString* routeField) const;
1041 
1043  void normalizeProxyRoutes(const SipUserAgent* sipUA,
1044  Url& requestUri,
1045  UtlSList* removedRoutes = NULL // route headers popped
1046  );
1060 
1061 
1063 
1064  UtlBoolean getAlsoUri(int index, UtlString* alsoUri) const;
1067  UtlBoolean getAlsoField(UtlString* alsoField) const;
1069  void setAlsoField(const char* alsoField);
1071  void addAlsoUri(const char* alsoUri);
1072 
1073  void setRequestedByField(const char* requestedByUri);
1074 
1075  UtlBoolean getRequestedByField(UtlString& requestedByField) const;
1076 
1077  void setReferToField(const char* referToField);
1078 
1079  UtlBoolean getReferToField(UtlString& referToField) const;
1080 
1081  void setReferredByField(const char* referredByField);
1082 
1083  UtlBoolean getReferredByField(UtlString& referredByField) const;
1084 
1085  UtlBoolean getReferredByUrls(UtlString* referrerUrl = NULL,
1086  UtlString* referredToUrl = NULL) const;
1087 
1088  void setAllowField(const char* referToField);
1089 
1090  UtlBoolean getAllowField(UtlString& referToField) const;
1091 
1092  UtlBoolean getReplacesData(UtlString& callId,
1093  UtlString& toTag,
1094  UtlString& fromTag) const;
1095 
1097  bool hasSelfHeader() const;
1098 
1099  // SERVER-header accessors
1100  void getServerField(UtlString* serverFieldValue) const;
1101  void setServerField(const char* serverField);
1102  void setAcceptField(const char* acceptField);
1103  void setAuthField(const char* authField);
1104 
1105  // RFC 3326 REASON-header
1106  void setReasonField(const char* reasonField);
1107 
1108  UtlBoolean getReasonField(UtlString& reasonField) const;
1109 
1110 
1111  // Diversion-header
1112  void addDiversionField(const char* addr, const char* reasonParam,
1113  UtlBoolean afterOtherDiversions=FALSE);
1114 
1115  void addDiversionField(const char* diversionField, UtlBoolean afterOtherDiversions=FALSE);
1116 
1117 
1118  UtlBoolean getLastDiversionField(UtlString& diversionField,int& lastIndex);
1119 
1120  UtlBoolean getDiversionField(int index, UtlString& diversionField);
1121 
1122  UtlBoolean getDiversionField(int index, UtlString& addr, UtlString& reasonParam);
1123 
1125 
1126  // This method is needed to cover the symetrical situation which is
1127  // specific to SIP authorization (i.e. authentication and authorize
1128  // fields may be in either requests or responses
1129  UtlBoolean verifyMd5Authorization(const char* userId,
1130  const char* password,
1131  const char* nonce,
1132  const char* realm,
1133  const char* uri = NULL,
1134  enum HttpEndpointEnum authEntity = SERVER) const;
1135 
1137 
1140  //SDUA
1141  UtlBoolean getDNSField(UtlString * Protocol,
1142  UtlString * Address,
1143  UtlString * Port) const;
1144  void setDNSField( const char* Protocol,
1145  const char* Address,
1146  const char* Port);
1147 
1148  void clearDNSField();
1150 
1151 
1153 
1155  void setTransaction(SipTransaction* transaction);
1156 
1158 
1161 
1163 
1165  const UtlString getTransportName(bool& bCustom) const;
1166 
1167  void setUseShortFieldNames(UtlBoolean bUseShortNames)
1168  { mbUseShortNames = bUseShortNames; } ;
1169 
1170  UtlBoolean getUseShortFieldNames() const
1171  { return mbUseShortNames; } ;
1172 
1173 /* ============================ INQUIRY =================================== */
1174 
1177  UtlBoolean isResponse() const;
1178 
1180 
1181  UtlBoolean isSameMessage(const SipMessage* message,
1182  UtlBoolean responseCodesMustMatch = FALSE) const;
1183 
1185 
1187  UtlBoolean isServerTransaction(UtlBoolean isOutgoing) const;
1188 
1189  UtlBoolean isSameSession(const SipMessage* message) const;
1190  static UtlBoolean isSameSession(Url& previousUrl, Url& newUrl);
1191  UtlBoolean isResponseTo(const SipMessage* message) const;
1192  UtlBoolean isAckFor(const SipMessage* inviteResponse) const;
1193 
1194  //SDUA
1195  UtlBoolean isInviteFor(const SipMessage* inviteRequest) const;
1196  UtlBoolean isSameTransaction(const SipMessage* message) const;
1198 
1199  //
1200  UtlBoolean isRequestDispositionSet(const char* dispositionToken) const;
1201 
1202  UtlBoolean isRequireExtensionSet(const char* extension) const;
1203 
1205  // pass through in the URL
1206  static UtlBoolean isUrlHeaderAllowed(const char*);
1207 
1209  static UtlBoolean isUrlHeaderUnique(const char*);
1210 
1211  static void parseViaParameters( const char* viaField,
1212  UtlContainer& viaParameterList
1213  );
1214  // ISmimeNotifySink implementations
1215  void OnError(SIPX_SECURITY_EVENT event, SIPX_SECURITY_CAUSE cause);
1216  bool OnSignature(void* pCert, char* szSubjAltName);
1217  bool getFromThisSide() const { return mbFromThisSide; }
1218  void setFromThisSide(const bool bFromThisSide) { mbFromThisSide = bFromThisSide; }
1219 
1220 /* //////////////////////////// PROTECTED ///////////////////////////////// */
1221 protected:
1222 
1223 /* //////////////////////////// PRIVATE /////////////////////////////////// */
1224 private:
1225 
1226  SipTransaction* mpSipTransaction;
1227  mutable SIPXTACK_SECURITY_ATTRIBUTES* mpSecurity;
1228  mutable void* mpEventData;
1229  UtlString mCustomRouteId;
1230 
1231  UtlString mLocalIp;
1232  bool mbFromThisSide;
1233  UtlBoolean mbUseShortNames;
1234 
1235  //SDUA
1236  UtlString m_dnsProtocol ;
1237  UtlString m_dnsAddress ;
1238  UtlString m_dnsPort ;
1239 
1240  // Class for the singleton object that carries the field properties
1241  class SipMessageFieldProps
1242  {
1243  public:
1244 
1245  SipMessageFieldProps();
1246  ~SipMessageFieldProps();
1247 
1248  UtlHashBag mShortFieldNames;
1249  UtlHashBag mLongFieldNames;
1250  // Headers that may not be referenced in a URI header parameter.
1251  UtlHashBag mDisallowedUrlHeaders;
1252  // Headers that do not take a list of values.
1253  UtlHashBag mUniqueUrlHeaders;
1254 
1255  void initNames();
1256  void initDisallowedUrlHeaders();
1257  void initUniqueUrlHeaders();
1258  };
1259 
1260  // Singleton object to carry the field properties.
1261  static SipMessageFieldProps sSipMessageFieldProps;
1262 };
1263 
1264 /* ============================ INLINE METHODS ============================ */
1265 
1266 #endif // _SipMessage_h_
static void setUriTag(UtlString *uri, const char *tagValue)
Definition: SipMessage.cpp:2843
void setEventField(const char *eventField)
Definition: SipMessage.cpp:3584
void setUseShortFieldNames(UtlBoolean bUseShortNames)
Definition: SipMessage.h:1167
void setRequestBadExtension(const SipMessage *request, const char *unsuportedExtensions)
Definition: SipMessage.cpp:844
void setReinviteData(SipMessage *invite, const char *farEndContact, const char *contactUrl, UtlBoolean inviteFromThisSide, const char *routeField, int sequenceNumber, int sessionReinviteTimer)
Definition: SipMessage.cpp:277
void getServerField(UtlString *serverFieldValue) const
Definition: SipMessage.cpp:4198
static UtlBoolean getLongName(const char *shortFieldName, UtlString *longFieldName)
Definition: SipMessage.cpp:153
SipMessage & operator=(const SipMessage &rhs)
Assignment operator.
Definition: SipMessage.cpp:116
void setInviteBusyData(const char *fromAddress, const char *toAddress, const char *callId, int sequenceNumber=1)
Definition: SipMessage.cpp:700
Transaction and Transport manager for SIP stack.
Definition: SipUserAgent.h:157
UtlBoolean buildRouteField(UtlString *routeField) const
Definition: SipMessage.cpp:3911
HttpEndpointEnum
Definition: HttpMessage.h:196
#define SIP_PROTOCOL_VERSION
Definition: SipMessage.h:258
void setLoopDetectedData(const SipMessage *inviteRequest)
Definition: SipMessage.cpp:715
bool OnSignature(void *pCert, char *szSubjAltName)
Definition: SipMessage.cpp:5537
void getLastVia(UtlString *viaAddress, int *viaPort, UtlString *protocol, int *recievedPort=NULL, UtlBoolean *receivedSet=NULL, UtlBoolean *maddrSet=NULL, UtlBoolean *receivedPortSet=NULL) const
Definition: SipMessage.cpp:3142
Container class for security attributes.
Definition: SmimeBody.h:87
void setRequestBadUrlType(const SipMessage *request)
Definition: SipMessage.cpp:881
UtlBoolean getContactField(int addressIndex, UtlString &contactField) const
Definition: SipMessage.cpp:3403
void addRequireExtension(const char *extension)
Definition: SipMessage.cpp:3513
SipMessage(const char *messageBytes=NULL, int byteCount=-1)
Construct from a buffer.
Definition: SipMessage.cpp:53
void setReasonField(const char *reasonField)
Definition: SipMessage.cpp:4440
static UtlBoolean parseParameterFromUri(const char *uri, const char *parameterName, UtlString *parameterValue)
Definition: SipMessage.cpp:2690
static void convertProtocolEnumToString(OsSocket::IpProtocolSocketType protocolEnum, UtlString &protocolString)
Definition: SipMessage.cpp:3006
Definition: HttpMessage.h:198
void setTransportInfo(const SipMessage *pMsg)
Definition: SipMessage.cpp:5185
void setCancelData(const char *fromAddress, const char *toAddress, const char *callId, int sequenceNumber=1, const char *localContact=NULL)
Definition: SipMessage.cpp:1873
UtlBoolean getUseShortFieldNames() const
Definition: SipMessage.h:1170
void removeToFieldTag()
Remove the To field tag and value.
Definition: SipMessage.cpp:2834
void setRequestBadRequest(const SipMessage *request)
Definition: SipMessage.cpp:876
static void buildSipUrl(UtlString *url, const char *address, int port=PORT_NONE, const char *protocol=NULL, const char *user=NULL, const char *userLabel=NULL, const char *tag=NULL)
Definition: SipMessage.cpp:2335
void setReferFailedData(const SipMessage *referRequest)
Definition: SipMessage.cpp:1792
void setExpiresField(int expiresInSeconds)
Definition: SipMessage.cpp:2454
void setAuthField(const char *authField)
UtlBoolean isInviteFor(const SipMessage *inviteRequest) const
Definition: SipMessage.cpp:4921
void setOkResponseData(const SipMessage *request, const char *localContact=NULL)
Definition: SipMessage.cpp:963
void addSdpBody(int nRtpContacts, UtlString hostAddresses[], int rtpAudioPorts[], int rtcpAudiopPorts[], int rtpVideoPorts[], int rtcpVideoPorts[], RTP_TRANSPORT transportTypes[], int numRtpCodecs, SdpCodec *rtpCodecs[], SdpSrtpParameters *srtpParams, int videoBandwidth, int videoFramerate, const SipMessage *pRequest=NULL, const RTP_TRANSPORT rtpTransportOptions=RTP_TRANSPORT_UDP)
There are some special rules implemented by this routine:
Definition: SipMessage.cpp:417
void setRawToField(const char *toField)
Definition: SipMessage.cpp:2430
void setByeData(const char *uri, const char *fromAddress, const char *toAddress, const char *callId, const char *localContact, int sequenceNumber=1)
Definition: SipMessage.cpp:1582
void applyTargetUriHeaderParams()
Apply any header parameters in the request uri to the message.
Definition: SipMessage.cpp:1946
const SdpBody * getSdpBody(SIPXTACK_SECURITY_ATTRIBUTES *const pSecurity=NULL, const void *pEventData=NULL) const
Accessor to get SDP body, optionally decrypting it if key info. is provided.
Definition: SipMessage.cpp:493
UtlBoolean getFieldSubfield(const char *fieldName, int subfieldIndex, UtlString *subfieldValue) const
Definition: SipMessage.cpp:4024
UtlBoolean isRequireExtensionSet(const char *extension) const
Definition: SipMessage.cpp:4974
UtlBoolean getCSeqField(int *sequenceNum, UtlString *sequenceMethod) const
Definition: SipMessage.cpp:3326
virtual void setRequestUnauthorized(const SipMessage *request, const char *authenticationScheme, const char *authenticationRealm, const char *authenticationNonce=NULL, const char *authenticationOpaque=NULL, enum HttpEndpointEnum authEntity=SERVER)
Definition: SipMessage.cpp:1330
static UtlBoolean isUrlHeaderAllowed(const char *)
Is this a header parameter we want to allow users or apps. to.
Definition: SipMessage.cpp:4991
void setCSeqField(int sequenceNumber, const char *method)
Definition: SipMessage.cpp:2308
void addAlsoUri(const char *alsoUri)
Deprecated.
Definition: SipMessage.cpp:4289
void setFromThisSide(const bool bFromThisSide)
Definition: SipMessage.h:1218
void setContactField(const char *contactField, int index=0)
Definition: SipMessage.cpp:2475
void setNotifyData(SipMessage *subscribeRequest, int lastLocalSequenceNumber, const char *route, const char *stateField=NULL, const char *eventField=NULL, const char *id=NULL)
Definition: SipMessage.cpp:969
void setReferDeclinedData(const SipMessage *referRequest)
Definition: SipMessage.cpp:1787
UtlBoolean isResponseTo(const SipMessage *message) const
Definition: SipMessage.cpp:4865
void getToUrl(Url &url) const
Definition: SipMessage.cpp:2589
UtlBoolean getContentEncodingField(UtlString *contentEncodingField) const
Definition: SipMessage.cpp:4126
void setRequestBadContentEncoding(const SipMessage *request, const char *allowedEncodings)
Definition: SipMessage.cpp:853
void setDNSField(const char *Protocol, const char *Address, const char *Port)
Definition: SipMessage.cpp:5029
void setRouteField(const char *routeField)
Definition: SipMessage.cpp:3900
UtlBoolean isSameMessage(const SipMessage *message, UtlBoolean responseCodesMustMatch=FALSE) const
@ Transaction and session related inquiry methods
Definition: SipMessage.cpp:4638
void setOptionsData(const SipMessage *inviteRequest, const char *LastRespContact, UtlBoolean optionsToCallee, int localCSequenceNumber, const char *routeField, const char *localContact)
Definition: SipMessage.cpp:1797
UtlBoolean getRequestDisposition(int tokenIndex, UtlString *dispositionToken) const
Definition: SipMessage.cpp:3647
void setSubscribeData(const char *uri, const char *fromField, const char *toField, const char *callId, int cseq, const char *eventField, const char *acceptField, const char *id, const char *contact, const char *routeField, int expiresInSeconds)
Definition: SipMessage.cpp:1111
UtlBoolean isRequestDispositionSet(const char *dispositionToken) const
Definition: SipMessage.cpp:4956
UtlBoolean isResponse() const
Returns TRUE if this a SIP response as opposed to a request.
Definition: SipMessage.cpp:4594
UtlBoolean getContactAddress(int addressIndex, UtlString *contactAddress, int *contactPort, UtlString *protocol, UtlString *user=NULL, UtlString *userLabel=NULL) const
Definition: SipMessage.cpp:3483
static void setUriParameter(UtlString *uri, const char *parameterName, const char *parameterValue)
Definition: SipMessage.cpp:2758
sipXtapi event declarations
UtlBoolean getReferredByField(UtlString &referredByField) const
Definition: SipMessage.cpp:4336
void setAllowField(const char *referToField)
Definition: SipMessage.cpp:4417
void changeUri(const char *uri)
Definition: SipMessage.cpp:2521
UtlBoolean getAlsoField(UtlString *alsoField) const
Deprecated.
Definition: SipMessage.cpp:4276
void setToField(const char *toAddress, int toPort, const char *fromProtocol=NULL, const char *toUser=NULL, const char *toLabel=NULL)
Definition: SipMessage.cpp:2441
UtlBoolean isSameSession(const SipMessage *message) const
Definition: SipMessage.cpp:4691
void replaceLongFieldNames()
Definition: SipMessage.cpp:225
Specialization of HttpMessage to contain and manipulate SIP messages.
Definition: SipMessage.h:343
UtlBoolean getSipIfMatchField(UtlString &sipIfMatchField) const
Get the SIP-IF-MATCH field from the PUBLISH request.
Definition: SipMessage.cpp:5302
HTTP message container.
Definition: HttpMessage.h:191
void setRegisterData(const char *registererUri, const char *registerAsUri, const char *registrarServerUri, const char *takeCallsAtUri, const char *callId, int sequenceNumber, int expiresInSeconds=-1)
Definition: SipMessage.cpp:258
#define HTTP_DEFAULT_SOCKET_BUFFER_SIZE
Definition: HttpMessage.h:39
const UtlString & getLocalIp() const
Definition: SipMessage.cpp:5175
static UtlBoolean getViaTag(const char *viaField, const char *tagName, UtlString &tagValue)
Definition: SipMessage.cpp:3265
void setRequestPendingData(const SipMessage *inviteRequest)
Definition: SipMessage.cpp:748
void setAlsoField(const char *alsoField)
Deprecated.
Definition: SipMessage.cpp:4284
void normalizeProxyRoutes(const SipUserAgent *sipUA, Url &requestUri, UtlSList *removedRoutes=NULL)
Adjust route values as required when receiving at a proxy.
Definition: SipMessage.cpp:5547
void setForwardResponseData(const SipMessage *inviteRequest, const char *forwardAddress)
Definition: SipMessage.cpp:770
UtlBoolean getExpiresField(int *expiresInSeconds) const
Definition: SipMessage.cpp:3589
void setAckData(const char *uri, const char *fromAddress, const char *toAddress, const char *callId, int sequenceNumber=1)
Definition: SipMessage.cpp:1444
SipTransaction correlates requests and responses.
Definition: SipTransaction.h:51
void replaceShortFieldNames()
Definition: SipMessage.cpp:194
void setEventData(void *pEventData)
Definition: SipMessage.h:784
bool fireSecurityEvent(const void *pEventData, const enum SIPX_SECURITY_EVENT, const enum SIPX_SECURITY_CAUSE, SIPXTACK_SECURITY_ATTRIBUTES *const pSecurity, void *pCert=NULL, char *szSubjectAltName=NULL) const
Definition: SipMessage.cpp:5466
UtlBoolean getViaField(UtlString *viaField, int index) const
Definition: SipMessage.cpp:3114
static void ParseContactFields(const SipMessage *sipResponse, const SipMessage *ipRequest, const UtlString &subFieldName, int &subFieldValue)
Definition: SipMessage.cpp:5094
UtlBoolean getContactUri(int addressIndex, UtlString *uri) const
Definition: SipMessage.cpp:3390
void decrementMaxForwards()
Definition: SipMessage.cpp:2550
UtlBoolean getRequireExtension(int extensionIndex, UtlString *extension) const
Definition: SipMessage.cpp:3501
void getFromLabel(UtlString *fromLabel) const
Definition: SipMessage.cpp:2607
UtlBoolean isAckFor(const SipMessage *inviteResponse) const
Definition: SipMessage.cpp:4894
UtlBoolean getAllowField(UtlString &referToField) const
Definition: SipMessage.cpp:4422
static void parseAddressFromUri(const char *uri, UtlString *address, int *port, UtlString *protocol, UtlString *user=NULL, UtlString *userLabel=NULL, UtlString *tag=NULL)
Definition: SipMessage.cpp:2720
UtlBoolean getRecordRouteUri(int index, UtlString *recordRouteUri) const
Definition: SipMessage.cpp:3662
void getFromUri(UtlString *uri) const
Definition: SipMessage.cpp:2906
void removePAssertedIdentityFields()
Remove all of the P-Asserted-Identity header fields.
Definition: SipMessage.cpp:2641
void getUri(UtlString *address, int *port, UtlString *protocol, UtlString *user=NULL) const
Definition: SipMessage.cpp:2848
void setViaFromRequest(const SipMessage *request)
Definition: SipMessage.cpp:2246
void setReferToField(const char *referToField)
Definition: SipMessage.cpp:4318
UtlBoolean getWarningCode(int *warningCode, int index=0) const
Definition: SipMessage.cpp:3056
Definition: SmimeBody.h:194
static void parseViaParameters(const char *viaField, UtlContainer &viaParameterList)
Get the name/value pairs for a Via field.
Definition: SipMessage.cpp:5197
void setRegInfoData(const char *method, const char *fromField, const char *toField, const char *uri, const char *contactUrl, const char *callId, int CSeq, SipRegInfoBody &regInfoBody)
void setTryingResponseData(const SipMessage *request)
Definition: SipMessage.cpp:685
UtlBoolean getRouteField(UtlString *routeField) const
Definition: SipMessage.cpp:3753
void setRequestedByField(const char *requestedByUri)
Definition: SipMessage.cpp:4305
void setEnrollmentData(const char *uri, const char *fromField, const char *toField, const char *callId, int CSequenceNum, const char *contactUrl, const char *protocolField, const char *profileField, int expiresInSeconds=-1)
Definition: SipMessage.cpp:1163
void getToUri(UtlString *uri) const
Definition: SipMessage.cpp:3012
void setSecurityAttributes(const SIPXTACK_SECURITY_ATTRIBUTES *const pSecurity)
Definition: SipMessage.cpp:488
void getToField(UtlString *toField) const
Definition: SipMessage.cpp:2575
void setReferredByField(const char *referredByField)
Definition: SipMessage.cpp:4331
UtlBoolean getLastRouteUri(UtlString &routeUri, int &lastIndex)
Definition: SipMessage.cpp:3824
UtlBoolean getRequestedByField(UtlString &requestedByField) const
Definition: SipMessage.cpp:4310
UtlBoolean isServerTransaction(UtlBoolean isOutgoing) const
Is message part of a server or client transaction?
Definition: SipMessage.cpp:4608
void clearDNSField()
Definition: SipMessage.cpp:5040
void setRequestBadMethod(const SipMessage *request, const char *allowedMethods)
Definition: SipMessage.cpp:829
void getToLabel(UtlString *toLabel) const
Definition: SipMessage.cpp:2665
SIPX_SECURITY_CAUSE
Enumeration of possible security causes.
Definition: sipXtapiEvents.h:448
void getCallIdField(UtlString *callId) const
Definition: SipMessage.cpp:3291
void setAcceptField(const char *acceptField)
UtlBoolean getRecordRouteField(int index, UtlString *recordRouteField) const
Definition: SipMessage.cpp:3654
Definition: SdpBody.h:56
Definition: SipMessage.h:352
void setReferData(const SipMessage *inviteResponse, UtlBoolean byeToCallee, int localSequenceNumber, const char *routeField, const char *contactUrl, const char *remoteContactUrl, const char *transferTargetAddress, const char *targetCallId)
Definition: SipMessage.cpp:1670
void setRequestData(const char *method, const char *uri, const char *fromAddress, const char *toAddress, const char *callId, int sequenceNumber=1, const char *contactUrl=NULL)
Definition: SipMessage.cpp:626
void addRequestDisposition(const char *dispositionToken)
Definition: SipMessage.cpp:2487
virtual ~SipMessage()
Definition: SipMessage.cpp:107
void setToFieldTag(const char *tagValue)
Definition: SipMessage.cpp:2817
void setFromField(const char *fromField)
Definition: SipMessage.cpp:2401
void setRequestDispositionField(const char *dispositionField)
Definition: SipMessage.cpp:2481
static UtlBoolean getShortName(const char *longFieldName, UtlString *shortFieldName)
Definition: SipMessage.cpp:137
void incrementCSeqNumber()
Definition: SipMessage.cpp:2322
UtlBoolean getSipETagField(UtlString &sipETagField) const
Get the SIP-ETAG field from the response to a PUBLISH request.
Definition: SipMessage.cpp:5315
UtlBoolean getMaxForwards(int &maxForwards) const
Definition: SipMessage.cpp:2531
UtlBoolean getSessionExpires(int *sessionExpiresSeconds, UtlString *refresher) const
Definition: SipMessage.cpp:4138
void getFromAddress(UtlString *fromAddress, int *fromPort, UtlString *protocol, UtlString *user=NULL, UtlString *userLabel=NULL, UtlString *tag=NULL) const
Definition: SipMessage.cpp:2884
void setSipETagField(const char *sipETagField)
Set the SIP-ETAG field in a response to the PUBLISH request.
Definition: SipMessage.cpp:5310
UtlBoolean getResponseSendAddress(UtlString &address, int &port, UtlString &protocol) const
Definition: SipMessage.cpp:2948
UtlBoolean getRequestDispositionField(UtlString *dispositionField) const
Definition: SipMessage.cpp:3634
UtlBoolean isInSupportedField(const char *token) const
Test whether "token" is present in the Supported: header.
Definition: SipMessage.cpp:4223
void setInviteErrorData(const SipMessage *inviteRequest, int errorCode, const UtlString &errorText)
Definition: SipMessage.cpp:726
void setMaxForwards(int maxForwards)
Definition: SipMessage.cpp:2543
void getFromField(UtlString *fromField) const
Definition: SipMessage.cpp:2561
UtlBoolean getContactEntry(int addressIndex, UtlString *uriAndParameters) const
Definition: SipMessage.cpp:3415
void setBadTransactionData(const SipMessage *inviteRequest)
Definition: SipMessage.cpp:709
void setAckErrorData(const SipMessage *inviteResponse)
Definition: SipMessage.cpp:1577
void setMWIData(const char *method, const char *fromField, const char *toField, const char *uri, const char *contactUrl, const char *callId, int CSeq, UtlString bodyString)
Definition: SipMessage.cpp:1276
void setRecordRouteField(const char *recordRouteField, int index)
Definition: SipMessage.cpp:3673
static void buildReplacesField(UtlString &replacesField, const char *callId, const char *fromField, const char *toFIeld)
Definition: SipMessage.cpp:4004
UtlBoolean getReferredByUrls(UtlString *referrerUrl=NULL, UtlString *referredToUrl=NULL) const
Definition: SipMessage.cpp:4344
UtlBoolean getAlsoUri(int index, UtlString *alsoUri) const
Deprecated.
Definition: SipMessage.cpp:4271
void setSessionExpires(int sessionExpiresSeconds, const char *refresher=NULL)
Definition: SipMessage.cpp:4172
void setSupportedField(const char *supportedField)
Definition: SipMessage.cpp:4218
void setMinExpiresField(int minimumExpiresInSeconds)
Definition: SipMessage.cpp:2466
UtlBoolean isClientMsgStrictRouted() const
Definition: SipMessage.cpp:3727
void setInviteRingingData(const char *fromAddress, const char *toAddress, const char *callId, int sequenceNumber=1)
UtlBoolean verifyMd5Authorization(const char *userId, const char *password, const char *nonce, const char *realm, const char *uri=NULL, enum HttpEndpointEnum authEntity=SERVER) const
Definition: SipMessage.cpp:1361
void setPublishData(const char *uri, const char *fromField, const char *toField, const char *callId, int cseq, const char *eventField, const char *id, const char *sipIfMatchField, int expiresInSeconds, const char *contact)
Set a PUBLISH request.
Definition: SipMessage.cpp:1906
void setCallIdField(const char *callId=NULL)
Definition: SipMessage.cpp:2303
void addLastRouteUri(const char *routeUri)
Definition: SipMessage.cpp:3790
void setQueuedResponseData(const SipMessage *inviteRequest)
Definition: SipMessage.cpp:695
SIPXTACK_SECURITY_ATTRIBUTES *const getSecurityAttributes() const
Definition: SipMessage.h:668
UtlBoolean removeRouteUri(int index, UtlString *routeUri)
Definition: SipMessage.cpp:3849
void setInviteData(const char *fromAddress, const char *toAddress, const char *farEndContact, const char *contactUrl, const char *callId, int sequenceNumber=1, int sessionReinviteTimer=0)
Definition: SipMessage.cpp:330
void setWarningField(int code, const char *hostname, const char *text)
Definition: SipMessage.cpp:2501
void setRequestBadAddress(const SipMessage *request)
Definition: SipMessage.cpp:866
UtlBoolean getDiversionField(int index, UtlString &diversionField)
Definition: SipMessage.cpp:4534
static UtlBoolean isUrlHeaderUnique(const char *)
Does this header allow multiple values, or only one.
Definition: SipMessage.cpp:4999
void setRawFromField(const char *toField)
Definition: SipMessage.cpp:2435
void setResponseData(const SipMessage *request, int responseCode, const char *responseText, const char *localContact=NULL)
Definition: SipMessage.cpp:1419
void getFromUrl(Url &url) const
Definition: SipMessage.cpp:2598
int setInviteOkRoutes(const SipMessage &inviteRequest)
Definition: SipMessage.cpp:948
bool getFromThisSide() const
Definition: SipMessage.h:1217
UtlBoolean getPAssertedIdentityField(UtlString &identity, int index=0) const
Get the identity value from the P-Asserted-Identity header field.
Definition: SipMessage.cpp:2632
void setRequestBadVersion(const SipMessage *request)
Definition: SipMessage.cpp:871
void setServerField(const char *serverField)
Definition: SipMessage.cpp:4208
UtlBoolean getLastDiversionField(UtlString &diversionField, int &lastIndex)
Definition: SipMessage.cpp:4516
bool smimeEncryptSdp(const void *pEventData)
Definition: SipMessage.cpp:5409
UtlBoolean getViaFieldSubField(UtlString *viaSubField, int subFieldIndex) const
Definition: SipMessage.cpp:3126
SipTransaction * getSipTransaction() const
Accessor to get transaction reference.
Definition: SipMessage.cpp:5052
UtlBoolean getReasonField(UtlString &reasonField) const
Definition: SipMessage.cpp:4448
void addDiversionField(const char *addr, const char *reasonParam, UtlBoolean afterOtherDiversions=FALSE)
Definition: SipMessage.cpp:4466
void addRecordRouteUri(const char *recordRouteUri)
Definition: SipMessage.cpp:3679
void getToAddress(UtlString *toAddress, int *toPort, UtlString *protocol, UtlString *user=NULL, UtlString *userLabel=NULL, UtlString *tag=NULL) const
Definition: SipMessage.cpp:2895
void setByeErrorData(const SipMessage *byeRequest)
Definition: SipMessage.cpp:1868
void setSipIfMatchField(const char *sipIfMatchField)
Set the SIP-IF-MATCH field for a PUBLISH request.
Definition: SipMessage.cpp:5297
URL parser and constructor.
Definition: Url.h:90
void setInviteOkData(const SipMessage *inviteRequest, int maxSessionExpiresSeconds, const char *localContact=NULL)
Definition: SipMessage.cpp:887
static void convertProtocolStringToEnum(const char *protocolString, OsSocket::IpProtocolSocketType &protocolEnum)
Definition: SipMessage.cpp:2983
UtlBoolean removeLastVia()
Definition: SipMessage.cpp:3077
UtlBoolean getEventField(UtlString *eventType, UtlString *eventId=NULL, UtlHashMap *params=NULL) const
Retrieve the event type, id, and other params from the Event Header.
Definition: SipMessage.cpp:3519
SIPX_SECURITY_EVENT
Enumeration of possible security events.
Definition: sipXtapiEvents.h:431
UtlBoolean getDNSField(UtlString *Protocol, UtlString *Address, UtlString *Port) const
Definition: SipMessage.cpp:5008
void setRequestTerminatedResponseData(const SipMessage *request)
Definition: SipMessage.cpp:1325
void setReceivedViaParams(const UtlString &fromIpAddress, int fromPort)
fills in parameters in topmost via based on actual received information.
Definition: SipMessage.cpp:2261
void addRouteUri(const char *routeUri)
Definition: SipMessage.cpp:3761
const UtlString getTransportName(bool &bCustom) const
Accessor to retrieve any transport string from.
Definition: SipMessage.cpp:5057
void setVoicemailData(const char *fromField, const char *toField, const char *Uri, const char *contactUrl, const char *callId, int CSeq, int subscribePeriod=-1)
Definition: SipMessage.cpp:1305
void setReferOkData(const SipMessage *referRequest)
Definition: SipMessage.cpp:1782
void setTransaction(SipTransaction *transaction)
Accessor to store transaction reference.
Definition: SipMessage.cpp:5047
void getDialogHandle(UtlString &dialogHandle) const
Definition: SipMessage.cpp:3305
void setLocalIp(const UtlString &localIp)
Definition: SipMessage.cpp:5180
void addViaField(const char *viaField, UtlBoolean afterOtherVias=TRUE)
Definition: SipMessage.cpp:2122
void setInviteBadCodecs(const SipMessage *inviteRequest, SipUserAgent *ua)
Generate a 488 response (no compatible codecs).
Definition: SipMessage.cpp:784
void addPAssertedIdentityField(const UtlString &identity)
Add the P-Asserted-Identity value.
Definition: SipMessage.cpp:2648
void setMessageSummaryData(UtlString &msgSummaryData, const char *msgAccountUri, UtlBoolean bNewMsgs=FALSE, UtlBoolean bVoiceMsgs=FALSE, UtlBoolean bFaxMsgs=FALSE, UtlBoolean bEmailMsgs=FALSE, int numNewMsgs=-1, int numOldMsgs=-1, int numFaxNewMsgs=-1, int numFaxOldMsgs=-1, int numEmailNewMsgs=-1, int numEmailOldMsgs=-1)
Definition: SipMessage.cpp:1216
Container for MIME type application/sdp.
Definition: SdpBody.h:89
void OnError(SIPX_SECURITY_EVENT event, SIPX_SECURITY_CAUSE cause)
Definition: SipMessage.cpp:5532
UtlBoolean getReplacesData(UtlString &callId, UtlString &toTag, UtlString &fromTag) const
Definition: SipMessage.cpp:4363
Definition: SipMessage.h:351
void setLastViaTag(const char *tagValue, const char *tagName="received")
Definition: SipMessage.cpp:2161
UtlBoolean getReferToField(UtlString &referToField) const
Definition: SipMessage.cpp:4323
UtlBoolean getRouteUri(int index, UtlString *routeUri) const
Definition: SipMessage.cpp:3842
void setRequestUnimplemented(const SipMessage *request)
Definition: SipMessage.cpp:838
void addVia(const char *domainName, int port, const char *protocol, const char *branchId=NULL, const bool bIncludeRport=false, const char *customRouteId=NULL)
Definition: SipMessage.cpp:2067
EventSubTypes
Definition: SipMessage.h:349
sipXtapi main API declarations
UtlBoolean getSupportedField(UtlString &supportedField) const
Definition: SipMessage.cpp:4213
void setSipRequestFirstHeaderLine(const char *method, const char *uri, const char *protocolVersion=SIP_PROTOCOL_VERSION)
Definition: SipMessage.cpp:244
UtlBoolean getProxyRequireExtension(int extensionIndex, UtlString *extension) const
Definition: SipMessage.cpp:3507
bool hasSelfHeader() const
Definition: SipMessage.cpp:4187
void setInviteForbidden(const SipMessage *request)
Definition: SipMessage.cpp:824
UtlBoolean isSameTransaction(const SipMessage *message) const
Definition: SipMessage.cpp:4936

sipXtackLib home page