2 * Asterisk -- A telephony toolkit for Linux.
4 * Implementation of Session Initiation Protocol
6 * Copyright (C) 2004, Digium, Inc.
8 * Mark Spencer <markster@digium.com>
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
18 #include <asterisk/lock.h>
19 #include <asterisk/channel.h>
20 #include <asterisk/channel_pvt.h>
21 #include <asterisk/config_pvt.h>
22 #include <asterisk/config.h>
23 #include <asterisk/logger.h>
24 #include <asterisk/module.h>
25 #include <asterisk/pbx.h>
26 #include <asterisk/options.h>
27 #include <asterisk/lock.h>
28 #include <asterisk/sched.h>
29 #include <asterisk/io.h>
30 #include <asterisk/rtp.h>
31 #include <asterisk/acl.h>
32 #include <asterisk/manager.h>
33 #include <asterisk/callerid.h>
34 #include <asterisk/cli.h>
35 #include <asterisk/md5.h>
36 #include <asterisk/app.h>
37 #include <asterisk/musiconhold.h>
38 #include <asterisk/dsp.h>
39 #include <asterisk/features.h>
40 #include <asterisk/acl.h>
41 #include <asterisk/srv.h>
42 #include <asterisk/astdb.h>
43 #include <asterisk/causes.h>
44 #include <asterisk/utils.h>
45 #include <asterisk/file.h>
47 #include <asterisk/astosp.h>
49 #include <sys/socket.h>
50 #include <sys/ioctl.h>
57 #include <arpa/inet.h>
59 #include <sys/signal.h>
60 #include <netinet/in_systm.h>
61 #include <netinet/ip.h>
63 #ifndef DEFAULT_USERAGENT
64 #define DEFAULT_USERAGENT "Asterisk PBX"
67 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
69 #define IPTOS_MINCOST 0x02
72 /* #define VOCAL_DATA_HACK */
75 #define DEFAULT_DEFAULT_EXPIRY 120
76 #define DEFAULT_MAX_EXPIRY 3600
78 /* guard limit must be larger than guard secs */
79 /* guard min must be < 1000, and should be >= 250 */
80 #define EXPIRY_GUARD_SECS 15 /* How long before expiry do we reregister */
81 #define EXPIRY_GUARD_LIMIT 30 /* Below here, we use EXPIRY_GUARD_PCT instead of
83 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If
84 GUARD_PCT turns out to be lower than this, it
85 will use this time instead.
86 This is in milliseconds. */
87 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when
88 below EXPIRY_GUARD_LIMIT */
90 static int max_expiry = DEFAULT_MAX_EXPIRY;
91 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
94 #define MAX(a,b) ((a) > (b) ? (a) : (b))
97 #define CALLERID_UNKNOWN "Unknown"
99 /* --- Choices for DTMF support in SIP channel */
100 #define SIP_DTMF_RFC2833 (1 << 0) /* RTP DTMF */
101 #define SIP_DTMF_INBAND (1 << 1) /* Inband audio, only for ULAW/ALAW */
102 #define SIP_DTMF_INFO (1 << 2) /* SIP Info messages */
105 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
106 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
107 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
109 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
110 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
113 #define DEBUG_READ 0 /* Recieved data */
114 #define DEBUG_SEND 1 /* Transmit data */
116 static char *desc = "Session Initiation Protocol (SIP)";
117 static char *type = "SIP";
118 static char *tdesc = "Session Initiation Protocol (SIP)";
119 static char *config = "sip.conf";
121 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
122 #define SIP_MAX_PACKET 4096 /* Also from RFC 2543, should sub headers tho */
124 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
126 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
128 #define DEFAULT_CONTEXT "default"
129 static char default_context[AST_MAX_EXTENSION] = DEFAULT_CONTEXT;
131 static char default_language[MAX_LANGUAGE] = "";
133 #define DEFAULT_CALLERID "asterisk"
134 static char default_callerid[AST_MAX_EXTENSION] = DEFAULT_CALLERID;
136 static char default_fromdomain[AST_MAX_EXTENSION] = "";
138 #define DEFAULT_NOTIFYMIME "application/simple-message-summary"
139 static char default_notifymime[AST_MAX_EXTENSION] = DEFAULT_NOTIFYMIME;
141 static int srvlookup = 0; /* SRV Lookup on or off. Default is off, RFC behavior is on */
143 static int pedanticsipchecking = 0; /* Extra checking ? Default off */
145 static int autocreatepeer = 0; /* Auto creation of peers at registration? Default off. */
147 static int relaxdtmf = 0;
149 static int global_rtptimeout = 0;
151 static int global_rtpholdtimeout = 0;
153 static int global_trustrpid = 0; /* Trust RPID headers? Default off. */
155 static int global_progressinband = 0;
158 static int global_ospauth = 0; /* OSP = Open Settlement Protocol */
161 #define DEFAULT_MWITIME 10
162 static int global_mwitime = DEFAULT_MWITIME; /* Time between MWI checks for peers */
164 static int usecnt =0;
165 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
168 /* Protect the interface list (of sip_pvt's) */
169 AST_MUTEX_DEFINE_STATIC(iflock);
171 /* Protect the monitoring thread, so only one process can kill or start it, and not
172 when it's doing something critical. */
173 AST_MUTEX_DEFINE_STATIC(netlock);
175 AST_MUTEX_DEFINE_STATIC(monlock);
177 /* This is the thread for the monitor which checks for input on the channels
178 which are not currently in use. */
179 static pthread_t monitor_thread = AST_PTHREADT_NULL;
181 static int restart_monitor(void);
183 /* Codecs that we support by default: */
184 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
185 static int noncodeccapability = AST_RTP_DTMF;
187 static char ourhost[256];
188 static struct in_addr __ourip;
191 static int sipdebug = 0;
192 static struct sockaddr_in debugaddr;
196 static int videosupport = 0;
198 static int compactheaders = 0; /* send compact sip headers */
200 static int global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
201 static int recordhistory = 0; /* Record SIP history. Off by default */
202 static int global_promiscredir; /* Support of 302 REDIR - Default off */
203 static int global_usereqphone; /* User=phone support, default 0 */
205 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
206 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
207 static char regcontext[AST_MAX_EXTENSION] = ""; /* Context for auto-extensions */
210 #define DEFAULT_EXPIRY 900
211 static int expiry = DEFAULT_EXPIRY;
213 static struct sched_context *sched;
214 static struct io_context *io;
215 /* The private structures of the sip channels are linked for
216 selecting outgoing channels */
218 #define SIP_MAX_HEADERS 64
219 #define SIP_MAX_LINES 64
223 #define DEC_OUT_USE 2
224 #define INC_OUT_USE 3
226 static struct ast_codec_pref prefs;
229 /* sip_request: The data grabbed from the UDP socket */
231 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
232 char *rlPart2; /* The Request URI or Response Status */
233 int len; /* Length */
234 int headers; /* # of SIP Headers */
235 char *header[SIP_MAX_HEADERS];
236 int lines; /* SDP Content */
237 char *line[SIP_MAX_LINES];
238 char data[SIP_MAX_PACKET];
244 struct sip_route *next;
250 struct sip_history *next;
253 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
254 static struct sip_pvt {
255 ast_mutex_t lock; /* Channel private lock */
256 char callid[80]; /* Global CallID */
257 char randdata[80]; /* Random data */
258 struct ast_codec_pref prefs; /* codec prefs */
259 unsigned int ocseq; /* Current outgoing seqno */
260 unsigned int icseq; /* Current incoming seqno */
261 unsigned int callgroup; /* Call group */
262 unsigned int pickupgroup; /* Pickup group */
263 int lastinvite; /* Last Cseq of invite */
264 int alreadygone; /* Whether or not we've already been destroyed by or peer */
265 int needdestroy; /* if we need to be destroyed */
266 int capability; /* Special capability (codec) */
267 int novideo; /* Didn't get video in invite, don't offer */
268 int jointcapability; /* Supported capability at both ends (codecs ) */
269 int peercapability; /* Supported peer capability */
270 int prefcodec; /* Preferred codec (outbound only) */
271 int noncodeccapability;
272 int callingpres; /* Calling presentation */
273 int outgoing; /* Outgoing or incoming call? */
274 int authtries; /* Times we've tried to authenticate */
275 int insecure; /* Don't check source port/ip */
276 int expiry; /* How long we take to expire */
277 int branch; /* One random number */
278 int canreinvite; /* Do we support reinvite */
279 int ringing; /* Have sent 180 ringing */
280 int progress; /* Have sent 183 message progress */
281 int useclientcode; /* Trust X-ClientCode info message */
282 int tag; /* Another random number */
283 int nat; /* Whether to try to support NAT */
284 int sessionid; /* SDP Session ID */
285 int sessionversion; /* SDP Session Version */
286 struct sockaddr_in sa; /* Our peer */
287 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
288 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
289 int redircodecs; /* Redirect codecs */
290 struct sockaddr_in recv; /* Received as */
291 struct in_addr ourip; /* Our IP */
292 struct ast_channel *owner; /* Who owns us */
293 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
294 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
295 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
296 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
297 struct sip_pvt *refer_call; /* Call we are referring */
298 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
299 int route_persistant; /* Is this the "real" route? */
300 char from[256]; /* The From: header */
301 char useragent[256]; /* User agent in SIP request */
302 char context[AST_MAX_EXTENSION]; /* Context for this call */
303 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
304 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
305 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
306 char language[MAX_LANGUAGE]; /* Default language for this call */
307 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
308 char rdnis[256]; /* Referring DNIS */
309 char theirtag[256]; /* Their tag */
312 char authname[256]; /* Who we use for authentication */
313 char uri[256]; /* Original requested URI */
314 char peersecret[256]; /* Password */
315 char peermd5secret[256];
316 char cid_num[256]; /* Caller*ID */
317 char cid_name[256]; /* Caller*ID */
318 char via[256]; /* Via: header */
319 char fullcontact[128]; /* The Contact: that the UA registers with us */
320 char accountcode[20]; /* Account code */
321 char our_contact[256]; /* Our contact header */
322 char realm[256]; /* Authorization realm */
323 char nonce[256]; /* Authorization nonce */
324 char opaque[256]; /* Opaque nonsense */
325 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
326 char domain[256]; /* Authorization nonce */
327 char lastmsg[256]; /* Last Message sent/received */
328 int amaflags; /* AMA Flags */
329 int pendinginvite; /* Any pending invite */
330 int needreinvite; /* Do we need to send another reinvite? */
331 int pendingbye; /* Need to send bye after we ack? */
332 int gotrefer; /* Got a refer? */
334 int ospauth; /* Allow OSP Authentication */
335 int osphandle; /* OSP Handle for call */
336 time_t ospstart; /* OSP Start time */
338 struct sip_request initreq; /* Initial request */
340 int maxtime; /* Max time for first response */
341 int initid; /* Auto-congest ID if appropriate */
342 int autokillid; /* Auto-kill ID */
343 time_t lastrtprx; /* Last RTP received */
344 int rtptimeout; /* RTP timeout time */
345 int rtpholdtimeout; /* RTP timeout when on hold */
347 int subscribed; /* Is this call a subscription? */
350 int promiscredir; /* Promiscuous redirection */
351 int usereqphone; /* Add user=phone to numeric URI. Default off */
353 int trustrpid; /* Trust RPID headers? */
356 int dtmfmode; /* DTMF to use for this call */
359 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
360 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
361 struct ast_rtp *rtp; /* RTP Session */
362 struct ast_rtp *vrtp; /* Video RTP session */
363 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
364 struct sip_history *history; /* History of this SIP dialog */
365 struct ast_variable *vars;
366 struct sip_pvt *next; /* Next call in chain */
369 #define FLAG_RESPONSE (1 << 0)
370 #define FLAG_FATAL (1 << 1)
372 /* sip packet - read in sipsock_read, transmitted in send_request */
374 struct sip_pkt *next; /* Next packet */
375 int retrans; /* Retransmission number */
376 int seqno; /* Sequence number */
377 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
378 struct sip_pvt *owner; /* Owner call */
379 int retransid; /* Retransmission ID */
380 int packetlen; /* Length of packet */
384 /* Structure for SIP user data. User's place calls to us */
386 /* Users who can access various contexts */
387 char name[80]; /* The name in sip.conf */
388 char secret[80]; /* Password */
389 char md5secret[80]; /* Password in md5 */
390 char context[80]; /* Default context for incoming calls */
391 char cid_num[80]; /* Caller ID num */
392 char cid_name[80]; /* Caller ID name */
393 char accountcode[20]; /* Account code */
394 char language[MAX_LANGUAGE]; /* Default language for this user */
395 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
396 char useragent[256]; /* User agent in SIP request */
397 struct ast_codec_pref prefs; /* codec prefs */
398 unsigned int callgroup; /* Call group */
399 unsigned int pickupgroup; /* Pickup Group */
400 int nat; /* NAT setting */
401 int amaflags; /* AMA flags for billing */
402 int callingpres; /* Calling id presentation */
403 int insecure; /* Insecure means don't check password */
404 int canreinvite; /* Do we support re-invites ? */
405 int capability; /* Codec capability */
407 int ospauth; /* Allow OSP Authentication */
409 int dtmfmode; /* DTMF setting */
414 int promiscredir; /* Support of 302 redirect */
415 int useclientcode; /* SNOM clientcode support */
416 int trustrpid; /* Trust remote party ID from this UA */
418 struct ast_ha *ha; /* ACL setting */
419 int temponly; /* Flag for temporary users (realtime) */
420 struct ast_variable *vars;
421 struct sip_user *next;
424 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
426 char name[80]; /* Peer name in sip.conf */
427 char secret[80]; /* Password */
428 char md5secret[80]; /* Password in MD5 */
429 char context[80]; /* Default context for incoming calls */
430 char username[80]; /* Temporary username until registration */
431 char tohost[80]; /* If not dynamic, IP address */
432 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
433 char fromuser[80]; /* From: user when calling this peer */
434 char fromdomain[80]; /* From: domain when calling this peer */
435 char fullcontact[128]; /* Contact registred with us (not in sip.conf) */
436 char cid_num[80]; /* Caller ID num */
437 char cid_name[80]; /* Caller ID name */
438 char mailbox[AST_MAX_EXTENSION]; /* Mailbox setting for MWI checks */
439 char language[MAX_LANGUAGE]; /* Default language for prompts */
440 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
441 char useragent[256]; /* User agent in SIP request (saved from registration) */
442 struct ast_codec_pref prefs; /* codec prefs */
444 time_t lastmsgcheck; /* Last time we checked for MWI */
445 int dynamic; /* Dynamic? Yes or no. Dynamic hosts register with us */
446 int expire; /* Registration expiration */
448 int capability; /* Codec capability */
451 int insecure; /* Do we want to authenticate this peer? */
453 int ospauth; /* Allow OSP Authentication */
455 int nat; /* NAT support needed? */
456 int canreinvite; /* Does the peer support re-invites? */
457 unsigned int callgroup; /* Call group */
458 unsigned int pickupgroup; /* Pickup group */
459 int promiscredir; /* Support of 302 redirect? */
460 int dtmfmode; /* DTMF mode */
461 int trustrpid; /* Trust Remote Party ID headers? */
462 int useclientcode; /* SNOM clientcode support */
464 int usereqphone; /* Add user=phone to URI. Default off */
465 struct sockaddr_in addr; /* IP address of peer */
469 struct sip_pvt *call; /* Call pointer */
470 int pokeexpire; /* When to expire poke (qualify= checking) */
471 int lastms; /* How long last response took (in ms), or -1 for no response */
472 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
473 struct timeval ps; /* Ping send time */
475 struct sockaddr_in defaddr; /* Default IP address, used until registration */
476 struct ast_ha *ha; /* Access control list */
481 struct sip_peer *next;
484 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
485 static int sip_reloading = 0;
487 /* States for outbound registrations (with register= lines in sip.conf */
488 #define REG_STATE_UNREGISTERED 0
489 #define REG_STATE_REGSENT 1
490 #define REG_STATE_AUTHSENT 2
491 #define REG_STATE_REGISTERED 3
492 #define REG_STATE_REJECTED 4
493 #define REG_STATE_TIMEOUT 5
494 #define REG_STATE_NOAUTH 6
497 #define SIP_NAT_NEVER 0 /* No nat support */
498 #define SIP_NAT_RFC3581 (1 << 0)
499 #define SIP_NAT_ROUTE (1 << 2)
500 #define SIP_NAT_ALWAYS (SIP_NAT_ROUTE | SIP_NAT_RFC3581)
502 /* sip_registry: Registrations with other SIP proxies */
503 struct sip_registry {
504 int portno; /* Optional port override */
505 char username[80]; /* Who we are registering as */
506 char authuser[80]; /* Who we *authenticate* as */
507 char hostname[80]; /* Domain or host we register to */
508 char secret[80]; /* Password or key name in []'s */
510 char contact[80]; /* Contact extension */
512 int expire; /* Sched ID of expiration */
513 int timeout; /* sched id of sip_reg_timeout */
514 int refresh; /* How often to refresh */
515 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
516 int regstate; /* Registration state (see above) */
517 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
518 char callid[80]; /* Global CallID for this registry */
519 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
520 struct sockaddr_in us; /* Who the server thinks we are */
521 struct sip_registry *next;
524 /*--- The user list: Users and friends ---*/
525 static struct ast_user_list {
526 struct sip_user *users;
530 /*--- The peer list: Peers and Friends ---*/
531 static struct ast_peer_list {
532 struct sip_peer *peers;
536 /*--- The register list: Other SIP proxys we register with and call ---*/
537 static struct ast_register_list {
538 struct sip_registry *registrations;
544 #define REINVITE_INVITE 1
545 #define REINVITE_UPDATE 2
547 static int __sip_do_register(struct sip_registry *r);
549 static int sipsock = -1;
550 static int global_nat = SIP_NAT_RFC3581;
551 static int global_canreinvite = REINVITE_INVITE;
554 static struct sockaddr_in bindaddr;
555 static struct sockaddr_in externip;
556 static struct ast_ha *localaddr;
558 static struct ast_frame *sip_read(struct ast_channel *ast);
559 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
560 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
561 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
562 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
563 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
564 static int transmit_invite(struct sip_pvt *p, char *msg, int sendsdp, char *auth, char *authheader, char *vxml_url,char *distinctive_ring, char *osptoken,int init);
565 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
566 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
567 static int transmit_message_with_text(struct sip_pvt *p, char *text);
568 static int transmit_refer(struct sip_pvt *p, char *dest);
569 static struct sip_peer *temp_peer(char *name);
570 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
571 static void free_old_route(struct sip_route *route);
572 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
573 static int update_user_counter(struct sip_pvt *fup, int event);
574 static void prune_peers(void);
575 static int sip_do_reload(void);
578 /*--- sip_debug_test_addr: See if we pass debug IP filter */
579 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
583 if (debugaddr.sin_addr.s_addr) {
584 if (((ntohs(debugaddr.sin_port) != 0)
585 && (debugaddr.sin_port != addr->sin_port))
586 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
592 static inline int sip_debug_test_pvt(struct sip_pvt *p)
596 return sip_debug_test_addr(((p->nat & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
600 /*--- __sip_xmit: Transmit SIP message ---*/
601 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
604 char iabuf[INET_ADDRSTRLEN];
605 if (p->nat & SIP_NAT_ROUTE)
606 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
608 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
610 ast_log(LOG_WARNING, "sip_xmit of %p (len %d) to %s returned %d: %s\n", data, len, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), res, strerror(errno));
615 static void sip_destroy(struct sip_pvt *p);
617 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
618 /* Only used for outbound registrations */
619 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
622 * Using the localaddr structure built up with localnet statements
623 * apply it to their address to see if we need to substitute our
624 * externip or can get away with our internal bindaddr
626 struct sockaddr_in theirs;
627 theirs.sin_addr = *them;
628 if (localaddr && externip.sin_addr.s_addr &&
629 ast_apply_ha(localaddr, &theirs)) {
630 char iabuf[INET_ADDRSTRLEN];
631 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
632 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
633 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
635 else if (bindaddr.sin_addr.s_addr)
636 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
638 return ast_ouraddrfor(them, us);
642 static int append_history(struct sip_pvt *p, char *event, char *data)
644 struct sip_history *hist, *prev;
648 hist = malloc(sizeof(struct sip_history));
650 memset(hist, 0, sizeof(struct sip_history));
651 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
655 if ((*c == '\r') || (*c == '\n')) {
661 /* Enqueue into history */
674 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
675 static int retrans_pkt(void *data)
677 struct sip_pkt *pkt=data, *prev, *cur;
679 char iabuf[INET_ADDRSTRLEN];
680 ast_mutex_lock(&pkt->owner->lock);
681 if (pkt->retrans < MAX_RETRANS) {
683 if (sip_debug_test_pvt(pkt->owner)) {
684 if (pkt->owner->nat & SIP_NAT_ROUTE)
685 ast_verbose("Retransmitting #%d (NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, ast_inet_ntoa(iabuf, sizeof(iabuf), pkt->owner->recv.sin_addr), ntohs(pkt->owner->recv.sin_port));
687 ast_verbose("Retransmitting #%d (no NAT):\n%s\n to %s:%d\n", pkt->retrans, pkt->data, ast_inet_ntoa(iabuf, sizeof(iabuf), pkt->owner->sa.sin_addr), ntohs(pkt->owner->sa.sin_port));
689 append_history(pkt->owner, "ReTx", pkt->data);
690 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
693 ast_log(LOG_WARNING, "Maximum retries exceeded on call %s for seqno %d (%s %s)\n", pkt->owner->callid, pkt->seqno, (pkt->flags & FLAG_FATAL) ? "Critical" : "Non-critical", (pkt->flags & FLAG_RESPONSE) ? "Response" : "Request");
694 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
696 if (pkt->flags & FLAG_FATAL) {
697 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
698 ast_mutex_unlock(&pkt->owner->lock);
700 ast_mutex_lock(&pkt->owner->lock);
702 if (pkt->owner->owner) {
703 pkt->owner->alreadygone=1;
704 ast_queue_hangup(pkt->owner->owner);
705 ast_mutex_unlock(&pkt->owner->owner->lock);
707 /* If no owner, destroy now */
708 pkt->owner->needdestroy = 1;
711 /* In any case, go ahead and remove the packet */
713 cur = pkt->owner->packets;
722 prev->next = cur->next;
724 pkt->owner->packets = cur->next;
725 ast_mutex_unlock(&pkt->owner->lock);
729 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
732 ast_mutex_unlock(&pkt->owner->lock);
736 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
737 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
740 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
743 memset(pkt, 0, sizeof(struct sip_pkt));
744 memcpy(pkt->data, data, len);
745 pkt->packetlen = len;
746 pkt->next = p->packets;
750 pkt->data[len] = '\0';
752 pkt->flags |= FLAG_FATAL;
753 /* Schedule retransmission */
754 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
755 pkt->next = p->packets;
757 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
758 if (!strncasecmp(pkt->data, "INVITE", 6)) {
759 /* Note this is a pending invite */
760 p->pendinginvite = seqno;
765 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
766 static int __sip_autodestruct(void *data)
768 struct sip_pvt *p = data;
770 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
771 append_history(p, "AutoDestroy", "");
773 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
774 ast_queue_hangup(p->owner);
781 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
782 static int sip_scheddestroy(struct sip_pvt *p, int ms)
785 if (sip_debug_test_pvt(p))
786 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
788 snprintf(tmp, sizeof(tmp), "%d ms", ms);
789 append_history(p, "SchedDestroy", tmp);
791 if (p->autokillid > -1)
792 ast_sched_del(sched, p->autokillid);
793 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
797 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
798 static int sip_cancel_destroy(struct sip_pvt *p)
800 if (p->autokillid > -1)
801 ast_sched_del(sched, p->autokillid);
802 append_history(p, "CancelDestroy", "");
807 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
808 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
810 struct sip_pkt *cur, *prev = NULL;
813 /* Just in case... */
814 if (!msg) msg = "___NEVER___";
817 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
818 ((cur->flags & FLAG_RESPONSE) ||
819 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
820 if (!resp && (seqno == p->pendinginvite)) {
821 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
822 p->pendinginvite = 0;
825 /* this is our baby */
827 prev->next = cur->next;
829 p->packets = cur->next;
830 if (cur->retransid > -1)
831 ast_sched_del(sched, cur->retransid);
839 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
843 /* Pretend to ack all packets */
844 static int __sip_pretend_ack(struct sip_pvt *p)
847 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
852 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
853 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
859 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
860 ((cur->flags & FLAG_RESPONSE) ||
861 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
862 /* this is our baby */
863 if (cur->retransid > -1)
864 ast_sched_del(sched, cur->retransid);
871 ast_log(LOG_DEBUG, "(Provisional) Stopping retransmission (but retaining packet) on '%s' %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
875 static void parse(struct sip_request *req);
876 static char *get_header(struct sip_request *req, char *name);
877 static void copy_request(struct sip_request *dst,struct sip_request *src);
879 static void parse_copy(struct sip_request *dst, struct sip_request *src)
881 memset(dst, 0, sizeof(*dst));
882 memcpy(dst->data, src->data, sizeof(dst->data));
886 /*--- send_response: Transmit response on SIP request---*/
887 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
890 char iabuf[INET_ADDRSTRLEN];
891 struct sip_request tmp;
893 if (sip_debug_test_pvt(p)) {
894 if (p->nat & SIP_NAT_ROUTE)
895 ast_verbose("%sTransmitting (NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
897 ast_verbose("%sTransmitting (no NAT):\n%s\n to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port));
901 parse_copy(&tmp, req);
902 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
903 append_history(p, "TxRespRel", tmpmsg);
905 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
908 parse_copy(&tmp, req);
909 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
910 append_history(p, "TxResp", tmpmsg);
912 res = __sip_xmit(p, req->data, req->len);
919 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
920 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
923 char iabuf[INET_ADDRSTRLEN];
924 struct sip_request tmp;
926 if (sip_debug_test_pvt(p)) {
927 if (p->nat & SIP_NAT_ROUTE)
928 ast_verbose("%sTransmitting:\n%s (NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
930 ast_verbose("%sTransmitting:\n%s (no NAT) to %s:%d\n", reliable ? "Reliably " : "", req->data, ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), ntohs(p->sa.sin_port));
934 parse_copy(&tmp, req);
935 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
936 append_history(p, "TxReqRel", tmpmsg);
938 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
941 parse_copy(&tmp, req);
942 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
943 append_history(p, "TxReq", tmpmsg);
945 res = __sip_xmit(p, req->data, req->len);
950 /*--- url_decode: Decode SIP URL ---*/
951 static void url_decode(char *s)
959 if (sscanf(s + 1, "%2x", &tmp) == 1) {
961 s += 2; /* Will be incremented once more when we break out */
965 /* Fall through if something wasn't right with the formatting */
975 /*--- ditch_braces: Pick out text in braces from character string ---*/
976 static char *ditch_braces(char *tmp)
981 if ((q = strchr(tmp, '"')) ) {
983 if ((q = strchr(c, '"')) )
986 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
990 if ((n = strchr(c, '<')) ) {
992 while(*c && *c != '>') c++;
994 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
1003 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
1004 /* Called from PBX core text message functions */
1005 static int sip_sendtext(struct ast_channel *ast, char *text)
1007 struct sip_pvt *p = ast->pvt->pvt;
1008 int debug=sip_debug_test_pvt(p);
1011 ast_verbose("Sending text %s on %s\n", text, ast->name);
1014 if (!text || ast_strlen_zero(text))
1017 ast_verbose("Really sending text %s on %s\n", text, ast->name);
1018 transmit_message_with_text(p, text);
1022 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1026 char regseconds[20];
1031 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1032 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1033 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1034 ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1037 static void register_peer_exten(struct sip_peer *peer, int onoff)
1039 unsigned char multi[256]="";
1040 char *stringp, *ext;
1041 if (!ast_strlen_zero(regcontext)) {
1042 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1044 while((ext = strsep(&stringp, "&"))) {
1046 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, type);
1048 ast_context_remove_extension(regcontext, ext, 1, NULL);
1053 static void destroy_peer(struct sip_peer *peer)
1055 /* Delete it, it needs to disappear */
1057 sip_destroy(peer->call);
1058 if (peer->expire > -1)
1059 ast_sched_del(sched, peer->expire);
1060 if (peer->pokeexpire > -1)
1061 ast_sched_del(sched, peer->pokeexpire);
1062 register_peer_exten(peer, 0);
1063 ast_free_ha(peer->ha);
1067 /*--- update_peer: Update peer data in database (if used) ---*/
1068 static void update_peer(struct sip_peer *p, int expiry)
1071 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1074 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int temponly);
1076 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1078 struct ast_variable *var, *tmp=NULL;
1080 struct sip_peer *peer=NULL;
1081 time_t nowtime, regseconds;
1085 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1087 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1089 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1091 /* Make sure it's not a user only... */
1092 peer = build_peer(peername, var, 1);
1094 /* Add some finishing touches, addresses, etc */
1098 if (!strcasecmp(tmp->name, "type")) {
1099 if (strcasecmp(tmp->value, "friend") &&
1100 strcasecmp(tmp->value, "peer")) {
1101 /* Whoops, we weren't supposed to exist! */
1106 } else if (!strcasecmp(tmp->name, "regseconds")) {
1107 if (sscanf(tmp->value, "%li", ®seconds) != 1)
1109 } else if (!strcasecmp(tmp->name, "ipaddr")) {
1110 inet_aton(tmp->value, &(peer->addr.sin_addr));
1111 } else if (!strcasecmp(tmp->name, "port")) {
1112 peer->addr.sin_port = htons(atoi(tmp->value));
1113 } else if (!strcasecmp(tmp->name, "host")) {
1114 if (!strcasecmp(tmp->value, "dynamic"))
1119 if (peer && dynamic) {
1121 if ((nowtime - regseconds) > 0) {
1122 memset(&peer->addr, 0, sizeof(peer->addr));
1124 ast_log(LOG_DEBUG, "Bah, we're expired (%ld/%ld/%ld)!\n", nowtime - regseconds, regseconds, nowtime);
1128 ast_destroy_realtime(var);
1133 /*--- find_peer: Locate peer by name or ip address */
1134 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1136 struct sip_peer *p = NULL;
1140 /* Find by peer name */
1142 if (!strcasecmp(p->name, peer)) {
1151 if (!inaddrcmp(&p->addr, sin) ||
1153 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1161 p = realtime_peer(peer, sin);
1167 static void destroy_user(struct sip_user *user)
1169 ast_free_ha(user->ha);
1171 ast_destroy_realtime(user->vars);
1177 static struct sip_user *build_user(const char *name, struct ast_variable *v);
1178 static struct sip_user *realtime_user(const char *username)
1180 struct ast_variable *var;
1181 struct ast_variable *tmp;
1182 struct sip_user *user=NULL;
1183 var = ast_load_realtime("sipfriends", "name", username, NULL);
1185 /* Make sure it's not a user only... */
1186 user = build_user(username, var);
1188 /* Add some finishing touches, addresses, etc */
1192 if (!strcasecmp(tmp->name, "type")) {
1193 if (strcasecmp(tmp->value, "friend") &&
1194 strcasecmp(tmp->value, "user")) {
1195 /* Whoops, we weren't supposed to exist! */
1204 ast_destroy_realtime(var);
1209 /*--- find_user: Locate user by name */
1210 static struct sip_user *find_user(char *name)
1212 struct sip_user *u = NULL;
1216 if (!strcasecmp(u->name, name)) {
1222 u = realtime_user(name);
1227 /*--- create_addr: create address structure from peer definition ---*/
1228 /* Or, if peer not found, find it in the global DNS */
1229 /* returns TRUE on failure, FALSE on success */
1230 static int create_addr(struct sip_pvt *r, char *opeer)
1233 struct ast_hostent ahp;
1239 char host[256], *hostn;
1242 strncpy(peer, opeer, sizeof(peer) - 1);
1243 port = strchr(peer, ':');
1248 r->sa.sin_family = AF_INET;
1249 ast_mutex_lock(&peerl.lock);
1250 p = find_peer(peer, NULL);
1254 r->capability = p->capability;
1257 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1258 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1261 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1262 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1264 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1265 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1266 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1267 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1268 strncpy(r->username, p->username, sizeof(r->username)-1);
1269 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1270 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1271 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1272 if ((callhost = strchr(r->callid, '@'))) {
1273 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1276 if (ast_strlen_zero(r->tohost)) {
1277 if (p->addr.sin_addr.s_addr)
1278 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1280 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1282 if (!ast_strlen_zero(p->fromdomain))
1283 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1284 if (!ast_strlen_zero(p->fromuser))
1285 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1286 r->insecure = p->insecure;
1287 r->canreinvite = p->canreinvite;
1288 r->maxtime = p->maxms;
1289 r->callgroup = p->callgroup;
1290 r->pickupgroup = p->pickupgroup;
1292 r->dtmfmode = p->dtmfmode;
1293 if (r->dtmfmode & SIP_DTMF_RFC2833)
1294 r->noncodeccapability |= AST_RTP_DTMF;
1296 r->noncodeccapability &= ~AST_RTP_DTMF;
1298 r->promiscredir = p->promiscredir;
1299 r->usereqphone = p->usereqphone;
1300 strncpy(r->context, p->context,sizeof(r->context)-1);
1301 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1302 (!p->maxms || ((p->lastms >= 0) && (p->lastms <= p->maxms)))) {
1303 if (p->addr.sin_addr.s_addr) {
1304 r->sa.sin_addr = p->addr.sin_addr;
1305 r->sa.sin_port = p->addr.sin_port;
1307 r->sa.sin_addr = p->defaddr.sin_addr;
1308 r->sa.sin_port = p->defaddr.sin_port;
1310 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1318 ast_mutex_unlock(&peerl.lock);
1322 portno = atoi(port);
1324 portno = DEFAULT_SIP_PORT;
1329 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1330 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1336 hp = ast_gethostbyname(hostn, &ahp);
1338 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1339 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1340 r->sa.sin_port = htons(portno);
1341 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1344 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1357 /*--- auto_congest: Scheduled congestion on a call ---*/
1358 static int auto_congest(void *nothing)
1360 struct sip_pvt *p = nothing;
1361 ast_mutex_lock(&p->lock);
1364 if (!ast_mutex_trylock(&p->owner->lock)) {
1365 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1366 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1367 ast_mutex_unlock(&p->owner->lock);
1370 ast_mutex_unlock(&p->lock);
1377 /*--- sip_call: Initiate SIP call from PBX ---*/
1378 /* used from the dial() application */
1379 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1383 char *vxml_url = NULL;
1384 char *distinctive_ring = NULL;
1385 char *osptoken = NULL;
1387 char *osphandle = NULL;
1389 struct varshead *headp;
1390 struct ast_var_t *current;
1393 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1394 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1397 /* Check whether there is vxml_url, distinctive ring variables */
1399 headp=&ast->varshead;
1400 AST_LIST_TRAVERSE(headp,current,entries) {
1401 /* Check whether there is a VXML_URL variable */
1402 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1403 vxml_url = ast_var_value(current);
1404 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1405 /* Check whether there is a ALERT_INFO variable */
1406 distinctive_ring = ast_var_value(current);
1409 else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1410 osptoken = ast_var_value(current);
1411 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1412 osphandle = ast_var_value(current);
1420 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1421 /* Force Disable OSP support */
1427 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1428 res = update_user_counter(p,INC_OUT_USE);
1430 p->callingpres = ast->cid.cid_pres;
1431 p->jointcapability = p->capability;
1432 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1434 /* Initialize auto-congest time */
1435 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1441 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1442 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1444 struct sip_pvt *cur, *prev = NULL;
1446 struct sip_history *hist;
1448 if (sip_debug_test_pvt(p))
1449 ast_verbose("Destroying call '%s'\n", p->callid);
1450 if (p->stateid > -1)
1451 ast_extension_state_del(p->stateid, NULL);
1453 ast_sched_del(sched, p->initid);
1454 if (p->autokillid > -1)
1455 ast_sched_del(sched, p->autokillid);
1458 ast_rtp_destroy(p->rtp);
1461 ast_rtp_destroy(p->vrtp);
1464 free_old_route(p->route);
1468 /* Carefully unlink from registry */
1469 struct sip_registry *reg;
1470 ast_mutex_lock(®l.lock);
1471 reg = regl.registrations;
1473 if ((reg == p->registry) && (p->registry->call == p))
1474 p->registry->call=NULL;
1477 ast_mutex_unlock(®l.lock);
1479 /* Unlink us from the owner if we have one */
1482 ast_mutex_lock(&p->owner->lock);
1483 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1484 p->owner->pvt->pvt = NULL;
1486 ast_mutex_unlock(&p->owner->lock);
1491 p->history = p->history->next;
1498 prev->next = cur->next;
1507 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1510 ast_sched_del(sched, p->initid);
1511 while((cp = p->packets)) {
1512 p->packets = p->packets->next;
1513 if (cp->retransid > -1)
1514 ast_sched_del(sched, cp->retransid);
1517 ast_mutex_destroy(&p->lock);
1519 ast_destroy_realtime(p->vars);
1526 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1527 /* Note: This is going to be replaced by app_groupcount */
1528 static int update_user_counter(struct sip_pvt *fup, int event)
1530 char name[256] = "";
1532 strncpy(name, fup->username, sizeof(name) - 1);
1533 ast_mutex_lock(&userl.lock);
1534 u = find_user(name);
1536 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1537 ast_mutex_unlock(&userl.lock);
1541 /* incoming and outgoing affects the inUse counter */
1544 if ( u->inUse > 0 ) {
1552 if (u->incominglimit > 0 ) {
1553 if (u->inUse >= u->incominglimit) {
1554 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1555 /* inc inUse as well */
1556 if ( event == INC_OUT_USE ) {
1559 ast_mutex_unlock(&userl.lock);
1567 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1569 /* we don't use these anymore
1571 if ( u->outUse > 0 ) {
1578 if ( u->outgoinglimit > 0 ) {
1579 if ( u->outUse >= u->outgoinglimit ) {
1580 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1581 ast_mutex_unlock(&userl.lock);
1592 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1594 ast_mutex_unlock(&userl.lock);
1601 /*--- sip_destroy: Destroy SIP call structure ---*/
1602 static void sip_destroy(struct sip_pvt *p)
1604 ast_mutex_lock(&iflock);
1605 __sip_destroy(p, 1);
1606 ast_mutex_unlock(&iflock);
1610 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1612 static int hangup_sip2cause(int cause)
1614 /* Possible values from causes.h
1615 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1616 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1620 case 404: /* Not found */
1621 return AST_CAUSE_UNALLOCATED;
1622 case 483: /* Too many hops */
1623 return AST_CAUSE_FAILURE;
1625 return AST_CAUSE_BUSY;
1627 return AST_CAUSE_NORMAL;
1633 static char *hangup_cause2sip(int cause)
1637 case AST_CAUSE_FAILURE:
1638 return "500 Server internal failure";
1639 case AST_CAUSE_CONGESTION:
1640 return "503 Service Unavailable";
1641 case AST_CAUSE_BUSY:
1650 /*--- sip_hangup: Hangup SIP call */
1651 static int sip_hangup(struct ast_channel *ast)
1653 struct sip_pvt *p = ast->pvt->pvt;
1655 int needdestroy = 0;
1657 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1658 if (!ast->pvt->pvt) {
1659 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1662 ast_mutex_lock(&p->lock);
1664 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1665 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1668 if ( p->outgoing ) {
1669 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1670 update_user_counter(p, DEC_OUT_USE);
1672 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1673 update_user_counter(p, DEC_IN_USE);
1675 /* Determine how to disconnect */
1676 if (p->owner != ast) {
1677 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1678 ast_mutex_unlock(&p->lock);
1681 if (!ast || (ast->_state != AST_STATE_UP))
1686 ast_dsp_free(p->vad);
1689 ast->pvt->pvt = NULL;
1691 ast_mutex_lock(&usecnt_lock);
1693 ast_mutex_unlock(&usecnt_lock);
1694 ast_update_use_count();
1697 /* Start the process if it's not already started */
1698 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1701 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1702 /* Actually don't destroy us yet, wait for the 487 on our original
1703 INVITE, but do set an autodestruct just in case we never get it. */
1705 sip_scheddestroy(p, 15000);
1706 if ( p->initid != -1 ) {
1707 /* channel still up - reverse dec of inUse counter
1708 only if the channel is not auto-congested */
1709 if ( p->outgoing ) {
1710 update_user_counter(p, INC_OUT_USE);
1713 update_user_counter(p, INC_IN_USE);
1718 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1719 transmit_response_reliable(p, res, &p->initreq, 1);
1721 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1724 if (!p->pendinginvite) {
1726 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1728 /* Note we will need a BYE when this all settles out
1729 but we can't send one while we have "INVITE" outstanding. */
1731 p->needreinvite = 0;
1735 p->needdestroy = needdestroy;
1736 ast_mutex_unlock(&p->lock);
1740 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1741 static int sip_answer(struct ast_channel *ast)
1745 struct sip_pvt *p = ast->pvt->pvt;
1747 ast_mutex_lock(&p->lock);
1748 if (ast->_state != AST_STATE_UP) {
1753 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1755 fmt=ast_getformatbyname(codec);
1757 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1758 if (p->jointcapability & fmt) {
1759 p->jointcapability &= fmt;
1760 p->capability &= fmt;
1762 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1763 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1766 ast_setstate(ast, AST_STATE_UP);
1768 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1769 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1771 ast_mutex_unlock(&p->lock);
1775 /*--- sip_write: Send response, support audio media ---*/
1776 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1778 struct sip_pvt *p = ast->pvt->pvt;
1780 if (frame->frametype == AST_FRAME_VOICE) {
1781 if (!(frame->subclass & ast->nativeformats)) {
1782 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1783 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1787 ast_mutex_lock(&p->lock);
1789 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1790 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1793 res = ast_rtp_write(p->rtp, frame);
1795 ast_mutex_unlock(&p->lock);
1797 } else if (frame->frametype == AST_FRAME_VIDEO) {
1799 ast_mutex_lock(&p->lock);
1801 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1802 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1805 res = ast_rtp_write(p->vrtp, frame);
1807 ast_mutex_unlock(&p->lock);
1809 } else if (frame->frametype == AST_FRAME_IMAGE) {
1812 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1819 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1820 Basically update any ->owner links ----*/
1821 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1823 struct sip_pvt *p = newchan->pvt->pvt;
1824 ast_mutex_lock(&p->lock);
1825 if (p->owner != oldchan) {
1826 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1827 ast_mutex_unlock(&p->lock);
1831 ast_mutex_unlock(&p->lock);
1835 /*--- sip_senddigit: Send DTMF character on SIP channel */
1836 /* within one call, we're able to transmit in many methods simultaneously */
1837 static int sip_senddigit(struct ast_channel *ast, char digit)
1839 struct sip_pvt *p = ast->pvt->pvt;
1840 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1841 transmit_info_with_digit(p, digit);
1843 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1844 ast_rtp_senddigit(p->rtp, digit);
1846 /* If in-band DTMF is desired, send that */
1847 if (p->dtmfmode & SIP_DTMF_INBAND)
1853 /*--- sip_transfer: Transfer SIP call */
1854 static int sip_transfer(struct ast_channel *ast, char *dest)
1856 struct sip_pvt *p = ast->pvt->pvt;
1858 res = transmit_refer(p, dest);
1862 /*--- sip_indicate: Play indication to user */
1863 /* With SIP a lot of indications is sent as messages, letting the device play
1864 the indication - busy signal, congestion etc */
1865 static int sip_indicate(struct ast_channel *ast, int condition)
1867 struct sip_pvt *p = ast->pvt->pvt;
1869 case AST_CONTROL_RINGING:
1870 if (ast->_state == AST_STATE_RING) {
1871 if (!p->progress || !p->progressinband) {
1872 /* Send 180 ringing if out-of-band seems reasonable */
1873 transmit_response(p, "180 Ringing", &p->initreq);
1875 if (p->progressinband < 2)
1878 /* Well, if it's not reasonable, just send in-band */
1882 case AST_CONTROL_BUSY:
1883 if (ast->_state != AST_STATE_UP) {
1884 transmit_response(p, "486 Busy Here", &p->initreq);
1886 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1890 case AST_CONTROL_CONGESTION:
1891 if (ast->_state != AST_STATE_UP) {
1892 transmit_response(p, "503 Service Unavailable", &p->initreq);
1894 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1898 case AST_CONTROL_PROGRESS:
1899 case AST_CONTROL_PROCEEDING:
1900 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1901 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1909 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1917 /*--- sip_new: Initiate a call in the SIP channel */
1918 /* called from sip_request_call (calls from the pbx ) */
1919 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1921 struct ast_channel *tmp;
1922 struct ast_variable *v = NULL;
1925 ast_mutex_unlock(&i->lock);
1926 /* Don't hold a sip pvt lock while we allocate a channel */
1927 tmp = ast_channel_alloc(1);
1928 ast_mutex_lock(&i->lock);
1930 /* Select our native format based on codec preference until we receive
1931 something from another device to the contrary. */
1932 ast_mutex_lock(&i->lock);
1933 if (i->jointcapability)
1934 tmp->nativeformats = ast_codec_choose(&i->prefs, i->jointcapability, 1);
1935 else if (i->capability)
1936 tmp->nativeformats = ast_codec_choose(&i->prefs, i->capability, 1);
1938 tmp->nativeformats = ast_codec_choose(&i->prefs, global_capability, 1);
1939 ast_mutex_unlock(&i->lock);
1940 fmt = ast_best_codec(tmp->nativeformats);
1942 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1944 if (strchr(i->fromdomain,':'))
1946 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
1950 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
1953 if (i->dtmfmode & SIP_DTMF_INBAND) {
1954 i->vad = ast_dsp_new();
1955 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
1957 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
1959 tmp->fds[0] = ast_rtp_fd(i->rtp);
1960 tmp->fds[1] = ast_rtcp_fd(i->rtp);
1962 tmp->fds[2] = ast_rtp_fd(i->vrtp);
1963 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
1965 if (state == AST_STATE_RING)
1967 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
1968 tmp->writeformat = fmt;
1969 tmp->pvt->rawwriteformat = fmt;
1970 tmp->readformat = fmt;
1971 tmp->pvt->rawreadformat = fmt;
1973 tmp->pvt->send_text = sip_sendtext;
1974 tmp->pvt->call = sip_call;
1975 tmp->pvt->hangup = sip_hangup;
1976 tmp->pvt->answer = sip_answer;
1977 tmp->pvt->read = sip_read;
1978 tmp->pvt->write = sip_write;
1979 tmp->pvt->write_video = sip_write;
1980 tmp->pvt->indicate = sip_indicate;
1981 tmp->pvt->transfer = sip_transfer;
1982 tmp->pvt->fixup = sip_fixup;
1983 tmp->pvt->send_digit = sip_senddigit;
1985 tmp->pvt->bridge = ast_rtp_bridge;
1987 tmp->callgroup = i->callgroup;
1988 tmp->pickupgroup = i->pickupgroup;
1989 tmp->cid.cid_pres = i->callingpres;
1990 if (!ast_strlen_zero(i->accountcode))
1991 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
1993 tmp->amaflags = i->amaflags;
1994 if (!ast_strlen_zero(i->language))
1995 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
1996 if (!ast_strlen_zero(i->musicclass))
1997 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
1999 ast_mutex_lock(&usecnt_lock);
2001 ast_mutex_unlock(&usecnt_lock);
2002 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2003 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2004 if (!ast_strlen_zero(i->cid_num))
2005 tmp->cid.cid_num = strdup(i->cid_num);
2006 if (!ast_strlen_zero(i->cid_name))
2007 tmp->cid.cid_name = strdup(i->cid_name);
2008 if (!ast_strlen_zero(i->rdnis))
2009 tmp->cid.cid_rdnis = strdup(i->rdnis);
2010 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2011 tmp->cid.cid_dnid = strdup(i->exten);
2013 if (!ast_strlen_zero(i->domain)) {
2014 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2016 if (!ast_strlen_zero(i->useragent)) {
2017 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2019 if (!ast_strlen_zero(i->callid)) {
2020 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2022 ast_setstate(tmp, state);
2023 if (state != AST_STATE_DOWN) {
2024 if (ast_pbx_start(tmp)) {
2025 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2030 for (v = i->vars ; v ; v = v->next)
2031 pbx_builtin_setvar_helper(tmp,v->name,v->value);
2034 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2038 static struct cfalias {
2042 { "Content-Type", "c" },
2043 { "Content-Encoding", "e" },
2047 { "Content-Length", "l" },
2050 { "Supported", "k" },
2051 { "Refer-To", "r" },
2052 { "Allow-Events", "u" },
2057 /*--- get_sdp_by_line: Reads one line of SIP message body */
2058 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2059 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2060 char* r = line + nameLen + 1;
2061 while (*r && (*r < 33)) ++r;
2068 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2069 but the name wrongly applies _only_ sdp */
2070 static char *get_sdp(struct sip_request *req, char *name) {
2072 int len = strlen(name);
2075 for (x=0; x<req->lines; x++) {
2076 r = get_sdp_by_line(req->line[x], name, len);
2077 if (r[0] != '\0') return r;
2083 static void sdpLineNum_iterator_init(int* iterator) {
2087 static char* get_sdp_iterate(int* iterator,
2088 struct sip_request *req, char *name) {
2089 int len = strlen(name);
2091 while (*iterator < req->lines) {
2092 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2093 if (r[0] != '\0') return r;
2098 static char *__get_header(struct sip_request *req, char *name, int *start)
2101 int len = strlen(name);
2103 if (pedanticsipchecking) {
2104 /* Technically you can place arbitrary whitespace both before and after the ':' in
2105 a header, although RFC3261 clearly says you shouldn't before, and place just
2106 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2107 a good idea to say you can do it, and if you can do it, why in the hell would
2108 you say you shouldn't. */
2109 for (x=*start;x<req->headers;x++) {
2110 if (!strncasecmp(req->header[x], name, len)) {
2111 r = req->header[x] + len;
2112 while(*r && (*r < 33))
2116 while(*r && (*r < 33))
2124 /* We probably shouldn't even bother counting whitespace afterwards but
2125 I guess for backwards compatibility we will */
2126 for (x=*start;x<req->headers;x++) {
2127 if (!strncasecmp(req->header[x], name, len) &&
2128 (req->header[x][len] == ':')) {
2129 r = req->header[x] + len + 1;
2130 while(*r && (*r < 33))
2138 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2139 if (!strcasecmp(aliases[x].fullname, name))
2140 return __get_header(req, aliases[x].shortname, start);
2142 /* Don't return NULL, so get_header is always a valid pointer */
2146 /*--- get_header: Get header from SIP request ---*/
2147 static char *get_header(struct sip_request *req, char *name)
2150 return __get_header(req, name, &start);
2153 /*--- sip_rtp_read: Read RTP from network ---*/
2154 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2156 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2157 struct ast_frame *f;
2158 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2161 f = ast_rtp_read(p->rtp); /* RTP Audio */
2164 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2167 f = ast_rtp_read(p->vrtp); /* RTP Video */
2170 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2175 /* Don't send RFC2833 if we're not supposed to */
2176 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2179 /* We already hold the channel lock */
2180 if (f->frametype == AST_FRAME_VOICE) {
2181 if (f->subclass != p->owner->nativeformats) {
2182 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2183 p->owner->nativeformats = f->subclass;
2184 ast_set_read_format(p->owner, p->owner->readformat);
2185 ast_set_write_format(p->owner, p->owner->writeformat);
2187 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2188 f = ast_dsp_process(p->owner,p->vad,f);
2189 if (f && (f->frametype == AST_FRAME_DTMF))
2190 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2197 /*--- sip_read: Read SIP RTP from channel */
2198 static struct ast_frame *sip_read(struct ast_channel *ast)
2200 struct ast_frame *fr;
2201 struct sip_pvt *p = ast->pvt->pvt;
2202 ast_mutex_lock(&p->lock);
2203 fr = sip_rtp_read(ast, p);
2204 time(&p->lastrtprx);
2205 ast_mutex_unlock(&p->lock);
2209 /*--- build_callid: Build SIP CALLID header ---*/
2210 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2215 char iabuf[INET_ADDRSTRLEN];
2218 res = snprintf(callid, len, "%08x", val);
2222 if (!ast_strlen_zero(fromdomain))
2223 snprintf(callid, len, "@%s", fromdomain);
2225 /* It's not important that we really use our right IP here... */
2226 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2229 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2230 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2233 char iabuf[INET_ADDRSTRLEN];
2235 p = malloc(sizeof(struct sip_pvt));
2238 /* Keep track of stuff */
2239 memset(p, 0, sizeof(struct sip_pvt));
2240 ast_mutex_init(&p->lock);
2250 memcpy(&p->sa, sin, sizeof(p->sa));
2251 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2252 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2254 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2256 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2258 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2262 /* Start with 101 instead of 1 */
2265 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2266 ast_mutex_destroy(&p->lock);
2268 ast_destroy_realtime(p->vars);
2274 ast_rtp_settos(p->rtp, tos);
2276 ast_rtp_settos(p->vrtp, tos);
2277 if (useglobal_nat && sin) {
2278 /* Setup NAT structure according to global settings if we have an address */
2279 p->nat = global_nat;
2280 memcpy(&p->recv, sin, sizeof(p->recv));
2281 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2283 ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2286 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2287 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2288 if (p->nat != SIP_NAT_NEVER)
2289 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x;rport", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
2291 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
2293 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2295 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2296 /* Assume reinvite OK and via INVITE */
2297 p->canreinvite = global_canreinvite;
2298 /* Assign default music on hold class */
2299 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2300 p->dtmfmode = global_dtmfmode;
2301 p->promiscredir = global_promiscredir;
2302 p->trustrpid = global_trustrpid;
2303 p->progressinband = global_progressinband;
2305 p->ospauth = global_ospauth;
2307 p->rtptimeout = global_rtptimeout;
2308 p->rtpholdtimeout = global_rtpholdtimeout;
2309 p->capability = global_capability;
2310 if (p->dtmfmode & SIP_DTMF_RFC2833)
2311 p->noncodeccapability |= AST_RTP_DTMF;
2312 strncpy(p->context, default_context, sizeof(p->context) - 1);
2314 ast_mutex_lock(&iflock);
2317 ast_mutex_unlock(&iflock);
2319 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2323 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2324 /* Called by handle_request ,sipsock_read */
2325 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2330 char iabuf[INET_ADDRSTRLEN];
2334 callid = get_header(req, "Call-ID");
2336 if (pedanticsipchecking) {
2337 /* In principle Call-ID's uniquely identify a call, however some vendors
2338 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2339 tags in order to simplify billing. The RFC does state that we have to
2340 compare tags in addition to the call-id, but this generate substantially
2341 more overhead which is totally unnecessary for the vast majority of sane
2342 SIP implementations, and thus Asterisk does not enable this behavior
2343 by default. Short version: You'll need this option to support conferencing
2345 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2347 c = strchr(tmp, ' ');
2350 if (!strcasecmp(cmd, "SIP/2.0"))
2351 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2353 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2354 tag = strstr(tmp, "tag=");
2357 c = strchr(tag, ';');
2364 if (ast_strlen_zero(callid)) {
2365 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2368 ast_mutex_lock(&iflock);
2371 if (!strcmp(p->callid, callid) &&
2372 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2373 /* Found the call */
2374 ast_mutex_lock(&p->lock);
2375 ast_mutex_unlock(&iflock);
2380 ast_mutex_unlock(&iflock);
2381 p = sip_alloc(callid, sin, 1);
2383 ast_mutex_lock(&p->lock);
2387 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2388 static int sip_register(char *value, int lineno)
2390 struct sip_registry *reg;
2391 char copy[256] = "";
2392 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2399 strncpy(copy, value, sizeof(copy)-1);
2402 hostname = strrchr(stringp, '@');
2407 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2408 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2412 username = strsep(&stringp, ":");
2414 secret = strsep(&stringp, ":");
2416 authuser = strsep(&stringp, ":");
2419 hostname = strsep(&stringp, "/");
2421 contact = strsep(&stringp, "/");
2422 if (!contact || ast_strlen_zero(contact))
2425 hostname = strsep(&stringp, ":");
2426 porta = strsep(&stringp, ":");
2428 if (porta && !atoi(porta)) {
2429 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2432 reg = malloc(sizeof(struct sip_registry));
2434 memset(reg, 0, sizeof(struct sip_registry));
2435 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2437 strncpy(reg->username, username, sizeof(reg->username)-1);
2439 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2441 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2443 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2446 reg->refresh = default_expiry;
2447 reg->portno = porta ? atoi(porta) : 0;
2448 reg->callid_valid = 0;
2450 ast_mutex_lock(®l.lock);
2451 reg->next = regl.registrations;
2452 regl.registrations = reg;
2453 ast_mutex_unlock(®l.lock);
2455 ast_log(LOG_ERROR, "Out of memory\n");
2461 /*--- lws2sws: Parse multiline SIP headers into one header */
2462 /* This is enabled if pedanticsipchecking is enabled */
2463 static int lws2sws(char *msgbuf, int len)
2469 /* Eliminate all CRs */
2470 if (msgbuf[h] == '\r') {
2474 /* Check for end-of-line */
2475 if (msgbuf[h] == '\n') {
2476 /* Check for end-of-message */
2479 /* Check for a continuation line */
2480 if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') {
2481 /* Merge continuation line */
2485 /* Propagate LF and start new line */
2486 msgbuf[t++] = msgbuf[h++];
2490 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2495 msgbuf[t++] = msgbuf[h++];
2499 msgbuf[t++] = msgbuf[h++];
2507 /*--- parse: Parse a SIP message ----*/
2508 static void parse(struct sip_request *req)
2510 /* Divide fields by NULL's */
2515 /* First header starts immediately */
2519 /* We've got a new header */
2523 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2525 if (ast_strlen_zero(req->header[f])) {
2526 /* Line by itself means we're now in content */
2530 if (f >= SIP_MAX_HEADERS - 1) {
2531 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2534 req->header[f] = c + 1;
2535 } else if (*c == '\r') {
2536 /* Ignore but eliminate \r's */
2541 /* Check for last header */
2542 if (!ast_strlen_zero(req->header[f]))
2545 /* Now we process any mime content */
2550 /* We've got a new line */
2553 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2555 if (f >= SIP_MAX_LINES - 1) {
2556 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2559 req->line[f] = c + 1;
2560 } else if (*c == '\r') {
2561 /* Ignore and eliminate \r's */
2566 /* Check for last line */
2567 if (!ast_strlen_zero(req->line[f]))
2571 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2574 /*--- process_sdp: Process SIP SDP ---*/
2575 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2581 char iabuf[INET_ADDRSTRLEN];
2585 int peercapability, peernoncodeccapability;
2586 int vpeercapability=0, vpeernoncodeccapability=0;
2587 struct sockaddr_in sin;
2590 struct ast_hostent ahp;
2595 int debug=sip_debug_test_pvt(p);
2597 /* Update our last rtprx when we receive an SDP, too */
2598 time(&p->lastrtprx);
2600 /* Get codec and RTP info from SDP */
2601 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2602 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2605 m = get_sdp(req, "m");
2606 c = get_sdp(req, "c");
2607 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2608 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2611 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2612 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2615 /* XXX This could block for a long time, and block the main thread! XXX */
2616 hp = ast_gethostbyname(host, &ahp);
2618 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2621 sdpLineNum_iterator_init(&iterator);
2623 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2624 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2625 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2627 /* Scan through the RTP payload types specified in a "m=" line: */
2628 ast_rtp_pt_clear(p->rtp);
2630 while(!ast_strlen_zero(codecs)) {
2631 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2632 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2636 ast_verbose("Found RTP audio format %d\n", codec);
2637 ast_rtp_set_m_type(p->rtp, codec);
2639 /* Skip over any whitespace */
2640 while(*codecs && (*codecs < 33)) codecs++;
2644 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2646 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2649 /* Scan through the RTP payload types specified in a "m=" line: */
2651 while(!ast_strlen_zero(codecs)) {
2652 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2653 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2657 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2658 ast_rtp_set_m_type(p->vrtp, codec);
2660 /* Skip over any whitespace */
2661 while(*codecs && (*codecs < 33)) codecs++;
2666 /* RTP addresses and ports for audio and video */
2667 sin.sin_family = AF_INET;
2668 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2670 /* Setup audio port number */
2671 sin.sin_port = htons(portno);
2672 if (p->rtp && sin.sin_port) {
2673 ast_rtp_set_peer(p->rtp, &sin);
2675 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2676 ast_log(LOG_DEBUG,"Peer audio RTP is at port %s:%d\n",ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2679 /* Setup video port number */
2680 sin.sin_port = htons(vportno);
2681 if (p->vrtp && sin.sin_port) {
2682 ast_rtp_set_peer(p->vrtp, &sin);
2684 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2685 ast_log(LOG_DEBUG,"Peer video RTP is at port %s:%d\n",ast_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2689 /* Next, scan through each "a=rtpmap:" line, noting each
2690 * specified RTP payload type (with corresponding MIME subtype):
2692 sdpLineNum_iterator_init(&iterator);
2693 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2694 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2695 if (!strcasecmp(a, "sendonly")) {
2699 if (!strcasecmp(a, "sendrecv")) {
2702 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2704 ast_verbose("Found description format %s\n", mimeSubtype);
2705 /* Note: should really look at the 'freq' and '#chans' params too */
2706 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2708 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2711 /* Now gather all of the codecs that were asked for: */
2712 ast_rtp_get_current_formats(p->rtp,
2713 &peercapability, &peernoncodeccapability);
2715 ast_rtp_get_current_formats(p->vrtp,
2716 &vpeercapability, &vpeernoncodeccapability);
2717 p->jointcapability = p->capability & (peercapability | vpeercapability);
2718 p->peercapability = (peercapability | vpeercapability);
2719 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2722 /* shame on whoever coded this.... */
2723 const unsigned slen=512;
2724 char s1[slen], s2[slen], s3[slen], s4[slen];
2726 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2727 ast_getformatname_multiple(s1, slen, p->capability),
2728 ast_getformatname_multiple(s2, slen, peercapability),
2729 ast_getformatname_multiple(s3, slen, vpeercapability),
2730 ast_getformatname_multiple(s4, slen, p->jointcapability));
2732 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2733 ast_getformatname_multiple(s1, slen, noncodeccapability),
2734 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2735 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2737 if (!p->jointcapability) {
2738 ast_log(LOG_WARNING, "No compatible codecs!\n");
2742 if (!(p->owner->nativeformats & p->jointcapability)) {
2743 const unsigned slen=512;
2744 char s1[slen], s2[slen];
2745 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2746 ast_getformatname_multiple(s1, slen, p->jointcapability),
2747 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2748 p->owner->nativeformats = ast_codec_choose(&p->prefs, p->jointcapability, 1);
2749 ast_set_read_format(p->owner, p->owner->readformat);
2750 ast_set_write_format(p->owner, p->owner->writeformat);
2752 if (ast_bridged_channel(p->owner)) {
2753 /* Turn on/off music on hold if we are holding/unholding */
2754 if (sin.sin_addr.s_addr && !sendonly) {
2755 ast_moh_stop(ast_bridged_channel(p->owner));
2757 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2765 /*--- add_header: Add header to SIP message */
2766 static int add_header(struct sip_request *req, char *var, char *value)
2769 char *shortname = "";
2770 if (req->len >= sizeof(req->data) - 4) {
2771 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2775 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2779 req->header[req->headers] = req->data + req->len;
2780 if (compactheaders) {
2781 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2782 if (!strcasecmp(aliases[x].fullname, var))
2783 shortname = aliases[x].shortname;
2785 if(!ast_strlen_zero(shortname)) {
2786 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", shortname, value);
2788 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2790 req->len += strlen(req->header[req->headers]);
2791 if (req->headers < SIP_MAX_HEADERS)
2794 ast_log(LOG_WARNING, "Out of header space\n");
2800 /*--- add_blank_header: Add blank header to SIP message */
2801 static int add_blank_header(struct sip_request *req)
2803 if (req->len >= sizeof(req->data) - 4) {
2804 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2808 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2811 req->header[req->headers] = req->data + req->len;
2812 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2813 req->len += strlen(req->header[req->headers]);
2814 if (req->headers < SIP_MAX_HEADERS)
2817 ast_log(LOG_WARNING, "Out of header space\n");
2823 /*--- add_line: Add content (not header) to SIP message */
2824 static int add_line(struct sip_request *req, char *line)
2826 if (req->len >= sizeof(req->data) - 4) {
2827 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2831 /* Add extra empty return */
2832 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2833 req->len += strlen(req->data + req->len);
2835 req->line[req->lines] = req->data + req->len;
2836 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2837 req->len += strlen(req->line[req->lines]);
2838 if (req->lines < SIP_MAX_LINES)
2841 ast_log(LOG_WARNING, "Out of line space\n");
2847 /*--- copy_header: Copy one header field from one request to another */
2848 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2851 tmp = get_header(orig, field);
2852 if (!ast_strlen_zero(tmp)) {
2853 /* Add what we're responding to */
2854 return add_header(req, field, tmp);
2856 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2860 /*--- copy_all_header: Copy all headers from one request to another ---*/
2861 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2867 tmp = __get_header(orig, field, &start);
2868 if (!ast_strlen_zero(tmp)) {
2869 /* Add what we're responding to */
2870 add_header(req, field, tmp);
2875 return copied ? 0 : -1;
2878 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2879 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2881 char tmp[256]="", *oh, *end;
2885 char iabuf[INET_ADDRSTRLEN];
2887 oh = __get_header(orig, field, &start);
2888 if (!ast_strlen_zero(oh)) {
2890 strncpy(tmp, oh, sizeof(tmp) - 1);
2891 oh = strstr(tmp, ";rport");
2893 end = strchr(oh + 1, ';');
2895 memmove(oh, end, strlen(end) + 1);
2899 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2900 /* Whoo hoo! Now we can indicate port address translation too! Just
2901 another RFC (RFC3581). I'll leave the original comments in for
2903 snprintf(new, sizeof(new), "%s;received=%s;rport=%d", tmp, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), ntohs(p->recv.sin_port));
2904 add_header(req, field, new);
2906 /* Add what we're responding to */
2907 add_header(req, field, tmp);
2914 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2920 /*--- add_route: Add route header into request per learned route ---*/
2921 static void add_route(struct sip_request *req, struct sip_route *route)
2924 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2930 n = strlen(route->hop);
2931 if ((n+3)>rem) break;
2937 strncpy(p, route->hop, rem); p += n;
2940 route = route->next;
2943 add_header(req, "Route", r);
2946 /*--- set_destination: Set destination from SIP URI ---*/
2947 static void set_destination(struct sip_pvt *p, char *uri)
2949 char *h, *maddr, hostname[256] = "";
2950 char iabuf[INET_ADDRSTRLEN];
2953 struct ast_hostent ahp;
2954 int debug=sip_debug_test_pvt(p);
2956 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2957 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2960 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2962 /* Find and parse hostname */
2963 h = strchr(uri, '@');
2968 if (strncmp(h, "sip:", 4) == 0)
2970 else if (strncmp(h, "sips:", 5) == 0)
2973 hn = strcspn(h, ":;>");
2974 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2975 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
2978 /* Is "port" present? if not default to 5060 */
2982 port = strtol(h, &h, 10);
2987 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
2988 maddr = strstr(h, "maddr=");
2991 hn = strspn(maddr, "0123456789.");
2992 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
2993 strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */
2996 hp = ast_gethostbyname(hostname, &ahp);
2998 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3001 p->sa.sin_family = AF_INET;
3002 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3003 p->sa.sin_port = htons(port);
3005 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3008 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3009 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3011 /* Initialize a response */
3012 if (req->headers || req->len) {
3013 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3016 req->header[req->headers] = req->data + req->len;
3017 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3018 req->len += strlen(req->header[req->headers]);
3019 if (req->headers < SIP_MAX_HEADERS)
3022 ast_log(LOG_WARNING, "Out of header space\n");
3026 /*--- init_req: Initialize SIP request ---*/
3027 static int init_req(struct sip_request *req, char *resp, char *recip)
3029 /* Initialize a response */
3030 if (req->headers || req->len) {
3031 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3034 req->header[req->headers] = req->data + req->len;
3035 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3036 req->len += strlen(req->header[req->headers]);
3037 if (req->headers < SIP_MAX_HEADERS)
3040 ast_log(LOG_WARNING, "Out of header space\n");
3045 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3047 char newto[256] = "", *ot;
3049 memset(resp, 0, sizeof(*resp));
3050 init_resp(resp, msg, req);
3051 copy_via_headers(p, resp, req, "Via");
3052 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
3053 copy_header(resp, req, "From");
3054 ot = get_header(req, "To");
3055 if (!strstr(ot, "tag=")) {
3056 /* Add the proper tag if we don't have it already. If they have specified
3057 their tag, use it. Otherwise, use our own tag */
3058 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
3059 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3060 else if (p->tag && !p->outgoing)
3061 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3063 strncpy(newto, ot, sizeof(newto) - 1);
3064 newto[sizeof(newto) - 1] = '\0';
3068 add_header(resp, "To", ot);
3069 copy_header(resp, req, "Call-ID");
3070 copy_header(resp, req, "CSeq");
3071 add_header(resp, "User-Agent", default_useragent);
3072 add_header(resp, "Allow", ALLOWED_METHODS);
3074 /* For registration responses, we also need expiry and
3078 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
3079 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
3080 add_header(resp, "Expires", tmp);
3081 add_header(resp, "Contact", contact);
3083 add_header(resp, "Contact", p->our_contact);
3088 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
3090 struct sip_request *orig = &p->initreq;
3091 char stripped[80] ="";
3094 char iabuf[INET_ADDRSTRLEN];
3098 memset(req, 0, sizeof(struct sip_request));
3100 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
3108 p->branch ^= rand();
3109 if (p->nat & SIP_NAT_RFC3581)
3110 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x;rport", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
3111 else /* Some implementations (e.g. Uniden UIP200) can't handle rport being in the message!! */
3112 snprintf(p->via, sizeof(p->via), "SIP/2.0/UDP %s:%d;branch=z9hG4bK%08x", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ourport, p->branch);
3114 if (!strcasecmp(msg, "CANCEL") || !strcasecmp(msg, "ACK")) {
3115 /* MUST use original URI */
3116 c = p->initreq.rlPart2;
3117 } else if (!ast_strlen_zero(p->uri)) {
3121 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
3123 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
3125 c = strchr(stripped, '<');
3137 init_req(req, msg, c);
3139 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
3141 add_header(req, "Via", p->via);
3143 set_destination(p, p->route->hop);
3144 add_route(req, p->route->next);
3147 ot = get_header(orig, "To");
3148 of = get_header(orig, "From");
3150 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
3151 as our original request, including tag (or presumably lack thereof) */
3152 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
3153 /* Add the proper tag if we don't have it already. If they have specified
3154 their tag, use it. Otherwise, use our own tag */
3155 if (p->outgoing && !ast_strlen_zero(p->theirtag))
3156 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3157 else if (!p->outgoing)
3158 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3160 snprintf(newto, sizeof(newto), "%s", ot);
3165 add_header(req, "From", of);
3166 add_header(req, "To", ot);
3168 add_header(req, "From", ot);
3169 add_header(req, "To", of);
3171 add_header(req, "Contact", p->our_contact);
3172 copy_header(req, orig, "Call-ID");
3173 add_header(req, "CSeq", tmp);
3175 add_header(req, "User-Agent", default_useragent);
3179 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3181 struct sip_request resp;
3183 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3184 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3187 respprep(&resp, p, msg, req);
3188 add_header(&resp, "Content-Length", "0");
3189 add_blank_header(&resp);
3190 return send_response(p, &resp, reliable, seqno);
3193 /*--- transmit_response: Transmit response, no retransmits */
3194 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
3196 return __transmit_response(p, msg, req, 0);
3199 /*--- transmit_response: Transmit response, Make sure you get a reply */
3200 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
3202 return __transmit_response(p, msg, req, fatal ? 2 : 1);
3205 /*--- append_date: Append date to SIP message ---*/
3206 static void append_date(struct sip_request *req)
3213 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
3214 add_header(req, "Date", tmpdat);
3217 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
3218 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
3220 struct sip_request resp;
3221 respprep(&resp, p, msg, req);
3223 add_header(&resp, "Content-Length", "0");
3224 add_blank_header(&resp);
3225 return send_response(p, &resp, 0, 0);
3228 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
3229 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3231 struct sip_request resp;
3232 respprep(&resp, p, msg, req);
3233 add_header(&resp, "Accept", "application/sdp");
3234 add_header(&resp, "Content-Length", "0");
3235 add_blank_header(&resp);
3236 return send_response(p, &resp, reliable, 0);
3239 /* transmit_response_with_auth: Respond with authorization request */
3240 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
3242 struct sip_request resp;
3245 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3246 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3249 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
3250 respprep(&resp, p, msg, req);
3251 add_header(&resp, header, tmp);
3252 add_header(&resp, "Content-Length", "0");
3253 add_blank_header(&resp);
3254 return send_response(p, &resp, reliable, seqno);
3257 /*--- add_text: Add text body to SIP message ---*/
3258 static int add_text(struct sip_request *req, char *text)
3260 /* XXX Convert \n's to \r\n's XXX */
3261 int len = strlen(text);
3263 snprintf(clen, sizeof(clen), "%d", len);
3264 add_header(req, "Content-Type", "text/plain");
3265 add_header(req, "Content-Length", clen);
3266 add_line(req, text);
3270 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3271 /* Always adds default duration 250 ms, regardless of what came in over the line */
3272 static int add_digit(struct sip_request *req, char digit)
3277 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3279 snprintf(clen, sizeof(clen), "%d", len);
3280 add_header(req, "Content-Type", "application/dtmf-relay");
3281 add_header(req, "Content-Length", clen);
3286 /*--- add_sdp: Add Session Description Protocol message ---*/
3287 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3292 int alreadysent = 0;
3294 struct sockaddr_in sin;
3295 struct sockaddr_in vsin;
3305 char iabuf[INET_ADDRSTRLEN];
3307 int capability = 0 ;
3308 struct sockaddr_in dest;
3309 struct sockaddr_in vdest = { 0, };
3312 debug = sip_debug_test_pvt(p);
3314 /* XXX We break with the "recommendation" and send our IP, in order that our
3315 peer doesn't have to ast_gethostbyname() us XXX */
3318 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3321 capability = p->capability;
3323 if (!p->sessionid) {
3324 p->sessionid = getpid();
3325 p->sessionversion = p->sessionid;
3327 p->sessionversion++;
3328 ast_rtp_get_us(p->rtp, &sin);
3330 ast_rtp_get_us(p->vrtp, &vsin);
3332 if (p->redirip.sin_addr.s_addr) {
3333 dest.sin_port = p->redirip.sin_port;
3334 dest.sin_addr = p->redirip.sin_addr;
3336 capability = p->redircodecs;
3338 dest.sin_addr = p->ourip;
3339 dest.sin_port = sin.sin_port;
3342 /* Determine video destination */
3344 if (p->vredirip.sin_addr.s_addr) {
3345 vdest.sin_port = p->vredirip.sin_port;
3346 vdest.sin_addr = p->vredirip.sin_addr;
3348 vdest.sin_addr = p->ourip;
3349 vdest.sin_port = vsin.sin_port;
3353 ast_verbose("We're at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(sin.sin_port));
3355 ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
3357 snprintf(v, sizeof(v), "v=0\r\n");
3358 snprintf(o, sizeof(o), "o=root %d %d IN IP4 %s\r\n", p->sessionid, p->sessionversion, ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3359 snprintf(s, sizeof(s), "s=session\r\n");
3360 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3361 snprintf(t, sizeof(t), "t=0 0\r\n");
3362 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
3363 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
3364 /* Prefer the codec we were requested to use, first, no matter what */
3365 if (capability & p->prefcodec) {
3367 ast_verbose("Answering/Requesting with root capability %d\n", p->prefcodec);
3368 codec = ast_rtp_lookup_code(p->rtp, 1, p->prefcodec);
3370 snprintf(costr, sizeof(costr), " %d", codec);
3371 if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
3372 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3373 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3374 strncpy(a, costr, sizeof(a) - 1);
3376 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3377 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3378 strncpy(a2, costr, sizeof(a2) - 1);
3381 alreadysent |= p->prefcodec;
3383 /* Start by sending our preferred codecs */
3384 for (x = 0 ; x < 32 ; x++) {
3385 if(!(pref_codec = ast_codec_pref_index(&p->prefs,x)))
3387 if ((capability & pref_codec) && !(alreadysent & pref_codec)) {
3389 ast_verbose("Answering with preferred capability 0x%x (%s)\n", pref_codec, ast_getformatname(pref_codec));
3390 codec = ast_rtp_lookup_code(p->rtp, 1, pref_codec);
3392 snprintf(costr, sizeof(costr), " %d", codec);
3393 if (pref_codec <= AST_FORMAT_MAX_AUDIO) {
3394 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3395 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, pref_codec));
3396 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3398 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3399 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, pref_codec));
3400 strncat(a2, costr, sizeof(a2) - strlen(a) - 1);
3404 alreadysent |= pref_codec;
3407 /* Now send any other common codecs, and non-codec formats: */
3408 for (x = 1; x <= ((videosupport && p->vrtp) ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
3409 if ((capability & x) && !(alreadysent & x)) {
3411 ast_verbose("Answering with capability 0x%x (%s)\n", x, ast_getformatname(x));
3412 codec = ast_rtp_lookup_code(p->rtp, 1, x);
3414 snprintf(costr, sizeof(costr), " %d", codec);
3415 if (x <= AST_FORMAT_MAX_AUDIO) {
3416 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3417 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3418 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3420 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3421 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3422 strncat(a2, costr, sizeof(a2) - strlen(a2) - 1);
3427 for (x = 1; x <= AST_RTP_MAX; x <<= 1) {
3428 if (p->noncodeccapability & x) {
3430 ast_verbose("Answering with non-codec capability 0x%x (%s)\n", x, ast_rtp_lookup_mime_subtype(0, x));
3431 codec = ast_rtp_lookup_code(p->rtp, 0, x);
3433 snprintf(costr, sizeof(costr), " %d", codec);
3434 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3435 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(0, x));
3436 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3437 if (x == AST_RTP_DTMF) {
3438 /* Indicate we support DTMF... Not sure about 16, but MSN supports it so dang it, we will too... */
3439 snprintf(costr, sizeof costr,