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>
46 #include <asterisk/astosp.h>
48 #include <sys/socket.h>
49 #include <sys/ioctl.h>
56 #include <arpa/inet.h>
58 #include <sys/signal.h>
59 #include <netinet/in_systm.h>
60 #include <netinet/ip.h>
62 #ifndef DEFAULT_USERAGENT
63 #define DEFAULT_USERAGENT "Asterisk PBX"
66 #define VIDEO_CODEC_MASK 0x1fc0000 /* Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
68 #define IPTOS_MINCOST 0x02
71 /* #define VOCAL_DATA_HACK */
74 #define DEFAULT_DEFAULT_EXPIRY 120
75 #define DEFAULT_MAX_EXPIRY 3600
77 /* guard limit must be larger than guard secs */
78 /* guard min must be < 1000, and should be >= 250 */
79 #define EXPIRY_GUARD_SECS 15 /* How long before expiry do we reregister */
80 #define EXPIRY_GUARD_LIMIT 30 /* Below here, we use EXPIRY_GUARD_PCT instead of
82 #define EXPIRY_GUARD_MIN 500 /* This is the minimum guard time applied. If
83 GUARD_PCT turns out to be lower than this, it
84 will use this time instead.
85 This is in milliseconds. */
86 #define EXPIRY_GUARD_PCT 0.20 /* Percentage of expires timeout to use when
87 below EXPIRY_GUARD_LIMIT */
89 static int max_expiry = DEFAULT_MAX_EXPIRY;
90 static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
93 #define MAX(a,b) ((a) > (b) ? (a) : (b))
96 #define CALLERID_UNKNOWN "Unknown"
98 /* --- Choices for DTMF support in SIP channel */
99 #define SIP_DTMF_RFC2833 (1 << 0) /* RTP DTMF */
100 #define SIP_DTMF_INBAND (1 << 1) /* Inband audio, only for ULAW/ALAW */
101 #define SIP_DTMF_INFO (1 << 2) /* SIP Info messages */
104 #define DEFAULT_MAXMS 2000 /* Must be faster than 2 seconds by default */
105 #define DEFAULT_FREQ_OK 60 * 1000 /* How often to check for the host to be up */
106 #define DEFAULT_FREQ_NOTOK 10 * 1000 /* How often to check, if the host is down... */
108 #define DEFAULT_RETRANS 1000 /* How frequently to retransmit */
109 #define MAX_RETRANS 5 /* Try only 5 times for retransmissions */
112 #define DEBUG_READ 0 /* Recieved data */
113 #define DEBUG_SEND 1 /* Transmit data */
115 static char *desc = "Session Initiation Protocol (SIP)";
116 static char *type = "SIP";
117 static char *tdesc = "Session Initiation Protocol (SIP)";
118 static char *config = "sip.conf";
120 #define DEFAULT_SIP_PORT 5060 /* From RFC 2543 */
121 #define SIP_MAX_PACKET 4096 /* Also from RFC 2543, should sub headers tho */
123 #define ALLOWED_METHODS "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER"
125 static char default_useragent[AST_MAX_EXTENSION] = DEFAULT_USERAGENT;
127 #define DEFAULT_CONTEXT "default"
128 static char default_context[AST_MAX_EXTENSION] = DEFAULT_CONTEXT;
130 static char default_language[MAX_LANGUAGE] = "";
132 #define DEFAULT_CALLERID "asterisk"
133 static char default_callerid[AST_MAX_EXTENSION] = DEFAULT_CALLERID;
135 static char default_fromdomain[AST_MAX_EXTENSION] = "";
137 #define DEFAULT_NOTIFYMIME "application/simple-message-summary"
138 static char default_notifymime[AST_MAX_EXTENSION] = DEFAULT_NOTIFYMIME;
140 static int srvlookup = 0; /* SRV Lookup on or off. Default is off, RFC behavior is on */
142 static int pedanticsipchecking = 0; /* Extra checking ? Default off */
144 static int autocreatepeer = 0; /* Auto creation of peers at registration? Default off. */
146 static int relaxdtmf = 0;
148 static int global_rtptimeout = 0;
150 static int global_rtpholdtimeout = 0;
152 static int global_trustrpid = 0; /* Trust RPID headers? Default off. */
154 static int global_progressinband = 0;
157 static int global_ospauth = 0; /* OSP = Open Settlement Protocol */
160 #define DEFAULT_MWITIME 10
161 static int global_mwitime = DEFAULT_MWITIME; /* Time between MWI checks for peers */
163 static int usecnt =0;
164 AST_MUTEX_DEFINE_STATIC(usecnt_lock);
166 /* Protect the interface list (of sip_pvt's) */
167 AST_MUTEX_DEFINE_STATIC(iflock);
169 /* Protect the monitoring thread, so only one process can kill or start it, and not
170 when it's doing something critical. */
171 AST_MUTEX_DEFINE_STATIC(netlock);
173 AST_MUTEX_DEFINE_STATIC(monlock);
175 /* This is the thread for the monitor which checks for input on the channels
176 which are not currently in use. */
177 static pthread_t monitor_thread = AST_PTHREADT_NULL;
179 static int restart_monitor(void);
181 /* Codecs that we support by default: */
182 static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263;
183 static int noncodeccapability = AST_RTP_DTMF;
185 static char ourhost[256];
186 static struct in_addr __ourip;
189 static int sipdebug = 0;
190 static struct sockaddr_in debugaddr;
194 static int videosupport = 0;
196 static int global_dtmfmode = SIP_DTMF_RFC2833; /* DTMF mode default */
197 static int recordhistory = 0;
198 static int global_promiscredir; /* Support of 302 REDIR - Default off */
200 static char global_musicclass[MAX_LANGUAGE] = ""; /* Global music on hold class */
201 static char global_realm[AST_MAX_EXTENSION] = "asterisk"; /* Default realm */
202 static char regcontext[AST_MAX_EXTENSION] = ""; /* Context for auto-extensions */
205 #define DEFAULT_EXPIRY 900
206 static int expiry = DEFAULT_EXPIRY;
208 static struct sched_context *sched;
209 static struct io_context *io;
210 /* The private structures of the sip channels are linked for
211 selecting outgoing channels */
213 #define SIP_MAX_HEADERS 64
214 #define SIP_MAX_LINES 64
218 #define DEC_OUT_USE 2
219 #define INC_OUT_USE 3
221 static struct sip_codec_pref {
223 struct sip_codec_pref *next;
226 /* sip_request: The data grabbed from the UDP socket */
228 char *rlPart1; /* SIP Method Name or "SIP/2.0" protocol version */
229 char *rlPart2; /* The Request URI or Response Status */
230 int len; /* Length */
231 int headers; /* # of SIP Headers */
232 char *header[SIP_MAX_HEADERS];
233 int lines; /* SDP Content */
234 char *line[SIP_MAX_LINES];
235 char data[SIP_MAX_PACKET];
241 struct sip_route *next;
247 struct sip_history *next;
250 /* sip_pvt: PVT structures are used for each SIP conversation, ie. a call */
251 static struct sip_pvt {
252 ast_mutex_t lock; /* Channel private lock */
253 char callid[80]; /* Global CallID */
254 char randdata[80]; /* Random data */
255 unsigned int ocseq; /* Current outgoing seqno */
256 unsigned int icseq; /* Current incoming seqno */
257 unsigned int callgroup; /* Call group */
258 unsigned int pickupgroup; /* Pickup group */
259 int lastinvite; /* Last Cseq of invite */
260 int alreadygone; /* Whether or not we've already been destroyed by or peer */
261 int needdestroy; /* if we need to be destroyed */
262 int capability; /* Special capability (codec) */
263 int novideo; /* Didn't get video in invite, don't offer */
264 int jointcapability; /* Supported capability at both ends (codecs ) */
265 int peercapability; /* Supported peer capability */
266 int prefcodec; /* Preferred codec (outbound only) */
267 int noncodeccapability;
268 int callingpres; /* Calling presentation */
269 int outgoing; /* Outgoing or incoming call? */
270 int authtries; /* Times we've tried to authenticate */
271 int insecure; /* Don't check source port/ip */
272 int expiry; /* How long we take to expire */
273 int branch; /* One random number */
274 int canreinvite; /* Do we support reinvite */
275 int ringing; /* Have sent 180 ringing */
276 int progress; /* Have sent 183 message progress */
277 int useclientcode; /* Trust X-ClientCode info message */
278 int tag; /* Another random number */
279 int nat; /* Whether to try to support NAT */
280 int sessionid; /* SDP Session ID */
281 int sessionversion; /* SDP Session Version */
282 struct sockaddr_in sa; /* Our peer */
283 struct sockaddr_in redirip; /* Where our RTP should be going if not to us */
284 struct sockaddr_in vredirip; /* Where our Video RTP should be going if not to us */
285 int redircodecs; /* Redirect codecs */
286 struct sockaddr_in recv; /* Received as */
287 struct in_addr ourip; /* Our IP */
288 struct ast_channel *owner; /* Who owns us */
289 char exten[AST_MAX_EXTENSION]; /* Extension where to start */
290 char refer_to[AST_MAX_EXTENSION]; /* Place to store REFER-TO extension */
291 char referred_by[AST_MAX_EXTENSION]; /* Place to store REFERRED-BY extension */
292 char refer_contact[AST_MAX_EXTENSION]; /* Place to store Contact info from a REFER extension */
293 struct sip_pvt *refer_call; /* Call we are referring */
294 struct sip_route *route; /* Head of linked list of routing steps (fm Record-Route) */
295 int route_persistant; /* Is this the "real" route? */
296 char from[256]; /* The From: header */
297 char useragent[256]; /* User agent in SIP request */
298 char context[AST_MAX_EXTENSION]; /* Context for this call */
299 char fromdomain[AST_MAX_EXTENSION]; /* Domain to show in the from field */
300 char fromuser[AST_MAX_EXTENSION]; /* Domain to show in the user field */
301 char tohost[AST_MAX_EXTENSION]; /* Host we should put in the "to" field */
302 char language[MAX_LANGUAGE]; /* Default language for this call */
303 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
304 char rdnis[256]; /* Referring DNIS */
305 char theirtag[256]; /* Their tag */
308 char authname[256]; /* Who we use for authentication */
309 char uri[256]; /* Original requested URI */
310 char peersecret[256]; /* Password */
311 char peermd5secret[256];
312 char cid_num[256]; /* Caller*ID */
313 char cid_name[256]; /* Caller*ID */
314 char via[256]; /* Via: header */
315 char fullcontact[128]; /* The Contact: that the UA registers with us */
316 char accountcode[20]; /* Account code */
317 char our_contact[256]; /* Our contact header */
318 char realm[256]; /* Authorization realm */
319 char nonce[256]; /* Authorization nonce */
320 char opaque[256]; /* Opaque nonsense */
321 char qop[80]; /* Quality of Protection, since SIP wasn't complicated enough yet. */
322 char domain[256]; /* Authorization nonce */
323 char lastmsg[256]; /* Last Message sent/received */
324 int amaflags; /* AMA Flags */
325 int pendinginvite; /* Any pending invite */
326 int needreinvite; /* Do we need to send another reinvite? */
327 int pendingbye; /* Need to send bye after we ack? */
328 int gotrefer; /* Got a refer? */
330 int ospauth; /* Allow OSP Authentication */
331 int osphandle; /* OSP Handle for call */
332 time_t ospstart; /* OSP Start time */
334 struct sip_request initreq; /* Initial request */
336 int maxtime; /* Max time for first response */
337 int initid; /* Auto-congest ID if appropriate */
338 int autokillid; /* Auto-kill ID */
339 time_t lastrtprx; /* Last RTP received */
340 int rtptimeout; /* RTP timeout time */
341 int rtpholdtimeout; /* RTP timeout when on hold */
343 int subscribed; /* Is this call a subscription? */
346 int promiscredir; /* Promiscuous redirection */
348 int trustrpid; /* Trust RPID headers? */
351 int dtmfmode; /* DTMF to use for this call */
354 struct sip_peer *peerpoke; /* If this calls is to poke a peer, which one */
355 struct sip_registry *registry; /* If this is a REGISTER call, to which registry */
356 struct ast_rtp *rtp; /* RTP Session */
357 struct ast_rtp *vrtp; /* Video RTP session */
358 struct sip_pkt *packets; /* Packets scheduled for re-transmission */
359 struct sip_history *history; /* History of this SIP dialog */
360 struct ast_variable *vars;
361 struct sip_pvt *next; /* Next call in chain */
364 #define FLAG_RESPONSE (1 << 0)
365 #define FLAG_FATAL (1 << 1)
367 /* sip packet - read in sipsock_read, transmitted in send_request */
369 struct sip_pkt *next; /* Next packet */
370 int retrans; /* Retransmission number */
371 int seqno; /* Sequence number */
372 int flags; /* non-zero if this is a response packet (e.g. 200 OK) */
373 struct sip_pvt *owner; /* Owner call */
374 int retransid; /* Retransmission ID */
375 int packetlen; /* Length of packet */
379 /* Structure for SIP user data. User's place calls to us */
381 /* Users who can access various contexts */
382 char name[80]; /* The name in sip.conf */
383 char secret[80]; /* Password */
384 char md5secret[80]; /* Password in md5 */
385 char context[80]; /* Default context for incoming calls */
386 char cid_num[80]; /* Caller ID num */
387 char cid_name[80]; /* Caller ID name */
388 char accountcode[20]; /* Account code */
389 char language[MAX_LANGUAGE]; /* Default language for this user */
390 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
391 char useragent[256]; /* User agent in SIP request */
392 unsigned int callgroup; /* Call group */
393 unsigned int pickupgroup; /* Pickup Group */
394 int nat; /* NAT setting */
395 int amaflags; /* AMA flags for billing */
396 int callingpres; /* Calling id presentation */
397 int insecure; /* Insecure means don't check password */
398 int canreinvite; /* Do we support re-invites ? */
399 int capability; /* Codec capability */
401 int ospauth; /* Allow OSP Authentication */
403 int dtmfmode; /* DTMF setting */
408 int promiscredir; /* Support of 302 redirect */
409 int useclientcode; /* SNOM clientcode support */
410 int trustrpid; /* Trust remote party ID from this UA */
412 struct ast_ha *ha; /* ACL setting */
413 int temponly; /* Flag for temporary users (realtime) */
414 struct ast_variable *vars;
415 struct sip_user *next;
418 /* Structure for SIP peer data, we place calls to peers if registred or fixed IP address (host) */
420 char name[80]; /* Peer name in sip.conf */
421 char secret[80]; /* Password */
422 char md5secret[80]; /* Password in MD5 */
423 char context[80]; /* Default context for incoming calls */
424 char username[80]; /* Temporary username until registration */
425 char tohost[80]; /* If not dynamic, IP address */
426 char regexten[AST_MAX_EXTENSION]; /* Extension to register (if regcontext is used) */
427 char fromuser[80]; /* From: user when calling this peer */
428 char fromdomain[80]; /* From: domain when calling this peer */
429 char fullcontact[128]; /* Contact registred with us (not in sip.conf) */
430 char cid_num[80]; /* Caller ID num */
431 char cid_name[80]; /* Caller ID name */
432 char mailbox[AST_MAX_EXTENSION]; /* Mailbox setting for MWI checks */
433 char language[MAX_LANGUAGE]; /* Default language for prompts */
434 char musicclass[MAX_LANGUAGE]; /* Music on Hold class */
435 char useragent[256]; /* User agent in SIP request (saved from registration) */
437 time_t lastmsgcheck; /* Last time we checked for MWI */
438 int dynamic; /* Dynamic? Yes or no. Dynamic hosts register with us */
439 int expire; /* Registration expiration */
441 int capability; /* Codec capability */
444 int insecure; /* Do we want to authenticate this peer? */
446 int ospauth; /* Allow OSP Authentication */
448 int nat; /* NAT support needed? */
449 int canreinvite; /* Does the peer support re-invites? */
450 unsigned int callgroup; /* Call group */
451 unsigned int pickupgroup; /* Pickup group */
452 int promiscredir; /* Support of 302 redirect? */
453 int dtmfmode; /* DTMF mode */
454 int trustrpid; /* Trust Remote Party ID headers? */
455 int useclientcode; /* SNOM clientcode support */
457 struct sockaddr_in addr; /* IP address of peer */
461 struct sip_pvt *call; /* Call pointer */
462 int pokeexpire; /* When to expire poke (qualify= checking) */
463 int lastms; /* How long last response took (in ms), or -1 for no response */
464 int maxms; /* Max ms we will accept for the host to be up, 0 to not monitor */
465 struct timeval ps; /* Ping send time */
467 struct sockaddr_in defaddr; /* Default IP address, used until registration */
468 struct ast_ha *ha; /* Access control list */
473 struct sip_peer *next;
476 AST_MUTEX_DEFINE_STATIC(sip_reload_lock);
477 static int sip_reloading = 0;
479 /* States for outbound registrations (with register= lines in sip.conf */
480 #define REG_STATE_UNREGISTERED 0
481 #define REG_STATE_REGSENT 1
482 #define REG_STATE_AUTHSENT 2
483 #define REG_STATE_REGISTERED 3
484 #define REG_STATE_REJECTED 4
485 #define REG_STATE_TIMEOUT 5
486 #define REG_STATE_NOAUTH 6
489 #define SIP_NAT_NEVER 0 /* No nat support */
490 #define SIP_NAT_RFC3581 (1 << 0)
491 #define SIP_NAT_ROUTE (1 << 2)
492 #define SIP_NAT_ALWAYS (SIP_NAT_ROUTE | SIP_NAT_RFC3581)
494 /* sip_registry: Registrations with other SIP proxies */
495 struct sip_registry {
496 int portno; /* Optional port override */
497 char username[80]; /* Who we are registering as */
498 char authuser[80]; /* Who we *authenticate* as */
499 char hostname[80]; /* Domain or host we register to */
500 char secret[80]; /* Password or key name in []'s */
502 char contact[80]; /* Contact extension */
504 int expire; /* Sched ID of expiration */
505 int timeout; /* sched id of sip_reg_timeout */
506 int refresh; /* How often to refresh */
507 struct sip_pvt *call; /* create a sip_pvt structure for each outbound "registration call" in progress */
508 int regstate; /* Registration state (see above) */
509 int callid_valid; /* 0 means we haven't chosen callid for this registry yet. */
510 char callid[80]; /* Global CallID for this registry */
511 unsigned int ocseq; /* Sequence number we got to for REGISTERs for this registry */
512 struct sockaddr_in us; /* Who the server thinks we are */
513 struct sip_registry *next;
516 /*--- The user list: Users and friends ---*/
517 static struct ast_user_list {
518 struct sip_user *users;
522 /*--- The peer list: Peers and Friends ---*/
523 static struct ast_peer_list {
524 struct sip_peer *peers;
528 /*--- The register list: Other SIP proxys we register with and call ---*/
529 static struct ast_register_list {
530 struct sip_registry *registrations;
536 #define REINVITE_INVITE 1
537 #define REINVITE_UPDATE 2
539 static int __sip_do_register(struct sip_registry *r);
541 static int sipsock = -1;
542 static int global_nat = SIP_NAT_RFC3581;
543 static int global_canreinvite = REINVITE_INVITE;
546 static struct sockaddr_in bindaddr;
547 static struct sockaddr_in externip;
548 static struct ast_ha *localaddr;
550 static struct ast_frame *sip_read(struct ast_channel *ast);
551 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req);
552 static int transmit_response_with_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans);
553 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *rand, int reliable, char *header);
554 static int transmit_request(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
555 static int transmit_request_with_auth(struct sip_pvt *p, char *msg, int inc, int reliable, int newbranch);
556 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);
557 static int transmit_reinvite_with_sdp(struct sip_pvt *p);
558 static int transmit_info_with_digit(struct sip_pvt *p, char digit);
559 static int transmit_message_with_text(struct sip_pvt *p, char *text);
560 static int transmit_refer(struct sip_pvt *p, char *dest);
561 static struct sip_peer *temp_peer(char *name);
562 static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader, char *msg, int init);
563 static void free_old_route(struct sip_route *route);
564 static int build_reply_digest(struct sip_pvt *p, char *orig_header, char *digest, int digest_len);
565 static int update_user_counter(struct sip_pvt *fup, int event);
566 static void prune_peers(void);
567 static int sip_do_reload(void);
570 /*--- sip_debug_test_addr: See if we pass debug IP filter */
571 static inline int sip_debug_test_addr(struct sockaddr_in *addr)
575 if (debugaddr.sin_addr.s_addr) {
576 if (((ntohs(debugaddr.sin_port) != 0)
577 && (debugaddr.sin_port != addr->sin_port))
578 || (debugaddr.sin_addr.s_addr != addr->sin_addr.s_addr))
584 static inline int sip_debug_test_pvt(struct sip_pvt *p)
588 return sip_debug_test_addr(((p->nat & SIP_NAT_ROUTE) ? &p->recv : &p->sa));
592 /*--- __sip_xmit: Transmit SIP message ---*/
593 static int __sip_xmit(struct sip_pvt *p, char *data, int len)
596 char iabuf[INET_ADDRSTRLEN];
597 if (p->nat & SIP_NAT_ROUTE)
598 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->recv, sizeof(struct sockaddr_in));
600 res=sendto(sipsock, data, len, 0, (struct sockaddr *)&p->sa, sizeof(struct sockaddr_in));
602 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));
607 static void sip_destroy(struct sip_pvt *p);
609 /*--- ast_sip_ouraddrfor: NAT fix - decide which IP address to use for ASterisk server? ---*/
610 /* Only used for outbound registrations */
611 static int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us)
614 * Using the localaddr structure built up with localnet statements
615 * apply it to their address to see if we need to substitute our
616 * externip or can get away with our internal bindaddr
618 struct sockaddr_in theirs;
619 theirs.sin_addr = *them;
620 if (localaddr && externip.sin_addr.s_addr &&
621 ast_apply_ha(localaddr, &theirs)) {
622 char iabuf[INET_ADDRSTRLEN];
623 memcpy(us, &externip.sin_addr, sizeof(struct in_addr));
624 ast_inet_ntoa(iabuf, sizeof(iabuf), *(struct in_addr *)&them->s_addr);
625 ast_log(LOG_DEBUG, "Target address %s is not local, substituting externip\n", iabuf);
627 else if (bindaddr.sin_addr.s_addr)
628 memcpy(us, &bindaddr.sin_addr, sizeof(struct in_addr));
630 return ast_ouraddrfor(them, us);
634 static int append_history(struct sip_pvt *p, char *event, char *data)
636 struct sip_history *hist, *prev;
640 hist = malloc(sizeof(struct sip_history));
642 memset(hist, 0, sizeof(struct sip_history));
643 snprintf(hist->event, sizeof(hist->event), "%-15s %s", event, data);
647 if ((*c == '\r') || (*c == '\n')) {
653 /* Enqueue into history */
666 /*--- retrans_pkt: Retransmit SIP message if no answer ---*/
667 static int retrans_pkt(void *data)
669 struct sip_pkt *pkt=data, *prev, *cur;
671 char iabuf[INET_ADDRSTRLEN];
672 ast_mutex_lock(&pkt->owner->lock);
673 if (pkt->retrans < MAX_RETRANS) {
675 if (sip_debug_test_pvt(pkt->owner)) {
676 if (pkt->owner->nat & SIP_NAT_ROUTE)
677 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));
679 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));
681 append_history(pkt->owner, "ReTx", pkt->data);
682 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
685 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");
686 append_history(pkt->owner, "MaxRetries", pkt->flags & FLAG_FATAL ? "(Critical)" : "(Non-critical)");
688 if (pkt->flags & FLAG_FATAL) {
689 while(pkt->owner->owner && ast_mutex_trylock(&pkt->owner->owner->lock)) {
690 ast_mutex_unlock(&pkt->owner->lock);
692 ast_mutex_lock(&pkt->owner->lock);
694 if (pkt->owner->owner) {
695 ast_queue_hangup(pkt->owner->owner);
696 ast_mutex_unlock(&pkt->owner->owner->lock);
698 /* If no owner, destroy now */
699 pkt->owner->needdestroy = 1;
702 /* In any case, go ahead and remove the packet */
704 cur = pkt->owner->packets;
713 prev->next = cur->next;
715 pkt->owner->packets = cur->next;
716 ast_mutex_unlock(&pkt->owner->lock);
720 ast_log(LOG_WARNING, "Weird, couldn't find packet owner!\n");
723 ast_mutex_unlock(&pkt->owner->lock);
727 /*--- __sip_reliable_xmit: transmit packet with retransmits ---*/
728 static int __sip_reliable_xmit(struct sip_pvt *p, int seqno, int resp, char *data, int len, int fatal)
731 pkt = malloc(sizeof(struct sip_pkt) + len + 1);
734 memset(pkt, 0, sizeof(struct sip_pkt));
735 memcpy(pkt->data, data, len);
736 pkt->packetlen = len;
737 pkt->next = p->packets;
741 pkt->data[len] = '\0';
743 pkt->flags |= FLAG_FATAL;
744 /* Schedule retransmission */
745 pkt->retransid = ast_sched_add(sched, DEFAULT_RETRANS, retrans_pkt, pkt);
746 pkt->next = p->packets;
748 __sip_xmit(pkt->owner, pkt->data, pkt->packetlen);
749 if (!strncasecmp(pkt->data, "INVITE", 6)) {
750 /* Note this is a pending invite */
751 p->pendinginvite = seqno;
756 /*--- __sip_autodestruct: Kill a call (called by scheduler) ---*/
757 static int __sip_autodestruct(void *data)
759 struct sip_pvt *p = data;
761 ast_log(LOG_DEBUG, "Auto destroying call '%s'\n", p->callid);
762 append_history(p, "AutoDestroy", "");
764 ast_log(LOG_WARNING, "Autodestruct on call '%s' with owner in place\n", p->callid);
765 ast_queue_hangup(p->owner);
772 /*--- sip_scheddestroy: Schedule destruction of SIP call ---*/
773 static int sip_scheddestroy(struct sip_pvt *p, int ms)
776 if (sip_debug_test_pvt(p))
777 ast_verbose("Scheduling destruction of call '%s' in %d ms\n", p->callid, ms);
779 snprintf(tmp, sizeof(tmp), "%d ms", ms);
780 append_history(p, "SchedDestroy", tmp);
782 if (p->autokillid > -1)
783 ast_sched_del(sched, p->autokillid);
784 p->autokillid = ast_sched_add(sched, ms, __sip_autodestruct, p);
788 /*--- sip_cancel_destroy: Cancel destruction of SIP call ---*/
789 static int sip_cancel_destroy(struct sip_pvt *p)
791 if (p->autokillid > -1)
792 ast_sched_del(sched, p->autokillid);
793 append_history(p, "CancelDestroy", "");
798 /*--- __sip_ack: Acknowledges receipt of a packet and stops retransmission ---*/
799 static int __sip_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
801 struct sip_pkt *cur, *prev = NULL;
804 /* Just in case... */
805 if (!msg) msg = "___NEVER___";
808 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
809 ((cur->flags & FLAG_RESPONSE) ||
810 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
811 if (!resp && (seqno == p->pendinginvite)) {
812 ast_log(LOG_DEBUG, "Acked pending invite %d\n", p->pendinginvite);
813 p->pendinginvite = 0;
816 /* this is our baby */
818 prev->next = cur->next;
820 p->packets = cur->next;
821 if (cur->retransid > -1)
822 ast_sched_del(sched, cur->retransid);
830 ast_log(LOG_DEBUG, "Stopping retransmission on '%s' of %s %d: %s\n", p->callid, resp ? "Response" : "Request", seqno, res ? "Not Found" : "Found");
834 /* Pretend to ack all packets */
835 static int __sip_pretend_ack(struct sip_pvt *p)
838 __sip_ack(p, p->packets->seqno, (p->packets->flags & FLAG_RESPONSE), p->packets->data);
843 /*--- __sip_semi_ack: Acks receipt of packet, keep it around (used for provisional responses) ---*/
844 static int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, const char *msg)
850 if ((cur->seqno == seqno) && ((cur->flags & FLAG_RESPONSE) == resp) &&
851 ((cur->flags & FLAG_RESPONSE) ||
852 (!strncasecmp(msg, cur->data, strlen(msg)) && (cur->data[strlen(msg)] < 33)))) {
853 /* this is our baby */
854 if (cur->retransid > -1)
855 ast_sched_del(sched, cur->retransid);
862 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");
866 static void parse(struct sip_request *req);
867 static char *get_header(struct sip_request *req, char *name);
868 static void copy_request(struct sip_request *dst,struct sip_request *src);
870 static void parse_copy(struct sip_request *dst, struct sip_request *src)
872 memset(dst, 0, sizeof(*dst));
873 memcpy(dst->data, src->data, sizeof(dst->data));
877 /*--- send_response: Transmit response on SIP request---*/
878 static int send_response(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
881 char iabuf[INET_ADDRSTRLEN];
882 struct sip_request tmp;
884 if (sip_debug_test_pvt(p)) {
885 if (p->nat & SIP_NAT_ROUTE)
886 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));
888 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));
892 parse_copy(&tmp, req);
893 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
894 append_history(p, "TxRespRel", tmpmsg);
896 res = __sip_reliable_xmit(p, seqno, 1, req->data, req->len, (reliable > 1));
899 parse_copy(&tmp, req);
900 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
901 append_history(p, "TxResp", tmpmsg);
903 res = __sip_xmit(p, req->data, req->len);
910 /*--- send_request: Send SIP Request to the other part of the dialogue ---*/
911 static int send_request(struct sip_pvt *p, struct sip_request *req, int reliable, int seqno)
914 char iabuf[INET_ADDRSTRLEN];
915 struct sip_request tmp;
917 if (sip_debug_test_pvt(p)) {
918 if (p->nat & SIP_NAT_ROUTE)
919 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));
921 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));
925 parse_copy(&tmp, req);
926 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
927 append_history(p, "TxReqRel", tmpmsg);
929 res = __sip_reliable_xmit(p, seqno, 0, req->data, req->len, (reliable > 1));
932 parse_copy(&tmp, req);
933 snprintf(tmpmsg, sizeof(tmpmsg), "%s / %s", tmp.data, get_header(&tmp, "CSeq"));
934 append_history(p, "TxReq", tmpmsg);
936 res = __sip_xmit(p, req->data, req->len);
941 /*--- url_decode: Decode SIP URL ---*/
942 static void url_decode(char *s)
950 if (sscanf(s + 1, "%2x", &tmp) == 1) {
952 s += 2; /* Will be incremented once more when we break out */
956 /* Fall through if something wasn't right with the formatting */
966 /*--- ditch_braces: Pick out text in braces from character string ---*/
967 static char *ditch_braces(char *tmp)
972 if ((q = strchr(tmp, '"')) ) {
974 if ((q = strchr(c, '"')) )
977 ast_log(LOG_WARNING, "No closing quote in '%s'\n", tmp);
981 if ((n = strchr(c, '<')) ) {
983 while(*c && *c != '>') c++;
985 ast_log(LOG_WARNING, "No closing brace in '%s'\n", tmp);
994 /*--- sip_sendtext: Send SIP MESSAGE text within a call ---*/
995 /* Called from PBX core text message functions */
996 static int sip_sendtext(struct ast_channel *ast, char *text)
998 struct sip_pvt *p = ast->pvt->pvt;
999 int debug=sip_debug_test_pvt(p);
1002 ast_verbose("Sending text %s on %s\n", text, ast->name);
1005 if (!text || ast_strlen_zero(text))
1008 ast_verbose("Really sending text %s on %s\n", text, ast->name);
1009 transmit_message_with_text(p, text);
1013 static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, int expirey)
1017 char regseconds[20];
1022 snprintf(regseconds, sizeof(regseconds), "%ld", nowtime);
1023 ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr);
1024 snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
1025 ast_update_realtime("sipfriends", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL);
1028 static void register_peer_exten(struct sip_peer *peer, int onoff)
1030 unsigned char multi[256]="";
1031 char *stringp, *ext;
1032 if (!ast_strlen_zero(regcontext)) {
1033 strncpy(multi, ast_strlen_zero(peer->regexten) ? peer->name : peer->regexten, sizeof(multi) - 1);
1035 while((ext = strsep(&stringp, "&"))) {
1037 ast_add_extension(regcontext, 1, ext, 1, NULL, NULL, "Noop", strdup(peer->name), free, type);
1039 ast_context_remove_extension(regcontext, ext, 1, NULL);
1044 static void destroy_peer(struct sip_peer *peer)
1046 /* Delete it, it needs to disappear */
1048 sip_destroy(peer->call);
1049 if (peer->expire > -1)
1050 ast_sched_del(sched, peer->expire);
1051 if (peer->pokeexpire > -1)
1052 ast_sched_del(sched, peer->pokeexpire);
1053 register_peer_exten(peer, 0);
1054 ast_free_ha(peer->ha);
1058 /*--- update_peer: Update peer data in database (if used) ---*/
1059 static void update_peer(struct sip_peer *p, int expiry)
1062 realtime_update_peer(p->name, &p->addr, p->username, expiry);
1065 static struct sip_peer *build_peer(const char *name, struct ast_variable *v, int temponly);
1067 static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *sin)
1069 struct ast_variable *var, *tmp=NULL;
1071 struct sip_peer *peer=NULL;
1072 time_t nowtime, regseconds;
1076 ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
1078 var = ast_load_realtime("sipfriends", "name", peername, NULL);
1080 var = ast_load_realtime("sipfriends", "ipaddr", iabuf, NULL);
1082 /* Make sure it's not a user only... */
1083 peer = build_peer(peername, var, 1);
1085 /* Add some finishing touches, addresses, etc */
1089 if (!strcasecmp(tmp->name, "type")) {
1090 if (strcasecmp(tmp->value, "friend") &&
1091 strcasecmp(tmp->value, "peer")) {
1092 /* Whoops, we weren't supposed to exist! */
1097 } else if (!strcasecmp(tmp->name, "regseconds")) {
1098 if (sscanf(tmp->value, "%li", ®seconds) != 1)
1100 } else if (!strcasecmp(tmp->name, "ipaddr")) {
1101 inet_aton(tmp->value, &(peer->addr.sin_addr));
1102 } else if (!strcasecmp(tmp->name, "port")) {
1103 peer->addr.sin_port = htons(atoi(tmp->value));
1104 } else if (!strcasecmp(tmp->name, "host")) {
1105 if (!strcasecmp(tmp->value, "dynamic"))
1110 if (peer && dynamic) {
1112 if ((nowtime - regseconds) > 0) {
1113 memset(&peer->addr, 0, sizeof(peer->addr));
1115 ast_log(LOG_DEBUG, "Bah, we're expired (%ld/%ld/%ld)!\n", nowtime - regseconds, regseconds, nowtime);
1119 ast_destroy_realtime(var);
1124 /*--- find_peer: Locate peer by name or ip address */
1125 static struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin)
1127 struct sip_peer *p = NULL;
1131 /* Find by peer name */
1133 if (!strcasecmp(p->name, peer)) {
1142 if (!inaddrcmp(&p->addr, sin) ||
1144 (p->addr.sin_addr.s_addr == sin->sin_addr.s_addr))) {
1152 p = realtime_peer(peer, sin);
1158 static void destroy_user(struct sip_user *user)
1160 ast_free_ha(user->ha);
1162 ast_destroy_realtime(user->vars);
1168 static struct sip_user *build_user(const char *name, struct ast_variable *v);
1169 static struct sip_user *realtime_user(const char *username)
1171 struct ast_variable *var;
1172 struct ast_variable *tmp;
1173 struct sip_user *user=NULL;
1174 var = ast_load_realtime("sipfriends", "name", username, NULL);
1176 /* Make sure it's not a user only... */
1177 user = build_user(username, var);
1179 /* Add some finishing touches, addresses, etc */
1183 if (!strcasecmp(tmp->name, "type")) {
1184 if (strcasecmp(tmp->value, "friend") &&
1185 strcasecmp(tmp->value, "user")) {
1186 /* Whoops, we weren't supposed to exist! */
1195 ast_destroy_realtime(var);
1200 /*--- find_user: Locate user by name */
1201 static struct sip_user *find_user(char *name)
1203 struct sip_user *u = NULL;
1207 if (!strcasecmp(u->name, name)) {
1213 u = realtime_user(name);
1218 /*--- create_addr: create address structure from peer definition ---*/
1219 /* Or, if peer not found, find it in the global DNS */
1220 /* returns TRUE on failure, FALSE on success */
1221 static int create_addr(struct sip_pvt *r, char *opeer)
1224 struct ast_hostent ahp;
1230 char host[256], *hostn;
1233 strncpy(peer, opeer, sizeof(peer) - 1);
1234 port = strchr(peer, ':');
1239 r->sa.sin_family = AF_INET;
1240 ast_mutex_lock(&peerl.lock);
1241 p = find_peer(peer, NULL);
1245 r->capability = p->capability;
1248 ast_log(LOG_DEBUG, "Setting NAT on RTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1249 ast_rtp_setnat(r->rtp, (r->nat & SIP_NAT_ROUTE));
1252 ast_log(LOG_DEBUG, "Setting NAT on VRTP to %d\n", (r->nat & SIP_NAT_ROUTE));
1253 ast_rtp_setnat(r->vrtp, (r->nat & SIP_NAT_ROUTE));
1255 strncpy(r->peername, p->username, sizeof(r->peername)-1);
1256 strncpy(r->authname, p->username, sizeof(r->authname)-1);
1257 strncpy(r->peersecret, p->secret, sizeof(r->peersecret)-1);
1258 strncpy(r->peermd5secret, p->md5secret, sizeof(r->peermd5secret)-1);
1259 strncpy(r->username, p->username, sizeof(r->username)-1);
1260 strncpy(r->tohost, p->tohost, sizeof(r->tohost)-1);
1261 strncpy(r->fullcontact, p->fullcontact, sizeof(r->fullcontact)-1);
1262 if (!r->initreq.headers && !ast_strlen_zero(p->fromdomain)) {
1263 if ((callhost = strchr(r->callid, '@'))) {
1264 strncpy(callhost + 1, p->fromdomain, sizeof(r->callid) - (callhost - r->callid) - 2);
1267 if (ast_strlen_zero(r->tohost)) {
1268 if (p->addr.sin_addr.s_addr)
1269 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->addr.sin_addr);
1271 ast_inet_ntoa(r->tohost, sizeof(r->tohost), p->defaddr.sin_addr);
1273 if (!ast_strlen_zero(p->fromdomain))
1274 strncpy(r->fromdomain, p->fromdomain, sizeof(r->fromdomain)-1);
1275 if (!ast_strlen_zero(p->fromuser))
1276 strncpy(r->fromuser, p->fromuser, sizeof(r->fromuser)-1);
1277 r->insecure = p->insecure;
1278 r->canreinvite = p->canreinvite;
1279 r->maxtime = p->maxms;
1280 r->callgroup = p->callgroup;
1281 r->pickupgroup = p->pickupgroup;
1283 r->dtmfmode = p->dtmfmode;
1284 if (r->dtmfmode & SIP_DTMF_RFC2833)
1285 r->noncodeccapability |= AST_RTP_DTMF;
1287 r->noncodeccapability &= ~AST_RTP_DTMF;
1289 r->promiscredir = p->promiscredir;
1290 strncpy(r->context, p->context,sizeof(r->context)-1);
1291 if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
1292 (!p->maxms || ((p->lastms > 0) && (p->lastms <= p->maxms)))) {
1293 if (p->addr.sin_addr.s_addr) {
1294 r->sa.sin_addr = p->addr.sin_addr;
1295 r->sa.sin_port = p->addr.sin_port;
1297 r->sa.sin_addr = p->defaddr.sin_addr;
1298 r->sa.sin_port = p->defaddr.sin_port;
1300 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1308 ast_mutex_unlock(&peerl.lock);
1312 portno = atoi(port);
1314 portno = DEFAULT_SIP_PORT;
1319 snprintf(service, sizeof(service), "_sip._udp.%s", peer);
1320 ret = ast_get_srv(NULL, host, sizeof(host), &tportno, service);
1326 hp = ast_gethostbyname(hostn, &ahp);
1328 strncpy(r->tohost, peer, sizeof(r->tohost) - 1);
1329 memcpy(&r->sa.sin_addr, hp->h_addr, sizeof(r->sa.sin_addr));
1330 r->sa.sin_port = htons(portno);
1331 memcpy(&r->recv, &r->sa, sizeof(r->recv));
1334 ast_log(LOG_WARNING, "No such host: %s\n", peer);
1347 /*--- auto_congest: Scheduled congestion on a call ---*/
1348 static int auto_congest(void *nothing)
1350 struct sip_pvt *p = nothing;
1351 ast_mutex_lock(&p->lock);
1354 if (!ast_mutex_trylock(&p->owner->lock)) {
1355 ast_log(LOG_NOTICE, "Auto-congesting %s\n", p->owner->name);
1356 ast_queue_control(p->owner, AST_CONTROL_CONGESTION);
1357 ast_mutex_unlock(&p->owner->lock);
1360 ast_mutex_unlock(&p->lock);
1364 /*--- sip_prefs_free: Free codec list in preference structure ---*/
1365 static void sip_prefs_free(void)
1367 struct sip_codec_pref *cur, *next;
1377 /*--- sip_pref_remove: Remove codec from pref list ---*/
1378 static void sip_pref_remove(int format)
1380 struct sip_codec_pref *cur, *prev=NULL;
1383 if (cur->codec == format) {
1385 prev->next = cur->next;
1396 /*--- sip_pref_append: Append codec to list ---*/
1397 static int sip_pref_append(int format)
1399 struct sip_codec_pref *cur, *tmp;
1400 sip_pref_remove(format);
1401 tmp = (struct sip_codec_pref *)malloc(sizeof(struct sip_codec_pref));
1404 memset(tmp, 0, sizeof(struct sip_codec_pref));
1405 tmp->codec = format;
1416 /*--- sip_codec_choose: Pick a codec ---*/
1417 static int sip_codec_choose(int formats)
1419 struct sip_codec_pref *cur;
1420 formats &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
1423 if (formats & cur->codec)
1427 return ast_best_codec(formats);
1430 /*--- sip_call: Initiate SIP call from PBX ---*/
1431 /* used from the dial() application */
1432 static int sip_call(struct ast_channel *ast, char *dest, int timeout)
1436 char *vxml_url = NULL;
1437 char *distinctive_ring = NULL;
1438 char *osptoken = NULL;
1440 char *osphandle = NULL;
1442 struct varshead *headp;
1443 struct ast_var_t *current;
1446 if ((ast->_state != AST_STATE_DOWN) && (ast->_state != AST_STATE_RESERVED)) {
1447 ast_log(LOG_WARNING, "sip_call called on %s, neither down nor reserved\n", ast->name);
1450 /* Check whether there is vxml_url, distinctive ring variables */
1452 headp=&ast->varshead;
1453 AST_LIST_TRAVERSE(headp,current,entries) {
1454 /* Check whether there is a VXML_URL variable */
1455 if (!vxml_url && !strcasecmp(ast_var_name(current),"VXML_URL")) {
1456 vxml_url = ast_var_value(current);
1457 } else if (!distinctive_ring && !strcasecmp(ast_var_name(current),"ALERT_INFO")) {
1458 /* Check whether there is a ALERT_INFO variable */
1459 distinctive_ring = ast_var_value(current);
1462 else if (!osptoken && !strcasecmp(ast_var_name(current), "OSPTOKEN")) {
1463 osptoken = ast_var_value(current);
1464 } else if (!osphandle && !strcasecmp(ast_var_name(current), "OSPHANDLE")) {
1465 osphandle = ast_var_value(current);
1473 if (!osptoken || !osphandle || (sscanf(osphandle, "%i", &p->osphandle) != 1)) {
1474 /* Force Disable OSP support */
1480 ast_log(LOG_DEBUG, "Outgoing Call for %s\n", p->username);
1481 res = update_user_counter(p,INC_OUT_USE);
1483 p->callingpres = ast->cid.cid_pres;
1484 p->jointcapability = p->capability;
1485 transmit_invite(p, "INVITE", 1, NULL, NULL, vxml_url,distinctive_ring, osptoken, 1);
1487 /* Initialize auto-congest time */
1488 p->initid = ast_sched_add(sched, p->maxtime * 4, auto_congest, p);
1494 /*--- __sip_destroy: Execute destrucion of call structure, release memory---*/
1495 static void __sip_destroy(struct sip_pvt *p, int lockowner)
1497 struct sip_pvt *cur, *prev = NULL;
1499 struct sip_history *hist;
1501 if (sip_debug_test_pvt(p))
1502 ast_verbose("Destroying call '%s'\n", p->callid);
1503 if (p->stateid > -1)
1504 ast_extension_state_del(p->stateid, NULL);
1506 ast_sched_del(sched, p->initid);
1507 if (p->autokillid > -1)
1508 ast_sched_del(sched, p->autokillid);
1511 ast_rtp_destroy(p->rtp);
1514 ast_rtp_destroy(p->vrtp);
1517 free_old_route(p->route);
1521 /* Carefully unlink from registry */
1522 struct sip_registry *reg;
1523 ast_mutex_lock(®l.lock);
1524 reg = regl.registrations;
1526 if ((reg == p->registry) && (p->registry->call == p))
1527 p->registry->call=NULL;
1530 ast_mutex_unlock(®l.lock);
1532 /* Unlink us from the owner if we have one */
1535 ast_mutex_lock(&p->owner->lock);
1536 ast_log(LOG_DEBUG, "Detaching from %s\n", p->owner->name);
1537 p->owner->pvt->pvt = NULL;
1539 ast_mutex_unlock(&p->owner->lock);
1544 p->history = p->history->next;
1551 prev->next = cur->next;
1560 ast_log(LOG_WARNING, "%p is not in list?!?! \n", cur);
1563 ast_sched_del(sched, p->initid);
1564 while((cp = p->packets)) {
1565 p->packets = p->packets->next;
1566 if (cp->retransid > -1)
1567 ast_sched_del(sched, cp->retransid);
1570 ast_mutex_destroy(&p->lock);
1572 ast_destroy_realtime(p->vars);
1579 /*--- update_user_counter: Handle incominglimit and outgoinglimit for SIP users ---*/
1580 /* Note: This is going to be replaced by app_groupcount */
1581 static int update_user_counter(struct sip_pvt *fup, int event)
1583 char name[256] = "";
1585 strncpy(name, fup->username, sizeof(name) - 1);
1586 ast_mutex_lock(&userl.lock);
1587 u = find_user(name);
1589 ast_log(LOG_DEBUG, "%s is not a local user\n", name);
1590 ast_mutex_unlock(&userl.lock);
1594 /* incoming and outgoing affects the inUse counter */
1597 if ( u->inUse > 0 ) {
1605 if (u->incominglimit > 0 ) {
1606 if (u->inUse >= u->incominglimit) {
1607 ast_log(LOG_ERROR, "Call from user '%s' rejected due to usage limit of %d\n", u->name, u->incominglimit);
1608 /* inc inUse as well */
1609 if ( event == INC_OUT_USE ) {
1612 ast_mutex_unlock(&userl.lock);
1620 ast_log(LOG_DEBUG, "Call from user '%s' is %d out of %d\n", u->name, u->inUse, u->incominglimit);
1622 /* we don't use these anymore
1624 if ( u->outUse > 0 ) {
1631 if ( u->outgoinglimit > 0 ) {
1632 if ( u->outUse >= u->outgoinglimit ) {
1633 ast_log(LOG_ERROR, "Outgoing call from user '%s' rejected due to usage limit of %d\n", u->name, u->outgoinglimit);
1634 ast_mutex_unlock(&userl.lock);
1645 ast_log(LOG_ERROR, "update_user_counter(%s,%d) called with no event!\n",u->name,event);
1647 ast_mutex_unlock(&userl.lock);
1654 /*--- sip_destroy: Destroy SIP call structure ---*/
1655 static void sip_destroy(struct sip_pvt *p)
1657 ast_mutex_lock(&iflock);
1658 __sip_destroy(p, 1);
1659 ast_mutex_unlock(&iflock);
1663 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal);
1665 static int hangup_sip2cause(int cause)
1667 /* Possible values from causes.h
1668 AST_CAUSE_NOTDEFINED AST_CAUSE_NORMAL AST_CAUSE_BUSY
1669 AST_CAUSE_FAILURE AST_CAUSE_CONGESTION AST_CAUSE_UNALLOCATED
1673 case 404: /* Not found */
1674 return AST_CAUSE_UNALLOCATED;
1675 case 483: /* Too many hops */
1676 return AST_CAUSE_FAILURE;
1678 return AST_CAUSE_BUSY;
1680 return AST_CAUSE_NORMAL;
1686 static char *hangup_cause2sip(int cause)
1690 case AST_CAUSE_FAILURE:
1691 return "500 Server internal failure";
1692 case AST_CAUSE_CONGESTION:
1693 return "503 Service Unavailable";
1694 case AST_CAUSE_BUSY:
1703 /*--- sip_hangup: Hangup SIP call */
1704 static int sip_hangup(struct ast_channel *ast)
1706 struct sip_pvt *p = ast->pvt->pvt;
1708 int needdestroy = 0;
1710 ast_log(LOG_DEBUG, "sip_hangup(%s)\n", ast->name);
1711 if (!ast->pvt->pvt) {
1712 ast_log(LOG_DEBUG, "Asked to hangup channel not connected\n");
1715 ast_mutex_lock(&p->lock);
1717 if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
1718 ast_osp_terminate(p->osphandle, AST_CAUSE_NORMAL, p->ospstart, time(NULL) - p->ospstart);
1721 if ( p->outgoing ) {
1722 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement outUse counter\n", p->username);
1723 update_user_counter(p, DEC_OUT_USE);
1725 ast_log(LOG_DEBUG, "update_user_counter(%s) - decrement inUse counter\n", p->username);
1726 update_user_counter(p, DEC_IN_USE);
1728 /* Determine how to disconnect */
1729 if (p->owner != ast) {
1730 ast_log(LOG_WARNING, "Huh? We aren't the owner?\n");
1731 ast_mutex_unlock(&p->lock);
1734 if (!ast || (ast->_state != AST_STATE_UP))
1739 ast_dsp_free(p->vad);
1742 ast->pvt->pvt = NULL;
1744 ast_mutex_lock(&usecnt_lock);
1746 ast_mutex_unlock(&usecnt_lock);
1747 ast_update_use_count();
1750 /* Start the process if it's not already started */
1751 if (!p->alreadygone && !ast_strlen_zero(p->initreq.data)) {
1754 transmit_request_with_auth(p, "CANCEL", p->ocseq, 1, 0);
1755 /* Actually don't destroy us yet, wait for the 487 on our original
1756 INVITE, but do set an autodestruct just in case we never get it. */
1758 sip_scheddestroy(p, 15000);
1759 if ( p->initid != -1 ) {
1760 /* channel still up - reverse dec of inUse counter
1761 only if the channel is not auto-congested */
1762 if ( p->outgoing ) {
1763 update_user_counter(p, INC_OUT_USE);
1766 update_user_counter(p, INC_IN_USE);
1771 if (ast->hangupcause && ((res = hangup_cause2sip(ast->hangupcause)))) {
1772 transmit_response_reliable(p, res, &p->initreq, 1);
1774 transmit_response_reliable(p, "403 Forbidden", &p->initreq, 1);
1777 if (!p->pendinginvite) {
1779 transmit_request_with_auth(p, "BYE", 0, 1, 1);
1781 /* Note we will need a BYE when this all settles out
1782 but we can't send one while we have "INVITE" outstanding. */
1784 p->needreinvite = 0;
1788 p->needdestroy = needdestroy;
1789 ast_mutex_unlock(&p->lock);
1793 /*--- sip_answer: Answer SIP call , send 200 OK on Invite */
1794 static int sip_answer(struct ast_channel *ast)
1798 struct sip_pvt *p = ast->pvt->pvt;
1800 ast_mutex_lock(&p->lock);
1801 if (ast->_state != AST_STATE_UP) {
1806 codec=pbx_builtin_getvar_helper(p->owner,"SIP_CODEC");
1808 fmt=ast_getformatbyname(codec);
1810 ast_log(LOG_NOTICE, "Changing codec to '%s' for this call because of ${SIP_CODEC) variable\n",codec);
1811 if (p->jointcapability & fmt) {
1812 p->jointcapability &= fmt;
1813 p->capability &= fmt;
1815 ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because it is not shared by both ends.\n");
1816 } else ast_log(LOG_NOTICE, "Ignoring ${SIP_CODEC} variable because of unrecognized/not configured codec (check allow/disallow in sip.conf): %s\n",codec);
1819 ast_setstate(ast, AST_STATE_UP);
1821 ast_log(LOG_DEBUG, "sip_answer(%s)\n", ast->name);
1822 res = transmit_response_with_sdp(p, "200 OK", &p->initreq, 1);
1824 ast_mutex_unlock(&p->lock);
1828 /*--- sip_write: Send response, support audio media ---*/
1829 static int sip_write(struct ast_channel *ast, struct ast_frame *frame)
1831 struct sip_pvt *p = ast->pvt->pvt;
1833 if (frame->frametype == AST_FRAME_VOICE) {
1834 if (!(frame->subclass & ast->nativeformats)) {
1835 ast_log(LOG_WARNING, "Asked to transmit frame type %d, while native formats is %d (read/write = %d/%d)\n",
1836 frame->subclass, ast->nativeformats, ast->readformat, ast->writeformat);
1840 ast_mutex_lock(&p->lock);
1842 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1843 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1846 res = ast_rtp_write(p->rtp, frame);
1848 ast_mutex_unlock(&p->lock);
1850 } else if (frame->frametype == AST_FRAME_VIDEO) {
1852 ast_mutex_lock(&p->lock);
1854 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1855 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1858 res = ast_rtp_write(p->vrtp, frame);
1860 ast_mutex_unlock(&p->lock);
1862 } else if (frame->frametype == AST_FRAME_IMAGE) {
1865 ast_log(LOG_WARNING, "Can't send %d type frames with SIP write\n", frame->frametype);
1872 /*--- sip_fixup: Fix up a channel: If a channel is consumed, this is called.
1873 Basically update any ->owner links ----*/
1874 static int sip_fixup(struct ast_channel *oldchan, struct ast_channel *newchan)
1876 struct sip_pvt *p = newchan->pvt->pvt;
1877 ast_mutex_lock(&p->lock);
1878 if (p->owner != oldchan) {
1879 ast_log(LOG_WARNING, "old channel wasn't %p but was %p\n", oldchan, p->owner);
1880 ast_mutex_unlock(&p->lock);
1884 ast_mutex_unlock(&p->lock);
1888 /*--- sip_senddigit: Send DTMF character on SIP channel */
1889 /* within one call, we're able to transmit in many methods simultaneously */
1890 static int sip_senddigit(struct ast_channel *ast, char digit)
1892 struct sip_pvt *p = ast->pvt->pvt;
1893 if (p && (p->dtmfmode & SIP_DTMF_INFO)) {
1894 transmit_info_with_digit(p, digit);
1896 if (p && p->rtp && (p->dtmfmode & SIP_DTMF_RFC2833)) {
1897 ast_rtp_senddigit(p->rtp, digit);
1899 /* If in-band DTMF is desired, send that */
1900 if (p->dtmfmode & SIP_DTMF_INBAND)
1906 /*--- sip_transfer: Transfer SIP call */
1907 static int sip_transfer(struct ast_channel *ast, char *dest)
1909 struct sip_pvt *p = ast->pvt->pvt;
1911 res = transmit_refer(p, dest);
1915 /*--- sip_indicate: Play indication to user */
1916 /* With SIP a lot of indications is sent as messages, letting the device play
1917 the indication - busy signal, congestion etc */
1918 static int sip_indicate(struct ast_channel *ast, int condition)
1920 struct sip_pvt *p = ast->pvt->pvt;
1922 case AST_CONTROL_RINGING:
1923 if (ast->_state == AST_STATE_RING) {
1924 if (!p->progress || !p->progressinband) {
1925 /* Send 180 ringing if out-of-band seems reasonable */
1926 transmit_response(p, "180 Ringing", &p->initreq);
1928 if (p->progressinband < 2)
1931 /* Well, if it's not reasonable, just send in-band */
1935 case AST_CONTROL_BUSY:
1936 if (ast->_state != AST_STATE_UP) {
1937 transmit_response(p, "486 Busy Here", &p->initreq);
1939 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1943 case AST_CONTROL_CONGESTION:
1944 if (ast->_state != AST_STATE_UP) {
1945 transmit_response(p, "503 Service Unavailable", &p->initreq);
1947 ast_softhangup_nolock(ast, AST_SOFTHANGUP_DEV);
1951 case AST_CONTROL_PROGRESS:
1952 case AST_CONTROL_PROCEEDING:
1953 if ((ast->_state != AST_STATE_UP) && !p->progress && !p->outgoing) {
1954 transmit_response_with_sdp(p, "183 Session Progress", &p->initreq, 0);
1962 ast_log(LOG_WARNING, "Don't know how to indicate condition %d\n", condition);
1970 /*--- sip_new: Initiate a call in the SIP channel */
1971 /* called from sip_request_call (calls from the pbx ) */
1972 static struct ast_channel *sip_new(struct sip_pvt *i, int state, char *title)
1974 struct ast_channel *tmp;
1975 struct ast_variable *v = NULL;
1978 ast_mutex_unlock(&i->lock);
1979 /* Don't hold a sip pvt lock while we allocate a channel */
1980 tmp = ast_channel_alloc(1);
1981 ast_mutex_lock(&i->lock);
1983 /* Select our native format based on codec preference until we receive
1984 something from another device to the contrary. */
1985 if (i->jointcapability)
1986 tmp->nativeformats = sip_codec_choose(i->jointcapability);
1987 else if (i->capability)
1988 tmp->nativeformats = sip_codec_choose(i->capability);
1990 tmp->nativeformats = sip_codec_choose(global_capability);
1991 fmt = ast_best_codec(tmp->nativeformats);
1993 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%04x", title, rand() & 0xffff);
1995 if (strchr(i->fromdomain,':'))
1997 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", strchr(i->fromdomain,':')+1, (int)(long)(i));
2001 snprintf(tmp->name, sizeof(tmp->name), "SIP/%s-%08x", i->fromdomain, (int)(long)(i));
2004 if (i->dtmfmode & SIP_DTMF_INBAND) {
2005 i->vad = ast_dsp_new();
2006 ast_dsp_set_features(i->vad, DSP_FEATURE_DTMF_DETECT);
2008 ast_dsp_digitmode(i->vad, DSP_DIGITMODE_DTMF | DSP_DIGITMODE_RELAXDTMF);
2010 tmp->fds[0] = ast_rtp_fd(i->rtp);
2011 tmp->fds[1] = ast_rtcp_fd(i->rtp);
2013 tmp->fds[2] = ast_rtp_fd(i->vrtp);
2014 tmp->fds[3] = ast_rtcp_fd(i->vrtp);
2016 if (state == AST_STATE_RING)
2018 tmp->adsicpe = AST_ADSI_UNAVAILABLE;
2019 tmp->writeformat = fmt;
2020 tmp->pvt->rawwriteformat = fmt;
2021 tmp->readformat = fmt;
2022 tmp->pvt->rawreadformat = fmt;
2024 tmp->pvt->send_text = sip_sendtext;
2025 tmp->pvt->call = sip_call;
2026 tmp->pvt->hangup = sip_hangup;
2027 tmp->pvt->answer = sip_answer;
2028 tmp->pvt->read = sip_read;
2029 tmp->pvt->write = sip_write;
2030 tmp->pvt->write_video = sip_write;
2031 tmp->pvt->indicate = sip_indicate;
2032 tmp->pvt->transfer = sip_transfer;
2033 tmp->pvt->fixup = sip_fixup;
2034 tmp->pvt->send_digit = sip_senddigit;
2036 tmp->pvt->bridge = ast_rtp_bridge;
2038 tmp->callgroup = i->callgroup;
2039 tmp->pickupgroup = i->pickupgroup;
2040 tmp->cid.cid_pres = i->callingpres;
2041 if (!ast_strlen_zero(i->accountcode))
2042 strncpy(tmp->accountcode, i->accountcode, sizeof(tmp->accountcode)-1);
2044 tmp->amaflags = i->amaflags;
2045 if (!ast_strlen_zero(i->language))
2046 strncpy(tmp->language, i->language, sizeof(tmp->language)-1);
2047 if (!ast_strlen_zero(i->musicclass))
2048 strncpy(tmp->musicclass, i->musicclass, sizeof(tmp->musicclass)-1);
2050 ast_mutex_lock(&usecnt_lock);
2052 ast_mutex_unlock(&usecnt_lock);
2053 strncpy(tmp->context, i->context, sizeof(tmp->context)-1);
2054 strncpy(tmp->exten, i->exten, sizeof(tmp->exten)-1);
2055 if (!ast_strlen_zero(i->cid_num))
2056 tmp->cid.cid_num = strdup(i->cid_num);
2057 if (!ast_strlen_zero(i->cid_name))
2058 tmp->cid.cid_name = strdup(i->cid_name);
2059 if (!ast_strlen_zero(i->rdnis))
2060 tmp->cid.cid_rdnis = strdup(i->rdnis);
2061 if (!ast_strlen_zero(i->exten) && strcmp(i->exten, "s"))
2062 tmp->cid.cid_dnid = strdup(i->exten);
2064 if (!ast_strlen_zero(i->domain)) {
2065 pbx_builtin_setvar_helper(tmp, "SIPDOMAIN", i->domain);
2067 if (!ast_strlen_zero(i->useragent)) {
2068 pbx_builtin_setvar_helper(tmp, "SIPUSERAGENT", i->useragent);
2070 if (!ast_strlen_zero(i->callid)) {
2071 pbx_builtin_setvar_helper(tmp, "SIPCALLID", i->callid);
2073 ast_setstate(tmp, state);
2074 if (state != AST_STATE_DOWN) {
2075 if (ast_pbx_start(tmp)) {
2076 ast_log(LOG_WARNING, "Unable to start PBX on %s\n", tmp->name);
2081 for (v = i->vars ; v ; v = v->next)
2082 pbx_builtin_setvar_helper(tmp,v->name,v->value);
2084 ast_log(LOG_WARNING, "Unable to allocate channel structure\n");
2088 static struct cfalias {
2092 { "Content-Type", "c" },
2093 { "Content-Encoding", "e" },
2097 { "Content-Length", "l" },
2100 { "Supported", "k" },
2101 { "Refer-To", "r" },
2102 { "Allow-Events", "u" },
2107 /*--- get_sdp_by_line: Reads one line of SIP message body */
2108 static char* get_sdp_by_line(char* line, char *name, int nameLen) {
2109 if (strncasecmp(line, name, nameLen) == 0 && line[nameLen] == '=') {
2110 char* r = line + nameLen + 1;
2111 while (*r && (*r < 33)) ++r;
2118 /*--- get_sdp: Gets all kind of SIP message bodies, including SDP,
2119 but the name wrongly applies _only_ sdp */
2120 static char *get_sdp(struct sip_request *req, char *name) {
2122 int len = strlen(name);
2125 for (x=0; x<req->lines; x++) {
2126 r = get_sdp_by_line(req->line[x], name, len);
2127 if (r[0] != '\0') return r;
2133 static void sdpLineNum_iterator_init(int* iterator) {
2137 static char* get_sdp_iterate(int* iterator,
2138 struct sip_request *req, char *name) {
2139 int len = strlen(name);
2141 while (*iterator < req->lines) {
2142 r = get_sdp_by_line(req->line[(*iterator)++], name, len);
2143 if (r[0] != '\0') return r;
2148 static char *__get_header(struct sip_request *req, char *name, int *start)
2151 int len = strlen(name);
2153 if (pedanticsipchecking) {
2154 /* Technically you can place arbitrary whitespace both before and after the ':' in
2155 a header, although RFC3261 clearly says you shouldn't before, and place just
2156 one afterwards. If you shouldn't do it, what absolute idiot decided it was
2157 a good idea to say you can do it, and if you can do it, why in the hell would
2158 you say you shouldn't. */
2159 for (x=*start;x<req->headers;x++) {
2160 if (!strncasecmp(req->header[x], name, len)) {
2161 r = req->header[x] + len;
2162 while(*r && (*r < 33))
2166 while(*r && (*r < 33))
2174 /* We probably shouldn't even bother counting whitespace afterwards but
2175 I guess for backwards compatibility we will */
2176 for (x=*start;x<req->headers;x++) {
2177 if (!strncasecmp(req->header[x], name, len) &&
2178 (req->header[x][len] == ':')) {
2179 r = req->header[x] + len + 1;
2180 while(*r && (*r < 33))
2188 for (x=0;x<sizeof(aliases) / sizeof(aliases[0]); x++)
2189 if (!strcasecmp(aliases[x].fullname, name))
2190 return __get_header(req, aliases[x].shortname, start);
2192 /* Don't return NULL, so get_header is always a valid pointer */
2196 /*--- get_header: Get header from SIP request ---*/
2197 static char *get_header(struct sip_request *req, char *name)
2200 return __get_header(req, name, &start);
2203 /*--- sip_rtp_read: Read RTP from network ---*/
2204 static struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p)
2206 /* Retrieve audio/etc from channel. Assumes p->lock is already held. */
2207 struct ast_frame *f;
2208 static struct ast_frame null_frame = { AST_FRAME_NULL, };
2211 f = ast_rtp_read(p->rtp); /* RTP Audio */
2214 f = ast_rtcp_read(p->rtp); /* RTCP Control Channel */
2217 f = ast_rtp_read(p->vrtp); /* RTP Video */
2220 f = ast_rtcp_read(p->vrtp); /* RTCP Control Channel for video */
2225 /* Don't send RFC2833 if we're not supposed to */
2226 if (f && (f->frametype == AST_FRAME_DTMF) && !(p->dtmfmode & SIP_DTMF_RFC2833))
2229 /* We already hold the channel lock */
2230 if (f->frametype == AST_FRAME_VOICE) {
2231 if (f->subclass != p->owner->nativeformats) {
2232 ast_log(LOG_DEBUG, "Oooh, format changed to %d\n", f->subclass);
2233 p->owner->nativeformats = f->subclass;
2234 ast_set_read_format(p->owner, p->owner->readformat);
2235 ast_set_write_format(p->owner, p->owner->writeformat);
2237 if ((p->dtmfmode & SIP_DTMF_INBAND) && p->vad) {
2238 f = ast_dsp_process(p->owner,p->vad,f);
2239 if (f && (f->frametype == AST_FRAME_DTMF))
2240 ast_log(LOG_DEBUG, "Detected DTMF '%c'\n", f->subclass);
2247 /*--- sip_read: Read SIP RTP from channel */
2248 static struct ast_frame *sip_read(struct ast_channel *ast)
2250 struct ast_frame *fr;
2251 struct sip_pvt *p = ast->pvt->pvt;
2252 ast_mutex_lock(&p->lock);
2253 fr = sip_rtp_read(ast, p);
2254 time(&p->lastrtprx);
2255 ast_mutex_unlock(&p->lock);
2259 /*--- build_callid: Build SIP CALLID header ---*/
2260 static void build_callid(char *callid, int len, struct in_addr ourip, char *fromdomain)
2265 char iabuf[INET_ADDRSTRLEN];
2268 res = snprintf(callid, len, "%08x", val);
2272 if (!ast_strlen_zero(fromdomain))
2273 snprintf(callid, len, "@%s", fromdomain);
2275 /* It's not important that we really use our right IP here... */
2276 snprintf(callid, len, "@%s", ast_inet_ntoa(iabuf, sizeof(iabuf), ourip));
2279 /*--- sip_alloc: Allocate SIP_PVT structure and set defaults ---*/
2280 static struct sip_pvt *sip_alloc(char *callid, struct sockaddr_in *sin, int useglobal_nat)
2283 char iabuf[INET_ADDRSTRLEN];
2285 p = malloc(sizeof(struct sip_pvt));
2288 /* Keep track of stuff */
2289 memset(p, 0, sizeof(struct sip_pvt));
2290 ast_mutex_init(&p->lock);
2298 memcpy(&p->sa, sin, sizeof(p->sa));
2299 if (ast_sip_ouraddrfor(&p->sa.sin_addr,&p->ourip))
2300 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2302 memcpy(&p->ourip, &__ourip, sizeof(p->ourip));
2304 p->rtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2306 p->vrtp = ast_rtp_new_with_bindaddr(sched, io, 1, 0, bindaddr.sin_addr);
2310 /* Start with 101 instead of 1 */
2313 ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", strerror(errno));
2314 ast_mutex_destroy(&p->lock);
2316 ast_destroy_realtime(p->vars);
2322 ast_rtp_settos(p->rtp, tos);
2324 ast_rtp_settos(p->vrtp, tos);
2325 if (useglobal_nat && sin) {
2326 /* Setup NAT structure according to global settings if we have an address */
2327 p->nat = global_nat;
2328 memcpy(&p->recv, sin, sizeof(p->recv));
2329 ast_rtp_setnat(p->rtp, (p->nat & SIP_NAT_ROUTE));
2331 ast_rtp_setnat(p->vrtp, (p->nat & SIP_NAT_ROUTE));
2334 strncpy(p->fromdomain, default_fromdomain, sizeof(p->fromdomain) - 1);
2335 /* z9hG4bK is a magic cookie. See RFC 3261 section 8.1.1.7 */
2336 if (p->nat != SIP_NAT_NEVER)
2337 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);
2339 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);
2341 build_callid(p->callid, sizeof(p->callid), p->ourip, p->fromdomain);
2343 strncpy(p->callid, callid, sizeof(p->callid) - 1);
2344 /* Assume reinvite OK and via INVITE */
2345 p->canreinvite = global_canreinvite;
2346 /* Assign default music on hold class */
2347 strncpy(p->musicclass, global_musicclass, sizeof(p->musicclass) - 1);
2348 p->dtmfmode = global_dtmfmode;
2349 p->promiscredir = global_promiscredir;
2350 p->trustrpid = global_trustrpid;
2351 p->progressinband = global_progressinband;
2353 p->ospauth = global_ospauth;
2355 p->rtptimeout = global_rtptimeout;
2356 p->rtpholdtimeout = global_rtpholdtimeout;
2357 p->capability = global_capability;
2358 if (p->dtmfmode & SIP_DTMF_RFC2833)
2359 p->noncodeccapability |= AST_RTP_DTMF;
2360 strncpy(p->context, default_context, sizeof(p->context) - 1);
2362 ast_mutex_lock(&iflock);
2365 ast_mutex_unlock(&iflock);
2367 ast_log(LOG_DEBUG, "Allocating new SIP call for %s\n", callid);
2371 /*--- find_call: Connect incoming SIP message to current call or create new call structure */
2372 /* Called by handle_request ,sipsock_read */
2373 static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin)
2378 char iabuf[INET_ADDRSTRLEN];
2382 callid = get_header(req, "Call-ID");
2384 if (pedanticsipchecking) {
2385 /* In principle Call-ID's uniquely identify a call, however some vendors
2386 (i.e. Pingtel) send multiple calls with the same Call-ID and different
2387 tags in order to simplify billing. The RFC does state that we have to
2388 compare tags in addition to the call-id, but this generate substantially
2389 more overhead which is totally unnecessary for the vast majority of sane
2390 SIP implementations, and thus Asterisk does not enable this behavior
2391 by default. Short version: You'll need this option to support conferencing
2393 strncpy(tmp, req->header[0], sizeof(tmp) - 1);
2395 c = strchr(tmp, ' ');
2398 if (!strcasecmp(cmd, "SIP/2.0"))
2399 strncpy(tmp, get_header(req, "To"), sizeof(tmp) - 1);
2401 strncpy(tmp, get_header(req, "From"), sizeof(tmp) - 1);
2402 tag = strstr(tmp, "tag=");
2405 c = strchr(tag, ';');
2412 if (ast_strlen_zero(callid)) {
2413 ast_log(LOG_WARNING, "Call missing call ID from '%s'\n", ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr));
2416 ast_mutex_lock(&iflock);
2419 if (!strcmp(p->callid, callid) &&
2420 (!pedanticsipchecking || !tag || ast_strlen_zero(p->theirtag) || !strcmp(p->theirtag, tag))) {
2421 /* Found the call */
2422 ast_mutex_lock(&p->lock);
2423 ast_mutex_unlock(&iflock);
2428 ast_mutex_unlock(&iflock);
2429 p = sip_alloc(callid, sin, 1);
2431 ast_mutex_lock(&p->lock);
2435 /*--- sip_register: Parse register=> line in sip.conf and add to registry */
2436 static int sip_register(char *value, int lineno)
2438 struct sip_registry *reg;
2439 char copy[256] = "";
2440 char *username=NULL, *hostname=NULL, *secret=NULL, *authuser=NULL;
2447 strncpy(copy, value, sizeof(copy)-1);
2450 hostname = strrchr(stringp, '@');
2455 if (!username || ast_strlen_zero(username) || !hostname || ast_strlen_zero(hostname)) {
2456 ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d", lineno);
2460 username = strsep(&stringp, ":");
2462 secret = strsep(&stringp, ":");
2464 authuser = strsep(&stringp, ":");
2467 hostname = strsep(&stringp, "/");
2469 contact = strsep(&stringp, "/");
2470 if (!contact || ast_strlen_zero(contact))
2473 hostname = strsep(&stringp, ":");
2474 porta = strsep(&stringp, ":");
2476 if (porta && !atoi(porta)) {
2477 ast_log(LOG_WARNING, "%s is not a valid port number at line %d\n", porta, lineno);
2480 reg = malloc(sizeof(struct sip_registry));
2482 memset(reg, 0, sizeof(struct sip_registry));
2483 strncpy(reg->contact, contact, sizeof(reg->contact) - 1);
2485 strncpy(reg->username, username, sizeof(reg->username)-1);
2487 strncpy(reg->hostname, hostname, sizeof(reg->hostname)-1);
2489 strncpy(reg->authuser, authuser, sizeof(reg->authuser)-1);
2491 strncpy(reg->secret, secret, sizeof(reg->secret)-1);
2494 reg->refresh = default_expiry;
2495 reg->portno = porta ? atoi(porta) : 0;
2496 reg->callid_valid = 0;
2498 ast_mutex_lock(®l.lock);
2499 reg->next = regl.registrations;
2500 regl.registrations = reg;
2501 ast_mutex_unlock(®l.lock);
2503 ast_log(LOG_ERROR, "Out of memory\n");
2509 /*--- lws2sws: Parse multiline SIP headers into one header */
2510 /* This is enabled if pedanticsipchecking is enabled */
2511 static int lws2sws(char *msgbuf, int len)
2517 /* Eliminate all CRs */
2518 if (msgbuf[h] == '\r') {
2522 /* Check for end-of-line */
2523 if (msgbuf[h] == '\n') {
2524 /* Check for end-of-message */
2527 /* Check for a continuation line */
2528 if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') {
2529 /* Merge continuation line */
2533 /* Propagate LF and start new line */
2534 msgbuf[t++] = msgbuf[h++];
2538 if (msgbuf[h] == ' ' || msgbuf[h] == '\t') {
2543 msgbuf[t++] = msgbuf[h++];
2547 msgbuf[t++] = msgbuf[h++];
2555 /*--- parse: Parse a SIP message ----*/
2556 static void parse(struct sip_request *req)
2558 /* Divide fields by NULL's */
2563 /* First header starts immediately */
2567 /* We've got a new header */
2571 printf("Header: %s (%d)\n", req->header[f], strlen(req->header[f]));
2573 if (ast_strlen_zero(req->header[f])) {
2574 /* Line by itself means we're now in content */
2578 if (f >= SIP_MAX_HEADERS - 1) {
2579 ast_log(LOG_WARNING, "Too many SIP headers...\n");
2582 req->header[f] = c + 1;
2583 } else if (*c == '\r') {
2584 /* Ignore but eliminate \r's */
2589 /* Check for last header */
2590 if (!ast_strlen_zero(req->header[f]))
2593 /* Now we process any mime content */
2598 /* We've got a new line */
2601 printf("Line: %s (%d)\n", req->line[f], strlen(req->line[f]));
2603 if (f >= SIP_MAX_LINES - 1) {
2604 ast_log(LOG_WARNING, "Too many SDP lines...\n");
2607 req->line[f] = c + 1;
2608 } else if (*c == '\r') {
2609 /* Ignore and eliminate \r's */
2614 /* Check for last line */
2615 if (!ast_strlen_zero(req->line[f]))
2619 ast_log(LOG_WARNING, "Odd content, extra stuff left over ('%s')\n", c);
2622 /*--- process_sdp: Process SIP SDP ---*/
2623 static int process_sdp(struct sip_pvt *p, struct sip_request *req)
2629 char iabuf[INET_ADDRSTRLEN];
2633 int peercapability, peernoncodeccapability;
2634 int vpeercapability=0, vpeernoncodeccapability=0;
2635 struct sockaddr_in sin;
2638 struct ast_hostent ahp;
2643 int debug=sip_debug_test_pvt(p);
2645 /* Update our last rtprx when we receive an SDP, too */
2646 time(&p->lastrtprx);
2648 /* Get codec and RTP info from SDP */
2649 if (strcasecmp(get_header(req, "Content-Type"), "application/sdp")) {
2650 ast_log(LOG_NOTICE, "Content is '%s', not 'application/sdp'\n", get_header(req, "Content-Type"));
2653 m = get_sdp(req, "m");
2654 c = get_sdp(req, "c");
2655 if (ast_strlen_zero(m) || ast_strlen_zero(c)) {
2656 ast_log(LOG_WARNING, "Insufficient information for SDP (m = '%s', c = '%s')\n", m, c);
2659 if (sscanf(c, "IN IP4 %256s", host) != 1) {
2660 ast_log(LOG_WARNING, "Invalid host in c= line, '%s'\n", c);
2663 /* XXX This could block for a long time, and block the main thread! XXX */
2664 hp = ast_gethostbyname(host, &ahp);
2666 ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c);
2669 sdpLineNum_iterator_init(&iterator);
2671 while ((m = get_sdp_iterate(&iterator, req, "m"))[0] != '\0') {
2672 if ((sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1) ||
2673 (sscanf(m, "audio %d/%d RTP/AVP %n", &x, &y, &len) == 2)) {
2675 /* Scan through the RTP payload types specified in a "m=" line: */
2676 ast_rtp_pt_clear(p->rtp);
2678 while(!ast_strlen_zero(codecs)) {
2679 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2680 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2684 ast_verbose("Found RTP audio format %d\n", codec);
2685 ast_rtp_set_m_type(p->rtp, codec);
2687 /* Skip over any whitespace */
2688 while(*codecs && (*codecs < 33)) codecs++;
2692 ast_rtp_pt_clear(p->vrtp); /* Must be cleared in case no m=video line exists */
2694 if (p->vrtp && (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1)) {
2697 /* Scan through the RTP payload types specified in a "m=" line: */
2699 while(!ast_strlen_zero(codecs)) {
2700 if (sscanf(codecs, "%d%n", &codec, &len) != 1) {
2701 ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs);
2705 ast_verbose("Found video format %s\n", ast_getformatname(codec));
2706 ast_rtp_set_m_type(p->vrtp, codec);
2708 /* Skip over any whitespace */
2709 while(*codecs && (*codecs < 33)) codecs++;
2714 /* RTP addresses and ports for audio and video */
2715 sin.sin_family = AF_INET;
2716 memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
2718 /* Setup audio port number */
2719 sin.sin_port = htons(portno);
2720 if (p->rtp && sin.sin_port) {
2721 ast_rtp_set_peer(p->rtp, &sin);
2723 ast_verbose("Peer audio RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2724 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));
2727 /* Setup video port number */
2728 sin.sin_port = htons(vportno);
2729 if (p->vrtp && sin.sin_port) {
2730 ast_rtp_set_peer(p->vrtp, &sin);
2732 ast_verbose("Peer video RTP is at port %s:%d\n", ast_inet_ntoa(iabuf,sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port));
2733 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));
2737 /* Next, scan through each "a=rtpmap:" line, noting each
2738 * specified RTP payload type (with corresponding MIME subtype):
2740 sdpLineNum_iterator_init(&iterator);
2741 while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') {
2742 char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */
2743 if (!strcasecmp(a, "sendonly")) {
2747 if (!strcasecmp(a, "sendrecv")) {
2750 if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) continue;
2752 ast_verbose("Found description format %s\n", mimeSubtype);
2753 /* Note: should really look at the 'freq' and '#chans' params too */
2754 ast_rtp_set_rtpmap_type(p->rtp, codec, "audio", mimeSubtype);
2756 ast_rtp_set_rtpmap_type(p->vrtp, codec, "video", mimeSubtype);
2759 /* Now gather all of the codecs that were asked for: */
2760 ast_rtp_get_current_formats(p->rtp,
2761 &peercapability, &peernoncodeccapability);
2763 ast_rtp_get_current_formats(p->vrtp,
2764 &vpeercapability, &vpeernoncodeccapability);
2765 p->jointcapability = p->capability & (peercapability | vpeercapability);
2766 p->peercapability = (peercapability | vpeercapability);
2767 p->noncodeccapability = noncodeccapability & peernoncodeccapability;
2770 const unsigned slen=80;
2771 char s1[slen], s2[slen], s3[slen], s4[slen];
2773 ast_verbose("Capabilities: us - %s, peer - audio=%s/video=%s, combined - %s\n",
2774 ast_getformatname_multiple(s1, slen, p->capability),
2775 ast_getformatname_multiple(s2, slen, peercapability),
2776 ast_getformatname_multiple(s3, slen, vpeercapability),
2777 ast_getformatname_multiple(s4, slen, p->jointcapability));
2779 ast_verbose("Non-codec capabilities: us - %s, peer - %s, combined - %s\n",
2780 ast_getformatname_multiple(s1, slen, noncodeccapability),
2781 ast_getformatname_multiple(s2, slen, peernoncodeccapability),
2782 ast_getformatname_multiple(s3, slen, p->noncodeccapability));
2784 if (!p->jointcapability) {
2785 ast_log(LOG_WARNING, "No compatible codecs!\n");
2789 if (!(p->owner->nativeformats & p->jointcapability)) {
2790 const unsigned slen=80;
2791 char s1[slen], s2[slen];
2792 ast_log(LOG_DEBUG, "Oooh, we need to change our formats since our peer supports only %s and not %s\n",
2793 ast_getformatname_multiple(s1, slen, p->jointcapability),
2794 ast_getformatname_multiple(s2, slen, p->owner->nativeformats));
2795 p->owner->nativeformats = sip_codec_choose(p->jointcapability);
2796 ast_set_read_format(p->owner, p->owner->readformat);
2797 ast_set_write_format(p->owner, p->owner->writeformat);
2799 if (ast_bridged_channel(p->owner)) {
2800 /* Turn on/off music on hold if we are holding/unholding */
2801 if (sin.sin_addr.s_addr && !sendonly) {
2802 ast_moh_stop(ast_bridged_channel(p->owner));
2804 ast_moh_start(ast_bridged_channel(p->owner), NULL);
2812 /*--- add_header: Add header to SIP message */
2813 static int add_header(struct sip_request *req, char *var, char *value)
2815 if (req->len >= sizeof(req->data) - 4) {
2816 ast_log(LOG_WARNING, "Out of space, can't add anymore (%s:%s)\n", var, value);
2820 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2823 req->header[req->headers] = req->data + req->len;
2824 snprintf(req->header[req->headers], sizeof(req->data) - req->len - 4, "%s: %s\r\n", var, value);
2825 req->len += strlen(req->header[req->headers]);
2826 if (req->headers < SIP_MAX_HEADERS)
2829 ast_log(LOG_WARNING, "Out of header space\n");
2835 /*--- add_blank_header: Add blank header to SIP message */
2836 static int add_blank_header(struct sip_request *req)
2838 if (req->len >= sizeof(req->data) - 4) {
2839 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2843 ast_log(LOG_WARNING, "Can't add more headers when lines have been added\n");
2846 req->header[req->headers] = req->data + req->len;
2847 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "\r\n");
2848 req->len += strlen(req->header[req->headers]);
2849 if (req->headers < SIP_MAX_HEADERS)
2852 ast_log(LOG_WARNING, "Out of header space\n");
2858 /*--- add_line: Add content (not header) to SIP message */
2859 static int add_line(struct sip_request *req, char *line)
2861 if (req->len >= sizeof(req->data) - 4) {
2862 ast_log(LOG_WARNING, "Out of space, can't add anymore\n");
2866 /* Add extra empty return */
2867 snprintf(req->data + req->len, sizeof(req->data) - req->len, "\r\n");
2868 req->len += strlen(req->data + req->len);
2870 req->line[req->lines] = req->data + req->len;
2871 snprintf(req->line[req->lines], sizeof(req->data) - req->len, "%s", line);
2872 req->len += strlen(req->line[req->lines]);
2873 if (req->lines < SIP_MAX_LINES)
2876 ast_log(LOG_WARNING, "Out of line space\n");
2882 /*--- copy_header: Copy one header field from one request to another */
2883 static int copy_header(struct sip_request *req, struct sip_request *orig, char *field)
2886 tmp = get_header(orig, field);
2887 if (!ast_strlen_zero(tmp)) {
2888 /* Add what we're responding to */
2889 return add_header(req, field, tmp);
2891 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2895 /*--- copy_all_header: Copy all headers from one request to another ---*/
2896 static int copy_all_header(struct sip_request *req, struct sip_request *orig, char *field)
2902 tmp = __get_header(orig, field, &start);
2903 if (!ast_strlen_zero(tmp)) {
2904 /* Add what we're responding to */
2905 add_header(req, field, tmp);
2910 return copied ? 0 : -1;
2913 /*--- copy_via_headers: Copy SIP VIA Headers from one request to another ---*/
2914 static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct sip_request *orig, char *field)
2916 char tmp[256]="", *oh, *end;
2920 char iabuf[INET_ADDRSTRLEN];
2922 oh = __get_header(orig, field, &start);
2923 if (!ast_strlen_zero(oh)) {
2925 strncpy(tmp, oh, sizeof(tmp) - 1);
2926 oh = strstr(tmp, ";rport");
2928 end = strchr(oh + 1, ';');
2930 memmove(oh, end, strlen(end) + 1);
2934 if (!copied && (p->nat == SIP_NAT_ALWAYS)) {
2935 /* Whoo hoo! Now we can indicate port address translation too! Just
2936 another RFC (RFC3581). I'll leave the original comments in for
2938 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));
2939 add_header(req, field, new);
2941 /* Add what we're responding to */
2942 add_header(req, field, tmp);
2949 ast_log(LOG_NOTICE, "No field '%s' present to copy\n", field);
2955 /*--- add_route: Add route header into request per learned route ---*/
2956 static void add_route(struct sip_request *req, struct sip_route *route)
2959 int n, rem = 255; /* sizeof(r)-1: Room for terminating 0 */
2965 n = strlen(route->hop);
2966 if ((n+3)>rem) break;
2972 strncpy(p, route->hop, rem); p += n;
2975 route = route->next;
2978 add_header(req, "Route", r);
2981 /*--- set_destination: Set destination from SIP URI ---*/
2982 static void set_destination(struct sip_pvt *p, char *uri)
2984 char *h, *maddr, hostname[256] = "";
2985 char iabuf[INET_ADDRSTRLEN];
2988 struct ast_hostent ahp;
2989 int debug=sip_debug_test_pvt(p);
2991 /* Parse uri to h (host) and port - uri is already just the part inside the <> */
2992 /* general form we are expecting is sip[s]:username[:password]@host[:port][;...] */
2995 ast_verbose("set_destination: Parsing <%s> for address/port to send to\n", uri);
2997 /* Find and parse hostname */
2998 h = strchr(uri, '@');
3003 if (strncmp(h, "sip:", 4) == 0)
3005 else if (strncmp(h, "sips:", 5) == 0)
3008 hn = strcspn(h, ":;>");
3009 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
3010 strncpy(hostname, h, hn); hostname[hn] = '\0'; /* safe */
3013 /* Is "port" present? if not default to 5060 */
3017 port = strtol(h, &h, 10);
3022 /* Got the hostname:port - but maybe there's a "maddr=" to override address? */
3023 maddr = strstr(h, "maddr=");
3026 hn = strspn(maddr, "0123456789.");
3027 if (hn > (sizeof(hostname) - 1)) hn = sizeof(hostname) - 1;
3028 strncpy(hostname, maddr, hn); hostname[hn] = '\0'; /* safe */
3031 hp = ast_gethostbyname(hostname, &ahp);
3033 ast_log(LOG_WARNING, "Can't find address for host '%s'\n", hostname);
3036 p->sa.sin_family = AF_INET;
3037 memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
3038 p->sa.sin_port = htons(port);
3040 ast_verbose("set_destination: set destination to %s, port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->sa.sin_addr), port);
3043 /*--- init_resp: Initialize SIP response, based on SIP request ---*/
3044 static int init_resp(struct sip_request *req, char *resp, struct sip_request *orig)
3046 /* Initialize a response */
3047 if (req->headers || req->len) {
3048 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3051 req->header[req->headers] = req->data + req->len;
3052 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "SIP/2.0 %s\r\n", resp);
3053 req->len += strlen(req->header[req->headers]);
3054 if (req->headers < SIP_MAX_HEADERS)
3057 ast_log(LOG_WARNING, "Out of header space\n");
3061 /*--- init_req: Initialize SIP request ---*/
3062 static int init_req(struct sip_request *req, char *resp, char *recip)
3064 /* Initialize a response */
3065 if (req->headers || req->len) {
3066 ast_log(LOG_WARNING, "Request already initialized?!?\n");
3069 req->header[req->headers] = req->data + req->len;
3070 snprintf(req->header[req->headers], sizeof(req->data) - req->len, "%s %s SIP/2.0\r\n", resp, recip);
3071 req->len += strlen(req->header[req->headers]);
3072 if (req->headers < SIP_MAX_HEADERS)
3075 ast_log(LOG_WARNING, "Out of header space\n");
3080 static int respprep(struct sip_request *resp, struct sip_pvt *p, char *msg, struct sip_request *req)
3082 char newto[256] = "", *ot;
3084 memset(resp, 0, sizeof(*resp));
3085 init_resp(resp, msg, req);
3086 copy_via_headers(p, resp, req, "Via");
3087 if (msg[0] == '2') copy_all_header(resp, req, "Record-Route");
3088 copy_header(resp, req, "From");
3089 ot = get_header(req, "To");
3090 if (!strstr(ot, "tag=")) {
3091 /* Add the proper tag if we don't have it already. If they have specified
3092 their tag, use it. Otherwise, use our own tag */
3093 if (!ast_strlen_zero(p->theirtag) && p->outgoing)
3094 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3095 else if (p->tag && !p->outgoing)
3096 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3098 strncpy(newto, ot, sizeof(newto) - 1);
3099 newto[sizeof(newto) - 1] = '\0';
3103 add_header(resp, "To", ot);
3104 copy_header(resp, req, "Call-ID");
3105 copy_header(resp, req, "CSeq");
3106 add_header(resp, "User-Agent", default_useragent);
3107 add_header(resp, "Allow", ALLOWED_METHODS);
3109 /* For registration responses, we also need expiry and
3113 snprintf(contact, sizeof(contact), "%s;expires=%d", p->our_contact, p->expiry);
3114 snprintf(tmp, sizeof(tmp), "%d", p->expiry);
3115 add_header(resp, "Expires", tmp);
3116 add_header(resp, "Contact", contact);
3118 add_header(resp, "Contact", p->our_contact);
3123 static int reqprep(struct sip_request *req, struct sip_pvt *p, char *msg, int seqno, int newbranch)
3125 struct sip_request *orig = &p->initreq;
3126 char stripped[80] ="";
3129 char iabuf[INET_ADDRSTRLEN];
3133 memset(req, 0, sizeof(struct sip_request));
3135 snprintf(p->lastmsg, sizeof(p->lastmsg), "Tx: %s", msg);
3143 p->branch ^= rand();
3144 if (p->nat & SIP_NAT_RFC3581)
3145 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);
3146 else /* Some implementations (e.g. Uniden UIP200) can't handle rport being in the message!! */
3147 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);
3149 if (!strcasecmp(msg, "CANCEL") || !strcasecmp(msg, "ACK")) {
3150 /* MUST use original URI */
3151 c = p->initreq.rlPart2;
3152 } else if (!ast_strlen_zero(p->uri)) {
3156 strncpy(stripped, get_header(orig, "To"), sizeof(stripped) - 1);
3158 strncpy(stripped, get_header(orig, "From"), sizeof(stripped) - 1);
3160 c = strchr(stripped, '<');
3172 init_req(req, msg, c);
3174 snprintf(tmp, sizeof(tmp), "%d %s", seqno, msg);
3176 add_header(req, "Via", p->via);
3178 set_destination(p, p->route->hop);
3179 add_route(req, p->route->next);
3182 ot = get_header(orig, "To");
3183 of = get_header(orig, "From");
3185 /* Add tag *unless* this is a CANCEL, in which case we need to send it exactly
3186 as our original request, including tag (or presumably lack thereof) */
3187 if (!strstr(ot, "tag=") && strcasecmp(msg, "CANCEL")) {
3188 /* Add the proper tag if we don't have it already. If they have specified
3189 their tag, use it. Otherwise, use our own tag */
3190 if (p->outgoing && !ast_strlen_zero(p->theirtag))
3191 snprintf(newto, sizeof(newto), "%s;tag=%s", ot, p->theirtag);
3192 else if (!p->outgoing)
3193 snprintf(newto, sizeof(newto), "%s;tag=as%08x", ot, p->tag);
3195 snprintf(newto, sizeof(newto), "%s", ot);
3200 add_header(req, "From", of);
3201 add_header(req, "To", ot);
3203 add_header(req, "From", ot);
3204 add_header(req, "To", of);
3206 add_header(req, "Contact", p->our_contact);
3207 copy_header(req, orig, "Call-ID");
3208 add_header(req, "CSeq", tmp);
3210 add_header(req, "User-Agent", default_useragent);
3214 static int __transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3216 struct sip_request resp;
3218 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3219 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3222 respprep(&resp, p, msg, req);
3223 add_header(&resp, "Content-Length", "0");
3224 add_blank_header(&resp);
3225 return send_response(p, &resp, reliable, seqno);
3228 /*--- transmit_response: Transmit response, no retransmits */
3229 static int transmit_response(struct sip_pvt *p, char *msg, struct sip_request *req)
3231 return __transmit_response(p, msg, req, 0);
3234 /*--- transmit_response: Transmit response, Make sure you get a reply */
3235 static int transmit_response_reliable(struct sip_pvt *p, char *msg, struct sip_request *req, int fatal)
3237 return __transmit_response(p, msg, req, fatal ? 2 : 1);
3240 /*--- append_date: Append date to SIP message ---*/
3241 static void append_date(struct sip_request *req)
3248 strftime(tmpdat, sizeof(tmpdat), "%a, %d %b %Y %T GMT", &tm);
3249 add_header(req, "Date", tmpdat);
3252 /*--- transmit_response_with_date: Append date and content length before transmitting response ---*/
3253 static int transmit_response_with_date(struct sip_pvt *p, char *msg, struct sip_request *req)
3255 struct sip_request resp;
3256 respprep(&resp, p, msg, req);
3258 add_header(&resp, "Content-Length", "0");
3259 add_blank_header(&resp);
3260 return send_response(p, &resp, 0, 0);
3263 /*--- transmit_response_with_allow: Append Accept header, content length before transmitting response ---*/
3264 static int transmit_response_with_allow(struct sip_pvt *p, char *msg, struct sip_request *req, int reliable)
3266 struct sip_request resp;
3267 respprep(&resp, p, msg, req);
3268 add_header(&resp, "Accept", "application/sdp");
3269 add_header(&resp, "Content-Length", "0");
3270 add_blank_header(&resp);
3271 return send_response(p, &resp, reliable, 0);
3274 /* transmit_response_with_auth: Respond with authorization request */
3275 static int transmit_response_with_auth(struct sip_pvt *p, char *msg, struct sip_request *req, char *randdata, int reliable, char *header)
3277 struct sip_request resp;
3280 if (reliable && (sscanf(get_header(req, "CSeq"), "%i ", &seqno) != 1)) {
3281 ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq"));
3284 snprintf(tmp, sizeof(tmp), "Digest realm=\"%s\", nonce=\"%s\"", global_realm, randdata);
3285 respprep(&resp, p, msg, req);
3286 add_header(&resp, header, tmp);
3287 add_header(&resp, "Content-Length", "0");
3288 add_blank_header(&resp);
3289 return send_response(p, &resp, reliable, seqno);
3292 /*--- add_text: Add text body to SIP message ---*/
3293 static int add_text(struct sip_request *req, char *text)
3295 /* XXX Convert \n's to \r\n's XXX */
3296 int len = strlen(text);
3298 snprintf(clen, sizeof(clen), "%d", len);
3299 add_header(req, "Content-Type", "text/plain");
3300 add_header(req, "Content-Length", clen);
3301 add_line(req, text);
3305 /*--- add_digit: add DTMF INFO tone to sip message ---*/
3306 /* Always adds default duration 250 ms, regardless of what came in over the line */
3307 static int add_digit(struct sip_request *req, char digit)
3312 snprintf(tmp, sizeof(tmp), "Signal=%c\r\nDuration=250\r\n", digit);
3314 snprintf(clen, sizeof(clen), "%d", len);
3315 add_header(req, "Content-Type", "application/dtmf-relay");
3316 add_header(req, "Content-Length", clen);
3321 /*--- add_sdp: Add Session Description Protocol message ---*/
3322 static int add_sdp(struct sip_request *resp, struct sip_pvt *p)
3326 int alreadysent = 0;
3328 struct sockaddr_in sin;
3329 struct sockaddr_in vsin;
3330 struct sip_codec_pref *cur;
3340 char iabuf[INET_ADDRSTRLEN];
3343 struct sockaddr_in dest;
3344 struct sockaddr_in vdest = { 0, };
3345 int debug=sip_debug_test_pvt(p);
3347 /* XXX We break with the "recommendation" and send our IP, in order that our
3348 peer doesn't have to ast_gethostbyname() us XXX */
3351 ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
3354 capability = p->capability;
3356 if (!p->sessionid) {
3357 p->sessionid = getpid();
3358 p->sessionversion = p->sessionid;
3360 p->sessionversion++;
3361 ast_rtp_get_us(p->rtp, &sin);
3363 ast_rtp_get_us(p->vrtp, &vsin);
3365 if (p->redirip.sin_addr.s_addr) {
3366 dest.sin_port = p->redirip.sin_port;
3367 dest.sin_addr = p->redirip.sin_addr;
3369 capability = p->redircodecs;
3371 dest.sin_addr = p->ourip;
3372 dest.sin_port = sin.sin_port;
3375 /* Determine video destination */
3377 if (p->vredirip.sin_addr.s_addr) {
3378 vdest.sin_port = p->vredirip.sin_port;
3379 vdest.sin_addr = p->vredirip.sin_addr;
3381 vdest.sin_addr = p->ourip;
3382 vdest.sin_port = vsin.sin_port;
3386 ast_verbose("We're at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(sin.sin_port));
3388 ast_verbose("Video is at %s port %d\n", ast_inet_ntoa(iabuf, sizeof(iabuf), p->ourip), ntohs(vsin.sin_port));
3390 snprintf(v, sizeof(v), "v=0\r\n");
3391 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));
3392 snprintf(s, sizeof(s), "s=session\r\n");
3393 snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(iabuf, sizeof(iabuf), dest.sin_addr));
3394 snprintf(t, sizeof(t), "t=0 0\r\n");
3395 snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
3396 snprintf(m2, sizeof(m2), "m=video %d RTP/AVP", ntohs(vdest.sin_port));
3397 if (capability & p->prefcodec) {
3399 ast_verbose("Answering/Requesting with root capability %d\n", p->prefcodec);
3400 codec = ast_rtp_lookup_code(p->rtp, 1, p->prefcodec);
3402 snprintf(costr, sizeof(costr), " %d", codec);
3403 if (p->prefcodec <= AST_FORMAT_MAX_AUDIO) {
3404 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3405 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3406 strncpy(a, costr, sizeof(a) - 1);
3408 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3409 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, p->prefcodec));
3410 strncpy(a2, costr, sizeof(a2) - 1);
3413 alreadysent |= p->prefcodec;
3415 /* Start by sending our preferred codecs */
3418 if ((capability & cur->codec) && !(alreadysent & cur->codec)) {
3420 ast_verbose("Answering with preferred capability 0x%x(%s)\n", cur->codec, ast_getformatname(cur->codec));
3421 codec = ast_rtp_lookup_code(p->rtp, 1, cur->codec);
3423 snprintf(costr, sizeof(costr), " %d", codec);
3424 if (cur->codec <= AST_FORMAT_MAX_AUDIO) {
3425 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3426 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3427 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3429 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3430 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, cur->codec));
3431 strncat(a2, costr, sizeof(a2) - strlen(a) - 1);
3435 alreadysent |= cur->codec;
3438 /* Now send any other common codecs, and non-codec formats: */
3439 for (x = 1; x <= ((videosupport && p->vrtp) ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO); x <<= 1) {
3440 if ((capability & x) && !(alreadysent & x)) {
3442 ast_verbose("Answering with capability 0x%x(%s)\n", x, ast_getformatname(x));
3443 codec = ast_rtp_lookup_code(p->rtp, 1, x);
3445 snprintf(costr, sizeof(costr), " %d", codec);
3446 if (x <= AST_FORMAT_MAX_AUDIO) {
3447 strncat(m, costr, sizeof(m) - strlen(m) - 1);
3448 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/8000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3449 strncat(a, costr, sizeof(a) - strlen(a) - 1);
3451 strncat(m2, costr, sizeof(m2) - strlen(m2) - 1);
3452 snprintf(costr, sizeof(costr), "a=rtpmap:%d %s/90000\r\n", codec, ast_rtp_lookup_mime_subtype(1, x));
3453 strncat(a2, costr, sizeof(a2) - strlen(a2) - 1);